gifts2017

Дружелюбная система компоновки данных (СКД)

Опубликовал Николай Васильев (vasilev2015) в раздел Программирование - Практика программирования

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

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

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

Со стороны исполнителя отчет можно сделать более понятным пользователю, если в стандартном заголовке СКД вместо наименований и значений параметров, например:

"СрокХраненияДней = 20, СрокХраненияПроцент = 60"

выводить значения параметров в связный текст, например:

"Остатки товаров по партионному учету, со сроками хранения менее 60 процентов или менее 20 дней".

Предлагаю составлять такой текст в вычисляемом поле и потом выводить в отчет.

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

Поле «Заголовок» добавляем в структуру выводимых данных на закладке «Настройки» выше группировок основного отчета.

Вывод параметров можно отключить: закладка «Настройки» - закладка внизу «Другие настройки». Так выглядит результат. Блок параметров лучше убрать. Шрифт заголовка - на закладке "Вычисляемые поля", формат поля.

Этот комментарий мне больше всего понравился. Лучше не скажешь.

Надеюсь, эта заметка послужит улучшению взаимопонимания между нами, исполнителями и нашими заказчиками. А мне принесет несколько плюсов в карму ))).

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Пишу код как картины (yurii_host) 20.10.16 20:53
А чем не устраивает комментарий у отчета?
По моему скромному мнению, лишние поля в схеме - не есть гут. Все равно все отчеты, которые есть - не подпишешь. Обязательно найдутся пользователи, которым ваш заголовок будет мешать. Самый лучший способ - самодокументируемое название отчета в дереве метаданных. См. Рекомендации по именованию метаданных на ИТС
Nelli_A86; Sheff; kuzyara; CSiER; papche; rpgshnik; +6 Ответить 1
2. Николай Васильев (vasilev2015) 21.10.16 09:07
(1) yurii_host,
Про дерево метаданных наши заказчики даже не слышали )) и конечно, название там не может быть подробным, не может включать значения параметров в удобочитаемой форме.
3. Сергей Лесовой (Synoecium) 21.10.16 10:59
А как обстоят дела с производительностью такого подхода? Замечал, что если включать такие поля (без данных из набора данных, просто с служебной информацией), то время выполнения увеличивается, возможно запрос набора данных выполняется 2 раза.
4. Павел Пчелинцев (papche) 21.10.16 13:07
Производительность не пострадает, а вот эстетика - да ))
Я бы формировал заголовок программно (ПриКомпоновкеРезультата).
5. Николай Васильев (vasilev2015) 21.10.16 13:30
(4) papche,
Тоже хороший вариант. Но чуть сложнее.
6. Андрей Овсянкин (Evil Beaver) 21.10.16 16:06
(4) papche, если сбросить СтандартнуюОбработку, то фоновое выполнение отчета придется реализовывать руками.
7. Василий Пупкин (Cyberhawk) 21.10.16 16:32
(4)
Я бы формировал заголовок программно (ПриКомпоновкеРезультата)
Увы, такое не прокатит для подключаемых к БСП отчетов, не имеющих собственной формы отчета
8. Sergey Andreev (starik-2005) 21.10.16 17:59
(7) Cyberhawk, кто сказал? На сколько я знаю, метод модуля отчета "ПриКомпоновкеРезультата" выполняется всегда.

С другой стороны, всегда можно вывести заголовок с помощью макета. Я обычно так и делаю: заголовок из макета, остальное из схемы.
9. Павел Пчелинцев (papche) 22.10.16 09:36
(6) Evil Beaver, а и не надо сбрасывать флаг стандартной обработки без необходимости
10. Павел Пчелинцев (papche) 22.10.16 09:39
(7) Cyberhawk, а Вы попробуйте, удивитесь, но работает и без собственной формы ))
Вот рабочий код, выводит заголовок с использованием параметра "Период" типа стандартный период
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ЗначениеПериода = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период")).Значение;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Заголовок")).Значение =
"Дата начала: "+Строка(ЗначениеПериода.ДатаНачала) + ". Дата окончания: "+Строка(ЗначениеПериода.ДатаОкончания);
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных,);
КонецПроцедуры

11. Павел Пчелинцев (papche) 22.10.16 11:36
(8) starik-2005, а это как, можно поподробнее?
12. Информационно-технического развития Служба (SITR-utyos) 22.10.16 18:13
(0)
Пара вопросов:
1. А что будет если параметр является необязательным и он не установлен?
2. Необходимо добавить вычисляемое поле в группировку? Думаю, будет не лишним указать, что в этой группировке надо отключить автополе, и выбрать только вычисляемое поле. Подобным образом надо сделать в разделе сортировка
13. Александр Крынецкий (echo77) 23.10.16 07:20
Добавьте еще скриншот как будет выглядеть отчет с этим заголовком
14. Sergey Andreev (starik-2005) 23.10.16 15:57
(11) papche, если исходить из того, что некоторые вместо "Отчет.Сформировать()" используют процессор, то у них не работает. А вот если отчет формируется (можно и в фоне), то метод "ПриКомпоновке..." отрабатывает. В типовой через "Сформировать" все работает.

Но если вопрос касался макета для заголовка, то тут нужно показывать.

