Как отладить внешнюю печатную форму 1С, запуская ее через "Файл - Открыть"?

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

При разработке или доработке внешней печатной формы (ВПФ) для конфигураций, использующих Библиотеку стандартных подсистем (БСП), например УТ 11.5, возникает стандартная проблема. Для отладки изменений приходится постоянно выполнять рутинную процедуру: сохранить файл обработки, зайти в "Дополнительные отчеты и обработки", найти нужную форму, нажать "Обновить из файла" и только потом проверять результат. Этот процесс отнимает много времени и усложняет отладку.

Рассмотрим, как модифицировать внешнюю печатную форму таким образом, чтобы ее можно было запускать напрямую через меню "Файл - Открыть". Это позволит нам вносить изменения в код и сразу же проверять их, значительно ускоряя процесс разработки.

Решение 1: Создание отладочной формы

Самый простой и эффективный способ — добавить в нашу обработку специальную форму, которая будет служить для отладки. Важно понимать, что при подключении ВПФ через стандартный механизм БСП эта форма будет проигнорирована, так как система обращается напрямую к экспортным процедурам модуля объекта. Таким образом, наличие отладочной формы не помешает работе ВПФ в боевом режиме.

Разберем по шагам, как это сделать.

  1. Создаем новую форму. В дереве метаданных вашей внешней обработки добавьте новую управляемую форму. Назначьте ее основной формой обработки. Это нужно, чтобы именно она открывалась при запуске через "Файл - Открыть".

  2. Добавляем реквизиты на форму. Нам понадобится как минимум один реквизит для выбора документа, на основе которого будет формироваться печатная форма. Назовем его, например, ТестовыйДокумент и укажем для него нужный тип ссылки (например, ДокументСсылка.РеализацияТоваровУслуг).

  3. Создаем кнопку для формирования отчета. Добавьте на форму команду, например, "Сформировать", и перетащите ее на форму в виде кнопки. В обработчике нажатия этой кнопки мы и напишем основной код для эмуляции вызова БСП.

  4. Пишем код для эмуляции вызова БСП. Когда мы печатаем документ из системы, БСП подготавливает и передает в нашу ВПФ несколько служебных параметров. В режиме отладки мы должны создать их вручную. Процедура печати в модуле объекта ВПФ обычно имеет следующую сигнатуру:

    
    Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
        // ... логика формирования печатной формы
    КонецПроцедуры
    

    Наша задача — подготовить все эти параметры в коде кнопки на отладочной форме и вызвать эту процедуру.

Посмотрим на пример кода для обработчика нажатия кнопки "Сформировать":


&НаКлиенте
Процедура Сформировать(Команда)

    // 1. Проверяем, выбран ли тестовый документ
    Если НЕ ЗначениеЗаполнено(Объект.ТестовыйДокумент) Тогда
        Сообщить("Необходимо выбрать документ для печати!");
        Возврат;
    КонецЕсли;

    // 2. Подготавливаем параметры для вызова процедуры Печать
    МассивОбъектов = Новый Массив;
    МассивОбъектов.Добавить(Объект.ТестовыйДокумент);
    
    // Этот параметр используется для сопоставления комплектов документов, 
    // для простой отладки можно передать пустой список
    ОбъектыПечати = Новый СписокЗначений; 

    // Этот параметр используется для возврата настроек печати,
    // например, доступности редактирования
    ПараметрыВывода = Новый Структура; 

    // 3. Формируем коллекцию печатных форм. Это ключевой момент.
    // БСП ожидает Таблицу Значений с определенной структурой.
    КоллекцияПечатныхФорм = Новый ТаблицаЗначений;
    КоллекцияПечатныхФорм.Колонки.Добавить("ИмяВРЕГ", Новый ОписаниеТипов("Строка"));
    КоллекцияПечатныхФорм.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка"));
    КоллекцияПечатныхФорм.Колонки.Добавить("ТабличныйДокумент", Новый ОписаниеТипов("ТабличныйДокумент"));
    КоллекцияПечатныхФорм.Колонки.Добавить("ИмяМакета", Новый ОписаниеТипов("Строка")); // Иногда используется для выбора макета
    // ... можно добавить и другие колонки, если ваша логика их использует:
    // Картинка, ПолныйПутьКМакету, ИмяФайлаПечатнойФормы и т.д.
    
    // 4. Вызываем серверную процедуру, которая вызовет метод из модуля объекта
    СформироватьНаСервере(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);

КонецПроцедуры

&НаСервере
Процедура СформироватьНаСервере(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
    
    // 5. Вызываем экспортную процедуру Печать из модуля объекта нашей обработки
    // Обратите внимание, что мы получаем объект обработки через РеквизитФормыВЗначение("Объект")
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    ОбработкаОбъект.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
    
    // 6. Показываем результат пользователю
    // После выполнения процедуры Печать, в нашей таблице КоллекцияПечатныхФорм
    // должен появиться заполненный табличный документ.
    Если КоллекцияПечатныхФорм.Количество() > 0 Тогда
        ТабДок = КоллекцияПечатныхФорм[0].ТабличныйДокумент;
        ТабДок.Показать("Результат печати");
    Иначе
        Сообщить("Печатная форма не была сформирована!");
    КонецЕсли;

КонецПроцедуры

Что мы сделали? Мы создали на форме "оболочку", которая имитирует поведение БСП: собирает необходимые параметры, вызывает основную процедуру печати и, в отличие от БСП, самостоятельно показывает результат на экране. Теперь вы можете открывать вашу ВПФ через "Файл - Открыть", выбирать тестовый документ, нажимать "Сформировать" и сразу видеть результат, а также использовать полноценную отладку с точками останова.

Важный теоретический аспект: клиентский и серверный вызов

При регистрации ВПФ в "Дополнительных отчетах и обработках" мы указываем тип команды. От этого зависит, где система будет искать "точку входа" — основную процедуру для выполнения.

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

Альтернативы и дополнительные советы

Таким образом, создание простой отладочной формы внутри самой ВПФ — это мощный и удобный прием, который экономит массу времени и делает процесс разработки и отладки внешних печатных форм гораздо более комфортным.

← На главную