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