Почему отсутствует кнопка «Печать» при подключении внешней печатной формы к документу «Заказ на производство»?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

При разработке и внедрении дополнительных печатных форм в конфигурациях уровня ERP, Комплексная автоматизация или Управление Торговлей мы привыкли к стандартному механизму БСП (Библиотеки Стандартных Подсистем). Мы создаем обработку, описываем функцию СведенияОВнешнейОбработке, подключаем ее через справочник «Дополнительные отчеты и обработки», и кнопка «Печать» автоматически появляется в документе.

Однако, столкнувшись с документом «Заказ на производство», многие специалисты попадают в тупик: внешняя форма подключена корректно, ошибок нет, галочки использования стоят, но сама кнопка печати в командной панели формы документа просто не появляется. Разберем подробно, почему это происходит и как мы можем решить эту задачу, не снимая конфигурацию с поддержки.

Анализ причины проблемы

Чтобы понять суть проблемы, нам необходимо заглянуть «под капот» типовой конфигурации. Механизм подключения внешних печатных форм работает через подсистему «Печать». Чтобы форма документа «узнала», что у нее есть доступные команды печати, в модуле менеджера этого документа должна присутствовать экспортная процедура ДобавитьКомандыПечати.

Как выяснилось в ходе анализа (и это подтверждается сообщением №8 из обсуждения), в некоторых релизах конфигураций (в частности ERP 2.x и КА 2.x) разработчики 1С в модуле менеджера документа ЗаказНаПроизводство либо не реализовали этот вызов, либо реализовали его нестандартно, ограничив список доступных команд только встроенными макетами (например, Маршрутная карта или Диаграмма графика).

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

Решение №1: Использование механизма Расширений (Рекомендуемое)

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

Разберем процесс по шагам:

  1. Создадим новое расширение конфигурации. Обязательно снимем флажки «Безопасный режим», чтобы код мог выполняться корректно.
  2. Добавим в расширение документ ЗаказНаПроизводство (только сам объект, формы переносить не обязательно).
  3. Перейдем в модуль менеджера этого документа в расширении.
  4. Нам необходимо «перехватить» процедуру формирования команд печати. Если в типовой конфигурации процедура ДобавитьКомандыПечати существует, но не вызывает общие механизмы, мы используем аннотацию &После. Если её нет вовсе — создаем её.

Примерный код, который мы должны добавить в модуль менеджера расширения для интеграции с БСП:


&После("ДобавитьКомандыПечати")
Процедура Расш_ДобавитьКомандыПечати(КомандыПечати)
	
	// Подключаем стандартный механизм поиска внешних печатных форм
	// Это заставит систему опросить справочник доп. отчетов и обработок
	// и добавить найденные команды в коллекцию КомандыПечати
	Попытка
		УправлениеПечатью.ДобавитьКомандыПечати(ЭтотОбъект, КомандыПечати);
	Исключение
		// Обработка исключения, если модуль УправлениеПечатью недоступен
	КонецПопытки;
	
КонецПроцедуры

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

Решение №2: Регистрация обработки как «Дополнительный отчет»

Если по каким-то причинам использование расширений запрещено (политика компании, старая платформа 8.3.10 и ниже и т.д.), существует проверенный «дедовский» метод. Мы можем обмануть систему, зарегистрировав нашу печатную форму не как ПечатнаяФорма, а как ДополнительныйОтчет.

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

Для реализации этого метода нам потребуется внести изменения в модуль объекта самой внешней обработки:

1. В функции СведенияОВнешнейОбработке изменим вид обработки.


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    // Меняем вид с "ПечатнаяФорма" на "ДополнительныйОтчет"
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
    
    ПараметрыРегистрации.Назначение.Добавить("Документ.ЗаказНаПроизводство");
    
    // ... остальной код заполнения команд
    
    Возврат ПараметрыРегистрации;

КонецФункции

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

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


// Пример получения объекта, если мы используем форму обработки
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.Свойство("ОбъектыНазначения") И Параметры.ОбъектыНазначения.Количество() > 0 Тогда
        // Получаем ссылку на заказ
        СсылкаНаЗаказ = Параметры.ОбъектыНазначения[0]; 
    КонецЕсли;

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

Нюансы с функциональными опциями

Также стоит упомянуть важный момент, затронутый в обсуждении. Иногда видимость команд печати зависит от функциональных опций. В последних версиях ERP логика производства может быть упрощенной (без графиков) или сложной.

Проверим настройки:

  1. Зайдем в раздел НСИ и Администрирование.
  2. Перейдем в раздел Печатные формы, отчеты и обработки.
  3. Убедимся, что установлена галочка Дополнительные отчеты и обработки.

Однако, как показывает практика с документом ЗаказНаПроизводство, проблема чаще всего кроется именно в отсутствии программного вызова механизмов БСП в модуле менеджера, поэтому Решение №1 через расширение является наиболее технологичным и правильным в долгосрочной перспективе.

← На главную