ЗЫ: вапсче, господа, если о чем-то спрашивайте, то детали иногда важны, Особенно если в сообщении два ответа.
15. ффф ыыы (zqzq) 24.10.16 08:33
Использовал данный подход. Имеет смысл, когда нужно программно формировать заголовок с учетом параметров и т.д.. Кстати, можно в настройках СКД шапку и рамку заголовка убрать, а также шрифт настроить.
vasilev2015; +1 Ответить 1
16. Николай Васильев (vasilev2015) 24.10.16 08:59
(15) zqzq,
я рад, что кому-то пригодилось.
17. Николай Васильев (vasilev2015) 24.10.16 09:00
18. Николай Васильев (vasilev2015) 24.10.16 15:36
(12) SITR-utyos,
1. В вычисляемое поле можно добавлять любые условия, проверки заполнения.
2. Да. Спасибо за дополнение.
19. Александр Крынецкий (echo77) 24.10.16 17:47
(0) Так же советую, рассказать про то, что группировку можно оформить макет оформления - Без оформления, а в самой схеме прописать, что данное поле оформляется минимальной шириной = х, максимальной шириной = х, чтобы не было переносов, так же можно поиграть со шрифтами
Прикрепленные файлы:
20. Игорь Пашутин (Alien_job) 25.10.16 07:44
Как бы проблема поиска нужного отчета не решилась - все равно надо все отчеты перебирать пока подходящий не найдется
21. Николай Васильев (vasilev2015) 25.10.16 09:20
22. Николай Васильев (vasilev2015) 25.10.16 09:23
(20) Alien_job, Такой заголовок сделает отчет понятнее пользователю. Количество вопросов уменьшится.
23. Sergey Andreev (starik-2005) 25.10.16 11:40
Вообще, в заголовке отчетов как минимум нужно указать название отчета, период, дату и время формирования, имя пользователя, который формировал отчет, отборы и параметры, которые использовались при его формировании. :Все это помогает решать массу вопросов даже по скриншоту.
Лучше период указывать отдельными полями, чтобы можно было его скопировать, например, в другой отчет (открыли отчет из письма, например, в Excel или ООо). Также и с некоторыми другими полями отбора - контрагент, склад, подразделение. Если каждый раз придется выдирать дату, контрагента или иной полезный параметр данных из центра строки, то это увеличит количество кликов, а количество кликов надо сокращать.
vasilev2015; +1 Ответить 1
24. Stas Agapov (Agapov_Stas) 26.10.16 14:00
(23) starik-2005, Это все можно запихнуть в стандартный "Заголовок отчета" - который находится на последней закладке в отчете
делается это все в процедуре "При компановке результата" - кода одна строка.
зачем изобретать велосипед ?
25. Николай Васильев (vasilev2015) 26.10.16 14:29
(24) Agapov_Stas,
Использовать вычисляемое поле проще, чем кодировать процедуру "При компоновке результата".
Кроме этого, можно управлять размером шрифта и прочим оформлением, положением заголовка относительно отчета или его частей.
26. Sergey Andreev (starik-2005) 27.10.16 14:13
(24) в стандартный заголовок можно, но муторно. Если дети-программисты пилят отчет и тащат туда две даты (для начала периода и его окончания, а потом пилят КОНЕЦПЕРИОДА(ДатаКонца, День) ) - это одно, тут две даты в двух полях. А если это уже подростки, то они вполне способны вместо двух дат стандартный период юзать - и тут уже одна строка с двумя датами и до кучи временем, что совсем не гут при копировании - приходится выдирать. Ну и отборы в одну строку все падают, а хотелось бы в разные ячейки, чтобы проще выбрать и найти что-либо при анализе отчета. Это уже предполагает, что заголовок будет нарисован.

(25) по поводу "проще", то я бы лично так не сказал. Процедура в модуле создается одним кликом. Но изменить макет можно только после выполнения компоновки. Т.е. "стандартнаяОбработка = ложь; сформировать(); ...работать с макетом..." Этот момент уже не даст пользователю возможности помимо отчета делать что-то еще, ибо тут асинхронности формирования отчета не получается.
27. Владимир (Vlad_2008) 27.10.16 15:09
Ой, не удержался ... добавлю "5 копеек" и от себя:

1) "элемент новизны"

Делал так, еще в 8.1, когда изучал компоновку. Отказался от такого способа, т.к. у него много недостатков: лишняя группировка, лишние заголовки, бестолковые пробелы и т.д.

Попробуйте сделать отчет с группировкой "Таблица", у которой 31 колонка и 1500 строк, думаю этот способ Вам быстро разонравится.

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

2) "велосипед"

Думаю да, особенно в этом примере, когда заголовок это одна строка. Ее надо "пихать" в родной заголовок программно или передавать в параметрах. А если кажется, что "Использовать вычисляемое поле проще", то это только кажется, т.к. параметры Вы же все равно устанавливаете ... гыы ... найдите два отличия:

- &Процент = 60 -> УстПар("Процент", Процент)
- &ЗаголовокПроцент = "Срок годности менее 60%" -> УстПар("ЗаголовокПроцент", "Срок ..." + Процент + "%")

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

Велосипед и потому, как указали выше, что Параметр, на то и параметр, чтобы видеть именно его, а не лирическое повествование в виде предложения Л.Н. Толстого.

3) как делаю я

Для вывода заголовков я использую "макеты" тех полей, которые участвуют в отчете. Как правило, полей бывает много, а в их заголовках уйма "свободного" места и очень часто встречаются "лишние" строчки, а они могут быть слишком высокими или неоправданно широкими и т.д.

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

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

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

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

Видно, что из двух строк в шапке отчета, одну я занял под "свой" заголовок и могу с ним делать все что угодно, ни строчки кода, вот так!





28. Николай Васильев (vasilev2015) 28.10.16 11:46
(27) Vlad_2008,
Макеты - это стандартно, красиво.
Это лучший выбор, когда есть время.
29. Sergey Andreev (starik-2005) 28.10.16 13:06
(28) если нет времени на макет, но есть время на инфорстарт, то кто-то что-то делает не так.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа