При переходе на обязательную маркировку товаров пользователи устаревших систем, таких как 1С:Предприятие 7.7, сталкиваются с серьезным вызовом. Штатные механизмы этой платформы не предполагали работы с современными протоколами обмена данными и форматами шифрования. Разберем ситуацию: поставщик отгрузил товар, коды маркировки (КМ) числятся в системе «Честный ЗНАК» (ГИС МТ), и нам необходимо проверить, соответствуют ли физические наклейки на коробках тем данным, которые передал поставщик, чтобы не принять «кота в мешке».
В этой статье мы подробно рассмотрим, какими методами можно реализовать проверку кодов в 1С 7.7, проанализируем технические сложности и выстроим алгоритм автоматизации этого процесса.
Проанализируем самый логичный путь. В современной системе маркировки коды не передаются «отдельно» — они вшиты в электронный УПД (универсальный передаточный документ). Если ваша организация использует ЭДО, то задача упрощается. Коды маркировки уже находятся в XML-файле входящего документа.
Рассмотрим по шагам, как извлечь эти данные в 1С 7.7:
Microsoft.XMLDOM. Нам нужно найти тег НомУпак, внутри которого содержатся коды маркировки или транспортных упаковок.ТаблицуЗначений, куда поместим все извлеченные коды.Пример логики перебора узлов XML для поиска кодов:
// Создание объекта для работы с XML
ДокXML = СоздатьОбъект("Microsoft.XMLDOM");
ДокXML.load(ПутьКФайлуУПД);
// Получение списка узлов с кодами маркировки
УзлыКМ = ДокXML.getElementsByTagName("НомУпак");
Для ии = 0 По УзлыКМ.length - 1 Цикл
ТекущийКМ = УзлыКМ.item(ии).text;
ТаблицаКодов.НоваяСтрока();
ТаблицаКодов.КодМаркировки = ТекущийКМ;
КонецЦикла;
Этот метод хорош тем, что нам не нужно напрямую обращаться к серверам «Честного ЗНАКа», мы работаем с официальным документом от поставщика.
Выясним причину, по которой этот метод считается наиболее надежным: он позволяет получить актуальные данные непосредственно из государственной системы в реальном времени. Если поставщик передал коды «ручным вводом» или через прямое сообщение в ГИС МТ, нам потребуется использовать True API.
Для реализации этого метода в 1С 7.7 нам предстоит решить две технические задачи: поддержку протокола TLS 1.2 и обработку формата JSON.
1. Проблема TLS и HTTPS
Стандартные средства 1С 7.7 не умеют работать с современным шифрованием. Рекомендуем использовать объект WinHttp.WinHttpRequest.5.1. Он позволяет отправлять GET и POST запросы к API ГИС МТ.
2. Обработка JSON
Поскольку в 7.7 нет встроенного парсера JSON, мы можем пойти двумя путями: использовать внешнюю компоненту или написать несложную функцию разбора строки. Если нам нужно только вытащить список кодов, достаточно простого поиска по строке.
Разберем пример запроса для получения токена авторизации (упрощенно):
// Настройка объекта HTTP
HttpЗапрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
HttpЗапрос.Open("POST", "https://ismp.crpt.ru/api/v3/true-api/auth/key", 0);
HttpЗапрос.SetRequestHeader("Content-Type", "application/json");
// Тело запроса с подписью (подпись формируется отдельно через КриптоПро)
HttpЗапрос.Send(ДанныеСПодписью);
Если HttpЗапрос.Status = 200 Тогда
ОтветJSON = HttpЗапрос.ResponseText;
// Здесь логика извлечения токена из JSON
КонецЕсли;
После получения токена мы можем запросить состав конкретного документа по его document_id. В ответе придет массив кодов маркировки, которые мы загрузим в 1С для сверки.
Рассмотрим ситуацию, когда объем товара велик и сканировать все ручным сканером в компьютер неудобно. Проанализируем схему работы с ТСД:
Этот подход минимизирует ошибки человеческого фактора и позволяет быстро выявить пересортицу по кодам маркировки.
Если программирование API кажется избыточным для небольших объемов, воспользуемся стандартной возможностью ГИС МТ. В Личном кабинете «Честного ЗНАКа» откройте входящий документ от поставщика. Там предусмотрена кнопка «Экспорт», которая позволяет выгрузить список всех КМ в файл формата CSV или Excel.
Разберем алгоритм обработки такого файла в 1С 7.7:
Текст для чтения CSV или Excel.Application для работы с XLS-файлом.Пример кода для загрузки из CSV:
Текст = СоздатьОбъект("Текст");
Текст.Открыть(ИмяФайла);
Для Ном = 1 По Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(Ном);
// Разбор строки по разделителю (запятая или точка с запятой)
КодИзФайла = ИзвлечьКод(Стр);
ТаблицаПлановыхКодов.НоваяСтрока();
ТаблицаПлановыхКодов.КМ = КодИзФайла;
КонецЦикла;
Просто проверить наличие кода в накладной недостаточно. Важно убедиться, что коды имеют правильный статус. Проанализируем, на что нужно обратить внимание:
In Circulation (В обороте).Для автоматической проверки статусов без полноценной интеграции можно использовать внешние сервисы-прослойки, которые принимают HTTP-запросы от 1С 7.7 и возвращают упрощенный ответ, беря на себя работу с подписью и сложным JSON.
Несмотря на почтенный возраст 1С 7.7, задача проверки кодов маркировки вполне решаема. Мы рекомендуем начать с самого простого — парсинга входящих УПД из ЭДО. Если же поставщики часто используют прямую отгрузку в Честном ЗНАКе, стоит задуматься о реализации минимального взаимодействия с True API через WinHttp или использовании промежуточных файлов экспорта из Личного Кабинета. Совместное использование этих методов позволит вам полностью контролировать процесс приемки и избежать штрафных санкций за некорректный оборот маркированной продукции.