Как передать строку табличной части в общий модуль для обработки и гашения ВСД ВетИС в 1С?

Программист 1С v8.3 (Обычные формы) Торговля и дистрибуция
← На главную

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

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

Архитектурные особенности работы общих модулей и API ВетИС

Проанализируем ключевые технические ограничения и правила, которые важно учитывать при реализации обмена:

  1. Отсутствие состояния в общих модулях: Общие модули в платформе 1С не предназначены для хранения данных между отдельными вызовами. Переменные внутри процедуры общего модуля существуют только во время её выполнения. Чтобы передать данные между операциями, их необходимо передавать через параметры процедур и функций либо сохранять в реквизитах формы или базы данных.
  2. Передача контекста формы: При вызове процедур общего модуля из модуля формы мы можем передавать текущую строку табличной части (или структуру, созданную на её основе) в качестве входного параметра.
  3. Особенности API ВетИС: Взаимодействие с веб-сервисом ВетИС строится на отправке SOAP/XDTO-запросов. Операции, такие как получение списка документов (GetVetDocumentListOperation) и гашение входящей продукции (IncomingOperation), требуют правильного заполнения специфических параметров (GUID, серия, номер, дата оформления). Если идентификатор ВСД уже известен, процедуру гашения можно выполнять напрямую.

Реализация передачи строки и последовательного гашения

Разберём по шагам создание механизмов заполнения и гашения ВСД. Вместо того чтобы заставлять пользователя нажимать несколько кнопок поочерёдно, объединим заполнение параметров и отправку запроса гашения в единый процесс.

Посмотрим на пример кода в общем модуле, где описываются процедуры обработчиков:


Процедура Заполнить(СтрокаТЧ) Экспорт
    
    // Получаем необходимые исходные данные из переданной строки
    МояСтрока1 = СтрокаТЧ.ДатаТТН;
    МояСтрока2 = СтрокаТЧ.НомерВСД;
    
    // Вызов функции обращения к веб-сервису ВетИС (GetVetDocumentListOperation)
    МойРезультат = ВызовМоейСуперФункцииGetVetDocumentListOperation(МояСтрока1, МояСтрока2);
    
    Если МойРезультат.Успешно Тогда
        СтрокаТЧ.Заполнено = Истина;
        СтрокаТЧ.ИД = МойРезультат.UUID;
        СтрокаТЧ.ТипДокумента = МойРезультат.vetDocumentType;
        СтрокаТЧ.Статус = МойРезультат.vetDocumentStatus;
        СтрокаТЧ.НомерВСД = МойРезультат.issueNumber;
        СтрокаТЧ.СерияВСД = МойРезультат.issueSeries;
        СтрокаТЧ.ДатаВСД = МойРезультат.issueDate;
    КонецЕсли;
    
КонецПроцедуры

Процедура Погасить(СтрокаТЧ) Экспорт
    
    // Вызов функции выполнения операции гашения (IncomingOperation)
    ВызовУспешен = ВызовМоейСуперФункцииIncomingOperation(СтрокаТЧ.ИД);
    
    Если ВызовУспешен Тогда
        СтрокаТЧ.Погашено = Истина;
    КонецЕсли;
    
КонецПроцедуры

Теперь рассмотрим, как вызываются данные процедуры из модуля формы внешне обработки при нажатии на командную кнопку:


Процедура КоманднаяПанельОстаткиЗаполнитьИПогасить(Элемент)
    
    // Получаем текущую выбранную строку табличной части "Остатки"
    ТекСтрока = ЭлементыФормы.Остатки.ТекущаяСтрока;
    
    Если ТекСтрока <> Неопределено Тогда
        
        // Шаг 1. Передаем строку в общий модуль для получения/уточнения данных ВСД
        МойОбщийМодуль.Заполнить(ТекСтрока);
        
        // Шаг 2. Если данные успешно заполнены, сразу выполняем гашение
        Если ТекСтрока.Заполнено Тогда
            МойОбщийМодуль.Погасить(ТекСтрока);
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Рекомендации по работе с управляемыми формами и асинхронным обменом

При адаптации приведенного алгоритма под современную платформу 1С с управляемыми формами следует учитывать следующие нюансы:

  1. Передача данных между клиентом и сервером: На управляемых формах текущую строку ДанныеФормыЭлементКоллекции нельзя напрямую передавать в серверные фоновые задания. Для передачи на сервер её предварительно считывают в Структуру с помощью функции ЗаполнитьЗначенияСвойств().
  2. Асинхронность сервиса Меркурий: Запросы к ВетИС отправляются асинхронно. В ответ на первичную заявку шлюз возвращает идентификатор обращения (applicationId). Для получения итогового статуса требуется повторный опрос сервиса до получения статуса COMPLETED.
  3. Выполнение запросов только на сервере: Прямое сетевое подключение к веб-сервисам через объекты WSПрокси или HTTPСоединение необходимо выполнять строго на стороне сервера.
← На главную