gifts2017

Автоматическое заполнение шаблонов из дополнительных реквизитов "1С:Документооборот 8".

Опубликовал Дмитрий Моргунов (Stalker27) в раздел Программирование - Практика программирования

Администратор создаёт новое поле в карточке документа в пользовательском режиме (дополнительный реквизит), пользователь 1С:Документооборот вводит данные в это поле, система должна автоматически подставить в шаблон документа введенные данные. Как подобраться к доп.реквизиту?

Возможности автозаполнения шаблонов можно посмотреть в поучительном ВИДЕО.

Там описаны основы для подготовки автозаполнения, которые будут использоваться в данной статье. Здесь же будут рассмотрены некоторые немаловажные моменты. 

Предупреждение: в описании статьи дан обзор минимального создаваемого набора, нужного для осуществления автозаполнения. Сделано это для того, чтобы почти ничего не умеющий человек смог быстро создать набор для тестирования автозаполнения. Тем, кто с этим всем уже знаком - советую просто пробежаться глазами и дойти до нужного момента.

1. Итак, для начала создадим новый Файл. Это будет файл формата MS Word. В редакторе MS Word создадим новое "поле", заполним поля, как на скриншоте.

http://infostart.ru/upload/iblock/556/1.png

Загрузим файл в систему. Для этого переходим на вкладку "Документы и файлы", ссылка "Файлы". Создаём Файл в режиме "Из файла на диске". Выбираем нужный файл, делаем описание и вот, он загружен в систему. 

2. Создадим новый вид документа, для этого заходим в подсистему "Нормативно-справочная информация", нажимаем ссылку "Виды документов". Создаём новый вид документа, открываем "Набор дополнительных свойств документов данного вида". 

http://infostart.ru/upload/iblock/28b/2.png

Создаём новый дополнительный реквизит. 

http://infostart.ru/upload/iblock/07b/2.png

 

 http://infostart.ru/upload/iblock/fab/1.png

Создаём новый Внутренний документ. Для этого переходим в подсистему "Документы и файлы", и там создаём новый документ. Ставим вид документа равным "ТестовыйВидДок", который был создан ранее. Также должен появиться созданный нами доп.реквизит.

http://infostart.ru/upload/iblock/33c/8.png

Заполним значение доп.реквизита.

http://infostart.ru/upload/iblock/af0/9.png

Записываем и закрываем внутренний документ.

Далее нужно создать правило автозаполнения. Для этого переходим в подсистему "Нормативно-справочная информация", открываем "Правила автозаполнения шаблонов файлов" и создаём новое правило.

http://infostart.ru/upload/iblock/c0b/7.png

На скриншоте выше показан пример, когда "поле" в документе MS Word будет заполняться из стандартного реквизита. Т.е. наше поле в текстовом документе будет заменено на значение "ТестовыйВидДок", но нам нужно значение "16047", которое мы прописали в поле карточки внутреннего документа, в дополнительном реквизите. Для этого необходимо написать определенный код, ради которого и писалась эта статья. Пример:

 http://infostart.ru/upload/iblock/d8f/11.png

РезультатОбработки = АвтозаполнениеШаблоновФайловСервер.ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла.Ссылка,"ТестовыйДопРеквизит")

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

Для указания другого доп.реквизита необходимо в данной строчке просто поменять значение "ТестовыйДопРеквизит" на другое название другого доп.реквизита.

Помимо данного кода в данном поле можно использовать различные вариации другого кода, например:

  • РезультатОбработки = АвтозаполнениеШаблоновФайловСервер.ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла.Ссылка,"Страна, город") + " " + АвтозаполнениеШаблоновФайловСервер.ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла.Ссылка,"Организация")

т.е. можно соединять несколько доп.реквизитов в одну строку, например.

  •  РезультатОбработки = (НачалоДня(Файл.ВладелецФайла.ДатаОкончанияДействия) - НачалоДня(Файл.ВладелецФайла.ДатаНачалаДействия)) / 86400 + 1;
в данном случае реально брать данные из простых реквизитов на форме и преобразовывать их.
  • ФИО = ПолучитьЗначениеДопРеквизитаОбъекта(Файл.ВладелецФайла.Ссылка,"Утвердил");
  • НайденныйПользователь = Справочники.Пользователи.НайтиПоНаименованию(ФИО);
  • СведенияПользователя = РегистрыСведений.СведенияОПользователях.Получить(Новый Структура("Пользователь", НайденныйПользователь));
  • РезультатОбработки = СведенияПользователя.Должность;
ну или так.

Вывод: автозаполнение - штука весьма полезная, и, как видно, можно получить практически любые данные с помощью практически любых методов.

3. Ещё один момент, кому-нибудь когда-нибудь пригодится. Допустим, необходимо на каждой странице шаблона в колонтитуле выводить некую информацию (неважно, откуда она берется - из дополнительного или же из обычного реквизита). Пример следующий: нужно на каждой странице автоматически выводить дату и пользователя, ну или что-то одно. В MS Word в колонтитулах можно написать некую строку, однако преобразовать её к "полю" нельзя (оно неактивно, видно на скриншоте). 

http://infostart.ru/upload/iblock/da4/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80.JPG

Поэтому в данном случае правильно использовать замену строки. Выбираем какую-нибудь неповторимую строку (чтобы случайно не заменить нужную строку в самом документе), например "П12@3a" и вставляем её в колонтитул шаблона документа.

А дальше - кто-то уже догадался. Я сразу не заметил, всё пытался как-нибудь "докопаться" до этого "поля" в MS Word. Итак, делаем, как на скриншоте:

 http://infostart.ru/upload/iblock/0f9/12.png

Спасибо тем, кто прочитал даже до этого момента, первая статья, не судите строго, сам всё знаю =)

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Кирилл Бондаренко (karapuzzzz) 21.05.14 03:23
А зачем так извращаться? Выбираете замену "На значение реквизита" и в дереве выбираете "ВладелецФайла - ДопРеквизиты - ВашРеквизит".
2. Дмитрий Моргунов (Stalker27) 21.05.14 08:35
(1) karapuzzzz,

Документооборот 8 КОРП, редакция 1.3 (1.3.2.4). 1С:Предприятие 8.3 (8.3.4.437)
У меня такого нет. И, как я понимаю, не только у меня этого нет. Откуда у Вас, даже не знаю =)
3. uri1978 uri1978 (uri1978) 21.05.14 11:56
(2) Stalker27,
На самом деле у всех такое есть. У меня тоже Корп 1.3.
Если нужно просто без обработкки вывести значение дополнительного реквизита, то пользуюсь как и karapuzzzz.
А если нужно дополнительный реквизит обработать (например отсрочку платежа (число) написать прописью), то тогда конечно программно, тот метод который вы указали.

Статья я лично считаю интересной и полезной. Пишите еще.

P.S. Без придирок, просто на всякий. Процедура ПолучитьЗначениеДопРеквизитаОбъекта видна из контектса обработки, т.е. название модуля АвтозаполнениеШаблоновФайловСервер можно не писать. Немного разгружает текст обработки, особенно если обработка большая.
4. Дмитрий Моргунов (Stalker27) 21.05.14 13:00
(3) uri1978,

Действительно есть (нашёл-таки), только у меня не в "и в дереве выбираете "ВладелецФайла - ДопРеквизиты - ВашРеквизит"" а в ветке "ВладелецФайла - Ссылка - ДопРеквизиты". И ведь в строчке кода было понятно, что именно там находятся ДопРеквизиты...
Проверил, действительно можно писать без указания названия общего модуля. Правда полезно, зачем много кода-то писать =) Полезное замечание =)
Спасибо, приятно! Если найдутся интересные темы, обязательно напишу! А эту статейку стоит отредактировать...

(1) karapuzzzz,
Да, действительно, не заметил, что можно выцепить ДопРеквизит проще. Но, как уже написал uri1978: "А если нужно дополнительный реквизит обработать (например отсрочку платежа (число) написать прописью), то тогда конечно программно".
5. Светлана Гильман (SvetLanaGil) 15.09.14 11:37
Действительно Доп.реквизиты "переехали в ссылку лишь с недавнего времени. После обновления при создании новых автозаполняемых шаблонов была неприятно удивлена отсутствием на привычном месте Доп. реквизитов... после непродолжительных изысканий нашла их в новом месте: ВладелецФайла.Ссылка.ДопРеквизиты.
А вообще очень интересная и полезная статья. Большое спасибо. При внедрении Документооборота на предприятии похожей информации было минимум, приходилось самостоятельно разбираться. Но и сейчас из вашей статьи кое - что почерпнула полезное, например работа с колонтитулами. Еще раз спасибо за статью.
6. Дмитрий Моргунов (Stalker27) 15.09.14 09:47
(5) SvetLanaGil,
Приятно, что что-то из статьи пригодилось =)
Вам спасибо большое, подняли настроение!!! ;)
7. reznic Резник (reznic) 29.10.14 22:53
у меня вообще с с ним одни проблемы

поля из файлов odt он не заполняет хоть тресни, не находит их просто для выбора

строки для docx тоже не заменяет, пишет что нет такой комбинации

никто не сталкивался? как это побороть?
8. Дмитрий Моргунов (Stalker27) 30.10.14 09:05
(7) reznic, поля в odt не поддерживаются. Если "текст по умолчанию" в поле был указан, то поле просто преобразуется в этот текст. Если нет - то просто исчезает (превращается в пустое поле). Однако строки, по крайней мере у меня, он заменяет. Посмотрите внимательно файл, возможно там правда отсутствуют Ваши строки. Вот, например, у меня что выскакивает в случае отсутствия строк:

{Справочник.ПравилаАвтозаполненияФайлов.Форма.ФормаЭлемента.Форма(262)}: Следующие строки отсутствуют в шаблоне:
&Ответственныййй
ВызватьИсключение ОписаниеОшибкиСтроки;

То есть я ввёл, чтобы он заменял эту строку "&Ответственныййй" (у меня в документе есть строка "&Ответственный") на Ответственного, указанного в карточке документа. Однако такой строки у меня нет, ну он её не находит и пишет такую вот ошибку.

А так заменяются строки и в odt и в docx. Можно использовать данный метод замены.
Проверьте, может у Вас другая ошибка, скрины если есть, пришлите.
9. reznic Резник (reznic) 30.10.14 22:43
с опен офисом спасибо, не знал, и негде несказано

а ворд на замену вот что выдает (см скриншот)
Прикрепленные файлы:
10. Дмитрий Моргунов (Stalker27) 31.10.14 08:48
(9) reznic,

Это точно поле, а не простой текст?
Если это поле, то файл точно сохранён? Надо смотреть, так точно не скажу даже :)

На скрине правильное заполнение поля, ну примерное по крайней мере =)
Прикрепленные файлы:
11. reznic Резник (reznic) 31.10.14 09:09
нет, это не поле, так собственно и проблема в том что поля он видит в ворде, причем может видеть даже те которых я не делал, но это проблема ворда уже, а вот в данном случае я пытался заменить сроку в файле а не поле, см скриншот
Прикрепленные файлы:
12. reznic Резник (reznic) 31.10.14 09:15
сейчас попробовал, в либро офисе поля заменяет
13. Дмитрий Моргунов (Stalker27) 31.10.14 12:00
(12) reznic,
Ну в ворде какой-то глюк значит =)
14. reznic Резник (reznic) 04.11.14 16:35
именно он и глючил гад

