Какой бы макет Вы не разработали - надо обязательно добавить к имени макета один из вариантов буквосочетаний:
-
ПФ_MXL (соответствует макету табличного документа);
-
ПФ_DOC (соответствует макету Microsoft Word до 2007);
-
ПФ_DOCX (соответствует макету Microsoft Word );
-
ПФ_ODT (соответствует макету OpenOffice.org Writer).
Методика подготовки объекта для работы с печатными формами
1. Подготовить форму объекта:
1.1 В обработчике «ПриСозданииНаСервере» должен вызывался стандартный алгоритм формирования подменю формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
…
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
…
КонецПроцедуры
1.2 Должен присутствовать блок процедур, обслуживающих создаваемые команды (именно с таким текстом):
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
1.3 В обработчике «ПриЧтенииНаСервере» должен вызывался стандартный алгоритм обновления подменю формы
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
…
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
…
КонецПроцедуры
1.4 В обработчике «ПриОткрытии» должен вызывался стандартный алгоритм обновления подменю формы
&НаКлиенте
Процедура ПриОткрытии(Отказ)
…
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
…
КонецПроцедуры
(Как Вы верно уже догадались, программный код большинства вышеперечисленных пунктов «дешевле» скопировать у какой-нибудь уже подготовленной в типовой конфигурации формы объекта. Ибо – все стандартно.)
1.5 Желательно создать реквизит формы «ПараметрыПодключаемыхКоманд» с типом – «Произвольный» (наличие такого готового реквизита несколько ускоряет открытие формы).
1.6 Желательно добавить в командную панель подменю «ПодменюПечать» с установленными свойствами, как на картинке ниже:
2. Подготовить форму списка:
2.1 В обработчике «ПриСозданииНаСервере» должен вызывался стандартный алгоритм формирования подменю формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
…
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
…
КонецПроцедуры
2.2 Должен присутствовать блок процедур, обслуживающих создаваемые команды (именно с таким текстом):
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
2.3 В обработчике «СписокПриАктивизацииСтроки» должен вызывался стандартный алгоритм обновления подменю формы
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
…
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
…
КонецПроцедуры
(Как Вы верно уже догадались, программный код большинства вышеперечисленных пунктов «дешевле» скопировать у какой-нибудь уже подготовленной в типовой конфигурации формы списка. Ибо – все стандартно.)
2.4 В форме списка обязательно проверить наличие флажка "Использовать всегда" у поля "Ссылка" динамического списка:
2.5 Желательно создать реквизит формы «ПараметрыПодключаемыхКоманд» с типом – «Произвольный» (наличие такого готового реквизита несколько ускоряет открытие формы):
2.6 Желательно добавить в командную панель подменю «ПодменюПечать» с установленными свойствами, как на картинке ниже:
3. В модуле менеджера объекта
3.1 Должна быть заготовка под процедуру «ДобавитьКомандыПечати»
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КонецПроцедуры
3.2 Должна быть заготовка под процедуру «Печать»
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
КонецПроцедуры
4. В общем модуле «УправлениеПечатьюПереопределяемый» в процедуре «ПриОпределенииОбъектовСКомандамиПечати» обязательно следует проверить принадлежность вашего объекта метаданных к обслуживаемому списку объектов. При необходимости - добавить:
Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
…
СписокОбъектов.Добавить(Справочники._ДемоФизическиеЛица);
СписокОбъектов.Добавить(Документы._ДемоСчетНаОплатуПокупателю);
…
КонецПроцедуры
Полное описание всех возможных параметров команды печати
В любой конфигурации достаточно найти общий модуль "УправлениеПечатью", а в нем комментарий перед функцией "СоздатьКоллекциюКомандПечати".
Методика подключения новой внутренней печатной формы
1) Надо собрать конструктором печатной формы новую печатную форму;
2)Удалить добавившуюся команду печати документа.
3) Добавить префикс ПФ_MXL_ к имени сформированного конструктором макета.
Далее точками минимального воздействия для подключения этой печатной формы являются следующие действия в модуле менеджера документа:
4) Добавить в процедуре «ДобавитьКомандыПечати» модуля менеджера документа фрагмент, посвященный программному созданию нашей команды на печать. Обязательными при этом являются указание Идентификатора и Представления команды.
5) Добавить в процедуре «Печать» модуля менеджера документа фрагмент, посвященный формированию табличного документа для нашей печатной формы и вызову процедуры «ВывестиТабличныйДокументВКоллекцию» с передачей ей этого табличного документа;
Внимание! Идентификатор нашей печатной формы из п. 4 – должен в процедуре «Печать» быть применен дважды без всяких искажений, буква в букву, символ в символ. Один лишний пробел – и тут же получите ошибку!
6) Процедуру, формирующую наш табличный документ, превратить в функцию и точечно поправить в ней (по аналогии с подобными функциями):
-
параметры в заголовке;
-
объявление табличного документа и установка уникального значения КлючПараметровПечати табличного документа;
-
получение макета по имени с префиксом через функцию УправлениеПечатью.ПолучитьМакет();
-
в выходной таблице запроса обязательно должно быть поле Ссылка (содержащее ссылку на печатаемый документ)
-
определение номера строки начала табличного документа;
-
задание областей печати;
-
возврат табличного документа.
Методика подключения новой внутренней печатной формы с быстрой печатью
1) Разработать внутреннюю печатную форму по методике подключения новых внутренних печатных форм.
2) В модуле менеджера нашего документа, в процедуре "ДобавитьКомандыПечати", в абзаце, посвященном нашей печатной форме добавить строку:
КомандаПечати.СразуНаПринтер = Истина;
Методика подключения печати комплектом
1) Разработка исходных внутренних печатных форм должна вестись по методике подключения новых внутренних печатных форм.
2) В модуле менеджера нашего документа, в процедуре "ДобавитьКомандыПечати", в абзаце, посвященном нашей печатной форме - элемент Идентификатор должен содержать через запятую, но без пробелов, все Идентификаторы печатных форм комплекта.
3) Количество экземпляров конкретной печатной формы заказывается указанием нужного количества идентификаторов этой печатной формы через запятую в вышеприведенном параметре.
4) Процедура "Печать" в модуле менеджера документа должна содержать абзацы обработки каждого из вышеприведенных идентификаторов.
5) Если необходимо запретить изменение количества копий при печати комплекта - надо задействовать элемент параметров печати с ключом "ФиксированныйКомплект".
6) Если необходимо при закрытии печатной формы каждый раз сбрасывать измененное пользователем количество копий документов комплекта - надо задействовать элемент параметров печати с ключом "ПереопределитьПользовательскиеНастройкиКоличества".
Методика переопределения хранения механизма печатной формы в отдельной обработке
В случае, если Вы хотите разработать универсальную печатную форму, которую можно вызывать из разных документов, то лучше всего:
1) Разработать внутреннюю печатную форму по методике подключения новых внутренних печатных форм для одного из документов.
2) Перенести из процедуры "Печать" модуля менеджера документа в процедуру "Печать" модуля менеджера обработки печати фрагмент, посвященный новой печатной форме.
3) Переопределить вызов вспомогательного функционала для перенесенного фрагмента на вызов из модулей менеджеров соответствующих документов, если оставляете его там. Или перенести вспомогательный функционал в модуль менеджера обработки, но тогда запросы должны стать универсальными для всех видов, используемых в печатной форме документов (т.е. например, должны строиться объединением данных разных видов документов).
4) В процедурах «ДобавитьКомандыПечати» модулей менеджеров документов для переопределения на модуль менеджера обработки использовать параметр "МенеджерПечати" или же писать идентификатор через обращение к обработке (последний вариант важен для печати комплектом).
Например:
… КомандаПечати.МенеджерПечати = "Обработка._ДемоПечатнаяФорма";…
Или
…КомандаПечати.Идентификатор = "СчетЗаказ,Обработка._ДемоПечатнаяФорма.ГарантийноеПисьмо,СчетЗаказ2";…