Отчеты с общей формой отчета. Типовые сценарии

08.10.24

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

Статистическая выборка сценариев и точек изменения отчетов на общей форме ФормаОтчета в типовых конфигурациях. Примеры кода.

Оглавление

Вступление

Цель анализа

Анализ

Результат

Итоги

 

Вступление

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

Анализ конфигурации ERP 2.5, на БСП версии 3.1.9 показал, что в ней аж 1063 отчета, у 273 из них формой отчета установлена общая форма ФормаОтчета. У 221 отчета форма не указана вообще. В таких случаях тоже автоматически подставляется Основная форма отчета конфигурации, а в типовых - это ФормаОтчета. Таким образом ее использует почти половина отчетов.

 

 

Человеку, впервые увидевшему подключенную общую форму, может показаться, что изменить и настроить там что-то либо невозможно, либо слишком сложно. И уж совсем неочевидным покажется искать информацию на ИТС в разделе Настройка и использование подсистем - ВариантыОтчетов.

 

Цель анализа

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

 

Анализ

В ИТС в описании подсистемы Варианты отчетов мы узнаем, что по задумке разработчиков подсистемы предполагается описать нужные процедуры событий общей формы в модуле объекта отчета. Чтобы подключить нужные события, нужно прописать их в модуле объекта отчета в экспортной процедуре ОпределитьНастройкиФормы. Иногда там указываются и параметры открытия формы. Их список будет приведен ниже в разделе Результат

Также в этой процедуре можно указать параметры открытия формы: 

 
 Модуль отчета
 
 Полный список событий для размещения в модуле объекта отчета

 

Однако и справка ИТС довольно скупо описывает, для чего могут пригодиться все эти процедуры, поэтому я произвел анализ всех встроенных отчетов из ERP 2.5 с целью понять что к чему. В этом мне значительно помог очень сообразительный ИИ в виде Gemini 1.5 Pro, которому я скормил модуль формы и текст процедур событий из модулей отчетов. 

 

Результат


Сценарии использования отсортированы по убывающей частотности и приведены упрощенные примеры реализации. Цифра перед сценарием означает количество использований в конфигурации.

  • Определение настроек
 
 332. ОпределитьНастройкиФормы

 

  • Параметры
 
 61. Настройки параметров формы

 

  • События и примеры
 
     2.    ПриОпределенииИспользуемыхТаблиц
 
 185.    ПриСозданииНаСервере
 
   90.    ПередЗагрузкойВариантаНаСервере
 
   37.    ПриЗагрузкеВариантаНаСервере
 
   30.    ПриЗагрузкеПользовательскихНастроекНаСервере
 
     2.    ПередЗаполнениемПанелиБыстрыхНастроек
 
  117.    ПередЗагрузкойНастроекВКомпоновщик
 
     1.    ПослеЗагрузкиНастроекВКомпоновщик
 
   12.    ПриОпределенииПараметровВыбора
 
     6.    ПослеЗаполненияПанелиБыстрыхНастроек
 
     0.    ПриОпределенииОсновныхПолей
 
     1.    ПередФормированиемОтчета

 

 
 Последовательность вызова событий

 

Функции общих модулей, используемых в отчетах.

 
По частоте использования

 

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

 

 

 

Итоги

 
 ПриСозданииНаСервере
 
 ПередЗагрузкойВариантаНаСервере
 
 ПриЗагрузкеВариантаНаСервере
 
ПриЗагрузкеПользовательскихНастроекНаСервере
 
 ПередЗаполнениемПанелиБыстрыхНастроек
 
 ПередЗагрузкойНастроекВКомпоновщик
 
 ПослеЗагрузкиНастроекВКомпоновщик
 
 ПриОпределенииПараметровВыбора
 
 ПослеЗаполненияПанелиБыстрыхНастроек
 
 ПриОпределенииИспользуемыхТаблиц
 
 ПриОпределенииОсновныхПолей
 
 ПередФормированиемОтчета

 

Пусть вас не смущает большое количество событий - в большинстве отчетов используется одно-два события

 

 

 

Бонус

Шаблон модуля объекта отчета со всеми событиями и описаниями процедур. Удалить ненужные проще, чем искать и добавлять.

 
 Шаблон модуля объекта отчета

 

Заметки:

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

 

 ПриКомпоновкеРезультата

В отчетах также очень часто используется событие ПриКомпоновкеРезультата. Оно не является специфическим для общей формы отчета и поэтому статистический анализ не проводился. Хорошая статья на эту тему Процедура ПриКомпоновкеРезультата

 

При анализе использовались:

  • Конфигурация ERP 2.5 на БСП 3.1.9
  • Visual Studio Code для быстрого поиска по выгруженной конфигурации
  • Искусственный интеллект в виде Google Gemini 1.5 Pro
  • Notepad++ и регулярные выражения

БСП ОбщаяФорма ВариантыОтчетов Универсальный отчет общая форма отчетов шпаргалка

См. также

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

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

20.08.2024    1851    PROSTO-1C    0    

18

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

Эта ошибка была обнаружена мной в типовой конфигурации 1С:Комплексная автоматизация 2 (2.5.16.115), БСП версия 3.1.9.302. Возникает она после того, как вы добавляете в расширение бизнес-процесс или задачу, выполняете обновление идентификаторов метаданных расширений, но ошибка при записи любого элемента справочника "Профили групп доступа" всё равно остаётся.

01.07.2024    1888    Vidz    0    

11

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

Очень часто в написании кода требуется обращаться к предопределённым значениям. Если идёт обращение к типовым предопределённым значениям, то проблем не возникает.

24.06.2024    1164    olja-ljaaa    0    

3

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

Проблемы при создании ресурсной спецификации. Связь настроек спецификации и настроек структуры заказа в ЕРП 2.5.

06.05.2024    1272    It-digit    1    

2

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

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

1 стартмани

11.04.2024    1114    tango    5    

3

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

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

10 стартмани

11.04.2024    903    tango    5    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. leosoft 166 03.06.24 17:19 Сейчас в теме
А может механизм расширений удобнее будет использовать?
2. Serg2000mr 691 03.06.24 18:30 Сейчас в теме
(1) Можете описать подробнее?
3. leosoft 166 03.06.24 20:12 Сейчас в теме
(2) Заимствуем общую форму отчета в расширение и подстраиваем под свои требования.
4. Serg2000mr 691 03.06.24 20:34 Сейчас в теме
(3) Работа в конструкторе форм конечно быстрее программной настройки элементов. Но шапка отчета все равно формируется динамически. ФормаОтчета тесно интегрирована с подсистемой ВариантыОтчетов и при обновлении типовой части конфигурации или БСП вам придется поддерживать все заимствованные таким образом формы.

Ну и на первый взгляд количество событий сбивает с толку, но на самом деле у большинства отчетов описано по 1-2 события.
ixijixi; user1969989; +2 Ответить
12. qwinter 683 04.06.24 10:12 Сейчас в теме
(3) Так эти события, в первую очередь, не для того что бы форму редактировать, а для программного редактирования схемы компоновки и компоновщика. Например вызов процедуры "ПередЗагрузкойНастроекВКомпоновщик" происходит из целой кучи процедур разных форм (ФормаОтчета, ФормаВариантаОтчета, ФормаНастроекОтчета, ВспомогательнаяФормаНастроекОтчета) не связанных между собой, таким образом вносить изменения можно в одном месте, а влияют они на большое количество процедур.
22. Serg2000mr 691 13.06.24 00:15 Сейчас в теме
(12) В ПриСозданииНаСервере можно добавить новые элементы формы, а в ПослеЗаполненияПанелиБыстрыхНастроек можно их переместить в нужные группы динамически формируемой шапки отчета.
23. qwinter 683 13.06.24 09:43 Сейчас в теме
(22) Можно, но зачем? Проще и логичнее все это делать непосредственно в схеме компоновке.
24. Serg2000mr 691 13.06.24 13:35 Сейчас в теме
(23) Например, изменить порядок и группировку быстрых настроек, добавить кнопку, удалить отбор по функциональным опциям или правам.
25. qwinter 683 14.06.24 09:29 Сейчас в теме
(24) все это логичней делать в схеме компоновке, останусь при своем мнении.
26. Serg2000mr 691 14.06.24 09:37 Сейчас в теме
(5) Не все настройки можно сделать в конструкторе схемы. Что-то приходится дорабатывать программно, особенно если отчет типовой.
27. qwinter 683 14.06.24 09:44 Сейчас в теме
(26) Так я не про конструктор схемы говорю, а про программное изменение. При создании на сервере меняете схему под ваши нужны один раз, а так у вас многократно выполняется код без особого смысла.
Добавление отборов, параметров, их порядок, настройка отборов по функциональным опциям, добавление списков выбора или параметров выбора по правам логичней сделать один раз.
28. Serg2000mr 691 14.06.24 11:27 Сейчас в теме
(27) Изменением схемы не получится изменить порядок элементов в шапке отчета. Но если по логике задачи можно обойтись изменением схемы, то можно так.
19. glek 120 06.06.24 07:48 Сейчас в теме
(3) Не)))
Обновились на последнюю ЕРП, а форма, заимствованная в расширение повела себя не совсем ожидаемо на 24 платформе: команды и табличный документ поменялись местами (команды слетели вниз, а результат вверх).
Форма была переписана минимально (добавлена одна команда и одна кнопка)
Для проверки удалил из расширения и просто заимствовал (без изменений) - всё равно команды вниз а результат вверх.
Так что нет, иногда не проще.
5. PerlAmutor 155 04.06.24 06:59 Сейчас в теме
Недавно потребовалось установить группе отбора "Период" свой заголовок (напомню, что разработчики его вообще скрыли после перехода на какую-то из версий БСП) в общей форме отчета и задачка оказалась очень не тривиальной, т.к. "из коробки" такой возможности не оказалось.

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

	Настройки.События.ПриСозданииНаСервере = Истина;
	Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина;
	Настройки.События.ПослеЗагрузкиНастроекВКомпоновщик = Истина;
	Настройки.События.ПередЗагрузкойВариантаНаСервере = Истина;
	Настройки.События.ПриЗагрузкеВариантаНаСервере = Истина;
	Настройки.События.ПриЗагрузкеПользовательскихНастроекНаСервере = Истина;
	Настройки.События.ПередЗаполнениемПанелиБыстрыхНастроек = Истина;
	Настройки.События.ПослеЗаполненияПанелиБыстрыхНастроек = Истина;
	Настройки.События.ПриОпределенииПараметровВыбора = Истина;
	Настройки.События.ПриОпределенииИспользуемыхТаблиц = Истина;
	Настройки.События.ПриОпределенииОсновныхПолей = Истина;
	Настройки.События.ПередФормированиемОтчета = Истина;
Показать


Такой вариант более универсален, т.к. не ломает полностью работоспособность отчета:


	Настройки.События.Вставить("ПриСозданииНаСервере", Истина);


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

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

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

Из минусов могу отметить следующую сложность. В платформе 1С нет возможности определить клиентский модуль объекта с экспортными процедурами, в следствии чего создать механизм собственной расшифровки отчета или реакцию нажатия на свои команды без доработок общих модулей - нет. Т.е. невозможно держать всю логику в пределах одного объекта внешнего отчета.
6. ixijixi 1922 04.06.24 08:56 Сейчас в теме
(5)
установить группе отбора "Период" свой заголовок

Разве установка заголовка параметра в схеме не помогает? Или Вы про другое?
Прикрепленные файлы:
0x00; qwinter; +2 Ответить
17. PerlAmutor 155 04.06.24 20:51 Сейчас в теме
(6) Я про такое https://fastcode.im/Templates/8518/otobrazit-zagolovki-periodov-na-forme-otcheta-bsp
Процедура ОпределитьНастройкиФормы(Параметр, КлючВарианта, НастройкиОтчета) Экспорт
	
	НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек = Истина;
		
КонецПроцедуры

Процедура ПослеЗаполненияПанелиБыстрыхНастроек(ФормаОтчета, ПараметрыОбновления) Экспорт
	
	ПочинитьЗаголовкиПериодов(ФормаОтчета);
		
КонецПроцедуры

Процедура ПочинитьЗаголовкиПериодов(ФормаОтчета)
	
	ЗаголовкиЭлементов = Новый Массив;
	Для Каждого ПараметрСКД Из СхемаКомпоновкиДанных.Параметры Цикл
		ЗначениеТипа = ПараметрСКД.ТипЗначения.ПривестиЗначение(Неопределено);
		Если ТипЗнч(ЗначениеТипа) = Тип("СтандартныйПериод") Тогда
			ЗаголовкиЭлементов.Добавить(ПараметрСКД.Заголовок + ":");
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого ЭлементФормы Из ФормаОтчета.Элементы Цикл
		
		СвойстваЭлемента = Новый Структура("ПоложениеЗаголовка,Заголовок,ПутьКДанным");
		ЗаполнитьЗначенияСвойств(СвойстваЭлемента, ЭлементФормы);
		
		Если СвойстваЭлемента.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет
			И ЗаголовкиЭлементов.Найти(СвойстваЭлемента.Заголовок) <> Неопределено Тогда
			ЭлементФормы.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
		КонецЕсли;
		
	КонецЦикла;
		
КонецПроцедуры
Показать
10. qwinter 683 04.06.24 09:56 Сейчас в теме
(5)
Недавно потребовалось установить группе отбора "Период" свой заголовок
Зачем?)) Даже представить не могу как это должно выглядеть, пришлите скрин пожалуйста.
16. PerlAmutor 155 04.06.24 20:47 Сейчас в теме
(10) Бывают запросы возвращающие поля с несколькими датами и пользователь не всегда понимает период чего именно он должен выбрать. Иногда требуется уточнение. Например есть документы командировок созданные в различных месяцах, но пользователь должен выбрать именно период командирования и т.п..
11. Serg2000mr 691 04.06.24 10:04 Сейчас в теме
(5)
Кстати вот так не рекомендую во внешних отчетах инициализировать, т.к. потом устанете все переписывать, если какой-то ключ удалят. Было уже такое.


Дельное замечание, но лучше добавить оповещение для пользователя или администратора о переставшем работать функционале.
Иначе это может оказаться скрытой ошибкой, которую потом будут долго искать и исправлять.
7. ixijixi 1922 04.06.24 08:57 Сейчас в теме
Спасибо за статью. Наконец-то кто-то это сделал!
0x00; SirEgor; mvxyz; Serg2000mr; +4 Ответить
8. Serg2000mr 691 04.06.24 09:09 Сейчас в теме
9. qwinter 683 04.06.24 09:46 Сейчас в теме
В целом ничего нового, но многим будет полезно, а то каких только велосипедов не встретишь))
13. Serg2000mr 691 04.06.24 10:42 Сейчас в теме
(9) Вы все знали, но молчали? ;)
14. qwinter 683 04.06.24 14:37 Сейчас в теме
(13) не всем дано писать статьи. Обширные это совсем не мое, а короткие получаются совсем короткими и модераторы инфостарта их отклоняют)
15. Dimel 04.06.24 18:46 Сейчас в теме
Хорошая работа!
Дополните настройки параметров формы, забыли указать (из ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию):
1) ПоляПоиска - Массив из Строка - коллекция имен полей компоновки данных, которые участвуют в универсальном поиске.
2) ВариантПредставленияПериода - ПеречислениеСсылка.ВариантыПредставленияПериода - определяет вариант представления периода на форме отчета.
3) ВариантПериода - ПеречислениеСсылка.ВариантыПериода - определяет вариант формы выбора периода.
4) ОтключитьСтандартноеКонтекстноеМеню - Булево - признак, позволяющий выключить использование
контекстного меню и настройки колонки отчета.

Хорошо было бы описать и то что в менеджере отчета настраивается (подсистема вариантов отчетов). Так же обработки добавления подключаемых команд и расшифровок в модулях ОтчетыПереопределяемый и ОтчетыКлиентПереопределяемый... Но это уже наверно больше к отчетам, а не к форме отчета относится.
Serg2000mr; +1 Ответить
18. Serg2000mr 691 04.06.24 22:48 Сейчас в теме
(15) Спасибо!

Я не стал указывать эти параметры формы, потому что они практически не используются. Тема итак достаточно объемная, старался упростить. Редко используемые сценарии тоже не стал добавлять.

Про менеджер отчета и подключаемые команды - идея интересная, посмотрю.
20. Бубузяка 62 11.06.24 20:55 Сейчас в теме
Очень нужная статья. Все по полкам. Спасибо.
Serg2000mr; +1 Ответить
21. Serg2000mr 691 12.06.24 08:42 Сейчас в теме
(20) Спасибо и пожалуйста )
29. itmind 308 09.07.24 02:39 Сейчас в теме
Указано как добавить свою кнопку на форму, но не указано, где прописать свой обработчик нажатия.

Допустим мне нужно добавить пару чекбоксов на форму отчета. При переключении чекбокса должны вносится изменения в схему. Сам элемент на форму добавить легко, а как обработать нажатие на элемент?
30. AlexanderEkb 25 11.08.24 20:10 Сейчас в теме
Хорошая статья. А где промты? А бонус вам не gemini сделал?
31. Serg2000mr 691 12.08.24 17:57 Сейчас в теме
(30) Спасибо. Про то, как я использовал Gemini для анализа - тема для отдельной статьи. В общем, способности Gemini сначала вызвали восторг, но потом я начал замечать ошибки, и приходилось перепроверять все ответы, как за джуном. Но его ответы часто освещали какие-то интересные аспекты и наталкивали на новые мысли и вопросы. Бонус я тоже делал сам.
AlexanderEkb; +1 Ответить
32. AlexanderEkb 25 13.08.24 05:30 Сейчас в теме
(31) Я cloude sonnet 3.5 пользуюсь и агентами на его основе, особенно ide cursor, например. За ним проверять не надо, если не очень много строк кода (не могу пока сказать точную цифру строк кода, к сожалению) использовать.
Serg2000mr; +1 Ответить
Оставьте свое сообщение