В современной торговле часто возникает необходимость предоставить сотрудникам или клиентам быстрый доступ к актуальным ценам прямо со смартфона, не используя при этом тяжелые мобильные приложения или терминалы сбора данных. Рассмотрим задачу: создание простой HTML-страницы, которая с помощью камеры смартфона сканирует штрихкод и мгновенно выводит цену из базы 1С. Разберем по шагам, как реализовать этот функционал, даже если ваша конфигурация работает на обычных формах.
Проанализируем ситуацию: многие разработчики ошибочно полагают, что если конфигурация запущена в режиме обычного приложения, то веб-технологии ей недоступны. Это не так. Объекты HTTP-сервисы и Web-сервисы являются частью платформы 1С:Предприятие 8.3 и доступны для программного взаимодействия независимо от типа интерфейса (обычный или управляемый). Вы можете опубликовать базу на веб-сервере (Apache или IIS) и обращаться к ней по протоколу HTTP.
Это самый современный и правильный способ получения данных. Мы создадим в 1С специальный программный интерфейс (API), к которому браузер будет отправлять запрос со штрихкодом.
Разберем этапы реализации на стороне 1С:
PriceChecker.v1.GetPrice и шаблоном /get_price/{Barcode}.GET и назначим ему обработчик в модуле сервиса.Пример кода обработчика запроса в 1С:
Функция GetPriceGetPrice(Запрос)
Штрихкод = Запрос.ПараметрыURL.Получить("Barcode");
// Поиск товара по штрихкоду
ЗапросКБД = Новый Запрос;
ЗапросКБД.Текст =
"ВЫБРАТЬ
| Штрихкоды.Владелец КАК Номенклатура
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Штрихкод = &Штрихкод";
ЗапросКБД.УстановитьПараметр("Штрихкод", Штрихкод);
Результат = ЗапросКБД.Выполнить();
Если Результат.Пустой() Тогда
Возврат Новый HTTPСервисОтвет(404);
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
// Получение цены (пример для типовых конфигураций)
Цена = Ценообразование.ПолучитьЦенуНоменклатуры(Выборка.Номенклатура, ТекущаяДата());
// Формируем JSON ответ
ДанныеОтвета = Новый Структура;
ДанныеОтвета.Вставить("Price", Цена);
ДанныеОтвета.Вставить("Name", Строка(Выборка.Номенклатура));
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеОтвета);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
Ответ.Заголовки.Вставить("Content-Type", "application/json");
// Важно для браузера: обход CORS
Ответ.Заголовки.Вставить("Access-Control-Allow-Origin", "*");
Возврат Ответ;
КонецФункции
Если вы не хотите писать код на стороне 1С, выясним причину, почему бы не использовать стандартный интерфейс OData. Платформа 1С позволяет автоматически выставить справочники и регистры наружу в формате REST.
Рассмотрим, как это включить:
Номенклатура, Штрихкоды и регистр ЦеныНоменклатуры.Теперь вы сможете делать запросы прямо из браузера по URL вида: http://server/base/odata/standard.odata/InformationRegister_Штрихкоды?$filter=Штрихкод eq '12345678'. Однако помните, что этот метод требует аккуратной настройки прав доступа, чтобы не открыть лишние данные.
Проанализируем важный аспект: каждое обращение к HTTP-сервису 1С занимает один сеанс. Если у вас 100 сотрудников будут одновременно сканировать цены, вам может не хватить лицензий. Для решения этой проблемы рассмотрим вариант с промежуточной базой данных.
Схема работы будет следующей:
Это решение позволяет работать неограниченному количеству пользователей, потребляя всего 0 или 1 лицензию 1С (только в момент выгрузки).
Перейдем к тому, как реализовать это на стороне браузера. Выясним, как использовать камеру смартфона для сканирования. Нам не нужно писать распознаватель образов самостоятельно — воспользуемся готовыми библиотеками, такими как QuaggaJS или ZXing-js.
Рассмотрим примерную структуру HTML-страницы:
video для вывода изображения с камеры.Пример JS-кода (упрощенно):
Quagga.init({
inputStream : {
name : "Live",
type : "LiveStream",
target: document.querySelector('#scanner-container')
},
decoder : {
readers : ["ean_reader"]
}
}, function(err) {
if (err) { console.log(err); return; }
Quagga.start();
});
Quagga.onDetected(function(data) {
let code = data.codeResult.code;
fetch('https://your-server.ru/1c_base/hs/v1/get_price/' + code)
.then(response => response.json())
.then(result => {
document.getElementById('product-name').innerText = result.Name;
document.getElementById('product-price').innerText = result.Price + ' руб.';
});
});
При работе браузера с HTTP-сервисами 1С вы обязательно столкнетесь с политикой CORS (Cross-Origin Resource Sharing). Браузер блокирует запросы к другому домену. Чтобы это исправить, нужно настроить веб-сервер (Apache или IIS), добавив в конфигурационный файл заголовки Access-Control-Allow-Origin "*" и Access-Control-Allow-Methods "GET, POST, OPTIONS". Без этого ваш скрипт в браузере не сможет "достучаться" до 1С, даже если сам сервис работает корректно.
Также не забывайте про авторизацию. Использовать логин и пароль администратора в открытом коде JavaScript нельзя. Создайте в 1С отдельного пользователя с минимальными правами (только на чтение нужных справочников и запуск HTTP-сервиса) и используйте Basic Auth в заголовках запроса.
Таким образом, мы рассмотрели полный цикл реализации: от создания API в 1С до настройки фронтенда и решения проблем с лицензиями. Выбор конкретного метода (прямой запрос или через промежуточную БД) зависит от предполагаемой нагрузки на вашу систему.