1с добавить нетиповой документ в подсистему печать

Обновлено: 08.07.2024

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

Для БСП 2.х и БСП 3.0 макет табличного документа и алгоритм формирования печатной формы располагаю в объекте обработка, расширения конфигурации. «Обычно макет печатной формы располагается при объекте, но если макет является общим для двух и более объектов, то либо его следует располагать в обработке, либо это должен быть общий макет.» [ИТС, БСП гл. 3.38 Печать]. Для меня важно оставить конфигурацию «девственной» и минимум объектов заимствовать в расширение конфигурации, поэтому в обработке.

Если на БСП 2.х укладываемся в 7 шагов:

  1. Создаем Расширение;
  2. Создаем обработку;
  3. Создаем макет в обработке;
  4. Заимствуем сам объект (например, документ), для которого требуется добавить команду печати;
  5. Заимствуем Группу команд – «Печать»;
  6. Создаем команду у обработки и определяем свойства «Тип параметра команды» (шаг 4) и «Группа» (шаг 5);
  7. В модуле менеджера Обработки располагаем процедуру с кодом формирования печатной формы и методы подсистемы Печать.

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


Рис. 1 Расширение конфигурации на БСП 2.х

то на БСП 3.0 получаем желаемое за 4-е шага

  1. Создаем Расширение;
  2. Создаем обработку;
  3. Создаем макет в обработке;
  4. В модуле менеджера Обработки располагаем процедуру с кодом формирования печатной формы и методы подсистемы Печать.

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


Рис. 2 Расширение конфигурации на БСП 3.0

Повинуясь ИТС, подсистему «ПодключаемыеОтчетыИОбработки» заимствуем и в нее включаем созданную обработку.

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

Процедуру формирования печатной формы располагаем в ММ обработки

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

В самой процедуре формирования печатной формы я придерживаюсь следующей структуры:

  1. Определяю параметры печати и макет табличного документа;
  2. Запросом выбираю нужные данные;
  3. Результатами выборки заполняю структуру ДанныеПечати и таблицы значений данными табличных частей. Причем, имена ключей структуры и полей таблицы значений совпадают с именами параметров макета;
  4. Области макета собираю в массив и обхожу его заполняя параметры макета из созданных коллекций на предыдущем шаге, на каждом витке цикла выводя в результирующий табличный документ. Для повышения устойчивости кода заполняю методом ЗаполнитьЗначенияСвойств().

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

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

//тол+ Обновление публикации от 20.02.2020 г.

Клиентский контекст при формировании печатной формы

З арекся, не добавлять клиентский контекст, если не наберет +100, но статья набрала.

«В отдельных случаях для формирования некоторых печатных форм может потребоваться клиентский контекст. Например, для запроса дополнительных параметров печатной формы у пользователя непосредственно перед печатью» [ИТС, БСП гл. 3.38 Печать]

Как (было) на БСП 2.х?

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

Форму(ы) для клиентского контекста, располагаем в той же обработке в расширении. Нужные типы для реквизитов формы, заимствуем из основной конфигурации. Например, справочник «ВидыЦен».

Последовательность действий такая:

  1. Добавляем команду в обработку;
  2. Одной строкой кода, в обработчике команды открываем форму;
  3. Из формы возвращаем параметры;
  4. Передаем управление в метод Печать() модуля менеджера обработки, формируем табличный документ на сервере;


Рис. 3 Заход в клиентский контекст на БСП 2.0

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

Отказ от модальности заставил усложнить код реализующий заход в клиентский контекст:

  1. В обработчике команды заменяем модальное открытие на не модальный вызов;
  2. В клиентской форме при создании блокируем окно владельца;


Рис. 4 Заход в клиентский контекст на БСП 2.0 + отказ от модальности

Как теперь можно на БСП 3.х?

  1. Достаточно в процессе создания команды, в модуле менеджера обработки в процедуре «ДобавитьКомандыПечати» определить свойство «Обработчик», указав имя экспортируемой функции модуля клиентской формы.
  2. Если предполагается формирование печатной формы на сервере, из клиентского контекста передаем управление в метод Печать() модуля менеджера обработки.


Рис. 5 Заход в клиентский контекст на БСП 3.х

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


Рис. 6 Программное создание реквизита формы.

БСП 3.х. рулит!

П.С. Попытался сложить окна в EDT вертикально, что бы нарезать скрины … и не смог:( Конфигуратор forever!

1. В процедуре ПриСозданииНаСервере изменился код с:

Замечание: Подменю ГруппаПечать на форме теперь не нужно создавать и передавать в параметр.

2. В Форме Документа вместо процедуры

теперь целых три:

а в Формы Списка вместо:

(помним, что Объект заменяется на Элементы.Список )

3. И то, чего нет в указанной статье:

В общем модуле УправлениеПечатьюПереопределяемый, в процедуре ПриОпределенииОбъектовСКомандамиПечати нужно добавить свои созданные документы, для которых нужна печать:

В Модуле Менеджера всё остается без изменений.

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

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

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

Большое спасибо за статью! Уже голову сломал как вернуть печать, все сделал кроме общего модуля

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

Death_eye; Vyacheslav_Kochnev; user705522_constantin_h; berezdetsky; h00k; the1; + 6 – Ответить

У меня ругалось на ВыполнитьКоманду пока не глянул в параметры этой процедуры. Элементы.Список должен содержать поле - Ссылка. Версия БСП - 2.4.2.25

Огромное человеческое спасибо . особенно за.

В общем модуле УправлениеПечатьюПереопределяемый, в процедуре ПриОпределенииОбъектовСКомандамиПечати нужно добавить свои созданные документы, для которых нужна печать:

Есть косяк именно в бухгалтерии 3.0.52.*.
Для подключенных "Дополнительных отчетов и обработок" в "ФормеСписка" для документов пропала кнопка - "Отчеты. ".
Причем в БСП все нормально работает.
Глубоко не копал. Тестовую конфигурацию вылечил:

. "Включить возможность изменения"
Документы.ПлатежныеПоручения.ФормаСписка
ГруппаКоманднаяПанель добавил ПодменюПечать.

Сейчас пытаюсь написать дополнительную обработку которая по кнопке "Печать " восстановит кнопку "Отчеты. ". (Опять зубы через задницу лечить. )

Решил расширением конфигурации.
Общий модуль - Подключаемые команды
ОООООООО спасибо огромное! Методом тыка нашла лишние процедуры, теперь по вашей статье попробую до конца доделать Присоединяюсь к благодарившим, очень вовремя, просто спасли.

Добавлю свои 5 копеек.
Когда добавляете (переписываете) под БСП 2.4 свои объекты, по мимо действий указанных в статье, по крайней мере для ERP 2.4, необходимо проделать еще несколько манипуляций, что бы вся эта магия от 1С версии 2.4 заработала.
А конкретно надо сделать следующее:
Для Добавления команд Отчеты, ввод на основании надо указать БСП, что для этого объекта надо использовать механизм "стандартных подсистем". Делаем следующее:
- для отчетов: Общий модуль "ВариантыОтчетовПереопределяемый" процедура "ОпределитьОбъектыСКомандамиОтчетов" добавляем свой объект в массив.

- для Ввода на основании: Общий модуль "СозданиеНаОснованииПереопределяемый" процедура "ПриОпределенииОбъектовСКомандамиСозданияНаОсновании" добавляем свой объект в массив.

для печати, заполнения и проч. видимо тоже есть процедуры, но я их не искал и не использовал из-за ненадобности (пока еще) =).

надеюсь сэкономил полчаса работы.

Обе статьи актуальны, т.к. есть и самописаные конфы, созданные ещё во времена динозавров. Статья пригодилась, спасибо, как раз делали переход с КА 2.2 на 2.4
правда я так понял команда печати для формы регистра сведений это не прокатит, там идет сравнение типов, на этом все и рушится, по старой схеме раньше работало все. т.е. при следующем обновлении эта процедура затрется ПриОпределенииОбъектовСКомандамиПечати
И так отслеживать это постоянно. (17) Меня тоже это печалит. Уже несколько раз добавлял свои документы после обновления. Не возникло идей, каким образом можно избавиться от редактирования "ПриОпределенииОбъектовСКомандамиПечати" чтобы после обновления не пропадали печатные печатные формы в "своих" документах?

Такое ощущение, что студенты писали код
Как будто нельзя через Метаданные это сделать!
Супер универсальность.
т.е. если завтра у разработчиков будет новый объект, и если они забыли про этот модуль то печати не будет в этом объекте. КЛАСС.

Добрый день!
конфа ЗУП 3.0.25.109
платформа 8.3.8.1675
Мне нужно создать внешнюю печатную форму для нетипового документа. С созданием самой внешней обработки проблем нет: в справочник "Дополнительные внешние отчеты и обработки" добавилась, все ок. Но не могу ее привязать к документу.
Проблема в том, что в этом справочнике в пункте "Разместить в" в списке док-тов нет моего, нетипового.
На ИТС нашла вот что:
"Состав типов этих объектов необходимо задать в свойстве Тип параметра команды в следующих общих командах:
ЗаполнениеОбъекта,
ОтчетыОбъекта,
ДополнительныеПечатныеФормыОбъекта,
СозданиеСвязанныхОбъектов."
Ага, только общей команды "ДополнительныеПечатныеФормыОбъекта" в базе НЕТ. Хотя "ЗаполнениеОбъекта", к примеру есть.
По советам из старых тем мисты тоже самое:
"Чтобы к новому документу иметь возможность подключить ВПФ необходимо этот документ указать в списке Типов параметров Общей команды "ДополнительныеПечатныеФормыОбъекта", а лучше подстраховаться и указать новый(ые) документ(ы) и в других Общих командах "ДополнительныеОтчетыИОбработкиОтчеты", "ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта", "ДополнительныеОтчетыИОбработкиСозданиеСвязанныхОбъектов"."

А если таких команд нет? Как быть? Может, кто сталкивался?

Сталкивались. Читали ИТС, БСП, подсистема "Печать. " ;)
Это получилось быстрее, чем гадать что и откуда перенести.

(3) Вернее БСП внедрена в вашу конфигурацию. Нужно донастроить внедрение для нетипового документа.

(4) вот я и не понимаю, что именно еще не хватает для донастройки.
В ИТС в БСП про подсистему Печать действия по размещению команд в модуле объекта сделала, процедуры вроде Подключаемый_ВыполнитьКомандуПечати в модуле ПФ я добавила. Вопрос в том, как указать внешней печатной форме в режиме предприятия, к какому документу она относится, если этого документа в списке нет. Я не понимаю, в каком объекте в конфигураторе я должна данный документ указать.

(5) Взять для примера документ, который отображается в предприятии и посмотреть в конфигурации ссылки на этот объект.

(6) делала так, ни единой ссылки на что-то относящееся к ПФ или печати: ни функциональных опций, ни команд, ни ОМ.
Думала, что может команду просто переименовали в новых версиях, поэтому по куску модуля из команд
ЗаполнениеОбъекта,
ОтчетыОбъекта,
СозданиеСвязанныхОбъектов
искала(у них там вызов одной и той же функции), чтобы найти недостающую команду - глухо, только в них, да еще и во всяких командах ДополнительныеОбработкиЗарплата (относящимся к подсистеме в целом)и тому подобных есть вызов этой процедуры, т.е. недостающей как бы якобы в командах и нет.

Йес!
В общий модуль "ЗарплатаКадрыРасширенный" в процедуру "ПриОпределенииОбъектовСКомандамиПечати" необходимо добавить свой тип документа. Тогда в списке он будет.
Теперь для использования внешних обработок надо менять конфу :(

(13) так пройдись отладчиком по этой функции, да - там куча условий по которым выполняется УдалитьВсеОбластиФаксимиле(ОбластьМакета);,
в моем случае в СведенияОДокументе не было нужного псевдонима. (это конечно при условии, что в макете корректно область факсимиле оформлена).

(0)У меня всё работает как обычно, поле рисунок, в нём изображение печати на прозрачном фоне.

(14) Второй день блужу по коду . )
(15) выложи код модуля внешней обработки где происходит передача в печать и подпись ?

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

(17)Так и я сделал . хотелось как в типовой печатной форме использовать галочку добавить рисунки. А так приходится использовать 2 внешних отчета , один без факсимиле, второй факсимиле.. Кстати кто знает как программно получить подпись руководителя ?

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

(19) да я понял , я так сделал . но хочется чтобы можно было в одном макете и добавить и убрать печати , видимо не хватает какого-то параметра что ли в СтруктураПараметровПечати , хотя сверял с печатью макета из конфигурации данные те же самые передаются

И вот это делал - Не получается сделать флажок "Подпись и печать" во внешней печатной форме - со слов "Перед этим вызовом нужно определить ПараметрыПечати следующим образом:"?

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

(21) флажок есть в форме общей печати , но никакой реакции при включении,выключении не происходит . нет картинок

(22) хотелось бы разобраться именно как эта функция отрабатывает правильно .
ЗЫ так-то сделал 2 формы с печатью и без, напрямую тяну по фирме и руководителю картинки из двоичных данных.

(23)Поле рисунок полностью помещается в область печати? С этим вроде бывают проблемы я помню.

(27) Да, без проблем, когда я напрямую гружу подпись и печать . Терзают смутные сомнения, что используя метод ДополнитьДокументПодписьюИПечатью(ТабличныйДокумент, СведенияОДокументе, ОбъектыПечати, СтруктураПараметровПечати)
тоже заполняются, только не хватает какой-то переменной, которой в форме печати говорила бы, что есть такие реквизиты и их можно регулировать флажком "подпись и печать". потому что в отладчике не переходит по событию выбора значения флажка при выводе ВПФ и работает , когда из типовой формируешь

(28) Если взять УправлениеПечатьюБП.ДополнитьДокументПодписьюИПечатью(ТабличныйДокумент, СведенияОДокументе, ОбъектыПечати, ПараметрыПечати) из конфы по печати счета и вывести резалт в обычный табличный документ (просто для проверки), то факсимилей не будет. Получается, что она работает в купе с общей формой и тем флажком на форме. Отдельно его заюзать не получится. Хотя в потрохах, есть на это заточки, и туда якобы даже можно передать адрес хранилищ, где лежат картинки этих факсимиле, однако в конце по коду, все равно все факсимиле кодом же и очищаются. Т.е. кастомизации там не получилось, или я не понял как ее подюзать.

(29) ага , просто вызывая УправлениеПечатьюБП.ДополнитьДокументПодписьюИПечатью(ТабличныйДокумент, СведенияОДокументе, ОбъектыПечати, ПараметрыПечати) я так понял активируется флажок "Подпись и печать"

(31) а вот когда флажком уже в форме печати играешь , он в картинки с именами содержащими названия "факсимиле" добавляет или очищает .

(32) дык так и сделал , а не выходит каменный цветок . только названия картинок должны соответствовать названиям двоичных файлов картинок из подчиненного "Организациям" справочника ПрикрепленныефайлыОрганизаций. Иначе программа не знает в какую картинку подпись или печать вставлять

(33) Так ты сам получи двоичные данные в твоей ВПФ, и в макете в соответствующие рисунки картинку выведешь по твоим двоичным данным. Дальше они не должны очищаться.

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

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

(36) ИМХО , что-то упускаем . "Общей форме печати" все равно откуда ее вызвали из типового документа или ВПФ , какой-то параметр при вызове впф не учитывается или неверно указывается и поэтому флажок не реагирует.

(37) Если бы это было так, тогда простой вызов этой функции рисовал бы тебе подписи :) Однако они очищаются.

(38) не факт , м.б. не передается ссылка на временное хранилище картинок , или какой-то параметр не указывается , который как раз и влияет на вывод и удаление картинок, х.з. тема интересная . но пока текучкой занят нет времени расковырять.

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

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

Закон Брукера: Даже маленькая практика стоит большой теории.

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