В работе программиста 1С, данный функционал требуется крайне редко, хотя благодаря нему можно решать довольно сложные задачи с динамическими и не постоянными печатными формами. При реализации данной задачи, работа по созданию шаблонов Word и расстановке закладок в шаблоне Word возлагается на пользователей 1C.
В данном примере будет показано, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных, пользователям программы 1С.
Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом:
Использование шаблонов Word в 1С
Использование шаблонов Word в 1С
Далее необходимо в файл шаблона для 1С, добавить текст и пару закладок. Закладка добавляется через меню «Вставка» — «Закладка». Нужно выделить текст закладки, скопировать его, открыть меню «Вставка — Закладка», вставить скопированный текст закладки и нажать «Добавить»:
Установка закладки, шаблон Word для 1С
Когда файл шаблона Word готов, создаем новую внешнею обработку в 1С, добавляем форму и в модуле формы вставляем следующий код:
&НаКлиенте Процедура ПриОткрытии(Отказ) ЗаполнитьШаблонВорд(); КонецПроцедуры &НаКлиенте Функция ЗаполнитьШаблонВорд() //Попытка создать COM объект Попытка ОбъектВорд = Новый COMОбъект("Word.Application"); Исключение Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат Неопределено; КонецПопытки; //Путь к шаблону ОбъектВорд.Documents.Add("C:UsersКонстантинDesktopШаблон.docx"); ШаблонВорд = ОбъектВорд.ActiveDocument; //Получаем все закладки из шаблона Для каждого ЗакладкаВорд Из ШаблонВорд.Bookmarks Цикл Сообщить(ЗакладкаВорд.Name); КонецЦикла; //Заменяем закладку1 на текст ШаблонВорд.Bookmarks("Закладка1").Select(); ШаблонВорд.Application.Selection.TypeText("Текст для закладки №1."); //Заменяем закладку2 на текст ШаблонВорд.Bookmarks("Закладка2").Select(); ШаблонВорд.Application.Selection.TypeText("Текст для закладки №2."); //Заменяем закладку3 на текущую дату ШаблонВорд.Bookmarks("Закладка3").Select(); ШаблонВорд.Application.Selection.TypeText(ТекущаяДата()); ОбъектВорд.Application.Visible = Истина; ОбъектВорд.Activate(); //Закрытие документа //ОбъектВорд.Application.Quit(); КонецФункции
В результат запуска внешней обработки 1С по формированию печатной формы на основе шаблона в виде файла Word, мы получим следующий результат:
Результат использования шаблонов Word в 1С
Информацию по методам COM объекта Word, а так же дополнительные данные можно узнать из MSDN.
Скачать файл обработки 1С и шаблона Word.
Дополнение к заметке Использование шаблонов Word в 1С
Выражаю благодарность, всем тем, кто комментирует запись, благодаря вам, материал дополняется новыми данными и будет полезен более широкому кругу посетителей.
1. А как поменять размер шрифта во вставляемом тексте?
Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:
//Заменяем закладку3 на текущую дату ШаблонВорд.Bookmarks("Закладка3").Select(); ШаблонВорд.Application.Selection.Font.Bold = 1; ШаблонВорд.Application.Selection.Font.Size = 20; ШаблонВорд.Application.Selection.TypeText(ТекущаяДата());
2. Картинки есть возможность выгружать в шаблон?
Да, конечно. Примеры для C# и VB описаны по ссылке: https://msdn.microsoft.com/ru-ru/library/ms178792.aspx, а для 1С код будет следующий:
// Вставка изображения ШаблонВорд.Bookmarks("Закладка3").Select(); ШаблонВорд.Application.Selection.InlineShapes.AddPicture("C:UsersКонстантинDesktoplogo_1c.png");
3. При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку : «Ошибка при вызове метода контекста (Add)» в чем может быть причина?
Может попробовать изменить путь на: «C:Шаблон.docx».
4. Подскажите пожалуйста еще почему при сохранении макета типа active document в файл word кодом:
ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); Макет = ОбработкаОбъект.ПолучитьМакет("ШаблонПисьмаПросрочка"); ИмяФайла = КаталогВременныхФайлов() + ""файл.doc"; Макет.Записать(ИмяФайла);
Я получаю вместо нормального документа вот такой http://prntscr.com/eshgjk
Предполагаю, что метод Записать(< ИмяФайла>, < ТипФайлаТаблицы>) по умолчанию, записывает файл в формате MXL. Попробуйте вторым параметром установить значение: ТипФайлаТабличногоДокумента.DOCX, более подробно описано в «Синтакс-помощнике».
5. У меня в документе есть ссылки на файлы которые расположены на сетевом диске. Как в шаблоне сделать гиперссылку на эти файлы?
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:
Sub Макрос1() ' ' Макрос1 Макрос ' ' Selection.MoveLeft Unit:=wdCharacter, Count:=15, Extend:=wdExtend ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _ "C:UsersКонстантинDesktopТест.txt", SubAddress:="", ScreenTip:="", _ TextToDisplay:="ТестоваяСсылка" End Sub
Описание метода добавления в MSDN: https://msdn.microsoft.com/en-us/vba/word-vba/articles/hyperlinks-add-method-word
Соответственно код для 1С следующий:
Функция ЗаполнитьШаблонВорд() //Попытка создать COM объект Попытка ОбъектВорд = Новый COMОбъект("Word.Application"); Исключение Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат Неопределено; КонецПопытки; //Путь к шаблону ОбъектВорд.Documents.Add("C:Usersk.blaginDesktopШаблон.docx"); ШаблонВорд = ОбъектВорд.ActiveDocument; //Получаем все ссылки из шаблона Для каждого ЗакладкаВорд Из ШаблонВорд.Hyperlinks Цикл Сообщить(ЗакладкаВорд.Name); КонецЦикла; //Меняем адрес уже существующей ссылки ШаблонВорд.Hyperlinks("Logs.zip").Address = "C:Usersk.blaginDesktopMemory.zip"; //Заменяем закладку на ссылку ОбъектЗакладка = ШаблонВорд.Bookmarks("Закладка3"); ШаблонВорд.Hyperlinks.Add(ОбъектЗакладка.Range, "C:Usersk.blaginDesktopШаблон.docx", "", "Шаблон.docx", "C:Usersk.blaginDesktopШаблон.docx"); ОбъектВорд.Application.Visible = Истина; ОбъектВорд.Activate(); //Закрытие документа //ОбъектВорд.Application.Quit(); КонецФункции
Содержание:
1. Чек-лист разработки для создания внешней печатной формы
2. Пример разработки в 1С 8.3 Зарплата и управление персоналом
Довольно часто пользователи 1С просят разработать печатную формы в формате файлов MS Word. Это обусловлено широкими возможностями форматирования этого типа документа либо удобством его дальнейшего использования и хранения. В этой статье я хочу описать надежный и простой алгоритм создания внешних печатных форм, который я использую для решения поставленных задач. Дополнительным преимуществом этого алгоритма является то, что не требуется вносить изменения в основную конфигурацию. Т.е. используется для конфигураций, находящихся на поддержке без возможности изменения.
Весь принцип реализации строиться на использовании расширения. Причем, добавлять в расширение объекты основной конфигурации практически не нужно. Это очень удобно для дальнейших обновлений конфигураций с расширениями. Возникает вопрос: «А при чем здесь внешняя печатная форма, ведь это расширение?». Дело в том, что расширение легко устанавливается в программу в пользовательском режиме. А если еще ее объекты обособленны от объектов основной конфигурации, то, я думаю, можно называть ее внешней.
Пожалуй, единственным ограничением является наличие в конфигурации Библиотеки стандартных подсистем (далее – БСП). Данный метод «активно» использует механизмы этой библиотеки, поэтому БСП должно быть интегрировано в конфигурацию информационной базы (далее – ИБ). Но здесь особо беспокоиться не нужно, т.к. БСП сейчас присутствует практически во всех типовых конфигурациях.
Перед тем как продемонстрировать пример разработки, предлагаю ознакомиться с чек-листом и представить общую последовательность действий.
1. Чек-лист разработки для создания внешней печатной формы
1.Создать расширение в конфигурации ИБ
2.В расширении добавить новую обработку (далее Обработка)
3.Обработку включить в подсистему ПодключаемыеОтчетыИОбработки
4.Создать шаблон (документ в формате MS Word) с необходимым содержанием и установить параметры
5.В обработку добавить макет и загрузить в него файл шаблона, созданного в пункте 4
6.В обработку добавить форму и в модуле формы создать функцию:
· ВыполнитьКомандуПечати – экспортная, пользовательская
7.В модуле менеджера обработки создать 3 процедуры и 4 функции:
· ПриОпределенииНастроек — экспортная, предопределенная БСП
· ДобавитьКомандыПечати — экспортная, предопределенная БСП
· Печать — экспортная, предопределенная БСП
· ПолучитьДанныеПечати — экспортная, предопределенная БСП
· ПолучитьДанныеОбъекта – пользовательская
· ОбластиМакетаОфисногоДокумента – пользовательская
· НапечататьДокумент– пользовательская
2. Пример разработки в 1С 8.3 Зарплата и управление персоналом
Давайте рассмотрим этот процесс на примере создания печатной формы дополнительного соглашения к трудовому договору в формате файла MS Word. В качестве информационной базы я буду использовать конфигурацию 1C 8.3 Зарплата и управление персоналом версии 3.1.14.183, установленную на платформе 1С:Предприятие 8.3 (8.3.17.1496). В данной конфигурации используется БСП версии 3.1.2.469.
1.Создаем расширение в конфигурации ИБ.
Запускаем 1С:Предприятие в режиме конфигуратора. Открываем список расширений с помощью команды «Расширения конфигурации» пункта меню «Конфигурация» и добавляем новое расширение. После добавления расширения в список, необходимо будет снять флажок «Безопасный режим» как это показано на Рис.1. Если безопасный режим оставить включенным, то при печати нашей формы программа будет «ругаться».
Рис. 1 Расширение конфигурации в 1С 8.3 Зарплата и управление персоналом
2.Добавляем в расширение новую обработку.
Делаем двойной клик по строке списка с нашим расширением и открываем конфигурацию расширения. В дереве конфигурации находим «Обработки» … выделяем … правая клавиша мышки … Добавить. Я назвал обработку «Расш1_ПечатьWord».
3. Включаем обработку в подсистему ПодключаемыеОтчетыИОбработки.
Для этого необходимо добавить в расширение подсистему ПодключаемыеОтчетыИОбработки из основной конфигурации. Переходим в окно основной конфигурации, находим подсистему ПодключаемыеОтчетыИОбработки в дереве, выделяем и через контекстное меню жмем команду «Добавить в расширение» (см. Рис.2)
Рис. 2 Добавление в расширение в 1С 8.3 Зарплата и управление персоналом
Возвращаемся в окно конфигурации расширения, находим добавленную нами подсистему и уже здесь в ее состав добавляем нашу обработку.
4.Создаем шаблон-документ Word с необходимым содержанием и параметрами.
На этом этапе берем шаблон доп. соглашения – документ в формате MS Word c расширением .docx, устанавливаем разделители областей вывода, а в местах, где необходимо подставить значения из базы 1С устанавливаем маркеры параметров.
Разделитель области предназначен для того, чтобы «именовать» части документа-шаблона для дальнейшего вывода средствами встроенного языка 1С. Разделители представляют собой пару — открывающий тэг {v8 Область.<Имя области>} в самом начале области документа и закрывающий тэг {/v8 Область.<Имя области>} в самом конце области документа.
В этом примере я не буду рассматривать ситуацию с выводом нескольких областей. В большинстве случаев это и не требуется. Например, для вывода не сложной формы дополнительного соглашения к трудовому договору достаточно весь документ поместить в одну область. Так ее и назовем «ВесьДокумент».
Маркеры параметров выполняют такую же роль, как и параметры стандартных печатных макетов, и имеют следующий формат {v8 <Имя параметра>}
Рис. 3 Документ в формате MS Word
5. Добавляем в обработку макет и загружаем в него файл шаблона.
Добавляем в обработку макет. Тип макета – двоичные данные. Название должно начинаться с префикса ПФ_DOC_ Для этого примера я назвал его «ПФ_DOC_ДопСоглашение».
Далее кликаем по макету печатной формы и открывается форма с кнопкой «Загрузить из файла». Загружаем наш шаблон .docx, созданный ранее(пункт 4).
6. В обработку добавляем форму.
Теперь в нашей обработке «Расш1_ПечатьWord» создаем форму. Форма должна быть основной, поэтому при создании формы важно, чтобы флажок «Назначить форму основной» был установлен.
В модуль формы копируем функцию с Рис.4
Рис. 4 Функция модуля формы в 1С 8.3 Зарплата и управление персоналом
7. В модуле менеджера обработки создадим необходимые процедуры и функции.
На данном этапе все просто. Копируем в модуль менеджера обработки тексты процедур и функций, представленные на листингах ниже. Необходимо лишь заменить отдельные участки (я их подчеркнул красными линиями) в соответствии с конкретной задачей.
7.1 ПриОпределенииНастроек
Данная процедура является предопределенной БСП, поэтому название нужно сохранить. Изменить можно размещение (подчеркнуто красным). В моем примере команда печати должна располагаться в справочнике сотрудники.
Рис. 5 Команда печати в 1С 8.3 Зарплата и управление персоналом
7.2 ДобавитьКомандыПечати
Данная процедура является предопределенной БСП поэтому название нужно сохранить. Здесь мы описывает команду, которая будет запускать печать нашей формы. Свойство МенеджерПечати определяет нахождение модуля менеджера где располагается процедура Печать. Свойство Обработчик определяет нахождение и название клиентского обработчика команды. В нашем случае он располагается на форме обработки.
Рис. 6 Добавление команды печати в 1С 8.3 Зарплата и управление персоналом
7.3 Печать
Данная процедура является предопределенной БСП поэтому название нужно сохранить. В переменную ИдентификаторКоманды и ИмяМенеджераПечати устанавливаем имя идентификатора и менеджера печати из процедуры ДобавитьКомандуПечати (пункт 7.2).
Рис. 7 Процедура печати в 1С 8.3 Зарплата и управление персоналом
7.4 ПолучитьДанныеПечати
Данная функция является предопределенной БСП поэтому название нужно сохранить. Аналогично предыдущему шагу, устанавливаем в переменную ИдентификаторКоманды имя идентификатора из процедуры ДобавитьКомандуПечати.
В параметр функции УправлениеПечатью.МакетПечатнойФормы устанавливаем полный путь к макету печатной формы, созданному в пункте 5 нашей статьи.
Рис. 8 Получение данных печати в 1С 8.3 Зарплата и управление персоналом
7.5 ПолучитьДанныеОбъекта
В этой функции необходимо создать структуру с данными, которыми будет заполняться печатная форма. Ключ структуры – имя параметра шаблона Word {v8 <Имя параметра>}, а значение – значение из базы 1С. Параметр функции СсылкаНаОбъект – ссылка на объект печати. В нашем случае это ссылка на сотрудника.
Рис. 9 Получение данных объекта в 1С 8.3 Зарплата и управление персоналом
7.6 ОбластиМакетаОфисногоДокумента
Здесь описываем области и устанавливаем типы.
Возможные типы областей:
· Общая – используется однократно.
· СтрокаТаблицы – используется для вывода множества строк;
· Список – используется для вывода множества строк;
· ВерхнийКолонтитул;
· НижнийКолонтитул;
Рис. 10 Области макета в 1С 8.3 Зарплата и управление персоналом
7.7 НапечататьДокумент
Эта функция отвечает за вывод и заполнение областей. В блоке, отмеченном красной линией, нужно описать последовательный вывод областей. Здесь меняем/устанавливаем только название области. В нашем случае «ВесьДокумент»
Рис. 11 Функция напечатать документ в 1С 8.3 Зарплата и управление персоналом
На этом все. Запускаем печать и получаем ожидаемый результат.
Рис. 12 Печать макета документа Word
В заключении хотелось бы добавить, что с помощью одной такой обработки можно реализовать множество различных команд печати документа.
В интернете можно найти множество авторских методик создания внешней печатной формы в формате документа MS Word, однако, методы на основе БСП являются наиболее надежными.
Специалист компании «Кодерлайн»
Игорь Торба
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
2017-12-19T18:36:38+00:00<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Скачать шаблон bill.dotx, который используется в примерах ниже.
Как создавать такие шаблоны самому.
Оглавление (нажмите, чтобы раскрыть)
/// Как создать документ Word на основе шаблона из 1с 8.3, 8.2 &НаКлиенте Функция КакСоздатьДокументWordНаОсновеШаблона(ПутьКШаблону) // В шаблоне уже расставлены поля с определенными // именами, например, org_name, inn, kpp и т.д. // Наша задача - заполнить эти поля и сохранить // этот шаблон в виде вордовкского файла с // расширением docx; // Сам шаблон мы создали по инструкции отсюда: // helpme1s.ru/kak-sozdavat-shablony-word-dlya-ispolzovaniya-v-1s // Или взяли готовым отсюда: // helpme1s.ru/files/ref/bill.dotx ПриложениеВорд = Новый COMОбъект("Word.Application"); ОбъектШаблон = ПриложениеВорд.Documents.Add(ПутьКШаблону); Для Каждого Поле Из ОбъектШаблон.Fields Цикл ПолноеИмяПоля = Поле.Code.Text; // Наши предопределенные поля имеют такой // вид: " MERGEFIELD org_name * MERGEFORMAT". // Наша задача - вытащить из этой конструкции org_name // (ну или другое имя, которое мы задали в ворде). Если (Найти(ПолноеИмяПоля, " MERGEFIELD") = 1) Тогда ПозицияСлеша = Найти(ПолноеИмяПоля, "*"); КороткоеИмяПоля = СокрЛП(Сред(ПолноеИмяПоля, 12, ПозицияСлеша - 12)); ЗначениеПоля = ""; Если КороткоеИмяПоля = "id" Тогда ЗначениеПоля = "1"; ИначеЕсли КороткоеИмяПоля = "bill_date" Тогда ЗначениеПоля = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy"); ИначеЕсли КороткоеИмяПоля = "org_name" Тогда ЗначениеПоля = "ООО ""Ромашка"""; ИначеЕсли КороткоеИмяПоля = "inn" Тогда ЗначениеПоля = "1234567890"; ИначеЕсли КороткоеИмяПоля = "kpp" Тогда ЗначениеПоля = "123456789"; Иначе // ... и так все нужные поля КонецЕсли; Если ЗначениеПоля <> "" Тогда Поле.Select(); ОбъектШаблон.Application.Selection.TypeText(ЗначениеПоля); КонецЕсли; КонецЕсли; КонецЦикла; // Запишем файл в папку "Мои документы" пользователя ФайлДляЗаписи = КаталогДокументов() + "helpme1c_ru_word_test.docx"; // Если такой файл уже существует - удалим его. УдалитьФайлы(ФайлДляЗаписи); // Сохраняем шаблон как документ Word с расширением docx. ОбъектШаблон.SaveAs(ФайлДляЗаписи); // Не забываем закрыть приложение Word. ОбъектШаблон.Application.Quit(); Возврат ФайлДляЗаписи; КонецФункции /// Скачать и выполнить эти примеры на компьютере
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Скачать шаблон bill.dotx, который используется в примерах ниже.
Как создавать такие шаблоны самому.
Работа с Word в языке 1С 8.3, 8.2 (в примерах)
<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Содержание
- Назначение обработки
- Установка обработки в информационную базу
- Как создать свой шаблон договора, который будет заполняться автоматически
- Как заполнить договор в Word из 1С по собственному шаблону
- Как автоматически сохранять в справочник «Файлы» все формируемые договоры
Назначение обработки
Обработка «Создание договоров по шаблонам Word в 1С» предназначена для облегчения процесса ведения учета договоров в таких автоматизированных программах как «Управление торговлей 11» или «Бухгалтерия предприятия 3.0». Возможности обработки не ограничиваются одним лишь хранением договоров в типовом справочнике «Договоры контрагентов». Согласование договора осуществляется в разы быстрей, ведь само формирование не отнимет у Вас много времени, так как договор будет заполнен по заранее созданному шаблону. Шаблоны хранятся в справочнике «Файлы», куда после успешного формирования попадают и новые заполненные договоры в формате документа Word. Для хранения ранее созданных шаблонов необходимо организовать новую папку в справочнике «Файлы», а также в этом справочнике подготовить каталог для хранения сформированных договоров.
Подробно рассмотрим предназначения элементов рабочей области обработки. В шапке находится панель командных кнопок:
- Сформировать — активирует первый режим работы обработки, который формирует договор и сразу локально на ПК открывает готовый вариант сформированного договора. Далее средствами MS Word данный договор можно сохранить на компьютере. Данный способ не сохраняет сформированные договора в справочнике «Файлы».
- Создать договор — активирует второй режим работы обработки, который сохраняет сформированный договор в типовом справочнике «Файлы» и открывает карточку сохраненного файла для дальнейших действий (просмотр, редактирование).
- Параметры — открывает таблицу доступных параметров, где отображено корректно написание переменных, а также их пояснение.
- Сохранить образец шаблона — сохраняет используемый шаблон в справочнике «Файлы» как образец.
Далее расположен набор реквизитов, которые необходимо заполнить перед формированием договора. На основании заполненных реквизитов подставляются значения в табличную часть.
- Организация — указывается организация, которая заключает договор с контрагентом.
- Контрагент — указывается контрагент, который заключает договор с организацией.
- Шаблон — выбирается необходимый шаблон, по которому будет осуществляться формирование договора.
- Счет — автоматически подставляемый реквизит, который заполняется на основании данных указанной организации.
- Договор — указывается договор между организацией и контрагентом, если такой имеется, в противном случае реквизит остается незаполненным.
- Папка — указывается заранее созданный каталог в справочнике «Файлы», в который будут сохранятся сформированные договоры.
Установка обработки в информационную базу
Процесс установки обработки «Создание договоров по шаблонам Word в 1С УТ 11.4 и БП 3.0» очень прост и сейчас мы в этом убедимся. Рассматривать пример установки будем на конфигурации «Управление торговлей 11.4». Открываем конфигурацию в режиме 1С:Предприятие и переходим в раздел «НСИ и администрирование», где необходимо открыть подраздел «Печатные формы, отчеты и обработки».
Перейдя в данный подраздел, необходимо открыть функционал «Дополнительные отчеты и обработки», где будет осуществлена установка обработки.
В форме списка раздела «Дополнительные отчеты и обработки» нажмем кнопку «Добавить из файла», чтобы добавить файл обработки из локального каталога. Нажав на данную кнопку, автоматически переходим в форму «Дополнительная обработка (создание)», где перед нами отобразится предупреждение безопасности, нажмем кнопку «Продолжить».
После закрытия окна «Предупреждения безопасности» автоматически открывается проводник, в котором необходимо указать файл нашей обработки «Создание договоров по шаблонам Word в 1С УТ 11.4 и БП 3.0». После того, как обработка добавлена можно осуществить ряд настроек, например, указать видимость, где обработка будет доступна и использоваться. По умолчанию видимость устанавливается автоматически, но эту настройку можно скорректировать вручную. Далее остается нажать только кнопку «Записать и закрыть», после чего установку обработки можно считать завершенной.
Как создать свой шаблон договора, который будет заполняться автоматически
Обработку можно открыть открыв любой элемент справочника Договоры и в нем нажать в меню Печать > Создание договора по шаблону Word
В самом начале надо создать шаблон вашего договора в который будут подставлять параметры из справочника Договоры. Для создания нового шаблона необходимо знать, каким образом обработка подставляет нужную информацию при формировании документа. Ответ прост, все реквизиты типового договора представляются в виде <переменных>, которые в свою очередь используются в тексте шаблона. Так, например, чтобы указать полное наименование организации необходимо использовать переменную <ОрганизацияПН> и так далее. Список доступных переменных отображается в табличной части обработки в колонке «Найти». В этой же табличной части содержится колонка значений, которые будут подставлены в ту или иную переменную, а также пояснения каждой из переменных.
Создайте новый документ MS Word, в котором заполните необходимый текст с использованием выше перечисленных переменных. В результате у Вас должен получится шаблон как на рисунке ниже. Данный шаблон нужно будет загрузить в справочник «Файлы» в соответствующую папку, чтобы после, его использовать при формировании договора.
Таких шаблонов может быть сколько угодно. Сохраните их в справочник Файлы и при формировании договора в Word выбирайте нужный шаблон.
После того как нами был создан собственный шаблон и добавлен в файлы конфигурации, его можно использовать для формирования договора. Из справочника Контрагенты откроем обработку и приступим к заполнению. В шапке укажем основные реквизиты, где выберем ранее созданный шаблон и укажем папку справочника Файлы, куда необходимо складывать сформированные договоры. Замечу, что указанные реквизиты будут автоматически подставляться в табличную часть обработки.
Если какой-то из реквизитов не проставился или Вам необходимо добавить другой реквизит, который используется в шаблоне, это можно сделать в табличной части. Чтобы изменить подставляемое значение, нужно внести корректировки в столбец Заменить напротив необходимой переменной. А для добавления дополнительного параметра нужно воспользоваться кнопкой Добавить и указать переменную, которая должна быть добавлена.
После проделанных манипуляций все что остается, это сформировать договор по собственному шаблону, который будет заполнен необходимыми значениями, указанных переменных. Нажмем на кнопку Сформировать, дождемся выполнения и проверим корректность подставленных данных.
Как результат, получаем готовый полностью заполненный договор с контрагентом, на который было затрачено не более минуты.
При этом сложность шаблона абсолютно не важна. Обработка подставит параметры везде в файле, если их найдет.
Как автоматически сохранять в справочник «Файлы» все формируемые договоры
Обработка позволяет сохранять помимо самих шаблонов также уже сформированные договоры, которые в дальнейшем всегда можно будет открыть для просмотра или редактирования. Чтобы договора сохранялись в конфигурации необходимо воспользоваться вторым режимом формирования договора. Для этого сначала в реквизите «Папка» нужно указать заранее созданную папку для хранения договоров в справочнике Файлы. А после осуществления всех настроек нужно нажать на кнопку Создать договор.
Обработка сформирует заполненный с помощью указанных переменных договор и сохранит его в указанный ранее каталог справочника Файлы. При этом после формирования договора автоматически откроется карточка файла конфигурации, где будут доступны действия: просмотра, редактирования и сохранение файла на локальный каталог. В принципе Вам будут доступны все предопределенные возможности конфигурации, которые предполагают взаимодействия с файлами.
В статье написано, как создать внешнюю печатную форму (для конфигураций с БСП) в формате Word.
По этой теме есть публикация на ИТС Разработка печатных форм с использованием макетов в формате офисных документов Office Open XML , есть несколько статей на инфостарте- первая статья, вторая статья .
В статье на ИТС и в первой статье описывается создание печатной формы, но при этом для печатной формы используется метод менеджера объекта, что предполагает внесение изменения в конфигурацию или в расширение конфигурации.
В моей статье описывается, как это обойти и внести все нужные изменения во внешнюю обработку.
Сама печатная форма создается на клиентской стороне.
Шаг 1. Создание внешней обработки.
Создать внешнюю обработку, в модуле объекта обработки заполнить функцию СведенияОВнешнейОбработке.
Ниже пример из обработки к статье
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Справочник.ПодразделенияОрганизаций");
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Договор коллективной материальной ответственности (в Word)");
ПараметрыРегистрации.Вставить("Версия", "1.1");
ПараметрыРегистрации.Вставить("БезопасныйРежим", ИСТИНА);
ПараметрыРегистрации.Вставить("Информация", "Договор коллективной материальной ответственности (в Word). Автор - Петрянкин В.Ф. ");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Договор коллективной материальной ответственности (в Word)", "Макет", "ВызовКлиентскогоМетода", Истина, "");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
ПараметрыРегистрации.Вставить("БезопасныйРежим",Ложь);
Возврат ПараметрыРегистрации;
КонецФункции
Также у вас должен быть файл Word, который будет использоваться для формирования печатной формы. Поддерживаются формат как doc , так и docx .
Шаг 2. Создание макета.
Во внешней обработке надо создать новый макет . Тип макета- двоичные данные, имя макета- ПФ_DOC_МакетОтчета.
В файле Word , который будет загружен в этот макет обработки, надо выделить области .
Этих областей может быть три типа, про это есть описание на ИТС. Тип Общая- область , используемая один раз, СтрокаТаблицы — область для вывода табличной части.
Области выделяются «тегами»: начало области {v8 Область.<Имя области>}, конец области {/v8 Область.<Имя области>}
Пример описания области .
{v8 Область.Заголовок} — Начало области с именем Заголовок, это обычный текст в файле, в печатной форме он отображаться не будет
… Здесь содержимое области
{/v8 Область.Заголовок}- Окончание этой области
В каждой области для параметров, которые будут замещаться нужным текстом создаются описания вида
{v8 НаименованиеОрганизации} — описание параметра НаименованиеОрганизации. Т.е. у параметров есть только открывающий тег и нет служебного слова Область.
Оформление областей можно посмотреть на ИТС и в обработке к этой статье.
После оформления областей этот документ надо загрузить в макет обработки.
Шаг 3. Создание функции подготовки данных для печати.
На ИТС и в демо-базе БСП эта функция располагается в менеджере объекта, для которого создается печатная форма.
Для внешней печатной формы эту функцию надо разместить в форме обработки — печатная форма создается на стороне клиента.
Ниже текст этой функции
// Подготавливает данные объекта к выводу на печать.
//
// Параметры:
// МассивДокументов - Массив - ссылки на объекты, для которых запрашиваются данные для печати;
// МассивИменМакетов - Массив - имена макетов, в которые подставляются данные для печати.
//
// Возвращаемое значение:
// Соответствие - коллекция ссылок на объекты и их данные:
// * Ключ - ЛюбаяСсылка - ссылка на объект информационной базы;
// * Значение - Структура - макет и данные:
// ** Ключ - Строка - имя макета,
// ** Значение - Структура - данные объекта.
&НаСервере
Функция ПолучитьДанныеПечати(Знач МассивДокументов, Знач МассивИменМакетов) Экспорт
ДанныеПоВсемОбъектам = Новый Соответствие;
Для Каждого ОбъектСсылка Из МассивДокументов Цикл
ДанныеОбъектаПоМакетам = Новый Соответствие;
Для Каждого ИмяМакета Из МассивИменМакетов Цикл
ДанныеОбъектаПоМакетам.Вставить(ИмяМакета, ПолучитьДанныеОбъекта(ОбъектСсылка));
КонецЦикла;
ДанныеПоВсемОбъектам.Вставить(ОбъектСсылка, ДанныеОбъектаПоМакетам);
КонецЦикла;
ОписаниеОбластей = Новый Соответствие;
ДвоичныеДанныеМакетов = Новый Соответствие;
ТипыМакетов = Новый Соответствие; // Для обратной совместимости.
Для Каждого ИмяМакета Из МассивИменМакетов Цикл
Если ИмяМакета = "МакетОтчета(Word)" Тогда
ДвоичныеДанныеМакета = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ПФ_DOC_МакетОтчета");
ДвоичныеДанныеМакетов.Вставить(ИмяМакета, ДвоичныеДанныеМакета);
ТипыМакетов.Вставить(ИмяМакета, "DOC");
КонецЕсли;
ОписаниеОбластей.Вставить(ИмяМакета, ПолучитьОписаниеОбластейМакетаОфисногоДокумента());
КонецЦикла;
Макеты = Новый Структура;
Макеты.Вставить("ОписаниеОбластей", ОписаниеОбластей);
Макеты.Вставить("ТипыМакетов", ТипыМакетов); // Для обратной совместимости.
Макеты.Вставить("ДвоичныеДанныеМакетов", ДвоичныеДанныеМакетов);
Результат = Новый Структура;
Результат.Вставить("Данные", ДанныеПоВсемОбъектам);
Результат.Вставить("Макеты", Макеты);
Возврат Результат;
КонецФункции
Шаг 4. Создание служебных функций и процедуры
- функция ДанныеЗаполненияОтчета(СсылкаНаОбъект)
- функция ПолучитьОписаниеОбластейОфисногоДокумента()
- процедура ВыполнитьПечатьвWord(ДокументСсылка, МакетИДанныеОбъекта, ИмяМакета)
Эти две функции и процедура будут уникальными для конкретной печатной формы.
Прилагаемую к статье обработку можно использовать как шаблон, в котором для вашей конкретной печатной формы надо внести изменения.
Примеры функций
&НаСервере
Функция ДанныеЗаполненияОтчета(СсылкаНаСправочник)
ДанныеОбъекта = Новый Структура();
ДатаПечати=ТекущаяДата();
ДатаДокумента=Формат(ДатаПечати,"ДЛФ=DD");
ДанныеОбъекта.Вставить("ДатаДокумента",ДатаДокумента);
ОрганизацияПодразделения=СсылкаНаСправочник.Владелец;
ДанныеОбъекта.Вставить("НаименованиеОрганизации",ОрганизацияПодразделения.НаименованиеПолное);
...
Возврат ДанныеОбъекта;
КонецФункции
Вышеприведенная функция подставляет параметры ДатаДокумента и НаименованиеОрганизации .
В файле Word эти параметры оформлены следующим образом:
{v8 НаименованиеОрганизации}, в лице {v8 ДолжностьПодписанта} {v8 ФИОПодписанта}, действующего на основании {v8 ДокументПодписанта}, именуемое в дальнейшем “Работодатель”, с одной стороны и гр. {v8 ФИО}, именуемый (ая) в дальнейшем “Работник” с другой стороны, именуемые в дальнейшем “Стороны”, заключили в соответствии с Трудовым кодексом Российской Федерации настоящие дополнения
&НаСервере
Функция ПолучитьОписаниеОбластейМакетаОфисногоДокумента()
ОписаниеОбластей = Новый Структура;
УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Заголовок", "Общая");
УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "ШапкаКоллектива", "Общая");
УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "СтрокаТаблицы", "СтрокаТаблицы");
УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "ПодвалКоллектива", "Общая");
Возврат ОписаниеОбластей;
КонецФункции
В этой функции описаны области в файле Word . Видно, что в этом файле выделено 4 области, три из которых вызываются один раз, а область СтрокаТаблицы отображает данные из табличной части.
Ниже процедура, которая выполняется на стороне клиента и выводит эти области
&НаКлиенте
Процедура ВыполнитьПечатьВWord(ДокументСсылка, МакетИДанныеОбъекта, ИмяМакета)
ТипМакета = МакетИДанныеОбъекта.Макеты.ТипыМакетов[ИмяМакета];
ДвоичныеДанныеМакетов = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов;
Области = МакетИДанныеОбъекта.Макеты.ОписаниеОбластей;
ДанныеОбъекта = МакетИДанныеОбъекта.Данные[ДокументСсылка][ИмяМакета];
Макет = УправлениеПечатьюКлиент.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакетов[ИмяМакета], ТипМакета, ИмяМакета);
Если Макет = Неопределено Тогда
Возврат;
КонецЕсли;
ЗакрытьОкноПечатнойФормы = Ложь;
Попытка
ПечатнаяФорма = УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(ТипМакета, Макет.НастройкиСтраницыМакета, Макет);
Если ПечатнаяФорма = Неопределено Тогда
УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
Возврат;
КонецЕсли;
// Вывод заголовка документа.
Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Заголовок"]);
УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);
Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ШапкаКоллектива"]);
УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);
Если ДанныеОбъекта.Свойство("СтрокаТаблицы_1") Тогда
Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["СтрокаТаблицы"]);
УправлениеПечатьюКлиент.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФорма, Область, ДанныеОбъекта.СтрокаТаблицы_1, Ложь);
КонецЕсли;
Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ПодвалКоллектива"]);
УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);
УправлениеПечатьюКлиент.ПоказатьДокумент(ПечатнаяФорма);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗакрытьОкноПечатнойФормы = Истина;
Возврат;
КонецПопытки;
УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма, ЗакрытьОкноПечатнойФормы);
УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
КонецПроцедуры
Обработка , прилагаемая к статье используется в конфигурации ЗУП 3.1.8.246 с версией подсистемы БСП 3.0.1.369
Вы можете использовать ее как шаблон для вашей печатной формы.
Для этого:
- Надо изменить функции и процедуру , которые описаны на шаге 4:
- функцию ДанныеЗаполненияОтчета(СсылкаНаОбъект)
- функцию ПолучитьОписаниеОбластейОфисногоДокумента()
- процедуру ВыполнитьПечатьвWord(ДокументСсылка, МакетИДанныеОбъекта, ИмяМакета)
- В вашем файле Word оформить области и загрузить в макет обработки