gifts2017

Легкое создание пользователем внешних печатных форм методом Drag & Drop

Опубликовал Константин Гейнрих (CyberCerber) в раздел Печать - Универсальные печатные формы

Универсальная внешняя печатная форма (ПФ), которая позволяет пользователю, без знаний программирования и не заходя в конфигуратор, создать ПФ любого документа или справочника в Microsoft Word или OpenOffice Writer методом перетаскивания (Drag & Drop). Можно создавать любые ПФ с выводом табличных частей, реквизитов документа, а также вложенных реквизитов и контактной информации. Не требует изменения конфигурации. Работает на версии платформы 8.3 в типовых конфигурациях на управляемых формах (например, Бухгалтерия 3.0, УТ 11, УНФ, Розница, Документооборот), а также и в других конфигурациях на УФ, построенных на БСП.

Идея данной обработки возникла из механизма ПФ в УТ 11, где можно на основании документа создавать файл для программ Microsoft Office Word и Open Office Writer (Далее, для краткости, просто Office). Однако там такие ПФ статичны, чтобы поправить существующий или создать новый макет, нужно изменять конфигурацию, прописывать вывод необходимых реквизитов.

Появилась задача разработать механизм для создания таких ПФ Office «налету», просто перебрасывая реквизиты документов, справочников из формы обработки в нужные места файла-шаблона.

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

Основной интерфейс обработки

Перед вами основное окно обработки. Разберем, что здесь есть.

 Интерфейс

  1. Поле «Документ». Если обработка запущена как ПФ из конкретного элемента справочника или документа, это поле будет уже заполнено, если через «Файл - Открыть», то выбирайте любой сами. По данным именно этого объекта будет заполняться файл.
  2. Папка макетов. Это папка на диске, в которой будут храниться все созданные макеты, файлы-шаблоны. Данное поле пользователь заполняет в первый раз, и оно сохраняется в настройках. Получается, что у каждого пользователя будет свой набор макетов из его папки. Если одни и те же макеты необходимо использовать нескольким людям, можно либо выбрать «расшаренную» папку в сети, либо папку, которая подключена к общему облачном хранилищу. В последнем случае макеты будут доступны и через Интернет.
  3. Уровень вложенности. Данный параметр используется для построения дерева, палитры реквизитов документа. Например, если Уровень = 1, в дерево будут выведены только реквизиты документа, если Уровень = 2, то реквизиты документа и реквизиты реквизитов документа и т.д. Чем больше Уровень, тем дольше будет строиться дерево. Уровень > 3 уже, скорее всего, не нужен. Данный параметр используется только при создании макета. При дальнейшем использовании созданного макета Уровень уже не важен, будут обрабатываться реквизиты любой вложенности.
  4. Список макетов. В список входят все файлы с расширением doc, docx, odt, которые находятся в папке макетов. Список обновляется каждую минуту. Также есть отдельная кнопка для обновления списка. Двойной клик на файле из списка, в принципе, выполняет основную функцию обработки – формирует уже готовый заполненный файл по данным документа. Правый клик на файле позволяет открыть макет для редактирования.
  5. Кнопки «Создать макет MS Word» и «Создать макет OO Writer» нужны для создания нового макета для одной из офисных программ. О самом процессе создания поговорим в следующем разделе.

Создание макета для печати

При нажатии кнопки создания или изменения макета, обработка переключается на вкладку «Создать/Редактировать», а также открывается уже существующий или вновь созданный файл в офисной программе.

Т.к. макет строиться методом Drag & Drop, удобно, когда окна 1С и офисной программы находятся рядом. В Windows это можно легко сделать с помощью сочетаний клавиш. Сделайте активным окно 1С и нажмите «Win» + «Стрелка влево», оно займет левую половину экрана. Теперь перейдите на окно документа Office и нажмите «Win» + «Стрелка вправо». Все, теперь можно легко перекидывать элементы.

1

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

Правая же часть формы создания – это дерево реквизитов. Тут все просто: корень – это сам документ, в него входят его реквизиты, табличные части (выделены жирным). Реквизиты могут в себя включать свои реквизиты, и т.д., в зависимости от уровня вложенности. Если в каком-то справочнике (например, организации, контрагенты) есть контактная информация, она также появится в дереве. Именно перетаскивая элементы этого дерева, мы будем строить свой макет.

Давайте рассмотрим подробнее процесс создания на конкретном примере.

Пример создания макета

Возьмем документ реализации из УТ 11 и создадим для него простой макет для Open Office Writer. Нажимаем соответствующую кнопку, вводим название макета и переходим к редактированию.

Для начала выведем заголовок документа. Для этого напишем свой текст и перетащим поля Номер и Дата. Увеличим шрифт, сделаем жирным. В итоговом документе подставленные значения будут иметь такой же шрифт, что и поля в шаблоне.

 

2

 

Теперь выведем сведения об организации и контрагенте. Вытащим не просто ссылки, а наименования, более подходящие для печатных форм.

 

3

 

Под контрагентом выведем еще его телефон. Возьмем его из контактной информации. Также ниже выведем шапку таблицы. На этом область заголовка заканчивается.

 

4

 

Теперь сама таблица. Перетаскиваем из списка областей «Начало строки таблицы Товары», потом рисуем саму таблицу, а потом кидаем «Конец строки таблицы Товары».

 

5

 

Из дерева реквизитов, из табличной части Товары перетаскиваем реквизиты в ячейки таблицы. Ничего страшного, что колонка «Номер строки» так растянула таблицу, в итоговом документе высота подстроится автоматически.

 

6

 

Осталось вывести подвал. Перетаскиваем начало и конец области, заполняем текстом и необходимыми реквизитами документа.

 

7

 

На этом все. Сохраним, закроем файл, перейдем к списку макетов и кликнем на вновь созданный макет. Выведется уже заполненный файл, соответствующий документу.

 

Итог

Вместо заключения

Буду рад услышать от вас отзывы, замечания, предложения по обработке. Например, есть идея по механизму вывода на печать дополнительных реквизитов, если это будет необходимо.

Скачать файлы

Наименование Файл Версия Размер
Универсальная печатная форма Office 131
.epf 38,83Kb
04.01.16
131
.epf 1.1.1 38,83Kb Скачать

См. также

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

Комментарии

1. Andrey (kentavr27) 05.01.16 19:00
Интересно, конечно. Надо бы поразбираться. Я тож делал нечто подобное (Универсальная печать документов в Word + визуальный конструктор макета), но не нашелся как дропать непосредственно из 1С в Word (поэтому Drad&Drop у меня работае несколько иным способом). Да еще руки до табличных частей не дойдут никак.
Навскидку можно сказать, что без форматирования данных, пользование будет не очень комфортным... Например, кому нужно время документа в печатной форме? А если пользователь захочет месяц прописью увидеть? Форматирование числовых данных тоже не помешает. Сумма или цена в базе может храниться и с 10-тью знаками после запятой, но выводить на печать нужно только два.
Как по мне -- то макеты документов лучше хранить в БД. В этом случае пользование макетом будет у всех, кто работает в тонком клиенте (не по РДП). Иначе -- сам создал - сам пользуешься, а с другого клиента уже его не получишь.
Ну и оформление в виде подсистемы (по-моему) -- более универсально. Подсистему можно внедрить в любую конфигурацию, не только в типовую или имеющую БСП.
А вообще -- однозначный +
JohnyDeath; +1 Ответить 1
2. Константин Гейнрих (CyberCerber) 06.01.16 00:28
(1) kentavr27, большое спасибо за развернутый комментарий.
Отвечу по-порядку...

Про форматирование это вы верно подметили. Сам уже о нем думал. В принципе, идея реализации уже есть, так что, думаю, сделаю в следующей версии.

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

Все-таки идея у меня была - отдельная обработка, а не подсистема из-за которой надо изменять конфу. Да и следует ли выдирать из БСП нужные методы (которых наберется много) и вставлять в свою подсистему? Это вопрос и с точки зрения правил программирования, и лицензирования. А БСП вещь хорошая, считаю, должна быть в любой серьезной конфигурации.
3. bulpi bulpi (bulpi) 06.01.16 10:36
Пытался поставить + , но не получается
4. vic777tor (vic777tor) 06.01.16 11:56
Идея замечательная, но:
В печатных формах очень редко список выводимых полей ограничивается только значениями реквизитов самого документа или значениями реквизитов реквизитов.
В большинстве случаев требуется получить данные так же и из других источников, поэтому в ПФ типовых конфигураций используются запросы.
В качестве примера, ключевым требованием вывода данных табличных частей, является группировка строк - для исключения дублей.
Так же часто требуется дополнительно обрабатывать результат выборки данных, к примеру использовать сортировку.
Все это реализовать в данном решении, к сожалению, не представляется возможным.
nni93; Glebis; +2 Ответить 1
5. Константин Гейнрих (CyberCerber) 06.01.16 14:33
(4) vic777tor, да, ожидал, что будут такие замечания.

Просто изначально обработка задумывалась как максимально простой инструмент, которым может воспользоваться любой пользователь. Например, с помощью нее легко делать договоры с контрагентами. Заполняемой информации там немного, и всю ее можно взять из реквизитов. Главное - это оформление документа, шрифты, логотипы... Вот здесь легче сделать моей обработкой, чем через конфигуратор.

