Содержание:
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, однако, методы на основе БСП являются наиболее надежными.
Специалист компании «Кодерлайн»
Игорь Торба
Это моя первая статья на данном портале, но попытаюсь изложить все понятно и подробно.
Долгое время у меня заняло создание такой вот внешней обработки. Есть очень много примеров, как сделать подобное на неуправляемых формах (2.0) и очень мало информации касательно управляемых(3.0), по крайней мере я многого найти не смог в доступе. Создание подобное обработки выглядит вполне несложно, если производить все действия на сервере, как это было с 2.0, но в нашем случае необходимо инициализировать открытие документа на клиенте, чему сильно мешает отсутствие возможности передать макет Active Document с сервера на клиент.
Итак, пойдем по порядку. Подобная информация уже есть в сети, но для полноты картины кратко разъясню регистрацию обработки в системе:
1. Открываем модуль объекта обработки и создаем там Функцию СведенияОВнешнейОбработке() (естественно экспортную):
СведенияОВнешнейОбработке()
Как мы видим, использовать будем ВызовКлиентскогоМетода, по скольку открыть файл нужно будет на компьютере пользователя.
Далее понадобится создать еще две процедуры здесь же:
2. Функция добавления команды, которую мы вызываем ранее(просто, чтобы все было визуально разделено и не награмождалось скопом в одной функции):
ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = «»)
3. И функция по созданию этой самой таблицы команд:
(Из комментариев можно подробней понять, для чего используется тот или иной параметр-поле данной таблицы)
На этом настройка регистрации внешней обработки в нужной вам конфигурации закончена.
Далее. Самое интересное: создание, заполнение и вывод макета клиенту.
Первое, что нам необходимо сделать, это создать макет нашего документа(Изображение 3). Макет понадобится двоичный, т.к. обычный мы на клиент не передадим(как я и говорил ранее). Заменяем нужные данные в шаблоне, перед загрузкой в обработку, «Параметрами», у меня они выглядят так, на примере: «{Сотрудник}»(кавычки не учитывать), после чего загружаем в Обработку-Макет.
Теперь в модуле формы создаем процедуру, которая будет вызвана при обращении к печати именно в таком виде(за исключением содержимого, заполнять можете как вам угодно), процедура так же должна быть экспортной и на клиенте, так как вызывается из конфигурации и выполнение назначено на клиентской стороне:
Печать(ИдентификаторКоманды, МассивОбъектов)
Макет я собираю и вызываю в отдельной процедуре, обязательно на клиенте.
СобратьМакет(СсылкаНаОбъект)
Для сбора макета нам понадобится получить этот самый макет уже с сервера. Передаю я его через временное хранилище:
ПолучитьМакетСервер(ИмяМакета)
Далее нужно получить данные для заполнения макета, естественно на сервере, по скольку может понадобиться обратиться к сторонним регистрам и справочникам, если нет, то можно выполнить и на клиенте, получив ссылку на интересующий нас объект:
ПолучитьДанные(СсылкаНаОбъект)
Данные складываем в структуру,где ключ — имя параметра в макете(без фигурных скобок), а значение — собственно значение, которое необходимо подставить.
На этом завершается наше создание. Вы можете скачать обработку в готовом виде, в ней также реализован запуск через форму обработки, то есть с помощью открытия обработки без регистрации ее в конфигурации. Надеюсь, моя статья многим поможет и окажется полезной. Спасибо большое за внимание!
Довольно распространенная задача, но так как пока не реализованная в типовых, поэтому и пишу.
Итак, к примеру, необходимо формировать некоторый типовой текст на основе имеющегося в организации шаблона в формате docx — MS Word. Обычно это договора (с контрагентами, сотрудниками), а также всевозможные приказы и т.д. Формат Word позволяет подготовить красиво оформленный документ, однако некоторые данные необходимо подставить из базы (ФИО и проч).
Данную задачу в данной статье буду реализовывать через расширение на примере печати договора с контрагентом. Конфигурация 1С:Бухгалтерия — типовая на поддержке 3.0.121.31, релиз платформы — 8.3.22.1704).
Для реализации задачи будем использовать подсистему БСП «Работа с печатью», с помощью которой можем быстро добавлять на формы списков и элементов команды Печати и формировать документы из шаблона Word.
Забегая вперед, добавлю, что при формировании документа MS Word использована серверная процедура формирования документа без создания COM-объекта. Однако, для формирования PDF документа — пришлось создавать COM-объект Word.Application, соответственно, это действие рекомендуется делать исключительно на клиенте, поэтому я задействовал клиентскую процедуру.
Сами шаблоны договоров оказания услуг — мои рабочие — можете брать и использовать или для образца (Скачать с Инфостарта https://infostart.ru/public/1753205/). Все переменные типа ФИО, должностей, ИНН и т.д. — беру из данных базы.
В общем, если нужно быстро сделать печать из шаблона MS Word — это вам подойдет как пример. Можно использовать и как готовый вариант текста договора оказания услуг по 1С, но это на ваше усмотрение.
Итак
- Создаем новое расширение, снимаем галку безопасный режим
2. Создаем файл-шаблон MS Word. Формат файла MS Word должен соответствовать формату БСП.
- Файл должен состоять из набора именованных областей. Каждая область начинается тэгом {v8 Область.ИмяОбласти1} {/v8 Область.ИмяОбласти1}.
- Внутри области могут использоваться параметры, в которые мы впоследствии передадим нужные нам значения (типа ФИО). Параметры маркируются как {v8 Параметр1}.
- Можно создавать даже таблицы для вывода табличных частей (например спецификация по договору), но в данном примере мы это не используем. Вот подробная статья про формат шаблона infostart.ru/1c/articles/1052233/.
- Даже проще понять на примере, см скрины ниже
3. Далее Переходим к нужному объекту метаданных, в нашем случае — к справочнику Договоры. Далее макеты, добавить-двоичные данные-выбираем нужный файл Ворд
4. Добавим команды печати в справочник «Договоры контрагентов». Для этого в модуле менеджера объекта (справочника Договоры) находим процедуру «ДобавитьКомандыПечати» и добавляем ее в наше расширение с директивой &После. И добавляем команды
&После("ДобавитьКомандыПечати")
Процедура пп_ДобавитьКомандыПечати(КомандыПечати)
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ДоговорОказанияУслуг";
КомандаПечати.Представление = "Договор оказания услуг (PDF)";
КомандаПечати.Обработчик = "пп_ПечатьКлиент.ПечатьДоговораОказанияУслуг";
КомандаПечати.Картинка = БиблиотекаКартинок.ФорматPDF;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ДоговорОказанияУслугWord";
КомандаПечати.Представление = "Договор оказания услуг (Word)";
КомандаПечати.Картинка = БиблиотекаКартинок.ФорматWord;
КонецПроцедуры
Обратите внимание, что для выполнения команды печати PDF используется обработчик с процедурой пп_ПечатьКлиент.ПечатьДоговораОказанияУслуг. Модуль пп_ПечатьКлиент — сделаем клиентский, для работы с Com-объектом на клиенте (так рекомендуется стандартами 1С). Почему так — распишу поподробнее ниже.
Далее в модуле менеджера добавляем предопределенную процедуру «Печать». Если таковая уже есть в основной конфигурации — тогда размещаем ее с другим именем и директивой &После(«Печать»). В нашем примере этого не нужно. Если не указана другая процедура-обработчик — по умолчанию вызывается именно серверная процедура «Печать». Задействуем ее для формирования документа в Word.
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ИмяМакета = "ДоговорОказанияУслуг";
ИмяМакетаWord = "ДоговорОказанияУслугWord";
НаименованиеДокумента = "Договор оказания услуг";
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ИмяМакетаWord) Тогда
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, ИмяМакетаWord);
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ОфисныеДокументы = СформироватьДокументыWord(МассивОбъектов, ИмяМакета, НаименованиеДокумента);
ПечатнаяФорма.СинонимМакета = НаименованиеДокумента;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Тут используется типовая технология формирования офисных документов. Основная функция тут СформироватьДокументWord(Ссылка, ИмяМакета), которая использует несколько функций БСП.
- УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(МакетДоговора, Неопределено) — инициализация структуры с нужными параметрами
- УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, «Основная», «Общая») — формирует структуру с описанием, необходимым далее при формировании макета
- УправлениеПечатью.ИнициализироватьПечатнуюФорму(Неопределено, Неопределено, Макет) — инициализирует макет
- УправлениеПечатью.ОбластьМакета(Макет, ОписаниеОбластей[«Основная»]) — формирование макета с параметрами
- УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ПолучитьДанныеДоговора(Ссылка)) — окончательно формирует макет документа с переданными параметрами
- Адрес = УправлениеПечатью.СформироватьДокумент(ПечатнаяФорма) — кладет готовый макет в Хранилище значений и отдает ссылку с адресом
Функция СформироватьДокументыWord(МассивОбъектов, ИмяМакета, НаименованиеДокумента)
Шаблон = НаименованиеДокумента + " %1 от %2";
ОфисныеДокументы = Новый Соответствие;
Для каждого Ссылка Из МассивОбъектов Цикл
Адрес = СформироватьДокументWord(Ссылка, ИмяМакета);
ИмяДокумента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Ссылка.Номер, Формат(Ссылка.Дата,"ДФ=dd.MM.yyyy"));
ОфисныеДокументы.Вставить(Адрес, ИмяДокумента);
КонецЦикла;
Возврат ОфисныеДокументы;
КонецФункции
Функция СформироватьДокументWord(Ссылка, ИмяМакета)
УстановитьПривилегированныйРежим(Истина);
МакетДоговора = УправлениеПечатью.МакетПечатнойФормы("Справочник.ДоговорыКонтрагентов." + ИмяМакета);
Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(МакетДоговора, Неопределено);
ОписаниеОбластей = Новый Структура;
УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Основная", "Общая");
ПечатнаяФорма = УправлениеПечатью.ИнициализироватьПечатнуюФорму(Неопределено, Неопределено, Макет);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОписаниеОбластей["Основная"]);
УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ПолучитьДанныеДоговора(Ссылка));
Адрес = УправлениеПечатью.СформироватьДокумент(ПечатнаяФорма);
УстановитьПривилегированныйРежим(Ложь);
Возврат Адрес;
КонецФункции
ПолучитьДанныеДоговора(Ссылка) — структура со значениями переменных, самая рутинная, но самая смысловая в части данных. Только ее вам и нужно написать свою для своего объекта
Функция ПолучитьДанныеДоговора(ДоговорСсылка)
УстановитьПривилегированныйРежим(Истина);
Текст = "ВЫБРАТЬ
| ДоговорыКонтрагентов.Ссылка КАК Договор,
| ДоговорыКонтрагентов.Номер КАК НомерДоговора,
| ДоговорыКонтрагентов.Дата КАК ДатаДоговора,
| ДоговорыКонтрагентов.СрокДействия КАК ДатаОкончанияДействия,
| ДоговорыКонтрагентов.Владелец КАК Контрагент,
| ДоговорыКонтрагентов.Владелец.НаименованиеПолное КАК КонтрагентПолноеНаименование,
| ДоговорыКонтрагентов.Организация КАК Организация,
| ДоговорыКонтрагентов.Организация.НаименованиеПолное КАК ОрганизацияПолноеНаименование,
| ДоговорыКонтрагентов.Организация.ИНН КАК ОрганизацияИНН,
| ДоговорыКонтрагентов.Организация.КПП КАК ОрганизацияКПП,
| ДЕНЬ(ДоговорыКонтрагентов.Дата) КАК ДатаЧисло,
| МЕСЯЦ(ДоговорыКонтрагентов.Дата) КАК ДатаМесяц,
| ГОД(ДоговорыКонтрагентов.Дата) КАК ДатаГод,
| ДоговорыКонтрагентов.Организация.ОсновнойБанковскийСчет КАК БанковскийСчет,
| ДоговорыКонтрагентов.Владелец.ОсновнойБанковскийСчет КАК БанковскийСчетКонтрагента
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
| ДоговорыКонтрагентов.Ссылка = &ДоговорСсылка";
Запрос = Новый Запрос(Текст);
Запрос.УстановитьПараметр("ДоговорСсылка", ДоговорСсылка);
РезЗапроса = Запрос.Выполнить();
Если РезЗапроса.Пустой() Тогда
Возврат Неопределено;
КонецЕсли;
ДанныеЗапроса = РезЗапроса.Выгрузить()[0];
ДанныеШапки = Новый Структура("СтавкаСДополнением, НомерДоговора, КонтрагентПолноеНаименование");
ЗаполнитьЗначенияСвойств(ДанныеШапки, ДанныеЗапроса);
ДанныеШапки.Вставить("ДатаДоговора", Формат(ДанныеЗапроса.ДатаДоговора, "ДФ='d MMMM yyyy ''г.'''"));
ДанныеШапки.Вставить("ДоговорПредставление", ДанныеЗапроса.НомерДоговора + " от "
+ Формат(ДанныеЗапроса.ДатаДоговора, "ДФ=dd.MM.yyyy"));
КонтрагентПодписант = ДанныеЗапроса.Контрагент.ОсновноеКонтактноеЛицо;
КонтрагентПодписантФИО = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 %2 %3",
КонтрагентПодписант.Фамилия, КонтрагентПодписант.Имя, КонтрагентПодписант.Отчество);
ПодписантДолжность = ДанныеЗапроса.Контрагент.ОсновноеКонтактноеЛицо.Должность;
СтавкаВЧас = УправлениеСвойствами.ЗначениеСвойства(ДоговорСсылка, "ДоговорСтавкаВЧас");
Если СтавкаВЧас <> Неопределено Тогда
ДанныеШапки.Вставить("СтавкаСДополнением", РаботаСКурсамиВалют.СформироватьСуммуПрописью(СтавкаВЧас,
Константы.ВалютаРегламентированногоУчета.Получить(), Истина) +"(НДС не облагается)");
КонецЕсли;
КонтрагентПодписант_Инициалы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 %2.%3.",
КонтрагентПодписант.Фамилия, Сред(КонтрагентПодписант.Имя, 1, 1), Сред(КонтрагентПодписант.Отчество, 1, 1));
ДанныеШапки.Вставить("КонтрагентПодписант_Инициалы", КонтрагентПодписант_Инициалы);
ДанныеШапки.Вставить("КонтрагентПодписантРП", СклонениеПредставленийОбъектов.ПросклонятьФИО(КонтрагентПодписантФИО, 2,,1));
ДанныеШапки.Вставить("КонтрагентПодписантДолжностьРП", СклонениеПредставленийОбъектов.ПросклонятьПредставление(Строка(ПодписантДолжность), 2, КонтрагентПодписант));
ДанныеШапки.Вставить("КонтрагентПодписантДолжность", ПодписантДолжность);
ДанныеШапки.Вставить("КонтрагентНаОсновании", "Устава");
ОтветственныеЛица = ОтветственныеЛицаБППереопределяемый.ОтветственныеЛица(ДанныеЗапроса.Организация,ТекущаяДатаСеанса(),);
ДанныеОрганизации = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(
ДанныеЗапроса.Организация, ДанныеЗапроса.ДатаДоговора,ДанныеЗапроса.БанковскийСчет,,);
ПредставлениеОрганизации = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(ДанныеОрганизации,
"НаименованиеДляПечатныхФорм,ИНН,ЮридическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет");
ОрганизацияДоп = РегламентированнаяОтчетностьВызовСервера.ПолучитьСведенияОбОрганизации(
ДанныеЗапроса.Организация, ТекущаяДатаСеанса(), "ОргСубъект");
СведенияОКонтрагенте = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(
ДанныеЗапроса.Контрагент,ДанныеЗапроса.ДатаДоговора,,,);
ПредставлениеКонтрагента= ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОКонтрагенте,
"НаименованиеДляПечатныхФорм,ИНН,ЮридическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет");
РуководительДолжностьПредставление = ОтветственныеЛица.РуководительДолжностьПредставление;
ОрганизацияПодписантДолжностьРП = СклонениеПредставленийОбъектов.ПросклонятьПредставление(
РуководительДолжностьПредставление, 2,);
ОрганизацияПодписант = ОтветственныеЛица.Руководитель;
ОрганизацияПодписантРП = СклонениеПредставленийОбъектов.ПросклонятьФИО(ОрганизацияПодписант.ФИО,
2, ОрганизацияПодписант, 1);
ДанныеШапки.Вставить("ОрганизацияПодписантРП", ОрганизацияПодписантРП);
ДанныеШапки.Вставить("ОрганизацияПодписантДолжностьРП", ОрганизацияПодписантДолжностьРП);
ШаблонВЛицеНаОсновании = "%1%2%3, действующ%4 на основании %5, именуем%6";
ШаблонОГРН = "свидетельства о регистрации ОГРНИП №";
Если Справочники.Организации.КодыСтатистики(ДанныеЗапроса.Организация).КодОКОПФ = "50102" Тогда
ОрганизацияВЛицеНаОсновании = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонВЛицеНаОсновании,
"","","","ий",
ШаблонОГРН + ДанныеОрганизации.ОГРН,
"ый");
ЕстьКПП = Ложь;
Иначе
ОрганизацияВЛицеНаОсновании = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонВЛицеНаОсновании,
" в лице ", ОрганизацияПодписантДолжностьРП + " ", ОрганизацияПодписантРП,"его",
"Устава",
"ое");
ЕстьКПП = Истина;
КонецЕсли;
ДанныеШапки.Вставить("ОрганизацияВЛицеНаОсновании", ОрганизацияВЛицеНаОсновании);
Если СведенияОКонтрагенте.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо Тогда
КонтрагентВЛицеНаОсновании = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонВЛицеНаОсновании,
"", "", "", "ий",
ШаблонОГРН + СведенияОКонтрагенте.ОГРН,
"ый");
ЕстьКППКонтрагента = Ложь;
Иначе
КонтрагентВЛицеНаОсновании = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонВЛицеНаОсновании,
" в лице ", ДанныеШапки.КонтрагентПодписантДолжностьРП + " ", ДанныеШапки.КонтрагентПодписантРП, "его",
"Устава",
"ое");
ЕстьКППКонтрагента = Истина;
КонецЕсли;
ДанныеШапки.Вставить("КонтрагентВЛицеНаОсновании", КонтрагентВЛицеНаОсновании);
ИНН_КПП_Строкой = "ИНН" + "%1" + " " + ДанныеОрганизации.ИНН + "%2";
ИНН_КПП_Строкой = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИНН_КПП_Строкой,
?(ЕстьКПП, "/КПП", ""), ?(ЕстьКПП, "/" + ДанныеОрганизации.КПП, ""));
ДанныеШапки.Вставить("Город", ОрганизацияДоп.ОргСубъект);
ДанныеШапки.Вставить("ОрганизацияПодписантДолжность", РуководительДолжностьПредставление);
ДанныеШапки.Вставить("ОрганизацияПодписантДолжностьРП", СклонениеПредставленийОбъектов.ПросклонятьПредставление(РуководительДолжностьПредставление, 2, ОрганизацияПодписант));
ДанныеШапки.Вставить("ОрганизацияПодписант_Инициалы", ОтветственныеЛица.РуководительПредставление);
ДанныеШапки.Вставить("ОрганизацияПолноеНаименование", ДанныеОрганизации.ПолноеНаименование);
ДатаОкончанияДействия = ?(ЗначениеЗаполнено(ДанныеЗапроса.ДатаОкончанияДействия), ДанныеЗапроса.ДатаОкончанияДействия,
КонецГода(ТекущаяДатаСеанса()));
СрокОкончанияДоговора = Формат(ДатаОкончанияДействия, "ДФ='d MMMM yyyy ''г.'''");
ДанныеШапки.Вставить("СрокОкончанияДоговора", СрокОкончанияДоговора);
РеквизитыСтрокой = "%1: %2
|%3
|ОГРН %4
|Банковские реквизиты:
|р/с %5
|В банке %6
|БИК %7
|e-mail: %8";
ДанныеБанкСчета = Справочники.БанковскиеСчета.РеквизитыСчета(ДанныеЗапроса.БанковскийСчет);
ОрганизацияРеквизитыСтрокой = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(РеквизитыСтрокой,
ДанныеОрганизации.НаименованиеДляПечатныхФорм,
ДанныеОрганизации.ЮридическийАдрес,
ИНН_КПП_Строкой,
ДанныеОрганизации.ОГРН,
ДанныеБанкСчета.НомерСчета,
ДанныеБанкСчета.НаименованиеБанка,
ДанныеБанкСчета.БИКБанка,
ДанныеОрганизации.Email);
АдрЮР = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(ДанныеЗапроса.Контрагент,
Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента, ТекущаяДатаСеанса(), Истина);
ДанныеБанкСчетаКонтрагента = Справочники.БанковскиеСчета.РеквизитыСчета(ДанныеЗапроса.БанковскийСчетКонтрагента);
EmailКонтрагента = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(ДанныеЗапроса.Контрагент,
Справочники.ВидыКонтактнойИнформации.EmailКонтрагенты, ТекущаяДатаСеанса(), Истина);
Если ДанныеБанкСчетаКонтрагента = Неопределено Тогда
ДанныеБанкСчетаКонтрагента = Новый Структура("НомерСчета, НаименованиеБанка, БИКБанка");
КонецЕсли;
ИНН_КПП_Строкой = "ИНН" + "%1" + " " + СведенияОКонтрагенте.ИНН + "%2";
ИНН_КПП_Строкой = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИНН_КПП_Строкой,
?(ЕстьКППКонтрагента, "/КПП", ""), ?(ЕстьКППКонтрагента, "/" + СведенияОКонтрагенте.КПП, ""));
КонтрагентРеквизитыСтрокой = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(РеквизитыСтрокой,
СведенияОКонтрагенте.НаименованиеДляПечатныхФорм,
АдрЮР,
ИНН_КПП_Строкой,
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеЗапроса.Контрагент, "РегистрационныйНомер"),
ДанныеБанкСчетаКонтрагента.НомерСчета,
ДанныеБанкСчетаКонтрагента.НаименованиеБанка,
ДанныеБанкСчетаКонтрагента.БИКБанка,
EmailКонтрагента);
ДанныеШапки.Вставить("ОрганизацияРеквизитыСтрокой", ОрганизацияРеквизитыСтрокой);
ДанныеШапки.Вставить("КонтрагентРеквизитыСтрокой", КонтрагентРеквизитыСтрокой);
ДанныеШапки.Вставить("ОрганизацияРеквизитыСтрокойВАкте", ПредставлениеОрганизации);
ДанныеШапки.Вставить("КонтрагентРеквизитыСтрокойВАкте", ПредставлениеКонтрагента);
УстановитьПривилегированныйРежим(Ложь);
Возврат ДанныеШапки;
КонецФункции
С серверной частью все. Переходим к клиентской. Во первых почему нужен клиентский вызов. Потому что MS Word умеет сохранять документы в PDF, вот такой процедурой: WordDocument.SaveAs(FilePDF, 17). Причем умеет только из приложения, то есть нужно создавать COM-объект Word.Application. А вот COM-объект на сервере — это не только регистрация ком-объекта, но и проблемы с зависанием сессий и затем полная остановка данной функции. Поэтому 1С и сообщество не рекомендует, нужно делать на клиенте.
В клиентском модуле добавляем две процедуры. Собственно наш обработчик ПечатьДоговораОказанияУслуг и собственно процедуру открытия СформироватьWordИОткрытьPDF.
Функция ПечатьДоговораОказанияУслуг(Парам) Экспорт
МассивОбъектов = Парам.ОбъектыПечати;
ИмяМакета = Парам.Идентификатор;
МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.МакетыИДанныеОбъектовДляПечати(Парам.МенеджерПечати, ИмяМакета, МассивОбъектов);
СформироватьWordИОткрытьPDF(МассивОбъектов, МакетИДанныеОбъекта, ИмяМакета);
Возврат Истина;
КонецФункции
Процедура СформироватьWordИОткрытьPDF(МассивОбъектов, МакетИДанныеОбъекта, ИмяМакета)
ТипМакета = МакетИДанныеОбъекта.Макеты.ТипыМакетов[ИмяМакета];
ДвоичныеДанныеМакетов = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов;
Области = МакетИДанныеОбъекта.Макеты.ОписаниеОбластей;
Макет = УправлениеПечатьюКлиент.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакетов[ИмяМакета], ТипМакета, ИмяМакета);
Если Макет = Неопределено Тогда
Возврат;
КонецЕсли;
ЗакрытьОкноПечатнойФормы = Ложь;
Попытка
ПечатнаяФорма = УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(ТипМакета, Макет.НастройкиСтраницыМакета, Макет);
Если ПечатнаяФорма = Неопределено Тогда
УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
Возврат;
КонецЕсли;
Для каждого ДокументСсылка Из МассивОбъектов Цикл
ДанныеОбъекта = МакетИДанныеОбъекта.Данные[ДокументСсылка][ИмяМакета];
Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Основная"]);
УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);
КонецЦикла;
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗакрытьОкноПечатнойФормы = Истина;
Возврат;
КонецПопытки;
FilePDF = ПолучитьИмяВременногоФайла("pdf");
FileDOC = ПолучитьИмяВременногоФайла("docx");
MSWordApp = ПечатнаяФорма.COMСоединение;
MSWordApp.Application.Selection.Collapse();
// Восстановить вид просмотра документа.
Если ПечатнаяФорма.Свойство("ViewType") Тогда
MSWordApp.Application.ActiveWindow.View.Type = ПечатнаяФорма.ViewType;
КонецЕсли;
MSWordApp.Application.Visible = Истина;
MSWordApp.Activate();
WordDocument = MSWordApp.Application.Documents(1);
WordDocument.SaveAs(FilePDF, 17);
WordDocument.Close(0);
MSWordApp.Application.Quit();
УдалитьФайлы(FileDOC);
УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма, ЗакрытьОкноПечатнойФормы);
УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
ОписаниеОповещения = Новый ОписаниеОповещения();
НачатьЗапускПриложения(ОписаниеОповещения, FilePDF,);
КонецПроцедуры
Ну и вуаля — все готово.
Вообще весь код в статье, он мой рабочий, шаблон ворда — изготовите сами на 5 мин, ну а если нужно готовое — качайте готовое с Инфостарта https://infostart.ru/public/1753205/ (если есть стартмани конечно)
19.12.17 — 17:00
Здравствуйте. Печатную форму и заполнение ее вроде создал и все вроде как работает как надо, но вот только как ее добавить на форму в конфу. Почитал, что то наваял, на всякий случай дам полный код и ошибку:
Функция СведенияОВнешнейОбработке()
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить(«Документ.ПриемНаРаботу»); //Указываем документ к которому делаем внешнюю печ. форму
ПараметрыРегистрации.Вставить(«Вид», «ПечатнаяФорма»); //может быть — ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов…
ПараметрыРегистрации.Вставить(«Назначение», МассивНазначений);
ПараметрыРегистрации.Вставить(«Наименование», «Трудовой договор»); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
ПараметрыРегистрации.Вставить(«БезопасныйРежим», ЛОЖЬ);
ПараметрыРегистрации.Вставить(«Версия», «1.0»);
ПараметрыРегистрации.Вставить(«Информация», «Форма трудового договора»);
ТаблицаКоманд = Получить Таблицу Команд();
ДобавитьКоманду(ТаблицаКоманд, «ПечатнаяФорма», «ПечатьТД», «ВызовСерверногоМетода», Истина, «ПечатьMXL»);
ПараметрыРегистрации.Вставить(«Команды», ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции // СведенияОВнешнейОбработке()
Функция Получить Таблицу Команд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить(«Представление», Новый ОписаниеТипов(«Строка»));//как будет выглядеть описание печ.формы для пользователя
Команды.Колонки.Добавить(«Идентификатор», Новый ОписаниеТипов(«Строка»)); //имя макета печ.формы
Команды.Колонки.Добавить(«Использование», Новый ОписаниеТипов(«Строка»)); //ВызовСерверногоМетода
Команды.Колонки.Добавить(«ПоказыватьОповещение», Новый ОписаниеТипов(«Булево»));
Команды.Колонки.Добавить(«Модификатор», Новый ОписаниеТипов(«Строка»));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = «»)
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, «ПечатьТД», «Трудовой договор», ВывестиПечать());
КонецПроцедуры // Печать()
Функция ВывестиПечать() Экспорт
ФизЛицо = СсылкаНаОбъект.ФизическоеЛицо;
Для каждого Строка из ФизЛицо.КонтактнаяИнформация Цикл
Если Строка.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И Строка.Вид = Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица Тогда
АдресПрописки = Строка.Представление;
ИначеЕсли Строка.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И Строка.Вид = Справочники.ВидыКонтактнойИнформации.АдресМестаПроживанияФизическиеЛица Тогда
АдресПроживания = Строка.Представление;
КонецЕсли;
КонецЦикла;
Документ = РегистрыСведений.ДокументыФизическихЛиц.СоздатьНаборЗаписей();
Документ.Отбор.ФизЛицо.Значение = Справочники.ФизическиеЛица.НайтиПоНаименованию(ФизЛицо);
Документ.Отбор.ФизЛицо.Использование = Истина;
Документ.Прочитать();
Если НЕ Документ.Количество() = 0 Тогда
ВидДокумента = Документ[0].ВидДокумента.Наименование;
СерияДокумента = Документ[0].Серия;
НомерДокумента = Документ[0].Номер;
КемДатаВыдачи = Документ[0].КемВыдан + » от » + Формат(Документ[0].ДатаВыдачи,»ДФ=’дд ММММ гггг'»);
КонецЕсли;
ДокументНачисление = СсылкаНаОбъект.Начисления[0].Начисление;
ВидРасчета = ДокументНачисление.КраткоеНаименование;
ПериодРасчета = ДокументНачисление.ПериодРасчетаБазовыхНачислений;
Если СсылкаНаОбъект.ГрафикРаботы = Справочники.ГрафикиРаботыСотрудников.НайтиПоНаименованию(«Пятидневка 40») Тогда
РежимРаботы = «продолжительностью 8 часов в день с понедельника по пятницу (с 9-00 до 18-00) с перерывом один час на обед (с 13-00 до 14-00), при пятидневной рабочей неделе с двумя выходными днями (суббота, воскресенье)»;
ИначеЕсли СсылкаНаОбъект.ГрафикРаботы = Справочники.ГрафикиРаботыСотрудников.НайтиПоНаименованию(«Шестидневка») Тогда
РежимРаботы = «продолжительностью 7 часов в день с понедельника по пятницу (с 9-00 до 17-00) и 5 часов в день в субботу (с 9-00 до 15-00) с перерывом один час на обед (с 13-00 до 14-00), при шестидневной рабочей неделе с одним выходным днем (воскресенье)»;
ИначеЕсли Найти(СсылкаНаОбъект.ГрафикиРаботыСотрудников.Наименование, «вахта») <> 0 Тогда
Иначе РежимРаботы = «__________________НЕОБХОДИМО ЗАПОЛНИТЬ________________________»;
КонецЕсли;
Гражданство = РегистрыСведений.ГражданствоФизическихЛиц.СоздатьНаборЗаписей();
Гражданство.Отбор.ФизическоеЛицо.Значение = Справочники.ФизическиеЛица.НайтиПоНаименованию(ФизЛицо);
Гражданство.Отбор.ФизическоеЛицо.Использование = Истина;
Гражданство.Прочитать();
Если НЕ Гражданство.Количество() = 0 Тогда
ГражданствоФизЛица = Гражданство[0].Страна.Наименование;
КонецЕсли;
Табельный = СсылкаНаОбъект.Сотрудник.Код;
НомерДоговора = СсылкаНаОбъект.ТрудовойДоговорНомер;
ДатаДоговора = СсылкаНаОбъект.ТрудовойДоговорДата;
ДатаНачалаТД = СсылкаНаОбъект.ДатаПриема;
ИспытательныйСрок = СсылкаНаОбъект.ДлительностьИспытательногоСрока;
ДатаОкончанияТД = СсылкаНаОбъект.ДатаЗавершенияТрудовогоДоговора;
Должность = СсылкаНаОбъект.Должность;
ПодразделениеОтдел = СсылкаНаОбъект.Подразделение;
Макет = «ТД»;
Договор=ПолучитьМакет(Макет);
//Получить объект из макета.
MSWord = Договор.Получить();
Попытка
Документ = MSWord.Application.Documents(1);
// Получить объект, который будем использовать для поиска и замены.
Замена = Документ.Content.Find;
Замена.Execute(«<НомерТД>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, НомерДокументаБезНулей(СсылкаНаОбъект.ТрудовойДоговорНомер), 2);
// Замена = Документ.Content.Find;
// Замена.Execute(«<ФИО>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, СсылкаНаОбъект.ФизическоеЛицо.ФИО, 2);
// Замена = Документ.Content.Find;
// Замена.Execute(«<ДатаНачалаКаз>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, Формат(ДатаНачала,»Л=kk_KZ; ДЛФ=DD»), 2);
// Замена = Документ.Content.Find;
Замена.Execute(«<ДатаНачалаТД>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, Формат(ДатаДоговора,»Л=ru_RU; ДЛФ=DD»), 2);
Замена = Документ.Content.Find;
// Замена.Execute(«<ДатаОкончанияКаз>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, Формат(ДатаОкончания,»Л=kk_KZ; ДЛФ=DD»), 2);
// Замена = Документ.Content.Find;
// Замена.Execute(«<ДатаОкончания>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, Формат(ДатаОкончания,»Л=ru_RU; ДЛФ=DD»), 2);
// Замена = Документ.Content.Find;
// Замена.Execute(«<Должность>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, СсылкаНаОбъект.Должность.Наименование, 2);
// Замена = Документ.Content.Find;
// Замена.Execute(«<График>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, РежимРаботы, 2);
// Замена = Документ.Content.Find;
// Замена.Execute(«<Оклад>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, СсылкаНаОбъект.ОсновныеНачисления[0].Показатель1, 2);
// Замена = Документ.Content.Find;
// Замена.Execute(«<ОкладПрописью>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, ЧислоПрописью(СсылкаНаОбъект.ОсновныеНачисления[0].Показатель1, «Л=ru_Ru;ДП=Истина», «тенге, тенге, тенге, м, тиын, тыин, тыин, м, 2»), 2);
// Замена = Документ.Content.Find;
// Замена.Execute(«<ОкладПрописьюКаз>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, ЧислоПрописью(СсылкаНаОбъект.ОсновныеНачисления[0].Показатель1, «Л=kk_KZ;ДП=Истина», «тенге, тенге, тенге, м, тиын, тыин, тыин, м, 2»), 2);
// Замена = Документ.Content.Find;
// Замена.Execute(«<ИНН>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, Число(СсылкаНаОбъект.ФизЛицо.ИдентификационныйКодЛичности), 2);
// //Замена = Документ.Content.Find;
// //Замена.Execute(«<Удостоверение>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, НомерУдостоверения, 2);
// //Замена = Документ.Content.Find;
// //Замена.Execute(«<Выдан>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, ДатаВыдачи, 2);
// //Замена = Документ.Content.Find;
// //Замена.Execute(«<Адрес>», Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, АдресФактический, 2);
MSWord.Application.Visible = Истина;
MSWord.Activate();
Исключение
// Если произойдет ошибка, выводятся данные об ошибке, и объект закрывается.
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
MSWord.Application.Quit();
КонецПопытки;
КонецФункции
Функция НомерДокументаБезНулей(НомерДокумента)
Ошибка:
{ОбщийМодуль.СтандартныеПодсистемыКлиент.Модуль(117)}: Ошибка при вызове метода контекста (ОткрытьФорму)
ОткрытьФорму(«ОбщаяФорма.Вопрос», Параметры,,,,,ОписаниеОповещенияОЗавершении);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘val’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/mngsrv/ws}val
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘КодВозвратаДиалога’
Помогите пожалуйста с регистрацией формы, а то мозг скоро потечет, зачем они так усложнили все, раньше ведь просто было. Заранее спасибо тем, кто поможет!
Формирование и заполнение документов Microsoft Word ЛЮБОГО шаблона на основании документов и справочников системы. Любые документы и справочники 1С. Заполнение по реквизитам шапки и табличной части.
-
Основное
-
Совместимость
-
Прочее
Артикул | 358 |
Обновлено | 21.12.2022 |
Исходный код | Открыт |
Изменение конфигурации | Не требуется |
Покупок | 55 |
- BAS ERP (UA)
- BAS Комплексное управление предприятием 2 (UA)
- BAS Управление торговлей 3 (UA)
- Бухгалтерия предприятия 3.0
- Зарплата и управление персоналом 3.1
- Комплексная автоматизация 2.4 (BY)
- Комплексная автоматизация 2.4 (KZ)
- Комплексная автоматизация 2.4 и 2.5
- Управление нашей фирмой 1.6
- Управление нашей фирмой 3.0
- Управление предприятием ERP 2.4 и 2.5
- Управление торговлей 11.4 и 11.5
- Управление торговлей 3 (BY)
- Управление торговлей 3 (KZ)
Очень полезная внешняя обработка для всех типовых конфигураций 1С:Предприятие 8.3, позволяет формировать файл Word по выбранному шаблону из справочников и документов системы. С ее помощью вы можете распечатывать из 1С различные спецификации, трудовые договоры и договоры с контрагентами, гарантийные талоны и прочее прочее. Имея под рукой Word нужной структуры и чуть доработав его, вы получите возможность формировать его прямо из 1с с заполнением всех нужных параметров.
Принцип работы обработки следующий:
- выбираем Word нужной структуры,
- в тех местах файла, где необходимо вставить информацию из 1С, делаем закладки (bookmarks),
- после подготовки шаблона добавляем его в 1С (справочник Файлы),
- настраиваем заполнение шаблона печати в 1С,
- печатаем нужные документы/справочники, выбрав созданный шаблон.
Подготовка шаблона Word
Для демонстрации работы обработки настроим печать спецификации к договору из документа Заказ клиента. Допустим, у нас есть такой Word:
Из него будем формировать полноценную спецификацию. Необходимо из этого файла сделать универсальный макет, который бы каждый раз брал данные для заполнения из исходного заказа. Для этого выделяем нужные блоки в документе и для них делаем закладки:
Каждой закладке даем имя.
Имена закладок должны быть уникальными и не повторяться. В имени закладки нельзя использовать пробелы.
При печати также будем заполнять таблицу товаров. Чтобы она сформировалась красиво, оставим шапку и одну пустую строку:
Сохраняем Word, закрываем.
Настройка заполнения шаблона
Теперь в программе открываем журнал заказов клиента, заходим в меню печати и жмем кнопку для настройки печати по шаблону Word:
Настройка шаблонов доступна только пользователям с полными правами.
Окно настроек выглядит следующим образом:
В верхней части расположена таблица сохраненных шаблонов печати (которые относятся именно к заказу клиента). Добавляем новую строку таблицы, создаем новый шаблон. В строке указываем наименование шаблона (по которому впоследствии будет заполняться наименование файла). В этом наименовании можно использовать не только произвольные символы, но и заменяемые параметры (в квадратных скобках). Далее выбираем собственно файл Word (предварительно его надо добавить в справочник Файлы).
Если нужно сразу сохранить файл в присоединенные файлы заказа клиента, устанавливаем галку. В результате получится подобная картина:
При выборе файла автоматически заполняется расположенная ниже таблица закладок. Наша следующая задача — настроить источники значений для этих закладок.
Можно использовать как реквизиты исходного объекта печати (в данном случае заказа клиента), так и реквизиты реквизитов.
Для более быстрого заполнения поддерживается ввод названий с клавиатуры.
В случае работы с датой можно выбрать формат вывода.
В отдельной колонке сразу можно увидеть значение, которое будет подставлено в закладку макета Word.
Полный перечень доступных реквизитов выглядит внушительно:
Для объектов можно использовать не только значения собственных, но и дополнительных (созданных пользователями вручную) реквизитов. Для организаций и контрагентов можно использовать адреса, почту, телефоны и банковские реквизиты. Для физических лиц можно использовать паспортные данные.
В отдельной колонке таблицы закладок можно задавать падеж (для правильного склонения полученного значения), а также необходимость склонения ФИО.
На выходе получается такая таблица:
В шаблоне присутствует таблица товаров — для настройки ее заполнения переходим на вкладку Таблицы.
Выбираем из какой табличной части брать данные:
После этого через запятую перечисляем названия реквизитов табличной части, значениями которых необходимо заполнить таблицу нашего шаблона. Их количество должно совпадать с количеством колонок шаблона. Для справки в последней колонке приведены все возможные значения.
Для некоторых колонок можно просто прописать постоянное значение (на скрине выше это ШТ).
На этом настройка шаблона завершена, не забываем сохранить настройки.
Настройка шаблонов — задача одноразовая, один раз настроили и потом печатаете любые заказы сколько угодно раз.
Если нужно сохранить еще один шаблон, то проделываем повторно такую же работу.
Для редактирования шаблона выделяем его в верхней таблице (при этом таблица закладок заполняется автоматически из сохраненных настроек), вносим правки и сохраняем.
Для удаления шаблона выделяем его в списке и нажимаем Del, затем сохраняем настройки.
Для печати вызываем команду По шаблону Word (печать), в результате на экране появляется форма прикрепленного файла (т.к. мы включили сохранение файла).
Обратите внимание, что в названии файла заменяемые параметры исчезли — вместо них подставились значения документа.
Итоговый файл Word выглядит так (название файла тоже заполнилось согласно настройке):
Если для объекта создать несколько шаблонов печати, при нажатии на кнопку печати будет появляться окно с выбором нужной печатной формы.
Документы можно печатать как по отдельности, так и списком.
Чтобы оставить комментарий, зарегистрируйтесь и авторизуйтесь на сайте.