Как программно интегрировать модуль «Контур.Меркурий» в существующие обработки 1С

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

Интеграция системы «Меркурий» (ФГИС «ВетИС») в рабочий процесс предприятия часто сталкивается с проблемой избыточности интерфейсов. Если операторы годами привыкли работать в одной внешней обработке для формирования пакета отгрузочных документов, заставлять их переключаться в отдельное окно модуля «Меркурий» — значит замедлять работу и плодить ошибки. В этой статье мы подробно разберем, как программно вызывать функции внешнего модуля «Контур.Меркурий» напрямую из вашего кода 1С, обеспечивая бесшовную работу пользователей.

Анализ задачи и программное создание партий

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

Часто программисты сталкиваются с тем, что после вызова метода партии создаются, но их идентификаторы (GUID) не возвращаются в основное сообщение. Проанализируем причину: это происходит из-за того, что механизм сопоставления не находит созданные строки в переданной таблице товаров. Разберем пример кода для инициации процесса:


Сообщение = Неопределено;
Товары = ЗаполнениеТаблицыТоваров(Стр, Сообщение);

// Вызываем создание производственной партии под транспортную "на лету"
Ошибка = МодульЕДИ.ВнешнийМодульМеркурий.СообщениеСоздатьПартииДляОтгрузки(
    Сообщение.ПлощадкаEDI.GUID,
    Сообщение.ХозяйствующийСубъектEDI.GUID, 
    Товары, 
    Товары, 
    Ложь
);

Если ЗначениеЗаполнено(Ошибка) Тогда
    МодульЕДИ.ВывестиПредупреждение_КонтурEDI("Ошибка создания партии: " + Ошибка);
    Возврат;
КонецЕсли;

Сообщение.Товары = Товары;

Важный момент: внутри процедуры СообщениеСоздатьПартииДляОтгрузки модуль ищет строки по строгому соответствию параметров (номер партии, срок годности, дата производства). Если в вашей таблице Товары эти поля заполнены не так, как их вернул «Меркурий», метод НайтиСтроки вернет пустой массив, и ИсходнаяПартияGUID не будет заполнен. Проверьте соответствие типов данных в колонках СрокГодности и ДатаПроизводства.

Автоматизация печати ВСД и генерация QR-кодов

После того как транзакция успешно отправлена в «Меркурий», нам необходимо распечатать ветеринарное свидетельство или хотя бы его сокращенную форму с QR-кодом. Выясним, как это сделать без захода в интерфейс модуля.

QR-код не нужно «скачивать» из ФГИС — он формируется на основе уникального идентификатора (UUID) документа. Ссылка для генерации QR-кода имеет стандартный формат. Рассмотрим, как программно получить табличный документ для печати:


// Подготавливаем массив документов реализации
ДокументыВПечать = Новый Массив;
ДокументыВПечать.Добавить(Объект.Ссылка);

// Вызываем метод получения печатной формы
ТабДокумент = МодульЕДИ.ВнешнийМодульМеркурий.ПолучитьТабличныйДокументВСД(ДокументыВПечать);

Если ТабДокумент <> Неопределено Тогда
    ТабДокумент.Показать("Печать ветеринарных документов");
КонецЕсли;

Если вам требуется вывести конкретный перечень документов для одной реализации, используйте специализированную функцию ПолучитьТабличныйДокументПеречняВСД. Обратите внимание, что для работы в тестовой среде к адресу сервера добавляется префикс t2-. Формула формирования ссылки для QR-кода выглядит так:

QRСтрока = "https://mercury.vetrf.ru/pub/operatorui?_action=findVetDocumentFormByUuid&uuid=" + УИД_Документа;

Сопоставление площадок и хозяйствующих субъектов

Одной из самых трудоемких задач является автоматическая привязка площадок «Меркурия» к объектам 1С (контрагентам, договорам или торговым точкам). Разберем, как прописать эту связь в коде, чтобы система подхватывала нужную площадку получателя автоматически.

Для этого удобно использовать событие МеркурийЗаполнитьРеквизитыЗаказа во внешнем подключаемом модуле. Рассмотрим пример настройки связи через справочник ДоговорыКонтрагентов, если у вас учет ведется по точкам доставки, привязанным к договорам:


Если ИмяСобытия = "МеркурийЗаполнитьРеквизитыЗаказа" Тогда
    // Параметры.ДокументСсылка — это ваша Реализация или Заказ
    // Устанавливаем объект 1С, к которому привязана площадка в справочнике сопоставления
    Параметры.Сообщение.ПлощадкаПолучатель1С = Параметры.ДокументСсылка.ДоговорКонтрагента;
КонецЕсли;

Помните: чтобы эта связь сработала, в интерфейсе «Меркурия» (или через форму Меркурий_ХС_Площадка) один раз должно быть установлено соответствие между конкретной площадкой ФГИС и этим договором. После этого код будет отрабатывать автоматически.

Проблема «виртуальных» партий и прослеживаемости

В процессе работы многие компании используют схему создания производственной партии «из воздуха» (без указания сырья) непосредственно перед отгрузкой. Рассмотрим риски такой схемы. Хотя технически это реализуемо через ЗаполнитьОбластьПроизводства, Россельхознадзор активно борется с отсутствием прослеживаемости.

Для промышленного производства рекомендуется переходить на схему Black Box:

  1. На входе фиксируются все партии сырья, поступившие за смену (объединение записей складского журнала).
  2. На выходе формируется готовая продукция.
  3. Программа сопоставляет сроки годности и автоматически списывает сырье, которое могло быть использовано при производстве данной партии.

Такой подход позволяет избежать жесткого партионного учета на каждом этапе конвейера, но при этом соблюсти требования закона о «прослеживаемости». В модуле «Контур.Меркурий» это реализуется через настройку ПодготовитьТранзакциюПроизводства, где указываются правила подбора сырья из складского журнала.

Современный контекст и развитие систем (2024 год)

С момента первых внедрений интеграция «Меркурия» претерпела значительные изменения, которые важно учитывать при написании своего кода:

Во-первых, появилась обязательная интеграция с системой «Честный ЗНАК». Для молочной продукции теперь требуется сопоставление кодов маркировки с электронными ВСД. В типовых библиотеках 1С (БИС) это реализовано через механизмы двойного сканирования. Если вы пишете свою обработку, вам придется учитывать регистр ШтрихкодыУпаковокТоваров.

Во-вторых, Россельхознадзор внедрил алгоритмы искусственного интеллекта (система «Сириус»), которые в автоматическом режиме блокируют пользователей за «логические ошибки». Например, если вы программно оформите транспортный ВСД между городами, расстояние между которыми 1000 км, и укажете время прибытия через 1 час, система заблокирует учетную запись за «телепортацию».

В-третьих, актуальная версия API 2.1 требует более строгого контроля лимитов запросов. При массовой выписке тысяч ВСД в утренние часы обязательно внедряйте в код обработку ошибок HTTP 429 (Too Many Requests) и используйте фоновые задания для асинхронной отправки данных, чтобы интерфейс оператора не «зависал» в ожидании ответа сервера ВетИС.

Используя предложенные методы программного вызова функций внешнего модуля, вы сможете создать максимально удобный инструмент для своих сотрудников, сохранив при этом полный контроль над ветеринарной сертификацией предприятия.

← На главную