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

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

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

Основы реализации HTTP-запроса в 1С

Для взаимодействия с внешними сайтами в платформе 1С:Предприятие используются объекты HTTPСоединение и HTTPЗапрос. Разберем базовый алгоритм на примере сервиса, который принимает параметры поиска в строке URL (GET-запрос). Проанализируем пример кода, который позволяет получить данные с ресурса, имеющего простую структуру запроса:


Сервер = "barcode-list.ru";            
ССЛ = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(Сервер, , , , , , ССЛ); 

Заголовки = Новый Соответствие;
Заголовки.Вставить("host", Сервер);                

// Формируем строку запроса с параметром штрихкода
ПутьКРесурсу = "/barcode/RU/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA.htm?barcode=" + ШтрихкодТовара;

Запрос = Новый HTTPЗапрос(ПутьКРесурсу, Заголовки);
Результат = Соединение.Получить(Запрос);

Если Результат.КодСостояния = 200 Тогда
    Страница = Результат.ПолучитьТелоКакСтроку(); 
    // Далее следует парсинг полученной HTML-страницы для поиска наименования
КонецЕсли;

В данном примере мы используем ЗащищенноеСоединениеOpenSSL, так как большинство современных сайтов работают по протоколу HTTPS. Объект HTTPСоединение устанавливает сессию с сервером, а HTTPЗапрос определяет конкретную страницу и параметры, которые мы хотим передать.

Особенности работы с ASPX-страницами (на примере andriy.co)

При попытке работы с сайтами, построенными на технологии ASP.NET (расширение .aspx), программист сталкивается с проблемой. Обычный GET-запрос часто не возвращает результат, так как сервер ожидает передачу состояния страницы. Выясним причину: такие сайты используют механизмы __VIEWSTATE и __EVENTVALIDATION.

Разберем по шагам, как правильно взаимодействовать с такими ресурсами:

  1. Первичный запрос: Сначала необходимо выполнить GET-запрос к странице поиска, чтобы получить содержимое HTML-кода.
  2. Извлечение параметров: Из полученного текста страницы с помощью регулярных выражений или функций работы со строками нужно вырезать значения скрытых полей __VIEWSTATE и __EVENTVALIDATION.
  3. Формирование POST-запроса: Повторный запрос должен быть методом POST. В тело запроса нужно включить не только штрихкод, но и полученные ранее значения состояния страницы, а также имитировать нажатие кнопки поиска.

Проанализируем ситуацию: если сайт не предоставляет открытый API, использование такого метода ("скрейпинг") является хрупким. При любом изменении дизайна сайта ваш код в 1С перестанет работать. Поэтому рассмотрим более надежные альтернативы.

Альтернативные источники данных о штрихкодах

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

1. Сервис «1С:Номенклатура»

Для пользователей типовых конфигураций 1С (УТ 11, БП 3.0, УНФ) это наиболее стабильный вариант. Сервис интегрирован в программу на уровне объектов. Он позволяет не только найти название по штрихкоду, но и автоматически заполнить карточку товара: единицы измерения, ставки НДС и описания. Рассмотрим преимущества: данные структурированы, и риск поломки механизма из-за смены дизайна сайта отсутствует.

2. Использование JSON API (например, Open Food Facts)

Существуют глобальные открытые базы данных, предоставляющие данные в формате JSON. Работать с ними из 1С гораздо проще, так как не требуется сложный парсинг HTML. Пример логики запроса к структурированному API:


// Пример формирования запроса к JSON API
Запрос = Новый HTTPЗапрос("/api/v0/product/" + Штрихкод + ".json");
Результат = Соединение.Получить(Запрос);
Если Результат.КодСостояния = 200 Тогда
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
    ДанныеТовара = ПрочитатьJSON(ЧтениеJSON);
    Наименование = ДанныеТовара.product.product_name;
КонецЕсли;

Практические советы по реализации

При разработке функционала поиска штрихкодов в интернете следует придерживаться следующих правил:

Таким образом, выбор метода зависит от ваших задач. Для разовых запросов подойдет парсинг страниц, но для промышленного использования в рабочих базах лучше ориентироваться на официальные сервисы или JSON API, что обеспечит стабильность и высокую скорость работы системы.

← На главную