При автоматизации торговых операций часто возникает задача быстрого наполнения справочника номенклатуры. Чтобы не вводить названия товаров вручную, можно использовать внешние интернет-базы штрихкодов. Рассмотрим, как программно реализовать запрос к таким ресурсам из среды 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Запрос определяет конкретную страницу и параметры, которые мы хотим передать.
При попытке работы с сайтами, построенными на технологии ASP.NET (расширение .aspx), программист сталкивается с проблемой. Обычный GET-запрос часто не возвращает результат, так как сервер ожидает передачу состояния страницы. Выясним причину: такие сайты используют механизмы __VIEWSTATE и __EVENTVALIDATION.
Разберем по шагам, как правильно взаимодействовать с такими ресурсами:
__VIEWSTATE и __EVENTVALIDATION.Проанализируем ситуацию: если сайт не предоставляет открытый 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;
КонецЕсли;
При разработке функционала поиска штрихкодов в интернете следует придерживаться следующих правил:
КодСостояния ответа сервера. Код 200 означает успех, 404 — товар не найден, 403 — ваш запрос заблокирован сервером (возможно, из-за слишком частых обращений).Таким образом, выбор метода зависит от ваших задач. Для разовых запросов подойдет парсинг страниц, но для промышленного использования в рабочих базах лучше ориентироваться на официальные сервисы или JSON API, что обеспечит стабильность и высокую скорость работы системы.