Интеграция системы «Меркурий» (ФГИС «ВетИС») в рабочий процесс предприятия часто сталкивается с проблемой избыточности интерфейсов. Если операторы годами привыкли работать в одной внешней обработке для формирования пакета отгрузочных документов, заставлять их переключаться в отдельное окно модуля «Меркурий» — значит замедлять работу и плодить ошибки. В этой статье мы подробно разберем, как программно вызывать функции внешнего модуля «Контур.Меркурий» напрямую из вашего кода 1С, обеспечивая бесшовную работу пользователей.
Для того чтобы не нарушать сложившийся процесс, нам необходимо автоматизировать два ключевых этапа: создание производственной партии (если на складе нет остатка нужной позиции) и формирование транспортной партии для отправки ВСД контрагенту. Рассмотрим ситуацию, когда мы используем метод СообщениеСоздатьПартииДляОтгрузки из внешнего модуля.
Часто программисты сталкиваются с тем, что после вызова метода партии создаются, но их идентификаторы (GUID) не возвращаются в основное сообщение. Проанализируем причину: это происходит из-за того, что механизм сопоставления не находит созданные строки в переданной таблице товаров. Разберем пример кода для инициации процесса:
Сообщение = Неопределено;
Товары = ЗаполнениеТаблицыТоваров(Стр, Сообщение);
// Вызываем создание производственной партии под транспортную "на лету"
Ошибка = МодульЕДИ.ВнешнийМодульМеркурий.СообщениеСоздатьПартииДляОтгрузки(
Сообщение.ПлощадкаEDI.GUID,
Сообщение.ХозяйствующийСубъектEDI.GUID,
Товары,
Товары,
Ложь
);
Если ЗначениеЗаполнено(Ошибка) Тогда
МодульЕДИ.ВывестиПредупреждение_КонтурEDI("Ошибка создания партии: " + Ошибка);
Возврат;
КонецЕсли;
Сообщение.Товары = Товары;
Важный момент: внутри процедуры СообщениеСоздатьПартииДляОтгрузки модуль ищет строки по строгому соответствию параметров (номер партии, срок годности, дата производства). Если в вашей таблице Товары эти поля заполнены не так, как их вернул «Меркурий», метод НайтиСтроки вернет пустой массив, и ИсходнаяПартияGUID не будет заполнен. Проверьте соответствие типов данных в колонках СрокГодности и ДатаПроизводства.
После того как транзакция успешно отправлена в «Меркурий», нам необходимо распечатать ветеринарное свидетельство или хотя бы его сокращенную форму с QR-кодом. Выясним, как это сделать без захода в интерфейс модуля.
QR-код не нужно «скачивать» из ФГИС — он формируется на основе уникального идентификатора (UUID) документа. Ссылка для генерации QR-кода имеет стандартный формат. Рассмотрим, как программно получить табличный документ для печати:
// Подготавливаем массив документов реализации
ДокументыВПечать = Новый Массив;
ДокументыВПечать.Добавить(Объект.Ссылка);
// Вызываем метод получения печатной формы
ТабДокумент = МодульЕДИ.ВнешнийМодульМеркурий.ПолучитьТабличныйДокументВСД(ДокументыВПечать);
Если ТабДокумент <> Неопределено Тогда
ТабДокумент.Показать("Печать ветеринарных документов");
КонецЕсли;
Если вам требуется вывести конкретный перечень документов для одной реализации, используйте специализированную функцию ПолучитьТабличныйДокументПеречняВСД. Обратите внимание, что для работы в тестовой среде к адресу сервера добавляется префикс t2-. Формула формирования ссылки для QR-кода выглядит так:
QRСтрока = "https://mercury.vetrf.ru/pub/operatorui?_action=findVetDocumentFormByUuid&uuid=" + УИД_Документа;
Одной из самых трудоемких задач является автоматическая привязка площадок «Меркурия» к объектам 1С (контрагентам, договорам или торговым точкам). Разберем, как прописать эту связь в коде, чтобы система подхватывала нужную площадку получателя автоматически.
Для этого удобно использовать событие МеркурийЗаполнитьРеквизитыЗаказа во внешнем подключаемом модуле. Рассмотрим пример настройки связи через справочник ДоговорыКонтрагентов, если у вас учет ведется по точкам доставки, привязанным к договорам:
Если ИмяСобытия = "МеркурийЗаполнитьРеквизитыЗаказа" Тогда
// Параметры.ДокументСсылка — это ваша Реализация или Заказ
// Устанавливаем объект 1С, к которому привязана площадка в справочнике сопоставления
Параметры.Сообщение.ПлощадкаПолучатель1С = Параметры.ДокументСсылка.ДоговорКонтрагента;
КонецЕсли;
Помните: чтобы эта связь сработала, в интерфейсе «Меркурия» (или через форму Меркурий_ХС_Площадка) один раз должно быть установлено соответствие между конкретной площадкой ФГИС и этим договором. После этого код будет отрабатывать автоматически.
В процессе работы многие компании используют схему создания производственной партии «из воздуха» (без указания сырья) непосредственно перед отгрузкой. Рассмотрим риски такой схемы. Хотя технически это реализуемо через ЗаполнитьОбластьПроизводства, Россельхознадзор активно борется с отсутствием прослеживаемости.
Для промышленного производства рекомендуется переходить на схему Black Box:
Такой подход позволяет избежать жесткого партионного учета на каждом этапе конвейера, но при этом соблюсти требования закона о «прослеживаемости». В модуле «Контур.Меркурий» это реализуется через настройку ПодготовитьТранзакциюПроизводства, где указываются правила подбора сырья из складского журнала.
С момента первых внедрений интеграция «Меркурия» претерпела значительные изменения, которые важно учитывать при написании своего кода:
Во-первых, появилась обязательная интеграция с системой «Честный ЗНАК». Для молочной продукции теперь требуется сопоставление кодов маркировки с электронными ВСД. В типовых библиотеках 1С (БИС) это реализовано через механизмы двойного сканирования. Если вы пишете свою обработку, вам придется учитывать регистр ШтрихкодыУпаковокТоваров.
Во-вторых, Россельхознадзор внедрил алгоритмы искусственного интеллекта (система «Сириус»), которые в автоматическом режиме блокируют пользователей за «логические ошибки». Например, если вы программно оформите транспортный ВСД между городами, расстояние между которыми 1000 км, и укажете время прибытия через 1 час, система заблокирует учетную запись за «телепортацию».
В-третьих, актуальная версия API 2.1 требует более строгого контроля лимитов запросов. При массовой выписке тысяч ВСД в утренние часы обязательно внедряйте в код обработку ошибок HTTP 429 (Too Many Requests) и используйте фоновые задания для асинхронной отправки данных, чтобы интерфейс оператора не «зависал» в ожидании ответа сервера ВетИС.
Используя предложенные методы программного вызова функций внешнего модуля, вы сможете создать максимально удобный инструмент для своих сотрудников, сохранив при этом полный контроль над ветеринарной сертификацией предприятия.