Но да, возможности текущей версии, конечно, ограничены. У меня есть идея делать две версии обработки: первая - это существующая с максимально простым интерфейсом, а вторая - Pro, в которой можно сваять любую ПФ, используя произвольные вычисления и запросы.
6. Павел (Yimaida) 07.01.16 00:15
(5). Добрый вечер. В договорах, как раз, и не подходят доступные через + реквизиты. Например, ФИО, Фамилия и инициалы, ФИО/должность в родительном падеже, суммы, суммы прописью (говорили уже об этом), на основании Устава/Доверенности...
Бывает, что в договорах есть ветвление от значений реквизитов.
Инструмент полезный, но использование его ограничено. С таким же успехом можно создать нормальную внешнюю печатную форму (ВПФ). Любое усложнение функционала по использованию дополнительных реквизитов, внешних функций и т.п. будет требовать от пользователя "продвинутости", и тогда возникает вопрос, может этому пользователю научиться создавать ВПФ через конфигуратор. Может есть смысл оставить в таком виде, ничего не усложняя.

P.S. Написал, чтобы доставить радость своим замечанием :)
7. Константин Гейнрих (CyberCerber) 07.01.16 11:32
(6) Yimaida, здравствуйте, спасибо за комментарий.

Так если вы сами пишете, что функционал ограничен, то зачем же останавливаться, надо развиваться. :-) Выбор форматов, падежей, прописи можно добавить и без особого усложнения интерфейса для пользователя. А вот ветвления и другие сложные условия и вычисления - это да, уже нужны продвинутые знания. Поэтому я и думаю об отдельной версии Pro.
8. Анна Евсеева (DocW) 14.04.16 09:18


Не подскажете, почему такая ошибка? запускаю на БГУ, 8.3.7.1917.
9. Константин Гейнрих (CyberCerber) 15.04.16 17:51
(8) DocW, скажите, раньше обработка работала, а сейчас перестала?

По этому тексту ничего не понятно. Можете скинуть полный текст ошибки? Вот инструкция, как его получить:
https://drive.google.com/open?id=0Bwv95yAVP0VSdEtwalhOX3Z0WUYtOU1Ja1ZXMDMzeTd1MG1R
10. Анна Евсеева (DocW) 18.04.16 11:32
{Форма.Форма.Форма(298)}: Ошибка при вызове метода контекста (Выполнить)
Выборка = Запрос.Выполнить().Выбрать();
по причине:
Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
по причине:
Предопределенный элемент не существует
11. Кононова Людмила (vilaud) 19.05.16 19:36
Добрый день, будьте добры, подскажите как вытащить из справочника Организации ФИО и паспортные данные Гендира в создаваемую форму.
12. Константин Гейнрих (CyberCerber) 20.05.16 12:38
(11) vilaud, добрый день!
А какая у вас конфигурация?
13. Юрий Дмитро (12Balych) 02.06.16 22:14
Замечательная обработка, но для ЗУП 3.0 нам так же не хватает паспортных данных сотрудника
14. Константин Гейнрих (CyberCerber) 03.06.16 09:35
(13) 12Balych, добрый день.
Спасибо за отзыв!
Я постараюсь добраться до новой версии, где сделаю возможность вывода паспортных данных.
15. Алексей Ермилов (Alex_E) 08.06.16 09:48
Всё бы хорошо, но нет возможности даже для доступных данных их как то изменить, например использовать Формат... Нужен для вывода даты например в формате 25 мая 2016г. или чило строкой - любая накладная или акт этого требуют...
16. Константин Гейнрих (CyberCerber) 08.06.16 10:32
(15) Alex_E, в новой версии у меня уже есть работа с форматом. Осталось только немного попилить еще ее, и тогда выложу новую версию.
17. Алексей Ермилов (Alex_E) 08.06.16 10:34
(16) CyberCerber, Если кроме формата ещё разрешить пользоваться процедурами общих модулей было бы просто великолепно - например ПолучитьНомерНаПечать
18. Трактор Трактор (Трактор) 08.06.16 10:42
Вспомнился редактор форм 1С:Бухгалтерии 6.0. Похожий был. Только там в тегах и код писался. Давно это было.
19. Виталий (PVG_73) 08.06.16 11:09
Интересное решение, а если уже есть и форматирование.... :)
20. Константин Гейнрих (CyberCerber) 08.06.16 23:41
(17) Alex_E, мысли и идеи по выполнению произвольных методов тоже есть, но это уже в следующей версии. :-)
21. Наида Мухумаева (naida.666) 28.11.16 17:57
Классная обработка, только вот не совсем поняла есть ли возможность выводить дополнительные реквизиты документа? Если есть то как это сделать? Заранее спасибо!
22. Константин Гейнрих (CyberCerber) 29.11.16 10:26
(21) Добрый день
У меня уже есть почти готовый механизм для этого, вот только никак не доберусь, чтобы выложить новую версию обработки.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа