Алгоритм построения печатных форм в 1С: Бухгалтерия предприятия КОРП

25.03.13

Разработка - Механизмы типовых конфигураций

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

Для того, что бы разобраться в коде типовых конфигураций, я, последнее время, стал часто использовать ментальные карты. Мне это помогает, надеюсь и Вам будет полезно) В качестве софта для построения ментальной карты, применяю достаточно распространённый xMind (www.xmind.net). Недавно наткнулся в сети на вот такой плагин к xMind - www.codeanalyzer.ru, который и подтолкнул к написанию этой статьи. 

Итак, сначала сформулируем задачу. Использовать будем типовую конфигурацию последнего, на день написания статьи, релиза 2.0.45.6. Откроем демонстрационную конфигурацию под бухгалтером. Откроем форму документа "Реализация товаров и услуг". Нам необходимо разобраться, как формируется меню "Печать", какие процедуры отвечают за непосредственную печать, как запоминается печатная форма по умолчанию и какие требования предъявляются к внешней печатной форме.

Постановка задачи

Если мы запустим конфигуратор и откроем форму документа "РеализацияТоваровУслуг", то не увидим в нижней командной панели меню "Печать". Стало быть, оно формируется динамически, скорее всего, при открытии формы. Посмотрим на список процедур формы документа. 

 

Посмотрим, что вызывается из ПередОткрытием().

 

Посмотрим на вызовы УстановитьКнопкиПечати(...)

Изучив текст УстановитьКнопкиПечати(), можно выявить еще три процедуры формы, использующиеся как обработчики действий.

Теперь объединим всё используемое в одно дерево:

Добавим процедуры, вызываемые из процедур-обработчиков действий:

Таким образом, что мы имеем? Перед открытием, после записи и при установке печати по умолчанию вызывается УстановитьКнопкиПечати(), которая вызывает ПолучитьДеревоМакетовПечати() и получает из неё что-то, что затем передает в УстановитьПодменюПечати(), УстановитьПечатьПоУмолчанию() и СформироватьПодменю(). Последние три процедуры отвечают за формирование меню на форме документа. Для кнопки печати по умолчанию используется действие на основании процедуры формы документа ОсновныеДействияФормыПечатьПоУмолчанию(). Посмотрим на ПолучитьДеревоМакетовПечати().

Видим, что её вызов происходит из практически всех документов конфигурации при вызове УстановитьКнопкиПечати(). А делает она следующее: 

ИнициализироватьДеревоДополнительныхКнопок() возвращает дерево значений, с колонками как на рисунке.

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

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

Теперь посмотрим на вызов печатной формы из ПечатьПоДополнительнойКнопке(). В конце процедуры видим, что ответ на вопрос "внешняя ли это печатная форма?" дается через проверку заполненности колонки "Расшифровка". И если внешняя, то вызываем НапечататьВнешнююФорму(), если же форма встроенная, то вызывается процедура модуля объекта "Печать()".

Посмотрим на НапечататьВнешнююФорму(...). Ответим на вопрос: какие поля содержит структура "Расшифровка"? Исходя из нашей схемы заполнение этой структуры должно происходить в вызове ДобавитьВДеревоМакетовДополнительныеФормы(...) (из ПолучитьДеревоМакетовПечати(...)). Действительно, в коде этой процедуры видим:

СтруктураРасшифровки = Новый Структура("СсылкаНаВнешнююОбработку, НомерСтроки, ДополнительныеПараметрыОбработки", ВыборкаСсылок.Ссылка, Выборка.НомерСтроки, Выборка.ДополнительныеПараметрыОбработки.Получить());

А в НапечататьВнешнююФорму() по номеру строки получаются двоичные данные внешней обработки, далее они записываются во временный файл и выполняется вызов метода обработки "Печать()".

Теперь обратим внимание на процедуру модуля документа "Печать()". Она по переданному имени макета вызывает процедуру, формирующую табличный документ, например "ПечатьДокумента()".

Таким образом, общая схема объектов может выглядеть вот так:

Из неё видно, что чтобы добавить новую встроенную печатную форму в документ, нужно: 

  1. В модуль документа добавить процедуру, возвращающую табличный документ;
  2. В процедуру модуля документа ПолучитьСтруктуруПечатныхФорм() добавить элемент структуры-результата. Ключом быдет идентификатор печатной формы, значеним - представление в списке печатных форм.
  3. В процедуру Печать() добавить условие, обрабатывающее идентификтор новой печатной формы.

Чтобы добавить внешнюю печатную форму, необходимо:

  1. Зарегистрировать внешнюю обработку в справочнике "ВнешниеОбработки", указав в табличной части "Принадлежность" объекты, к которым она будет относиться;
  2. Обеспечить наличие в добавляемой внешней обработке метода модуля обработки "Печать()".
На этом заканчиваю) Легкого кода Вам!)

См. также

Ценовая власть. Выносим из цикла схему СКД

Механизмы типовых конфигураций Ценообразование, анализ цен Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

11.04.2024    473    tango    0    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    359    tango    5    

3

Ценовая власть. Второй сезон

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Бесплатно (free)

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

08.04.2024    549    tango    0    

2

Ценовая власть (УТ 11.5) - 2

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Бесплатно (free)

В прошлый раз специальной обработкой мы выбрали объекты УТ 1.5, группируя по подсистемам. Оказалось, что состав подсистем не вполне корректно отображает функциональную структуру, но зато мы нашли процедуру, которая, вроде бы, должна содержать в себе всё, что нас интересует. Обновление цен должно ведь следовать выбранной стратегии ценообразования, верно? Иначе что она обновляет...

06.04.2024    438    tango    1    

1

Ценовая власть или Управление ценообразованием (УТ 11.5)

Ценообразование, анализ цен Механизмы типовых конфигураций Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    519    tango    12    

2

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

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2562    YA_418728146    11    

42

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1117    7    2ncom    3    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

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

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

28.12.2023    4942    mrXoxot    11    

100
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. _smile_ 25.03.13 17:09 Сейчас в теме
Полезная статья. Все понятно и доступно написано.
Если бы еще такую же для например УТ11 или БП3.0, то было бы здорово.
2. Ta_Da 26.03.13 10:37 Сейчас в теме
Эм. Я может что-то в этой жизни упустил - а вот Ваши схемки в XMind с деревом процедур и функций, они ведь не вручную сделаны? Или есть какой-то более-менее штатный вариант загрузки/выгрузки?
3. maraton1185 148 26.03.13 10:59 Сейчас в теме
Нет, не вручную, всё это автоматом формирует вот эта штука: http://www.codeanalyzer.ru/ + просмотр кода, иерархия вызовов, поиск. Я туда загрузил типовую и по ней писал эту статью. Есть некоторые не стыковки, но в целом плагин впечатлил.
4. CratosX 112 26.03.13 14:08 Сейчас в теме
(3) maratenikeev, free-версией, или pro? Нашел описание только скидки 30%, но сумму не увидел.

По существу - а чего на примере БП Корп, в обычной БП Проф аналогично же
5. maraton1185 148 26.03.13 14:38 Сейчас в теме
(4) CratosX, суммы я то же не увидел, но делал с pro, так как при регистрации дается доступ на месяц.
Как я понял, они ещё не начали продажи pro, только скидки дают "к открытию".
А в КОРП, т.к. на работе такая стоит) Потом, у них на сайте такой же пример, только для старого релиза. Я решил убить сразу нескольких зайцев: опробывать плагин на пригодность, проверить его работу на последнем релизе конфы и сделать этот пример немного по-понятней для себя.
6. VasMart 27.03.13 17:43 Сейчас в теме
(3) maratenikeev, зуп выгрузился нормально, а вот сегодняшние бухия и КОРП в том числе - вылетают на ОбщийМодуль.УправлениеОтчетами.Модуль.txt

Какой релиз корпа удалось загрузить или работали с "прошедшей" выгрузкой?
Прикрепленные файлы:
7. maraton1185 148 27.03.13 19:48 Сейчас в теме
(6) VasMart, работал с 2.0.45.6, таких ошибок не было
8. VasMart 27.03.13 20:04 Сейчас в теме
(7) maratenikeev, разработчики отвели чуть быстрее ) ошибку устранили.
9. Новиков 292 31.03.13 22:53 Сейчас в теме
Статья опоздала на пару лет. А так да - хорошо описано.
10. Gureev 18.07.13 09:35 Сейчас в теме
В статье наиболее впечатлил инструментарий и подход к анализу.

Спасибо, взял на вооружение)
11. serg0776 5 14.11.13 09:44 Сейчас в теме
ПолучитьСтруктуруПечатныхФорм() это в толстом клиенте (старые конфигурации), а как в тонком теперь, к примеру на УНФ?
12. xzorkiix 34 21.05.14 10:57 Сейчас в теме
Ни кто не знает, а Для 3.0 этого просто нет?
Оставьте свое сообщение