[8.2] Печатная форма любого документа с логотипом


Регистрируясь как обычная внешняя печатная форма, данная обработка налепит на любой типовой документ и даже справочник логотип Вашей любимой компании.

Вступление

Клиент захотел сделать корпоративные документы более корпоративными? Чтобы везде логотипы и каждый акт/счет/прайс/что угодно отражал индивидуальность компании и повышал узнаваемость, но конкретный список документов и/или окончательный вид логотипа еще не известен и/или в дальнейшем может изменяться и не раз? Вы пришли по адресу.

Прежде чем я продолжу, оговорим ограничения:

  • Речь идет о типовом документе типовой конфигурации 8.2(БП2, УТ10, ЗУП2.5, КА1.1). Для самописных конфигураций должно заработать если работают обычные внешние печатные формы, но ничего не гарантирую.
  • На компьютере должен быть установлен Excel. Нашей маленькой обработке потребуется его помощь в своем нелегком деле. Обойтись без помощи Экселя скорее всего было бы возможно, но это и вполовину не так просто как могло бы показаться(соображения на эту тему буду рад видеть в комментариях).
  • Самое неудобное ограничение, но без него обойтись не удалось: печатная форма, на которую мы собрались клеить логотип, должна быть либо внешней, либо замененной на внешнюю, либо создавать табличный документ экспортной функцией в модуле объекта(последнее условие как правило реализуется написанием одного единственного слова "Экспорт" в нужном месте, но если конфигурация на поддержке то у нас проблема).

Краткая инструкция по установке(для одинэсников):

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

Подробная инструкция по установке(для начинающих):

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

Параметры:

  • ИмяФормы(*) — название формы, как на форме выбора печати(можно прямо оттуда копировать). Работает только для внешних печатных форм и встроенных форм, заменяемых внешними.
  • ФункцияПечати(*) — экспортная функция из модуля печатаемого объекта. Если у функции есть параметры, их нужно указать — например, ПечатьСчетаЗаказа("Счет")
  • АдресЛоготипа(необязательный) — полный путь к логотипу, включая имя файла(например, C:Логотипылого.jpg). Если параметр не задан то будет использоваться логотип из макета обработки(можете разумеется сохранить в макете свой логотип).
  • Расположение(необязательный) — горизонтальное расположение логотипа на форме. Возможные значения(тип-Строка): Справа и ПоЦентру. По умолчанию логотип располагается слева.
  • РисункиБезГраниц(необязательный) — если содержит значение Истина(булево), то у всех рисунков стирается граница. По умолчанию граница стирается только у логотипа.

(*) — обязательно должен быть задан один из двух параметров: либо ИмяФормы, либо ФункцияПечати. Если заданы оба, то ПроцедураПечати игнорируется.

FAQ:

Q: Можно поподробнее про ИмяФормы? Где его брать? И почему должна быть именно внешняя форма?
А: Открыв документ, нажимаете в нем кнопку "Печать" — из появившегося списка и переписываете имя в значение параметра. А внешняя форма потому что процедура печати встроенных форм не возвращает объект типа ТабличныйДокумент так чтобы его можно было модифицировать, т.е. экспортной функцией. Для встроенных форм надо использовать параметр ФункцияПечати, и для этого над объектом скорее всего придется немного поколдовать в конфигураторе.

Q: Как найти в конфигураторе процедуру, которую надо сделать экспортной?
А: Могут быть разные варианты, но как правило такой: открываете модуль объекта нужного документа, находите в нем процедуру Печать(), и ищете в ней конструкцию вида

 Если ИмяМакета = "Заказ" Тогда
ТабДокумент = ПечатьСчетаЗаказа(ИмяМакета);
ИначеЕсли ИмяМакета = "ЗаказКорректировка" тогда
ТабДокумент = ПечатьСчетаЗаказаКорректировки(ИмяМакета);
ИначеЕсли ...

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

Q: Почему ФункцияПечати должна вызвать функцию именно в модуле объекта? Что если мне нужно получить табличный документ из процедуры общего модуля?
А: Можно дать возможность сделать вызов функции общего модуля, но я не стал так делать из соображений безопасности. В принципе достаточно поправить одну строчку кода в данной обработке чтобы получение таб. документов из общего модуля было возможным, и Вы ее скорее всего быстро найдете(кода в обработке не то чтобы много если честно), но последствия на Вашей совести.
Кстати, если данные слова читает кто из опытных знатоков 1С — буду рад если проконсультируете на предмет как "обезопасить" процедуру Выполнить() и/или скинете ссылку на соответствующую статью.

Спасибо за внимание!

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *