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

26.07.23

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

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

Дисклеймер

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

 

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

См. также

SALE! 20%

Загрузка и выгрузка в Excel Оптовая торговля Печатные формы Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 Конфигурации 1cv8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С одним нажатием. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

6000 5100 руб.

09.11.2016    234061    1062    898    

1003

SALE! 15%

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

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

22200 19980 руб.

06.10.2023    15384    35    7    

70

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

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

14400 руб.

13.03.2018    60688    207    76    

120

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

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

5400 руб.

08.10.2019    46984    166    95    

160

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

Учет путевых листов выполнен в виде расширения. Предназначен для учета путевых листов в конфигурации БП 3.0., УТ 11.5 и КА 2.5 Печатная форма: Типовая межотраслевая форма № 3. Утверждена постановлением Госкомстата России от 28.11.97 № 78. Типовая межотраслевая форма № 4-П от 18.09.2008 г. N 152 с учетом изменений указанных в Приказе Министерства транспорта Российской Федерации №368 от 11 сентября 2020 г. №368, Типовая межотраслевая форма № ЭСМ-7, и др. ЭСМ-2, 4-С, 3 спец., 6 спец., ПЛ для Автомобильного крана.

3600 руб.

14.10.2019    38842    258    216    

167

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

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

3600 руб.

13.02.2019    96240    440    44    

423

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

Программа для автоматизации учета путевых листов в 1С - расширение, добавляющее в конфигурацию "Комплексная автоматизация", документ Путевой лист и печатные формы установленных образцов для легковых и грузовых авто, расчет и списание нормативного количества топлива, отчет "Реестр путевых листов" с отбором по автомобилю и по водителю (через настройки) Позволит контролировать расход топлива, потому что сразу будет виден сверхнормативный расход.

13200 руб.

27.06.2023    3854    10    1    

11

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

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

4500 руб.

23.08.2019    57052    174    64    

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

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

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