Печать по шаблону Word


Внешняя печатная форма по шаблону Word. Можно быстро адаптировать под любой документ, справочник. Простая и наглядная форма подготовки шаблонов. Имеются две адаптации: для ЗУП и УТ

Описание для печати документа «Заказ покупателя» для конфигурации Управление Торговлей 10,3.

(описание для печати кадровых приказов в ЗУП в принципе такое же)

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

Назначение элементов в форме  «Настройка Шаблона»

 

1)Колонка: «Имя Тэга«. В этой колонке хранится имя тэга по которому будут находиться данные для подстановки в результирующий  документ Word из шаблона

2) Колонка: «Путь к данным«. В этой колонке указан путь по которому программа берет исходные данные. Доступны пути к следующим данным:

Документ _ -реквизиты документа,

Организация_ -реквизиты спр. Организации

Контрагент_ — реквизиты спр. Контрагенты,

ТЧ_ — реквизиты табличных частей документа

3) Колонка: «Доп. параметр«. В этой колонке доступны данные из полей ввода основной формы и соответствий: Организация, Контрагент, заполненных в процедуре «ЗаполнитьДопПараметрыФормы». (Примечание: в качестве Руководителя контрагента ищется «Контактное Лицо Контрагента», имеющее «Роль контактного лица» «Руководитель»)

4) Колонка: «Формула«. В этой колонке можно использовать произвольные функции на языке 1С, но есть функции, которые прописаны в модуле обработки и добавлены в список выбора. Знак # используется, если в формулу нужно подставить значение из колонки «Путь к данным» или «Доп. параметр».

5) Колонка: «Значение тэга«: Показывает результат вычисления (для отладки).

Порядок создания шаблона.

В Word создается шаблон  (файлы с расширением *.dot, *.dotx) с произвольным текстом. Записывается и закрывается. Затем этот шаблон нужно выбрать в форме «Настройка Шаблона» и нажать кнопку «Открыть шаблон» (откроется MS Word). Далее в открывшемся окне MS Word нужно спозиционироваться в нужном месте, перейти в обработку 1С, выделить необходимый тэг и нажать кн. «Вставить ТЭГ в шаблон» и т.д. В результате этого в шаблоне MS Word будут вставлены поля с текстом «[Имя тэга]».

В качестве имен тэгов можно использовать предопределенные значения:

БлокТекста_Начало_Имя, БлокТекста_Конец_Имя. Блок текста между этими тэгами будет выведен в результирующий документ, если Результат вычисления выражения в поле «Формула» будет: Да (Истина) или пустое значение.

ТЧ_ИмяТабличнойЧасти_Начало,ТЧ_ИмяТабличнойЧасти_Конец. Блок текста между этими тэгами будет выведен столько раз, сколько строк в табличной части документа, причем, если этот блок находится в таблице Word то вывод будет в виде таблицы, а если он находится в тексте, то вывод будет в виде текста.

ТЧ_ИмяТабличнойЧасти_Условие. Этот тэг можно вставлять только сразу после ТЧ_ИмяТабличнойЧасти_Начало. По результату вычисления поля «Формула» принимается решение выводить или нет очередную строку табличной части документа.

ТЧ_ИмяТабличнойЧасти_НПП: Номер по порядку при выводе табличной части.

ОСОБЕННОСТИ ПРОГРАММЫ.

На Основную форму обработки в Конфигураторе можно добавлять произвольное количество дополнительных «Полей ввода» (если для печати не хватает реквизитов, из базы данных) и, при необходимости, обеспечить их заполнение по умолчанию в процедуре основной формы «ЗаполнитьДопПараметрыФормы()«. Значения этих полей будут доступны в Форме «Настройка Шаблона» в колонке «Доп. параметр» как ПараметрФормы.ИмяПоляВвода.

В процедуре модуля «ЗаполнитьДополнительныеСведения()» можно заполнять соответствия: «Организация» и «Контрагент» (в случае ЗУП «Сотрудник») произвольными значениями которые могут понадобиться при печати (Адреса, Телефоны, Руководители и пр.). Значения этих соответствий будут доступны в Форме «Настройка Шаблона» в колонке «Доп. параметр» как Организация.Ключ, Контрагент.Ключ (Сотрудник.Ключ) 

 

Таблица Тэгов по-умолчанию загружается из макета, но есть возможность сохранять ее в справочнике «ВнешниеОбработки» (если обработка зарегистрирована как Внешняя печатная форма и имеет тоже наименование, что и синоним обработки (в этой обработке «Печать по шаблону Word») и есть права на редактирование справочника ). При изменении Таблицы Тэгов я все-таки помещаю ее в макет.

 

Шаблоны Word (файлы с расширением *.dot, *.dotx) по умолчанию ищутся в каталоге, указанном в константе «КаталогДополнительнойИнформации«, но могут храниться в любой папке. Перед печатью необходимо выбрать необходимый шаблон Word.

 

Компонента склонения.

Не нашел способа гарантированного подключения компоненты склонения в УТ (в каждом отдельном случае необходимы настройки программы). Компонента подключается только если сохранена в общем макете конфигурации или ранее зарегистрирована в системном реестре. Но, по правде сказать использование компоненты лишняя головная боль. Особенно если пытаешься просклонять должности, подразделения и некоторые ФИО (кроме Иванов, Сидоров …), т.е. нужно постоянно проверять.

15 Comments

  1. seermak

    Сделал по образу и подобию. Понравилась идея размещения тэгов в шаблоне (еще бы в обработку они сами копировались бы)По склонению: библиотека без проблем подключается из общего макета, если не смогли подключить дублируется функцией из общего модуля. Настройки соответствия шаблона и данных базы сохраняю в хранилище настроек с именем шаблона — удобно — загрузил макет, настройки встали автоматом, выбрал объект и печатаешь сразу, надо что-то добавить в шаблоне — изменения настроек сохраняются автоматом. Вместо дополнительных путей добавил формы развертывания дерева объекта. Если данные сложные — формирую запрос и с ним работаю. Спасибо за пример и идею)))

    Reply
  2. Prelude

    seermak, не могли поделиться своей обработкой допиленной обработкой.

    Reply
  3. KVadR

    Доброго дня seermak! Приятно за понимание, что я попробовал вложить в обработку некоторые идеи, позволяющие упростить формирование печ. форм в Word. Теперь по порядку:

    1)По компоненте склонения. Вообще-то в описании я написал и в тексте программы это видно:

    с ЗУП проблемм нет — она там встроенная (лежит в общем макете)(УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной(«глКомпонентаСклоненияФИО»)…..),

    в УТ+СРМ (для которой мне пришлось дорабатывать ЗУПовский вариант) она тоже встроенная,

    а вот в УТ ее нет и у Вас появляется выбор. Затаскивать ее в общий макет и регистрировать с Админскими правами на комп., или просто регистрировать в Windows (NameDecl.dll) соответственно в программе ПодключитьВнешнююКомпоненту(«ОбщийМакет.КомпонентаСклоненияФИО», «Decl», ТипВнешнейКомпоненты.Native) или ПодключитьВнешнююКомпоненту(«AddIn.NameDecl»)

    По поводу самой компоненты: я настроил склонения типа Заместителю Генерального директора и некоторые другие, но список должностей бесконечен. Для примера : Оффис-менеджер, Консультант-референт и мн. др. Тут я не притендую на создание своей компоненты по склонению должностей (По ФИО и то дает не всегда верные результаты).

    2)Не понял пожелание (еще бы в обработку они сами копировались бы) — Откуда?. Тэги в шаблоне представлены в виде полей с б.менее удобочитаемыми наименованиями (для меня это было важно, можно ведь в них запихивать и куски текста на языке 1С), а таблица соответствия Имен Тэгов и путей получения их значений в макете обработки. По поводу где хранить эту таблицу можно предложить много способов: В самой обработке, в настройках, в справочнике, в регистре сведений (кстати мне это предстоит делать т.к. количество шаблонов в одной из программ уже давно перевалило за 100 и в одних случаях изменение вычисления одного Тэга должно отобразиться во всех шаблонах, а в других нет), кстати эту таблицу можно хранить и в самом шаблоне Word (нет проблем с клонированием шаблонов) — наверное это зависит от конкр. базы.

    3)Не понял чем ваш способ выбора путей к данным отличается от моего.

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

    Reply
  4. seermak

    (2) п/п 2 был шуткой п/п 3 — почти ничем — только лишнее поле всегда пугает… да и еще я сделал свою на управляемых формах (это для того, чтобы люди попусту не обращались). А, вообще, я просто хотел сказать спасибо. и показать что пу меня получилось из вашей идеи и более ничего))

    Reply
  5. dryms

    Идея хорошая, у нас стоит наподобие в подсистеме «Учет договоров». смысл в том, что пользователь может сам создавать печатные формы в Word

    Нужно только в Конфигураторе изменить тип реквизита этой обработки «СсылкаНаОбъект» на нужный тип или добавить его в состав типов (в данный момент используется для печати «Заказ покупателя»).

    Это можно реализовать в пользовательском режиме.

    Reply
  6. fr.myha

    Спасибо большое!

    Reply
  7. Shuffler

    Добрый день! При использовании Вашего примера шаблона по кнопке «печать» возникает такая ошибка:

    {ВнешняяОбработка.ПечатьПоШаблонуWord.МодульОбъекта(609)}: Ошибка при вызове метода контекста (Add)

    ActiveDocument = Word.Documents.Add(ФайлШаблона);

    по причине:

    Неизвестная ошибка

    Стоит Word 2013.

    Reply
  8. Shuffler

    Ошибка пропала после того, как я пересохранила приложенный шаблон в формат .dot

    Reply
  9. lelusha

    Большой плюс что печатная форма адаптируема, можно сказать универсальная. Автору спасибо!

    Reply
  10. Gingema

    спасибо, здорово

    Reply
  11. astarta

    Здравствуйте!

    Спасибо за обработку, очень удобная и несложная.

    Но недавно столкнулась с такой проблемой: необходимо было воспользоваться предопределенными тэгами «ТЧ_ИмяТабличнойЧасти_Начало,ТЧ_ИмяТабличнойЧасти_Конец» дважды в текстовом документе, ссылаясь на одну и ту же ТЧ. В первом случае цикл отработал безупречно, а во втором случае выдает ошибку:

    {ВнешняяОбработка.ПечатьПоШаблонуWord.МодульОбъекта(507)}: Ошибка при получении значения атрибута контекста (Range)

    Если Table.Range.Start<НачалоСтроки И Table.Range.End>КонецСтроки Тогда

    по причине:

    Произошла исключительная ситуация (Microsoft Word): Объект был удален.

    И не знаю, как избавиться от этой ошибки. Если можно, подскажите, пожалуйста, что нужно сделать.

    Заранее спасибо!

    Reply
  12. mariya.y

    Добрый день. Вот такую ошибку выдает при попытке напечатать(

    {ВнешняяОбработка.ПечатьПоШаблонуWord.МодульОбъекта(249)}: Метод объекта не обнаружен (РазложитьСтрокуВМассивПодстрок)

    мПоляАдреса=ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Организация.Адрес);

    Удалила эту строчку…. теперь печать получется, но там где склонение ОШИБКИ

    ОШИБКА Тэга:ОрганизацияДолжностьРуководителяРодительный Выражение:Родительный(Организация.ДолжностьРуководителя){ВнешняяОбработка.ПечатьПоШаблонуWord.МодульОбъекта(103)}: Метод объекта не обнаружен (РазложитьСтрокуВМассивПодстрок) ОШИБКА Тэга:ОрганизацияРуководительРодительный Выражение:Родительный(Организация.Руководитель){ВнешняяОбработка.ПечатьПоШаблонуWord.МодульОбъекта(103)}: Метод объекта не обнаружен (РазложитьСтрокуВМассивПодстрок),

    ОШИБКА Тэга:СотрудникИОФ Выражение:ИОФ(ТекущийСотрудник.Физлицо){ВнешняяОбработка.ПечатьПоШаблонуWord.МодульОбъекта(15)}: Метод объекта не обнаружен (ИнициалыФизЛицаФамилия)

    ОШИБКА Тэга:ОрганизацияДолжностьРуководителяДательный Выражение:Дательный(Организация.ДолжностьРуководителя){ВнешняяОбработка.ПечатьПоШаблонуWord.МодульОбъекта(103)}: Метод объекта не обнаружен (РазложитьСтрокуВМассивПодстрок);

    Что с этим делать??

    Reply
  13. seermak

    (13)добавьте в общий модудь ОбщегоНазначения процедуру РазложитьСтрокуВМассивПодстрок(СтрокаДляРазложения); Эта процедура стандартная для всех конфигураций, только храниться может в разных модулях

    Reply
  14. mariya.y

    (14) seermak, А для блондинок крашеных можно поподробнее?? Буду благодарна

    И еще вопрос: А можно ли как то в тэги добавить Свойства которые находятся во вкладке «дополнительно» в карточке сотрудника?

    Reply
  15. mariya.y

    Неужели никто не может помочь 🙁 поделитесь секретом, я уже попробовала сделать, ничего не вышло( выдает ошибку и все, не склоняет в общем

    Reply

Leave a Comment

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