Как запустить внешнюю печатную форму в режиме отладки и исправить ошибку «Недостаточно фактических параметров»

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

При разработке внешних печатных форм (ВПФ) для современных конфигураций 1С (таких как УТ 11, ERP 2, КА 2, Бухгалтерия 3.0), работающих на базе Библиотеки стандартных подсистем (БСП), программисты часто сталкиваются с трудностями при попытке отладить код. Типичная ситуация: вы создаете обработку, добавляете в модуль объекта экспортную процедуру Печать, но при попытке вызвать её из тестовой формы система выдает ошибку: «Недостаточно фактических параметров». В этой статье мы подробно разберем, почему это происходит, как правильно инициализировать все необходимые структуры и как сделать процесс отладки максимально удобным.

Выясняем причину ошибки

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


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

Как мы видим, процедура принимает пять параметров. Хотя последний параметр ПараметрыПечати часто имеет значение по умолчанию Неопределено, первые четыре являются обязательными. Автор вопроса пытался вызвать эту процедуру, передав только один аргумент — массив ссылок на документы:

ОбъектФормы.Печать(МассивОбъектов); // Ошибка: параметров должно быть минимум 4

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

Шаг 1. Подготовка вспомогательной формы для отладки

Самый простой способ отладить внешнюю печатную форму — создать внутри этой же обработки (файла .epf) временную форму. На этой форме мы разместим реквизит для выбора документа-основания (например, ЗаказКлиента) и кнопку «Выполнить печать». Рассмотрим программный код, который должен располагаться в модуле этой формы.

Нам потребуется серверный метод, так как процедура Печать находится в модуле объекта и работает с данными базы. Разберем пример кода для команды печати:


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

Шаг 2. Разбор параметров БСП

Давайте подробнее проанализируем, за что отвечают параметры, которые мы подготовили, и почему они важны:

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

Шаг 3. Как запустить отладку в конфигураторе

Чтобы успешно «поймать» точку останова в модуле объекта внешней обработки, выполните следующие действия:

  1. Откройте вашу внешнюю печатную форму в Конфигураторе через меню Файл — Открыть.
  2. Установите точку останова в модуле объекта внутри процедуры Печать или вспомогательных функций (например, в СформироватьПечатнуюФормуЗаказаКлиента).
  3. Запустите сеанс 1С:Предприятие.
  4. В режиме пользователя откройте этот же файл обработки через Файл — Открыть.
  5. Нажмите кнопку печати на вашей созданной отладочной форме.

Важное примечание: Если база работает в клиент-серверном режиме, убедитесь, что сервер 1С запущен с ключом -debug. В противном случае отладчик не остановится на серверном коде модуля объекта.

Особенности работы с внешними обработками

Рассмотрим ситуацию, когда процедура Печать обращается к методам других общих модулей. Если вы используете конфигурацию Управление Торговлей, часто встречается обращение к ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов). Это сделано для того, чтобы одна печатная форма могла обрабатывать разные типы документов (например, и Заказ клиента, и Заказ поставщику).

Если при отладке вы получаете ошибку в этой функции, проверьте, что в МассивОбъектов переданы ссылки правильного типа. В коде автора использовалась следующая конструкция:


СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЗаказКлиента") Тогда
    // ...
КонецЕсли;

При отладке убедитесь, что имя макета (в данном примере "ЗаказКлиента") совпадает с тем именем, которое вы передали при инициализации коллекции в параметре УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ЗаказКлиента").

Рекомендации для профессиональной разработки

Для более продвинутой отладки рекомендуется проанализировать ситуацию, когда печатная форма требует дополнительные параметры (например, «Печатать артикулы» или «Выводить подписи»). Эти данные передаются в пятом параметре — ПараметрыПечати.

Если ваш код внутри модуля объекта обращается к полям этого параметра, например: Если ПараметрыПечати.ВыводитьЦену Тогда ..., то простая передача Неопределено вызовет ошибку. В этом случае в форме отладки нужно прописать:


ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("ВыводитьЦену", Истина);
// ... передаем в процедуру
ОбъектОбработки.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода, ПараметрыПечати);

Использование такого подхода позволит вам полностью имитировать работу системы и гарантировать, что при регистрации обработки в справочнике «Дополнительные отчеты и обработки» она будет работать корректно.

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

← На главную