Интеграция учетной системы 1С с Федеральной государственной информационной системой «Меркурий» (компонент ВетИС) необходима всем организациям, участвующим в обороте подконтрольной госветнадзору продукции. Разберем по шагам архитектуру взаимодействия, структуру SOAP-пакетов, практическую отправку запросов из 1С и способы решения распространенных технических проблем.
Взаимодействие с государственной системой строится на асинхронном протоколе обмена сообщениями. Процесс выполнения любой бизнес-операции (получение списка входящих ВСД, оформление транспортной партии, гашение, инвентаризация) состоит из двух этапов:
submitApplicationRequest с телом конкретной команды и отправляет его на шлюз ApplicationManagementService. В ответ сервис возвращает уникальный идентификатор заявки applicationId со статусом приема.receiveApplicationResultRequest с переданным ранее applicationId. В ответ возвращаются сформированные сущности (эВСД, записи складского журнала) либо список ошибок валидации.Хотя ВетИС.API использует формат SOAP, импорт WSDL-описания через стандартные WS-ссылки в платформе 1С:Предприятие часто завершается ошибкой «Набор схем не может содержать схемы с одинаковыми целевыми пространствами». Это связано с наличием циклических импортов во внешних XSD-схемах сервиса. Оптимальным и стабильным решением является использование объекта HTTPСоединение с прямой передачей XML-тела.
Рассмотрим пример кода на платформе 1С:Предприятие 8.3 для отправки подготовленного XML-пакета на сервер шлюза:
ПараметрыПодключения = Новый Структура;
ПараметрыПодключения.Вставить("Логин", "login_user");
ПараметрыПодключения.Вставить("Пароль", "password_user");
// Настройка защищенного соединения HTTPS
SSL = Новый ЗащищенноеСоединениеOpenSSL;
Соединение = Новый HTTPСоединение("api2.vetrf.ru", 8002, ПараметрыПодключения.Логин, ПараметрыПодключения.Пароль, , , SSL);
Запрос = Новый HTTPЗапрос("/platform/services/2.0/ApplicationManagementService");
Запрос.Заголовки.Вставить("Content-Type", "text/xml; charset=utf-8");
Запрос.Заголовки.Вставить("SOAPAction", "submitApplication");
// Устанавливаем сформированное тело SOAP-конверта
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Попытка
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
КодСостояния = Ответ.КодСостояния;
СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
Исключение
ВызватьИсключение "Ошибка отправки запроса к ВетИС: " + ОписаниеОшибки();
КонецПопытки;
Проанализируем структуру пакета для операции getVetDocumentListRequest (версия API 2.0). Обратите особое внимание на явное указание пространств имен для каждого узла:
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Body>
<submitApplicationRequest xmlns="http://api.vetrf.ru/schema/cdm/application/ws-definitions">
<apiKey>ВАШ_API_KEY</apiKey>
<application xmlns="http://api.vetrf.ru/schema/cdm/application">
<serviceId>mercury-g2b.service:2.0</serviceId>
<issuerId>1ef8e97f-23f5-4496-a7c0-76a775a4147d</issuerId>
<issueDate>2024-01-15T12:00:00</issueDate>
<data>
<getVetDocumentListRequest xmlns="http://api.vetrf.ru/schema/cdm/mercury/g2b/applications/v2">
<localTransactionId>a9046578-7c02-44d6-93cf-26ca4d5c6b6b</localTransactionId>
<initiator xmlns:d7p1="http://api.vetrf.ru/schema/cdm/mercury/vet-document/v2">
<d7p1:login>login_initiator</d7p1:login>
</initiator>
<listOptions xmlns="http://api.vetrf.ru/schema/cdm/base"/>
<vetDocumentType xmlns="http://api.vetrf.ru/schema/cdm/mercury/vet-document/v2">INCOMING</vetDocumentType>
<vetDocumentStatus xmlns="http://api.vetrf.ru/schema/cdm/mercury/vet-document/v2">CONFIRMED</vetDocumentStatus>
<enterpriseGuid xmlns="http://api.vetrf.ru/schema/cdm/dictionary/v2">452ff3be-bdda-44f5-853e-35cc0f5e03c8</enterpriseGuid>
</getVetDocumentListRequest>
</data>
</application>
</submitApplicationRequest>
</Body>
</Envelope>
В процессе разработки интеграции разработчики регулярно сталкиваются с типовыми ошибками валидации сервиса:
APLM0002: Unsupported application data format. Возникает, когда структура внутри блока <data> не соответствует целевой схеме операции либо пространство имен узлов указано с ошибкой. Проверьте правильность атрибута serviceId (например, mercury-g2b.service:2.0) и соответствие префиксов вложенных элементов. При отправке через HTTPЗапрос убедитесь, что в начало файла не попадает BOM (Byte Order Mark).MERC02469: Указаны не все обязательные условия перевозки в соответствии с регионализацией. При перемещении товаров между регионами или зонами с различным эпизоотическим статусом требуется обязательное подтверждение условий транспортировки. Перед оформлением операции PrepareOutgoingConsignmentOperation необходимо запросить правила перемещения для пары «площадка отправителя — площадка получателя» и указать в блоке условий (regionalizationCondition) их GUID и признак подтверждения выполнения (applied/fulfilled).sourceStockEntry), шлюз ВетИС заблокирует запись и вернет ошибку нехватки остатка. Все транзакции списания по конкретной партии должны обрабатываться строго последовательно.Для корректной работы с ГИС Меркурий в учетной системе 1С необходимо организовать партионный учет продукции:
GUID и версии сущностей UUID. Рекомендуется записывать строковые представления GUID в отдельные реквизиты или регистры сведений с включенным индексированием, так как поиск по внутреннему идентификатору ссылки 1С напрямую в текстах запросов не поддерживается.GetStockEntryListOperation. Для отслеживания изменений и минимизации объемов сетевого трафика целесообразно использовать метод GetStockEntryListChangesOperation, возвращающий только дельту движений за указанный период.