Как реализовать получение цены товара из 1С в окне браузера при сканировании штрихкода?

Программист 1С v8.3 (Обычные формы) Торговля и дистрибуция
← На главную

В современной торговле часто возникает необходимость предоставить сотрудникам или клиентам быстрый доступ к актуальным ценам прямо со смартфона, не используя при этом тяжелые мобильные приложения или терминалы сбора данных. Рассмотрим задачу: создание простой HTML-страницы, которая с помощью камеры смартфона сканирует штрихкод и мгновенно выводит цену из базы 1С. Разберем по шагам, как реализовать этот функционал, даже если ваша конфигурация работает на обычных формах.

Архитектурный подход: Почему обычные формы — не помеха?

Проанализируем ситуацию: многие разработчики ошибочно полагают, что если конфигурация запущена в режиме обычного приложения, то веб-технологии ей недоступны. Это не так. Объекты HTTP-сервисы и Web-сервисы являются частью платформы 1С:Предприятие 8.3 и доступны для программного взаимодействия независимо от типа интерфейса (обычный или управляемый). Вы можете опубликовать базу на веб-сервере (Apache или IIS) и обращаться к ней по протоколу HTTP.

Решение 1: Прямое использование HTTP-сервиса в 1С

Это самый современный и правильный способ получения данных. Мы создадим в 1С специальный программный интерфейс (API), к которому браузер будет отправлять запрос со штрихкодом.

Разберем этапы реализации на стороне 1С:

  1. В дереве конфигурации найдем раздел Общие -> HTTP-сервисы и создадим новый сервис, назовем его PriceChecker.
  2. Установим корневой URL, например, v1.
  3. Создадим шаблон URL с именем GetPrice и шаблоном /get_price/{Barcode}.
  4. Добавим метод 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", "*");
    
    Возврат Ответ;
КонецФункции

Решение 2: Использование встроенного REST API (OData)

Если вы не хотите писать код на стороне 1С, выясним причину, почему бы не использовать стандартный интерфейс OData. Платформа 1С позволяет автоматически выставить справочники и регистры наружу в формате REST.

Рассмотрим, как это включить:

  1. В свойствах конфигурации нажать кнопку "Состав автоматического REST-интерфейса".
  2. Отметить галочками справочник Номенклатура, Штрихкоды и регистр ЦеныНоменклатуры.
  3. Опубликовать базу на веб-сервере с включенной опцией "Публиковать стандартный интерфейс OData".

Теперь вы сможете делать запросы прямо из браузера по URL вида: http://server/base/odata/standard.odata/InformationRegister_Штрихкоды?$filter=Штрихкод eq '12345678'. Однако помните, что этот метод требует аккуратной настройки прав доступа, чтобы не открыть лишние данные.

Решение 3: Проблема лицензирования и промежуточная база данных

Проанализируем важный аспект: каждое обращение к HTTP-сервису 1С занимает один сеанс. Если у вас 100 сотрудников будут одновременно сканировать цены, вам может не хватить лицензий. Для решения этой проблемы рассмотрим вариант с промежуточной базой данных.

Схема работы будет следующей:

  1. Создается легкая база данных (например, MySQL или Redis) на веб-сервере.
  2. В 1С настраивается регламентное задание, которое раз в час (или при изменении цен) выгружает таблицу "Штрихкод - Наименование - Цена" во внешнюю БД.
  3. Веб-страница обращается не к 1С напрямую, а к скрипту на PHP или Node.js, который мгновенно забирает данные из MySQL.

Это решение позволяет работать неограниченному количеству пользователей, потребляя всего 0 или 1 лицензию 1С (только в момент выгрузки).

Решение 4: Реализация фронтенда (Браузерная часть)

Перейдем к тому, как реализовать это на стороне браузера. Выясним, как использовать камеру смартфона для сканирования. Нам не нужно писать распознаватель образов самостоятельно — воспользуемся готовыми библиотеками, такими как QuaggaJS или ZXing-js.

Рассмотрим примерную структуру HTML-страницы:

  1. Подключение библиотеки сканирования.
  2. Элемент video для вывода изображения с камеры.
  3. JavaScript-код, который при успешном распознавании штрихкода отправляет запрос к нашему API 1С.

Пример 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 + ' руб.';
        });
});

Важные замечания по безопасности и CORS

При работе браузера с 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С до настройки фронтенда и решения проблем с лицензиями. Выбор конкретного метода (прямой запрос или через промежуточную БД) зависит от предполагаемой нагрузки на вашу систему.

← На главную