Вступление
Клиент захотел сделать корпоративные документы более корпоративными? Чтобы везде логотипы и каждый акт/счет/прайс/что угодно отражал индивидуальность компании и повышал узнаваемость, но конкретный список документов и/или окончательный вид логотипа еще не известен и/или в дальнейшем может изменяться и не раз? Вы пришли по адресу.
Прежде чем я продолжу, оговорим ограничения:
- Речь идет о типовом документе типовой конфигурации 8.2(БП2, УТ10, ЗУП2.5, КА1.1). Для самописных конфигураций должно заработать если работают обычные внешние печатные формы, но ничего не гарантирую.
- На компьютере должен быть установлен Excel. Нашей маленькой обработке потребуется его помощь в своем нелегком деле. Обойтись без помощи Экселя скорее всего было бы возможно, но это и вполовину не так просто как могло бы показаться(соображения на эту тему буду рад видеть в комментариях).
- Самое неудобное ограничение, но без него обойтись не удалось: печатная форма, на которую мы собрались клеить логотип, должна быть либо внешней, либо замененной на внешнюю, либо создавать табличный документ экспортной функцией в модуле объекта(последнее условие как правило реализуется написанием одного единственного слова "Экспорт" в нужном месте, но если конфигурация на поддержке то у нас проблема).
Краткая инструкция по установке(для одинэсников):
- Устанавливаем как обычную печатную форму
- Задаем дополнительные параметры(ИмяФормы или ФункцияПечати обязательно, остальные по необходимости. Подробнее о параметрах см. ниже в разделе "Параметры")
Подробная инструкция по установке(для начинающих):
- Заходим в 1С
- Нажимаем "Сервис"->"Внешние печатные формы и обработки"->"Внешние печатные формы"
В разных конфигурациях названия кнопок могут различаться, например в Бухгалтерии Предприятия это будет "Сервис"->"Дополнительныее отчеты и обработки"->"Дополнительные внешние печатные формы".
Если с ходу не нашли — не сдавайтесь. Ищите по шаблону "Сервис"->"что-то что-то обработки"->"что-то что-то печатные формы" - В открывшемся окне нажимаем "Добавить(Insert)"(зеленый кружок с белым плюсом)
- В открывшемся окне нажимаем "Заменить файл внешней обработки"(1 на рисунке)
- Выбираем файл с данной обработкой
- При необходимости меняем наименование(оно будет отображаться при выборе формы печати в документе)
- Добавляем строки в таблицу "Принадлежность печатной формы"(2 на рисунке). В каждой строке указываем объект(документ или справочник) и параметры обработки(3 на рисунке. В параметры надо добавить(4 на рисунке) обязательно параметр с именем ИмяФормы или ФункцияПечати. Остальные — по необходимости. Список параметров см. ниже)
- Нажимаем "ОК" и данная форма будет отображаться в списке выбора формы печати для нужных нам документов и справочников.
Параметры:
- ИмяФормы(*) — название формы, как на форме выбора печати(можно прямо оттуда копировать). Работает только для внешних печатных форм и встроенных форм, заменяемых внешними.
- ФункцияПечати(*) — экспортная функция из модуля печатаемого объекта. Если у функции есть параметры, их нужно указать — например, ПечатьСчетаЗаказа("Счет")
- АдресЛоготипа(необязательный) — полный путь к логотипу, включая имя файла(например, C:Логотипылого.jpg). Если параметр не задан то будет использоваться логотип из макета обработки(можете разумеется сохранить в макете свой логотип).
- Расположение(необязательный) — горизонтальное расположение логотипа на форме. Возможные значения(тип-Строка): Справа и ПоЦентру. По умолчанию логотип располагается слева.
- РисункиБезГраниц(необязательный) — если содержит значение Истина(булево), то у всех рисунков стирается граница. По умолчанию граница стирается только у логотипа.
(*) — обязательно должен быть задан один из двух параметров: либо ИмяФормы, либо ФункцияПечати. Если заданы оба, то ПроцедураПечати игнорируется.
FAQ:
Q: Можно поподробнее про ИмяФормы? Где его брать? И почему должна быть именно внешняя форма?
А: Открыв документ, нажимаете в нем кнопку "Печать" — из появившегося списка и переписываете имя в значение параметра. А внешняя форма потому что процедура печати встроенных форм не возвращает объект типа ТабличныйДокумент так чтобы его можно было модифицировать, т.е. экспортной функцией. Для встроенных форм надо использовать параметр ФункцияПечати, и для этого над объектом скорее всего придется немного поколдовать в конфигураторе.
Q: Как найти в конфигураторе процедуру, которую надо сделать экспортной?
А: Могут быть разные варианты, но как правило такой: открываете модуль объекта нужного документа, находите в нем процедуру Печать(), и ищете в ней конструкцию вида
Если ИмяМакета = "Заказ" Тогда
ТабДокумент = ПечатьСчетаЗаказа(ИмяМакета);
ИначеЕсли ИмяМакета = "ЗаказКорректировка" тогда
ТабДокумент = ПечатьСчетаЗаказаКорректировки(ИмяМакета);
ИначеЕсли ...
Вот та функция, результат которой присваивается переменной ТабДокумент, и должна стать экспортной, и если у нее есть параметры, не забудьте передать их значение, простите за тавтологию, в значении параметра ФункцияПечати.
Q: Почему ФункцияПечати должна вызвать функцию именно в модуле объекта? Что если мне нужно получить табличный документ из процедуры общего модуля?
А: Можно дать возможность сделать вызов функции общего модуля, но я не стал так делать из соображений безопасности. В принципе достаточно поправить одну строчку кода в данной обработке чтобы получение таб. документов из общего модуля было возможным, и Вы ее скорее всего быстро найдете(кода в обработке не то чтобы много если честно), но последствия на Вашей совести.
Кстати, если данные слова читает кто из опытных знатоков 1С — буду рад если проконсультируете на предмет как "обезопасить" процедуру Выполнить() и/или скинете ссылку на соответствующую статью.
Спасибо за внимание!