а в чем может быть проблема, не выводит {ВладелецФайла|УдалитьПредметПереписки|Ссылка} и не работает Объект = Файл.ВладелецФайла.УдалитьПредметПереписки;
15. reznic Резник (reznic) 04.11.14 18:31
а ни куму не доводилось выводить изображение в шаблон прикрепленное через доп реквизит?
16. Кирилл Бондаренко (karapuzzzz) 05.11.14 01:45
(15) reznic, Без доработок не выведет. Там стоит проверка на тип вставляемых данных. И это должен быть только текст.
17. reznic Резник (reznic) 05.11.14 09:55
(16) karapuzzzz, спасибо за пояснения, а каким способом можно тогда добиться создания универсального фирменного бланка, чтоб не плодить их для каждой организации, все уперлось только в логотип
18. Кирилл Бондаренко (karapuzzzz) 05.11.14 15:35
(17) reznic, только дорабатывать. Я уже точно не помню как. Нет доступа к тем разработкам. Но реализовывал вставку таблицы, картинки, содержимого из другого документа. Может, со временем смогу это сделать в виде статьи.
19. reznic Резник (reznic) 22.11.14 22:00
(8) Stalker27, кстати поля в одт поддерживают, на днях попробую себя в написании обзора
20. KRIHA (KRIHA) 18.02.15 10:09
Люди, извините что не в тему - помогите ответом на вопрос: можно ли в 1С:Документооборот в качестве исполнителя выбрать группу (или роль, или еще что) таким образом, что задача на исполнение приходит всем пользователям группы, но кто первый "схватил" и согласовал тот и собственно и завершает процесс согласования. Может быть я коряво написал - заранее приношу за это извинения.
21. uri1978 uri1978 (uri1978) 19.02.15 17:26
(20) KRIHA,
Да такое можно. Создаете роли, относите пользователей эти ролям. Назначаете роли в шаблонах согласований. Задачи будут приходить всем пользователям группы. Кто первый взялся за задачу должен её взять себе (клавиша "Принять к исполнению"). В документации есть.
22. Андрей Истомин (Iscarimet) 05.03.15 14:18
Есть такой вопрос:
Шаблон файла заполняется в том числе и значениями из допреквизитов документа. Есть допреквизит в виде составного типа данных (Корреспондент и Подразделение).
Как заполнять в зависимости от типа значения этого допреквизита поле в шаблоне адресом указанного корреспондента или адресом подразделения (допустим этот адрес записан в комментарии к подразделению)?

То есть в итоге поле должно заполняться адресом корреспондента, если в допреквизите выбран тип значения "Корреспондент", и наоборот, должно заполняться комментарием подразделения, если в допреквизите выбран тип значения "Подразделение".

Конкретная проблема в обращении к типу допреквизита.
23. reznic Резник (reznic) 05.03.15 21:22
только через произвольный алгоритм на встроенном языке

я включил возможность изменения, создал общий модуль и все свои функции и процедуры заполнения помещаю в него
24. Азат (placent) 25.08.15 11:59
Кто нить сталкивался с такой проблемой ?
Релиз Документооборот 8 КОРП, редакция 2.0 (2.0.8.7).
Пользователь создал Внутренний документ. Заполнил организацию и тд. Заполнил Wordовский файл шаблона. Сохранил внутренний документ.
А потом меняет реквизит внутреннего документа (к примеру сумму). И вот тут нужно снова в ручную пере заполнить файл шаблона, чтобы сумма обновилась. Как бы автоматизировать пере заполнение шаблона ?

Для реализации создал Доп обработку. В котором запрос с отбором файла и команда
ДанныеВыполнения = АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(Истина, Выборка.Ссылка, Истина);
Далее прикрепил эту доп обработку к Подпискам на бизнес событие. Изменение внутреннего документа.
После этих настроек. При записи внутреннего события, в справочнике Произошедшие бизнес события появляется новая запись.

Теперь запускается фоновое задание "Обработка произошедших бизнес-событий". Которое пытается обработать "Произошедшие бизнес события" и ставит там число попыток обработки 3. А признак выполнен не ставит.

По результату файл шаблона не обновлен.
25. V (clev) 29.09.15 00:28
(24) placent, Вам удалось решить эту проблему?
26. Татьяна Ильина (tat10) 30.11.15 09:23
Добрый день!
Может кто-нибудь сталкивался с такими проблемами:
1. Есть шаблон приказа. Там есть согласующие подписи. Как их вставить в ворд для автозаполнения? Никак не могу настроить правила автозаполнения шаблонов. Т.е. нужно вывести несколько строк согласующих подписей: должность и ФИО ..
2. Как в правилах автозаполнения шаблонов выбрать адрес контрагента, телефон и другую информацию?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа