Конструктор внешних печатных форм

Обновлено: 24.09.2022

(0) Друг, ты мега потрудился, круто. Всё вроде бы на уровне.

но. один нескормный вопрос: зачем тебе это?

может и круто, но у меня обычно вытаскивание во ВПФ кода занимало 30 минут, с синтаксическим контролем от 1С.

Сомневаюсь что тут будет сильно меньше по времени.

(5), "Сомневаюсь что тут будет сильно меньше по времени."
тут это где?

За отточенность режима работы в НЕ УФ приложениях я ручаюсь. Может и есть косяки, но внешнюю печатную можно сделать реально за пол-минуты (максимум две) =)

А вот УФ - это новый режим, поэтому может и косячить жестко =]

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

А в чем суть? Рядовые пользователи им пользоваться не будут, а для прогеров сама платформа 1С и есть по сути конструктор. Какие задачи решаются?

(12), задача - ускорить вынос печатной формы во внешнюю. И "ускорить" - это не сократить затраченное на пару минут, а сократить потраченное время ДО пары минут =)

Целевая аудитория - все, кому пригодится.

Я не разработчик сложного коммерческого проекта и не заморачиваюсь с такими вопросами. Эта обработка оочень полезна мне, поэтому я её совершенствую для того, чтобы она была полезна и кому-нить ещё. Если она кому-нить не нужна, то это не значит, что не нужна ни кому =]

(14) Кому пригодится, кроме тебя? Нисколько не умаляю проделанную работу, но не понимаю кому она нужна, кроме тебя самого. Если чисто так сказать что вот смотрите как могу, то таки да, могешь. Собственно все, на этом ценность заканчивается.

Я вытаскиваю обычно несложное из обычных конфиг минут за 5.
Из управляемых иногда может минут 30. А так тоже быстро.

За результат я ручаюсь железно )

и при чем тут ЧСВ? Когда я выкладывал первые версии, то они народу понравились. Я продолжил работу. Вот и все.

Версия 5.1 БП 3.0.73.54 стал делать ВПФ, выяснилось (внезапно), что в общем модуле "УправлениеПечатью" процедура "ПодготовитьКоллекциюПечатныхФорм" лишилась "Экспорт", пришлось вставить немного изменённую в модуль формы ВПФ.

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

Инструкция для управляемого приложения

Создадим ВПФ, например, для документа Счет покупателю, печатная форма Счет-заказ (пример делаю на платформе 8.3.8.1784 БП 3.0.43.247 база ДЕМО).

Создание ВПФ

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

Итак, по пунктам:

  1. Копируем модуль менеджера документа Счет покупателю, открыв его в Конфигураторе. Копируется весь модуль, например, нажав Ctrl +A, потом Ctrl + С.
  2. Открываем конструктор в режиме учета, выбираем Тип документаСчетНаОплатуПокупателю и нажимаем кнопку Вставить:


  1. Жмём следующую кнопку Анализ. Получаем на закладке Команды и функции список доступных команд печати, список процедур и функций модуля менеджера, и текст выделенных процедур в правом окне. В левом верхнем окне снимаем все галки (кнопки управление вверху) и отмечаем нужную нам печатную форму СчетЗаказ. В левом нижнем окне нужные для печати выбранной формы процедуры будут отмечены зелёным цветом автоматически. Если необходимо, можно отметить и другие процедуры и функции с помощью кнопки нужна\ не нужна, они будут перенесены в итоговую обработку, но использовать автоматически ВПФ их не будет, поэтому подумайте, оно Вам надо? В правом окне можно просмотреть текст выделенных в левом нижнем окне процедур и функций. Текст можно изменить, правда никогда этой возможностью не пользовался, но мало ли кому понадобится?:


  1. Следующая кнопка Сформировать. Создаёт текст модуля обработки ВПФ:


  1. Жмём Скомпилировать – на экране ничего не изменится, просто будет создана ВПФ.
  2. Кнопка Сохранить предложит выбрать путь, куда сохранить созданную обработку и открыть созданную ВПФ для проверки. ВПФ создаётся со встроенной формой обработки, поэтому её можно отлаживать не прибегая к дополнительным средствам. При открытии ВПФ сразу проверяем работоспособность, выбрав документ и сформировав печатную форму:


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

Что удивило, и типовая и внешняя вместо суммы прописью выдают в демке сумму числом:


Изменение полученной ВПФ

Для исправления ситуации, и добавления чего-то своего в ВПФ, начнём вносить изменения:

  1. Вставим макет счета в ВПФ (по умолчанию используется тот же, что и в типовой форме счета). Для этого посмотрим, какой макет используется. В модуле объекта ВПФ :

Из процедуры Печать видим, что нам нужен общий макет ПФ_MXL_СчетЗаказ. Копируем его в конфигураторе. Ветка Общие – Общие макеты:


Затем в обработке встаём на Макеты и вставляем, теперь макет есть в ВПФ, нужно изменить код модуля, чтобы использовать именно его, а не общий макет:


>ВывестиЗаголовокПредупреждение(СведенияОДокументе.Получатель, ТабличныйДокумент, Макет); (Проверка: Сервер).

Поскольку не определена процедура без указания через точку, делам вывод, что она находится в том же общем модуле, что и скопированная нами перед этим функция ПечатьСчетаНаОплату – находим её там, и копируем в модуль ВПФ. И вновь пробуем сохранить. В данном случае нам повезло – ошибок больше нет. В обще-то это редкость, по большому счёту, это самый трудоёмкий момент. Бывает, что может понадобится копирование нескольких процедур и функций, и, может быть, даже не из одного модуля. Главное не просто скопировать, но и правильно их потом вызывать. Универсального рецепта для этого у меня нет.

  • Убираем в процедуре печать строку «ПечатьТорговыхДокументов.» - теперь эта функция будет вызываться из модуля ВПФ.
  • Сохраняем ВПФ, проверяеем в режиме учёта – всё работает, только теперь, всё, что нужно для изменений, у нас находятся в ВПФ. Теперь можно делать необходимые изменения .
  1. Изменяем текст модуля ВПФ:
  • Вызов встроенного макеета вместо общего – находим строку "ОбщийМакет.ПФ_MXL_СчетЗаказ", видим, что находится она в добавленной функции из общего модуля, и не меняя общий модуль ПечатьТорговыхДокументов (сохраняя типовую конфигурацию на полной поддержке) изменяем функцию модуля ВПФ:
  • Исправим сумму прописью – сейчас она почему – то выводится числом, вариантов много, можно, например, использовать форматную строку в ячейке макета СуммаПрописью, но это некрасиво, поэтому попробуем найти место в тексте модуля, где заполняется этот параметр и исправим его. Видим строку:

Отладчиком смотрим, где собака порылась. На вид всё фильдиперсово, однако видим вместо строки число. Видим, что при вызове функции общего модуля ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью в параметре СведенияОДокументе.Валюта пусто. Вариантов исправления много – можно вытащить процедуру СформироватьСуммуПрописью в модуль ВПФ, можно посмотреть заполнение строки СведенияОДокументе и заполнить валюту там, можно проверить заполнение валюты, и если там пусто использовать валюту по умолчанию из константы. Мне лень, поэтому возьмём валюту из договора:


  • Теперь добавим в макет новый параметр, например Комментарий и выведем после итоговой строки (пример условный, просто как пример)))):


Обратите внимание, что параметр находится внутри области макета, создал я его так (профи просьба не читать далее)))), встав на СуммаПрописью правой кнопкой – раздвинуть, потом скопировал СуммаПрописью, вставил в среднюю стоку и поменял в третьей строчке СуммаПрописью на Комментарий.

В тексте модуля делаем следующие изменения:

и четырьмя строчками ниже вставляем строку:

В итоге получим кусок кода:


Заключение

Не претендую на полноту и истину в последней инстанции в изложении. Просто показал на простом примере, как быстро создать и немного изменить внешнюю печатную форму счет на оплату покупателю в БП 3.0. Может кому поможет…

Версия NEW beta=)
"Конструктор внешних печатных форм" максимально автоматизирует процесс создания внешних печатных форм на основе типовых. Создание внешней печатной формы займет от секунд до пары минут!
Теперь и на управляемых приложениях =)

Это новая версия Конструктора ВПФ. В ней исправлены старые косяки и добавлены новые =)

ВНИМАНИЕ: Это beta версия. Она на то и бета, чтобы работать через. в смысле плохо ^_^ Поэтому как только находите косяк (а вы его неприменно найдете ;) ), сообщайте, пожалуйста, в комментариях. И можно без нервов =)

Новое в версии NEW beta (05\01\2013):

Управляемое приложение:
+ Реализована работа, но ОЧЕНЬ не оптимизиованная. Всё будет переписываться, когда соберется список косяков =)
+ Не требуется выбор оновной процедуры печати. Она по умолчанию Печать(). Обработка сама определяет команды печати - пользователю остаётся только отметить нужную галочкой. Всё остальное обработка сделает сама. Наверное)
+ Все параметры прописываются в конструкторе. Вообще работа переноса печатной формы заметно легче, чем в обычном режиме, однако, пока плохо проработанная.
- Пока есть минус - обработка в УФ не вытягивает макеты. Это делать нужно вручную.
- И еще. я заколебался с неким "Безопасным режимом", ошибка о котором постоянно высвечивается при тесте ВПФ. И после нескольких "переоткрываний" пропадает. Если кто понял в чем дело, сообщите, плиз, в комментариях ^_^

//Описание изменений предыдущей версии
Исправленные ошибки:

+ Исправленна проверка зависимых процедур. Спасибо Жолтокнижнику за его обработку Редактор внешних печатных форм из которой я взял парочку функций :)

+ Исправлена мелкая ошибка замены строки "Печать" на "СтандартнаяПроцедураПечать"

+ МоментВремени() раньше выдавал ошибку, теперь все норм :)

+ присвоение переменных теперь происходит два раза. При открытии обработки и при вызове Печать(). Это, конечно, не есть красиво, однако исключает некоторые ошибки.

+ добавлена страница с таблицей всех процедур и функций модуля

+ теперь, перед тем как создать файл внешней печатной, обработка запрашивает название этой самой внешней печатной и прописывает название как синоним готового файла (для нормального добавления в базу)

+ после сохранения результата обработка может открыть готовую внешнюю печатную для проверки

Версия 5.1 БП 3.0.73.54 стал делать ВПФ, выяснилось (внезапно), что в общем модуле "УправлениеПечатью" процедура "ПодготовитьКоллекциюПечатныхФорм" лишилась "Экспорт", пришлось вставить немного изменённую в модуль формы ВПФ.

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

Инструкция для управляемого приложения

Создадим ВПФ, например, для документа Счет покупателю, печатная форма Счет-заказ (пример делаю на платформе 8.3.8.1784 БП 3.0.43.247 база ДЕМО).

Создание ВПФ

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

Итак, по пунктам:

  1. Копируем модуль менеджера документа Счет покупателю, открыв его в Конфигураторе. Копируется весь модуль, например, нажав Ctrl +A, потом Ctrl + С.
  2. Открываем конструктор в режиме учета, выбираем Тип документаСчетНаОплатуПокупателю и нажимаем кнопку Вставить:


  1. Жмём следующую кнопку Анализ. Получаем на закладке Команды и функции список доступных команд печати, список процедур и функций модуля менеджера, и текст выделенных процедур в правом окне. В левом верхнем окне снимаем все галки (кнопки управление вверху) и отмечаем нужную нам печатную форму СчетЗаказ. В левом нижнем окне нужные для печати выбранной формы процедуры будут отмечены зелёным цветом автоматически. Если необходимо, можно отметить и другие процедуры и функции с помощью кнопки нужна\ не нужна, они будут перенесены в итоговую обработку, но использовать автоматически ВПФ их не будет, поэтому подумайте, оно Вам надо? В правом окне можно просмотреть текст выделенных в левом нижнем окне процедур и функций. Текст можно изменить, правда никогда этой возможностью не пользовался, но мало ли кому понадобится?:


  1. Следующая кнопка Сформировать. Создаёт текст модуля обработки ВПФ:


  1. Жмём Скомпилировать – на экране ничего не изменится, просто будет создана ВПФ.
  2. Кнопка Сохранить предложит выбрать путь, куда сохранить созданную обработку и открыть созданную ВПФ для проверки. ВПФ создаётся со встроенной формой обработки, поэтому её можно отлаживать не прибегая к дополнительным средствам. При открытии ВПФ сразу проверяем работоспособность, выбрав документ и сформировав печатную форму:


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

Что удивило, и типовая и внешняя вместо суммы прописью выдают в демке сумму числом:


Изменение полученной ВПФ

Для исправления ситуации, и добавления чего-то своего в ВПФ, начнём вносить изменения:

  1. Вставим макет счета в ВПФ (по умолчанию используется тот же, что и в типовой форме счета). Для этого посмотрим, какой макет используется. В модуле объекта ВПФ :

Из процедуры Печать видим, что нам нужен общий макет ПФ_MXL_СчетЗаказ. Копируем его в конфигураторе. Ветка Общие – Общие макеты:


Затем в обработке встаём на Макеты и вставляем, теперь макет есть в ВПФ, нужно изменить код модуля, чтобы использовать именно его, а не общий макет:


>ВывестиЗаголовокПредупреждение(СведенияОДокументе.Получатель, ТабличныйДокумент, Макет); (Проверка: Сервер).

Поскольку не определена процедура без указания через точку, делам вывод, что она находится в том же общем модуле, что и скопированная нами перед этим функция ПечатьСчетаНаОплату – находим её там, и копируем в модуль ВПФ. И вновь пробуем сохранить. В данном случае нам повезло – ошибок больше нет. В обще-то это редкость, по большому счёту, это самый трудоёмкий момент. Бывает, что может понадобится копирование нескольких процедур и функций, и, может быть, даже не из одного модуля. Главное не просто скопировать, но и правильно их потом вызывать. Универсального рецепта для этого у меня нет.

  • Убираем в процедуре печать строку «ПечатьТорговыхДокументов.» - теперь эта функция будет вызываться из модуля ВПФ.
  • Сохраняем ВПФ, проверяеем в режиме учёта – всё работает, только теперь, всё, что нужно для изменений, у нас находятся в ВПФ. Теперь можно делать необходимые изменения .
  1. Изменяем текст модуля ВПФ:
  • Вызов встроенного макеета вместо общего – находим строку "ОбщийМакет.ПФ_MXL_СчетЗаказ", видим, что находится она в добавленной функции из общего модуля, и не меняя общий модуль ПечатьТорговыхДокументов (сохраняя типовую конфигурацию на полной поддержке) изменяем функцию модуля ВПФ:
  • Исправим сумму прописью – сейчас она почему – то выводится числом, вариантов много, можно, например, использовать форматную строку в ячейке макета СуммаПрописью, но это некрасиво, поэтому попробуем найти место в тексте модуля, где заполняется этот параметр и исправим его. Видим строку:

Отладчиком смотрим, где собака порылась. На вид всё фильдиперсово, однако видим вместо строки число. Видим, что при вызове функции общего модуля ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью в параметре СведенияОДокументе.Валюта пусто. Вариантов исправления много – можно вытащить процедуру СформироватьСуммуПрописью в модуль ВПФ, можно посмотреть заполнение строки СведенияОДокументе и заполнить валюту там, можно проверить заполнение валюты, и если там пусто использовать валюту по умолчанию из константы. Мне лень, поэтому возьмём валюту из договора:


  • Теперь добавим в макет новый параметр, например Комментарий и выведем после итоговой строки (пример условный, просто как пример)))):


Обратите внимание, что параметр находится внутри области макета, создал я его так (профи просьба не читать далее)))), встав на СуммаПрописью правой кнопкой – раздвинуть, потом скопировал СуммаПрописью, вставил в среднюю стоку и поменял в третьей строчке СуммаПрописью на Комментарий.

В тексте модуля делаем следующие изменения:

и четырьмя строчками ниже вставляем строку:

В итоге получим кусок кода:


Заключение

Не претендую на полноту и истину в последней инстанции в изложении. Просто показал на простом примере, как быстро создать и немного изменить внешнюю печатную форму счет на оплату покупателю в БП 3.0. Может кому поможет…

Изменение встроенных в типовые конфигурации печатных форм — это, вероятно, одна из наиболее распространенных доработок типовых конфигураций. Чтобы каждый раз не изменять саму конфигурацию, компания «1С» создала механизм внешних печатных форм.

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

Кроме этого, нужно отметить, что создание внешних печатных форм различается для обычного приложения (Бухгалтерия 2.0.*, ЗиУП 2.5.*, УТ 10.3.*) и управляемого приложения (Бухгалтерия 3.0.*, ЗиУП 3.*, УТ 11.*). В статье будут рассмотрены оба варианта.

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

Внешняя печатная форма в управляемом приложении

Начнем с того, что в настоящее время встречается чаще — с управляемого приложения. В тексте ниже будет приведен пример создания и подключения внешней печатной формы для документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 3.0).

Создание

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

Итак, создаем новую внешнюю обработку и в модуле объекта этой обработки размещаем примерно такой код:

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

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

Параметр «БезопасныйРежим» со значением «Истина» накладывает следующие ограничения:

  • игнорируется привилегированный режим;
  • запрещена работа с COM;
  • запрещена загрузка внешних компонент;
  • запрещен запуск внешних приложений и команд ОС;
  • запрещен доступ к файловой системе (кроме временных файлов);
  • запрещен доступ к интернету.

Параметру «БезопасныйРежим» рекомендуется присваивать значение «Истина». Если необходима какая-либо функциональность, запрещаемая безопасным режимом, то можно получить дополнительное разрешения на эту функциональность (как в примере выше).

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

Читайте также: