При разработке внешних обработок для интеграции с государственной системой ВетИС (Меркурий) разработчики часто сталкиваются с задачей передачи данных выбранной строки из табличной части формы в процедуры общего модуля. Понимание того, как правильно передавать контекст и организовывать вызов веб-сервисов, позволяет избежать ошибок при формировании запросов и оптимизировать работу пользователя.
Рассмотрим детально, почему нельзя «сохранять» данные внутри самого общего модуля, как правильно передать текущую строку табличной части в процедуры и как объединить шаги заполнения и гашения ветеринарных сопроводительных документов (ВСД).
Проанализируем ключевые технические ограничения и правила, которые важно учитывать при реализации обмена:
GetVetDocumentListOperation) и гашение входящей продукции (IncomingOperation), требуют правильного заполнения специфических параметров (GUID, серия, номер, дата оформления). Если идентификатор ВСД уже известен, процедуру гашения можно выполнять напрямую.Разберём по шагам создание механизмов заполнения и гашения ВСД. Вместо того чтобы заставлять пользователя нажимать несколько кнопок поочерёдно, объединим заполнение параметров и отправку запроса гашения в единый процесс.
Посмотрим на пример кода в общем модуле, где описываются процедуры обработчиков:
Процедура Заполнить(СтрокаТЧ) Экспорт
// Получаем необходимые исходные данные из переданной строки
МояСтрока1 = СтрокаТЧ.ДатаТТН;
МояСтрока2 = СтрокаТЧ.НомерВСД;
// Вызов функции обращения к веб-сервису ВетИС (GetVetDocumentListOperation)
МойРезультат = ВызовМоейСуперФункцииGetVetDocumentListOperation(МояСтрока1, МояСтрока2);
Если МойРезультат.Успешно Тогда
СтрокаТЧ.Заполнено = Истина;
СтрокаТЧ.ИД = МойРезультат.UUID;
СтрокаТЧ.ТипДокумента = МойРезультат.vetDocumentType;
СтрокаТЧ.Статус = МойРезультат.vetDocumentStatus;
СтрокаТЧ.НомерВСД = МойРезультат.issueNumber;
СтрокаТЧ.СерияВСД = МойРезультат.issueSeries;
СтрокаТЧ.ДатаВСД = МойРезультат.issueDate;
КонецЕсли;
КонецПроцедуры
Процедура Погасить(СтрокаТЧ) Экспорт
// Вызов функции выполнения операции гашения (IncomingOperation)
ВызовУспешен = ВызовМоейСуперФункцииIncomingOperation(СтрокаТЧ.ИД);
Если ВызовУспешен Тогда
СтрокаТЧ.Погашено = Истина;
КонецЕсли;
КонецПроцедуры
Теперь рассмотрим, как вызываются данные процедуры из модуля формы внешне обработки при нажатии на командную кнопку:
Процедура КоманднаяПанельОстаткиЗаполнитьИПогасить(Элемент)
// Получаем текущую выбранную строку табличной части "Остатки"
ТекСтрока = ЭлементыФормы.Остатки.ТекущаяСтрока;
Если ТекСтрока <> Неопределено Тогда
// Шаг 1. Передаем строку в общий модуль для получения/уточнения данных ВСД
МойОбщийМодуль.Заполнить(ТекСтрока);
// Шаг 2. Если данные успешно заполнены, сразу выполняем гашение
Если ТекСтрока.Заполнено Тогда
МойОбщийМодуль.Погасить(ТекСтрока);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
При адаптации приведенного алгоритма под современную платформу 1С с управляемыми формами следует учитывать следующие нюансы:
ДанныеФормыЭлементКоллекции нельзя напрямую передавать в серверные фоновые задания. Для передачи на сервер её предварительно считывают в Структуру с помощью функции ЗаполнитьЗначенияСвойств().applicationId). Для получения итогового статуса требуется повторный опрос сервиса до получения статуса COMPLETED.WSПрокси или HTTPСоединение необходимо выполнять строго на стороне сервера.