Как отладить внешнюю обработку заполнения документа в 1С и исправить ошибку передачи данных между клиентом и сервером?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Выясним причину проблемы и особенности отладки внешних обработок

При разработке и отладке внешних обработок (например, предназначенных для заполнения табличных частей документов через механизмы Библиотеки Стандартных Подсистем — БСП) разработчики часто сталкиваются с двумя главными трудностями:

  1. Точки останова не срабатывают: Если внешняя обработка подключена через справочник дополнительных отчетов и обработок, платформа загружает ее двоичные данные из базы во временное хранилище или временный каталог. В этом случае файл .epf, открытый в Конфигураторе, не участвует в исполнении кода напрямую, из-за чего точки останова проигрываются без остановки.
  2. Ошибка передачи данных с клиента на сервер: Попытка передать элемент интерфейса (объект типа ПолеФормы) из клиентской процедуры в серверную функцию приводит к ошибке: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа с причиной Отсутствует отображение для типа 'ПолеФормы'. Это связано с тем, что элементы формы существуют только в интерфейсном контексте на клиенте и не подлежат сериализации XDTO.

Создание тестовой формы для автономной отладки обработки

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

Разберем по шагам, как настроить автономную форму прямо внутри файла внешней обработки:

  1. Откроем файл внешней обработки (.epf) в Конфигураторе и добавим в него новую форму (тестовую форму).
  2. Добавим на форму реквизит ДокументОбъект с типом ссылки на проверяемый документ, например, ДокументСсылка.ЗаказКлиента.
  3. Вынесем поле этого реквизита на форму и добавим кнопку для запуска команды тестирования.
  4. Запустим режим «1С:Предприятие» и откроем обработку через меню Файл -> Открыть. В этом случае при вызове команд точки останова в коде обработки будут корректно срабатывать.

Исправление ошибки передачи параметров между клиентом и сервером

Проанализируем ситуацию с передачей параметров в клиент-серверной архитектуре управляемого приложения.

Посмотрим на пример некорректного кода, вызывающего ошибку преобразования XDTO:


&НаСервере
Функция ЗаполнитьОбъект(НовыйОбъект)
    Если ТипЗнч(НовыйОбъект) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
        Сообщить("123");    
    КонецЕсли;
КонецФункции

&НаКлиенте
Процедура Тестировать(Команда)
    // ОШИБКА: передается элемент формы Элементы.ДокументОбъект, а не значение реквизита!
    ЗаполнитьОбъект(Элементы.ДокументОбъект);
КонецПроцедуры

Причиной ошибки является обращение к коллекции Элементы. Элементы пользовательского интерфейса (объекты типа ПолеФормы) нельзя передавать на сервер. Передавать между клиентом и сервером можно только сериализуемые типы данных: ссылки, числа, строки, структуры, массивы и значения реквизитов формы.

Рассмотрим правильный вариант передачи значения реквизита формы на сервер:


&НаСервере
Функция ЗаполнитьОбъект(НовыйОбъект)
    Если ТипЗнч(НовыйОбъект) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
        Сообщить("123");    
    КонецЕсли;
КонецФункции

&НаКлиенте
Процедура Тестировать(Команда)
    // ПРАВИЛЬНО: передается значение реквизита формы
    ЗаполнитьОбъект(ЭтотОбъект.ДокументОбъект);
КонецПроцедуры

Альтернативные способы отладки подключаемых обработок БСП

Если требуется проверить работу обработки непосредственно в контексте реального вызова из документа без создания тестовой формы, рассмотрим дополнительные методы:

  1. Перехват вызова через расширение конфигурации: Можно временно переопределить метод подключения внешних обработок в расширении, заменив загрузку из хранилища на прямой вызов ВнешниеОбработки.Создать("<путь_к_файлу.epf>", Ложь). Это позволит исполнять код напрямую из внешнего файла на диске.
  2. Временное встраивание обработки в конфигурацию: Обработку можно временно добавить в ветку «Обработки» дерева конфигурации или в расширение. После завершения отладки модуль формы и модуль объекта копируются обратно во внешний файл .epf.

Также важно убедиться, что для сервера 1С:Предприятие включен режим отладки (параметр -debug или включенная отладка по HTTP/TCP), иначе точки останова в серверных процедурах &НаСервере срабатывать не будут.

← На главную