Конструктор печатных форм (PrintWizard). Часть 1: Печатные формы. А что, собственно, не так?

26.07.23

Учетные задачи - Печатные формы

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

Дисклеймер

Если в процессе прочтения кто-то заподозрит, что у автора есть проблемы, он технически неграмотен, на кого-то обижен, не умеет сложить 2+2 и всегда получает 22 в итоге. То мой ответ тут только один: вы вправе так считать. Поэтому свои комментарии в данном контексте можете оставить при себе. Когда выйдет последняя статья, все встанет на свои места. Можете относиться к этой статье, как к вечернему чтиву, от старца, который просто решил немного поворчать.

 

Важность печатных форм в эпоху ЭДО и безбумажной жизни

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

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

Поэтому в современное "светлое время будущего" и наступающего равенства, я лично считаю, что любой электронный документ, (внутренний или внешний) должен иметь две части: первую можно открыть и глазками посмотреть, а вторую часть отдать машине на чтение. И конечно же, именно такой «пакет» и должен подписываться ЭЦП… впрочем, опять я не на свою полянку лезу.
Надеюсь, я смог убедить вас, что печатные формы - это важный элемент любой программы.

Где-то здесь хочется упомянуть об особо одаренных компаниях, которые делают примерно так:

  • печатают документ на принтере
  • некоторые даже подписывают вручную
  • кладут бумажку в сканер
  • электронную скан-копию прикрепляют в программу (ДО, бухгалтерия и т.д.)
  • подписывают ЭЦП и отправляют по маршруту бизнес-процесса

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

 

Проблема печатных форм в 1С

Начнем с того, что в настоящее время правил и стандартов формирования печатных форм нет. 

Конечно, вы можете возразить, мол, в стандартах разработки что-то есть. Да, есть, но это рекомендации и вот они:

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

На текущий момент можно найти условно 2 базовых сценария формирования и вывода печатных форм:

  1. Сбор и вывод данных в процессе формирования печатной формы. Назовем его "метод все в одном"
  2. Сбор данных отдельно, вывод в печатную формы отдельно. Ну, а тут соответственно "метод раздельный"

Понятно, что это не «чистые» варианты. Те же периодические данные в 90% случае собираются в процессе вывода данных. Хотя лично меня всегда этот момент расстраивает.

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

Но давайте вернемся к способам формирования печатных форм. И рассмотрим их подробнее.

 

Метод "все в одном"

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

Просто он самый очевидный и простой. Более того невозможно ничего забыть. Пошагово процесс выглядит так:

  • рисуем макет со всеми параметрами
  • пишем код по выводу области (одна за другой)
  • перед выводом области заполняем параметры (да, да, именно тем самым способом Область.Параметры.Имя = …)
  • выводим область
  • вуаля, печатная форма готова

И вот если здесь, перед присвоением значения параметра, мы вдруг обнаружили что нам не хватает данных, достаем лопату и идем рыть землю в поисках клада. То есть пишем запросы, какие-то вычисления и тому подобное. Более опытные (ну те, которые претендуют на звание middle и зарплату чуть больше, чем бургер с картошечкой) догадываются что:

  • запросы в цикле лучше не делать
  • данные можно получать через методы общих модулей
  • периодические данные надо собирать с учетом даты документа

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

В издательстве рассказом считается текст в среднем до 2х авторских листов. Повесть от 2х до 8ми страниц (320тыс. знаков). Хотя если взять такую классификацию, уверен найдутся те, кто будет претендовать на гордое звание «роман по выводу печатной формы».

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

 

Метод "раздельный"

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

Там же где-то обычно идет освоение БСП с ее возможностями множественной печати и изменения макетов.

Пошагово процесс в таком случае несколько изменяется:

  • рисуем макет со всеми параметрами
  • анализируем возможность унификации сбора данных
  • подготавливаем данные складываем их в удобные коллекции
  • пишем код по выводу печатной формы каждой ссылки
  • заполнение параметров областей делаем при помощи ЗаполнитьЗначенияСвойств
  • в идеале получение и вывод областей через их поиск в макете (но как правило это реже происходит, почти не встречал в жизни)

Почему именно множественная печать приводит разработчиков к предварительному сбору данных? Собственно, тут все просто. О том, что запросы в цикле - это зло, трубят из каждого утюга. А когда видишь цикл по ссылкам из массива и вызов метода, внутри которого идет запрос на сбор данных, волей неволей руки чешутся этот запрос выдрать куда-то наружу, результат положить в соответствие и просто получать структуру (массив) с результатом. Ну или как вам нравится (посыпьте любыми коллекциями на свой вкус).

И вот если вдруг, программист уже уверенно так пишет, а его печатные формы не падают, когда неумеха пользователь через БСП «доработал» макет, можно смело требовать гордого звания сеньор (помидор), зарплату в три бургера и Добрый кола © в холодильнике на бесплатной основе.

 

А что, собственно, не так?

Именно с таким вопросом обычно ко мне приходят по большинстве инициатив, которые я выдвигаю. Поэтому отвечу...

Периодические данные

Почти везде расчет периодических данных выполняется в процессе вывода печатной формы. И я писал выше, что это объясняется тем, что тут мы, мол, и дату знаем, и все такое. А я объясняю это тем, что просто не каждый может написать запрос так, чтобы периодические данные считались в запросе корректно. Соглашусь, вопрос дискуссионный, что лучше - собрать в запросе или при выводе. Но, даже если при выводе, кто-нибудь видел при этом, чтобы они кэшировались? Хотя и тут есть о чем поспорить

Доработка печатных форм

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

Связь параметров макета и данных

С появлением СКД, например, с отчетами все стало понятно и удобно. Если хорошо понимаешь, как работает СКД, смотришь на отчет и очень быстро «разматываешь», откуда пришли данные. С печатными формами, это всегда детектив и хождение по тропинкам из хлебных крошек.

Версионирование и сравнение

Нечастая проблема – необходимость сравнивать печатные формы. Но когда такая необходимость возникает, всегда сравниваешь отдельно макет и код. А вот связь между ними (см. пункт выше) остается за кадром. Ну и сравнение/объединение может вообще превратить все в пытку. Причем, не важно, как именно написана печатная форма. Одним методом или с предварительным сбором. Хотя честности ради, лично мне второй метод все равно кажется предпочтительнее.

В свое время я пробовал сделать печатные формы на СКД. Однако столкнулся с тем, что в печатных формах чаще встречается конкатенация строк, какая-то дополнительная обработка и провернуть ее на СКД в разы сложнее. В итоге не сказать, что результат становится проще.

Ну и еще чуток...

Ну и вишенка на торте, конструктор печатных форм, который встроен в конфигуратор. Собственно, кто им вообще пользуется? Зачем? Ведь все равно, он не удовлетворяет стандартам, его код приходится выкидывать, а макет дорисовывать. Если печатная форма чуть сложнее чем шапка и табличная часть из колонок документа, он не помогает ничем. От конструктора там только набор деталей, которые как в китайском лего. Не факт, что еще и подходят друг к другу.

Я сознательно не касаюсь вопроса внешних печатных форм...

 

И что ты предлагаешь?

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

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

Но об этом в следующей статье… 

Печатные формы БСП печать

См. также

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    8426    25    6    

46

Универсальная печать по шаблонам Word (Печать договоров из 1С БП 3, УНФ 1.6, ЗУП 3, УТ 11, КА 2, ERP 2, ДО 3)

Печатные формы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Научите вашу 1C печатать из 1С в файл Word (Например: трудовые договоры, договоры с контрагентами, спецификации, дополнительные соглашения, приказы, коммерческие предложения, акты, накладные, карточки партнера или любого справочника и многие другие). Универсальная печать предназначена для формирования печатных форм на основе шаблонов в формате Word из любой конфигурации 1С. С помощью данного инструмента можно самостоятельно заполнить шаблон реквизитами справочника или документа 1С и сформировать печатные формы на основании ссылки на любой объект.

5400 руб.

08.10.2019    43458    147    89    

141

УТ 11, КА 2, ERP 2: Настраиваемые под каждую организацию печать и подпись ответственных лиц в печатных формах (ТОРГ-12, Счёт-фактура, УПД, УКД, Заказ клиента, Акт сверки, М-15 и др.)

Печатные формы Взаиморасчеты Оптовая торговля Производство готовой продукции (работ, услуг) Акт сверки Оперативный учет Управляемые формы 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

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

12000 руб.

13.03.2018    56972    185    76    

116

Печатные формы КС-2 и КС-3 в "1С:Бухгалтерия 3.0"

Печатные формы Производство готовой продукции (работ, услуг) Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Бухгалтерия 3.0 Строительство Россия Бухгалтерский учет Платные (руб)

Откройте для себя заполнение КС-2 и КС-3 в "1С:Бухгалтерия 3.0". Вы получаете удобство, скорость и систему, чтобы заполнить, распечатать и сохранить формы КС-2 и КС-3 из документов "Оказание производственных услуг" или "Реализация товаров услуг". Вы можете заполнить дополнительную информацию о материалах из документов "Требование-накладная" и указать сведения, которые не предусмотрены типовой конфигурацией "1С:Бухгалтерия 3.0". Так же доступно множество настроек для формирования КС-2 и КС-3.

3240 руб.

13.02.2019    88839    394    44    

378

Путевой лист грузового автомобиля в 1С:Бухгалтерия 3.0

Печатные формы Учет рабочего времени Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Бухгалтерия 3.0 Транспорт, автопарки, такси Россия Бухгалтерский учет Платные (руб)

Путевой лист грузового автомобиля в 1С:Бухгалтерия 3.0 - заполнить, распечатать, сохранить. Вы можете не только внести всю информацию и распечатать путевой лист грузового автомобиля в 1С, но и повторно использовать ранее введенные данные спустя любое время - данные путевого листа сохраняются в "1С:Бухгалтерия 3.0" без каких-либо доработок.

4200 руб.

23.08.2019    53906    161    63    

150

Шаблоны.doc - документы Word из 1С (1С:Совместимо!)

Печатные формы Документооборот и делопроизводство (СЭД) Учет документов Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Бухгалтерский учет Управленческий учет Платные (руб)

Приложение для быстрого создания макетов печатных документов, заполняемых из 1С:Предприятие, без привлечения программистов и запуска конфигуратора. Шаблон готовится в редакторе MS Word, отлично освоенном офисными служащими. Так, на подготовку нового шаблона договора купли продажи со спецификацией потребуется 25 минут. Приложение будет полезно, если Вы работаете со множеством Word-шаблонов или если Вам надо часто создавать новые шаблоны. Есть сертификат "1С: Совместимо!". Версия ПРОФ доступна в виде расширения.

2000 руб.

05.09.2017    90341    62    82    

96
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Lemmonbri 120 19.06.23 08:49 Сейчас в теме
Ничего не понятно, но очень интересно. В заголовке PrintWizard очень заманчиво выглядит. Будем следить.
2. kofeinik 28 19.06.23 09:39 Сейчас в теме
Не надо нагнетать. Запрос в цикле приведет к замедлению на четверть секунды на одну печатную форму? Вот вообще плевать. Зато не будет портянки запроса, да еще со вставками переменных посередине.
3. chng 23.06.23 11:37 Сейчас в теме
>Тогда я попытался стандартизировать разработку.
>Но об этом в следующей статье…

Интересно, удастся ли автору стандартизовать требования скрытые в его же заголовке "важность печатных форм в эпоху ЭДО и безбумажной жизни"...
4. vandalsvq 1550 23.06.23 23:17 Сейчас в теме
(3) стандартизация касалась разработки, а в частности сбора данных и вывода макета. В основном упор был сделан на эффективность и прозрачность. Однако вас я бы попросил развернуть вопрос подробнее. Возможно я смогу выделить время и коснуться каких-то интересующих вас вопросов. В частности мне интересно, что на ваш взгляд скрыто в приведенном заголовке (важность печатных форм в эпоху ЭДО и безбумажной жизни)
5. chng 26.06.23 10:27 Сейчас в теме
(4) Сейчас на работе занимаюсь стандартизацией используемых форм в том числе и для автоматизации. Я бы рад поделиться соображениями, но они пока все обрывочные и противоречивые.

>стандартизация касалась разработки, а в частности сбора данных и вывода макета...
Вы наверно видели вот эту публикацию, я вначале подумал, что это автор решил вернуться к старой теме...
sulfur17; +1 Ответить
6. vandalsvq 1550 26.06.23 11:44 Сейчас в теме
(5) я не знаю как ускользнула эта разработка от моего взгляда. Спасибо. Остальное напишу в личку
Оставьте свое сообщение