Разработка и отладка внешних печатных форм часто вызывает затруднения, особенно когда код выполняется на сервере и не «подхватывается» стандартными точками останова. В этой статье мы подробно разберем, как сделать процесс отладки прозрачным, быстрым и удобным для программиста.
Прежде чем переходить к написанию кода, убедитесь, что ваша среда настроена правильно:
/debug. Без этого точки останова в модулях, выполняемых на сервере, просто не сработают.Если вам нужно оперативно понять, в какой момент возникает ошибка, или просто остановить выполнение в конкретной процедуре, используйте простой прием с искусственным вызовом исключения. В нужном месте модуля печатной формы пропишите следующую команду:
// Вставьте этот код в начало функции, которую хотите отладить
ВызватьИсключение \"Остановка отладки!\";
При выполнении этого кода программа остановится, и 1С выдаст ошибку. Поскольку в конфигураторе настроена реакция на все ошибки, отладчик автоматически откроет модуль в месте возникновения исключения, и вы сможете продолжить пошаговую трассировку кода.
Чтобы не подключать обработку через справочник каждый раз при внесении правок, создадим «стенд» прямо внутри внешней обработки. Это позволит имитировать вызов метода Печать так, как это делает типовая Библиотека Стандартных Подсистем (БСП).
Шаг 1: Подготовка формы
Добавьте новую форму в вашу внешнюю обработку. На форме создайте:
СсылкаНаОбъект (тип ссылки, например, ДокументСсылка.РеализацияТоваровУслуг).МакетДляОтладки (тип Строка) с включенным свойством РежимВыбораИзСписка.Сформировать и выведите её на форму в виде кнопки.Шаг 2: Реализация логики
В модуле формы опишем обработчик кнопки и серверные функции. Это позволит нам вызывать Печать в изолированной среде.
&НаКлиенте
Процедура Сформировать(Команда)
Если МакетДляОтладки = \"\" Или МакетДляОтладки = Неопределено Тогда
Сообщить(\"Не выбрана команда для отладки\");
Возврат;
КонецЕсли;
Результат = ОтладкаНаСервере();
Если Не Результат.ТабличныйДокумент = Неопределено Тогда
Результат.ТабличныйДокумент.Показать();
Иначе
Сообщить(Результат.ТекстОшибки);
КонецЕсли;
КонецПроцедуры
Теперь добавим серверную логику, которая готовит параметры печати аналогично типовому механизму:
&НаСервере
Функция ОтладкаНаСервере()
Результат = Новый Структура(\"ПризнакОшибки, ТекстОшибки, ТабличныйДокумент\", Ложь, \"\", Неопределено);
ОбъектОбработка = РеквизитФормыВЗначение(\"Объект\");
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаОбъект);
ОбъектыПечати = Новый СписокЗначений;
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
КоллекцияПечатныхФорм = ПодготовитьКоллекциюПечатныхФорм(МакетДляОтладки);
// Вызываем метод объекта
ОбъектОбработка.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
Попытка
Результат.ТабличныйДокумент = КоллекцияПечатныхФорм[0].ТабличныйДокумент;
Исключение
Результат.ПризнакОшибки = Истина;
Результат.ТекстОшибки = \"Ошибка получения табличного документа\";
КонецПопытки;
Возврат Результат;
КонецФункции
Инициализируем список команд в событии ПриСозданииНаСервере, чтобы при открытии формы сразу видеть доступные для печати макеты.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОбъектОбработка = РеквизитФормыВЗначение(\"Объект\");
ТаблицаКоманд = ОбъектОбработка.СведенияОВнешнейОбработке().Команды;
Для Каждого Команда Из ТаблицаКоманд Цикл
ЭтаФорма.Элементы.МакетДляОтладки.СписокВыбора.Добавить(Команда.Идентификатор);
КонецЦикла;
КонецПроцедуры
Если вы не хотите создавать форму внутри каждой обработки, сообщество 1С предлагает готовые решения. Существуют универсальные внешние обработки, которые позволяют подключать файлы .epf без регистрации в справочнике ДополнительныеОтчетыИОбработки. Они работают по схожему с описанным выше принципу: эмулируют контекст БСП и позволяют «на лету» запускать метод Печать с нужным объектом базы данных.
Для эффективной работы мы рекомендуем следующий порядок действий:
/debug на сервере.ВызватьИсключение, не забудьте удалить его перед итоговой выгрузкой файла.КоллекцияПечатныхФорм, чтобы видеть, как заполняется табличный документ на каждом этапе.С помощью этих методов вы сможете значительно сократить время поиска ошибок в печатных формах и сделать процесс разработки более профессиональным.