СКД. Лайфхак №2. Собираем отчет еще удобнее

20.11.19

Разработка - СКД

В этой публикации я хочу вам описать еще один интересный и относительно новый подход к одному из довольно тривиальных методов работы с СКД для построения отчетов.

 

Введение

Всем привет! Моя предыдущая статья на тему СКД вызвала отрицательную реакцию у некоторых пользователей сообщества. Но хочу отметить, что по собственному опыту большинство отчетов, которые мне попадались или доставались "по наследству",  а были в них и производственные отчеты для УПП (порядка 70-80 колонок), построены именно на такой схеме (на внешнем наборе данных - объекте).

Если вы умеете разрабатывать подобные отчеты "одной связкой запросов и за один присест" - снимаю перед вам шляпу - цены вам нет!

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

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

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

Так, давайте я опишу чему будет посвящен мой "Лайфхак №2" при работе с СКД. В этой статье я опишу работу с закладкой СКД "Вычисляемые поля", а именно - применению внешних функций - как их использовать, что где нужно добавить, правильно "включить".

Начнем с раздела подготовки отчета (Я буду работать на платформе 8.3.15.1700 и конфигурации УНФ 1.6):

 

Подготовка отчета

Первым шагом, давайте подготовим какой-нибудь простенький отчет, так же будем использовать внешний набор данных. Для этого в модуле отчета еще раз подготовим основную процедуру ПриКомпоновкеРезультата :

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка 	= Ложь;
	
	ОсновнаяТаблицаЗапроса = ПолучимТаблицуДанных();

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

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

 

В качестве содержимого функции ПолучимТаблицуДанных() ограничимся вот таким написанием:

 

&НаСервере
Функция ПолучимТаблицуДанных()

        ТаблицаРезультат = Новый ТаблицаЗначений;

	ТаблицаРезультат.Колонки.Добавить("Дата");
	ТаблицаРезультат.Колонки.Добавить("Номер");
	ТаблицаРезультат.Колонки.Добавить("Реализация");
	ТаблицаРезультат.Колонки.Добавить("Организация");
	ТаблицаРезультат.Колонки.Добавить("Подразделение");
	ТаблицаРезультат.Колонки.Добавить("Контрагент");

	ТаблицаРезультат.Колонки.Добавить("Номенклатура");
	ТаблицаРезультат.Колонки.Добавить("ЕдиницаИзмерения");
	ТаблицаРезультат.Колонки.Добавить("Количество");
	ТаблицаРезультат.Колонки.Добавить("Сумма");
	ТаблицаРезультат.Колонки.Добавить("СтавкаНДС");

	ТаблицаРезультат.Колонки.Добавить("СуммаБезНДС"); 
	ТаблицаРезультат.Колонки.Добавить("ТипНоменклатуры");
	ТаблицаРезультат.Колонки.Добавить("Цена");
	ТаблицаРезультат.Колонки.Добавить("ГруппаНоменклатуры");
	
	ТаблицаРезультат.Колонки.Добавить("РаспределенияЗатрат");
	ТаблицаРезультат.Колонки.Добавить("Процент");
	ТаблицаРезультат.Колонки.Добавить("Склад");
	
        ТаблицаРезультат.Колонки.Добавить("СебестоимостьБезНДС");
	ТаблицаРезультат.Колонки.Добавить("НадбавкаПоГруппе");
	ТаблицаРезультат.Колонки.Добавить("СебестоимостьСНадбавкой");
	ТаблицаРезультат.Колонки.Добавить("ВаловаяПрибыль");
	ТаблицаРезультат.Колонки.Добавить("Премия");

	// == Здесь сделаем запрос к базе и заполним на ТаблицуРезультат
        // == текст запроса не привожу ==

        Для Каждого СтрокаПродаж ИЗ НаборПродаж Цикл
	
          ЗаполнитьЗначенияСвойств(ТаблицаРезультат.Добавить(), СтрокаПродаж);

	КонецЦикла;

        Возврат ТаблицаРезультат; 
	
КонецФункции

 

В вышеуказанной функции получим из запроса следующие поля: Дата, Номер, Реализация, Организация, Подразделение, Контрагент, Номенклатура, ЕдиницаИзмерения, Количество, Сумма, СтавкаНДС, СуммаБезНДС, ТипНоменклатуры, Цена, ГруппаНоменклатуры, РаспределенияЗатрат, Процент, Склад.

Оставшиеся поля получать этим запросом не будем, в СКД, будем использовать их на закладке "ВычисляемыеПоля". (СебестоимостьБезНДС, НадбавкаПоГруппе, СебестоимостьСНадбавкой, ВаловаяПрибыль, Премия).

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

 

Традиционное использование внешних функций в СКД

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

 

	ВнешнийНаборДанных 		= Новый Структура("ДанныеОтчета", ОсновнаяТаблицаЗапроса); 
	ПроцессорКомпоновкиДанных 	= Новый ПроцессорКомпоновкиДанных; 
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки, Истина); 

 

Теперь, в конфигурации создаем общий модуль. Назовем его ОбщийМодульСКД. Ставим галки Сервер, ВызовСервере, Привилегированный.

В этом модуле пишем экспортные функции

Функция НадбавкаПоГруппе(Номенклатура) Экспорт

 //******

 Возврат НадбавкиПоГруппе;

КонецФункции


Функция СебестоимостьБезНДС(Сумма, Номенклатура, Дата) Экспорт

 //******

 Возврат СебестоимостиБезНДС;

КонецФункции


Функция СебестоимостьСНадбавкой(Сумма, Номенклатура, Дата) Экспорт

 //******

 Возврат СебестоимостиСНадбавкой;

КонецФункции


Функция ВаловаяПрибыль(Сумма, Номенклатура, Дата) Экспорт

 //******

 Возврат ВаловаяПрибыль;

КонецФункции


Функция Премия(Сумма, Номенклатура, Дата) Экспорт

 //******

 Возврат Премии;

КонецФункции

 

Заходим в СКД создаваемого отчета и прописываем обращение к этим экспортным функциям в составе ОбщийМодульСКД. Как на рисунке 1. Параметры для функций - это ранее полученные поля из запроса:

 

Рис.1. Определение внешний функций на закладке "Вычисляемые поля".

 

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

Так, здесь все понятно и достаточно просто.

 

Перенос внешних функций в расширение конфигурации

Попробуем теперь сделать такую штуку. Давайте я создадим расширение нашей конфигурации и перенесем туда наши функции.

Для этого заходим Конфигурация - Расширения конфигурации (создать новое) - тип расширения "Дополнение". См рис.2.

 

Рис.2. Расширение конфигурации, используемое для СКД отчетов. (Дополнение).

 

Создали расширение, и перетаскиваем туда наш ОбщийМодульСКД. Свойства модуля должны быть Сервер, ВызовСервера. Удаляем этот модуль из основной конфигурации. Проверяем работоспособность.

Запускаем конфигурацию с включенным расширением в режиме предприятия, открываем отчет - работает (см. рис.3).

 

Рис.3. Отчет на основе СКД, использующий внешние функции, перенесенные в подключаемое расширение.

 

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

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

Давайте сделаем основные выводы и напишем заключение по этой публикации.

 

Выводы и заключение

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

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

Это из плюсов.

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

Я попробовал обойти данный минус, поместив "внешние функции" в общий серверный модуль в расширение для конфигурации. Тип расширения поставил как "Дополнение". Как все мы убедились - сработало.

Буду рад, если вам понравилась эта статья.

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

Всем привет! Спасибо, что дочитали этот материал до конца!

 

Предыдущие материалы

Так же, прошу посмотреть мои предыдущие статьи:

Лайфхак работы с СКД. Собираем отчет

Обсудим планы обмена. Способы регистрации объектов к обмену

1С + IIS + SSL: Перевод опубликованной базы на защищенное соединение https с сертификатом от Let's encrypt

Методика независимой системы "Подписки на события"

СКД внешние функции расширения

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122103    670    389    

714

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

05.02.2024    4037    25    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    8158    20    John_d    25    

123

Использование менеджера временных таблиц в СКД

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

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

05.12.2023    4653    PROSTO-1C    13    

61

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    5805    15    kalyaka    5    

86

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

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

18.09.2023    6700    accounting_cons    5    

29

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

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

01.09.2023    4520    KVIKS    15    

80
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. timeforlive 15 20.11.19 13:04 Сейчас в теме
Спасибо за статью. Полезный код, на мой взгляд. Сохраню себе, а то иногда ищешь шаблон по компоновке данных среди своих обработок или в гугле :)
VVi3ard; dakork; Sergik_D; aximo; +4 Ответить
2. lmnlmn 69 20.11.19 13:22 Сейчас в теме
Не понял в чем, собственно, лайфхак? В штатном применении штатного механизма внешних функций в отчетах на СКД?
ixijixi; aexeel; Vlad_2008; JohnyDeath; awk; утюгчеловек; zqzq; mrChOP93; ПрестарелыйЗаяц; +9 1 Ответить
3. пользователь 20.11.19 13:46
(0) Плюс.

Все отлично описано.
4. Yashazz 4709 20.11.19 14:08 Сейчас в теме
Дочитал до указания, что речь пойдёт о внешних функциях, и огорчился. Ну коллеги, и вот эта ерунда "в центре внимания"? Это ж очевидный баян, а не лайфхак.
sevushka; awk; PLAstic; DmitrySinichnikov; qwinter; ПрестарелыйЗаяц; ruslan-nf; +7 1 Ответить
5. dhurricane 20.11.19 14:17 Сейчас в теме
(4) Как указано в аннотации к статье, для автора это "относительно новый подход". :-)
PLAstic; lmnlmn; DmitrySinichnikov; ПрестарелыйЗаяц; +4 Ответить
6. Yashazz 4709 20.11.19 14:22 Сейчас в теме
(5) Там сказано "новый подход к одному из тривиальных методов" - классная формулировка. Ну, рад за автора)
PLAstic; ids79; +2 Ответить
7. Yashazz 4709 20.11.19 14:24 Сейчас в теме
А вообще, если уж говорить о безусловно правильно изложенных предпосылках, т.е. о ситуациях, в которых отчёт СКД нельзя делать "одним куском" - неважно, запрос это или источник данных - то говорить надо о вложенных СКД. Например, https://infostart.ru/public/173309/
Имхо, гораздо более грамотный и быстрый с точки зрения платформы, а главное, более "штатный" способ. Даёт всё - и фрагментируемость, и прозрачность, и удобство отладки.
VVi3ard; PLAstic; +2 Ответить
8. ПрестарелыйЗаяц 20.11.19 14:52 Сейчас в теме
Ну блин это даже не скалярное выражение SQL, а по производительности еще похуже ...
9. HolodZar 21.11.19 04:03 Сейчас в теме
(8) скорость получения отчета складывается не только из скорости его формирования. возможно люди перед этим год вносили данные. и готовы подождать "лишние" секунды, минуты.
10. утюгчеловек 38 21.11.19 11:52 Сейчас в теме
Зачем так делать? Какую проблему решает автор?
В этой статье я опишу работу с закладкой СКД "Вычисляемые поля", а именно - применению внешних функций - как их использовать, что где нужно добавить, правильно "включить".

Это точно проблема?
Прикрепленные файлы:
11. user1216930 21.11.19 20:05 Сейчас в теме
12. dim369 26.11.19 14:59 Сейчас в теме
Такое чувство, что комментаторы сразу родились "гуру" и не понимают, что за ними стоят толпы новичков, которым каждая простая понятная статья на вес золота. Особенно про скалярные вычисления в SQL мне нравится - вот человек выпендрился... Да, в общем ничего особенно нового, но и ругать особенно не за что. Бывает что просто очевидные мысли в голову не придут - а тут вот они. Просто для кого-то действительно это новость... Добрее нужно, коллеги )) Имхо
OzzY; McLer; user1781390; rabota.v8.1c; niki295; +5 1 Ответить
13. PLAstic 295 28.11.19 12:55 Сейчас в теме
(12) Принципиальная разница в реакции. Баян? Ну удалил статью и всё. Это в идеале. На практике можно хотя бы добавить ссылки на другие статьи ИС, где эта тема поднималась не раз. Можно добавить дисклеймер, что да, друзья, метод вредный и кучу раз его 1С не рекомендует использовать вот тут, тут и тут.
Да и оправдывать откровенно неоптимальные и даже вредные для новичков статьи недопустимо. Не могу поддержать ваш комментарий.
14. dim369 28.11.19 17:08 Сейчас в теме
(13) Коллега, у вас похоже еще более жесткое отношение к предложенному методу. Однако вы первый, кто утверждает, что метод вредный. Есть пруфы, где его не рекомендуют и считают вредным? Да, можно по другому, но если человек сделал неоптимально по этой статье или вообще не сделал (но хотел идеально) - по мне лучше первый вариант. Имхо, конечно.
rabota.v8.1c; +1 Ответить
18. ixijixi 1775 25.02.21 17:45 Сейчас в теме
(14)
Есть пруфы, где его не рекомендуют и считают вредным?
Достаточно выставить точку останова в модуле ОбщийМодульСКД (так он назван у автора), чтобы посмотреть, сколько раз будет вызываться каждая из функций. По сути - это запрос в цикле.
22. VVi3ard 52 24.12.21 13:42 Сейчас в теме
Вот вообще не факт что запрос, большинство операций будут выполнятся без запроса к СУБД.
Но даже если запрос, не факт что выполнить 1000 раз запрос к таблице на 1,5 ТБ который по индексу дернет данные это хуже чем попасть на скан этой таблицы из за ошибки разработчика при написании мега запроса, или планировщика при его выполнении, а если говорить о PG то там вообще минное поле.

Я неоднократно видел (и сам писал) примеры когда переписывания с тяжелых запросов на ТЗ и циклы ощутимо снижало нагрузку на СУБД, да, возрастала нагрузка на сервер 1С, увеличивалось потребление памяти, но вот только серверов 1С мы добавить можем сколько нам нужно, хоть вообще отдельный сервер под задачу выделить, а СУБД у нас одна.
И пользователю вообще нет разницы формируется отчет 10 секунд или 1,5 минуты, если этот отчет формируется 1-2 раза в день, или вообще раз в месяц.

У меня 15 лет опыта в написании запросов, и весь мой опыт говорит, что лучший запрос это маленький запрос. Все большие запросы работают не предсказуемо, очень сложны для написания и понимания, и вообще не масштабируются. И если у вас hi load то вы и сами это прекрасно понимаете.

А если вы сидите на заводе с УПП на 120 пользователей, то все эти разговоры про оптимизацию отчетов и о том что использование внешних функций снижает производительность это просто надрачивание ЧСВ.
shusharu; +1 Ответить
21. VVi3ard 52 24.12.21 13:36 Сейчас в теме
(14) Не оптимально по скорости работы это не значит плохо. Есть множество метрик кроме скорости выполнения отчета.
Бывает так что подобный отчет который работает 4 минуты вместо 1 минуты, меньше грузит СУБД и больше сервер 1С, при этом основные проблемы у крупных баз именно с СУБД, и получается что отчет на 4 минуты работает оптимальнее чем отчет за 1 минуту.
А есть ещё такие метрики как понятность, тестируемость, сопровождаемость, документирование и по всем этим метрикам подход описанный автором в статье лучше монолитного запроса в СКД с километровыми выражениями в вычисляемых полях.
mikl79; shusharu; +2 Ответить
15. Olenevod 33 03.12.19 10:41 Сейчас в теме
По моему автор ясно написал, что использует иной подход к созданию больших отчетов, чтобы не запутаться и чтоб потом удобно поддерживать его и не сломать.
Конечно все знают что такое вычисляемые поля и с чем их едят, но ведь и использовать их можно по разному. Мне вот не пришла в голову такая идея с дроблением вычисления отдельных полей, когда реализовывал отчет по прогнозу расчета амортизации по дням (в НФО) с учетом переоценок, модернизаций, перемещений и т.д. (а условия там заковыристых там много).
Еще, например, понравилась идея с созданием общего модуля для вычисляемых полей в расширении. Чем не лайфхак?
VVi3ard; ixijixi; +2 Ответить
16. mikl79 118 09.10.20 08:32 Сейчас в теме
17. mikl79 118 09.10.20 08:34 Сейчас в теме
сначала не получалось, но тут оказалось важным поставить 4-й параметр в функции: ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки, Истина)
19. Hatson 528 10.09.21 11:43 Сейчас в теме
Функция ПолучимТаблицуДанных()

	// == Здесь сделаем запрос к базе и заполним на ТаблицуРезультат
    // == текст запроса не привожу ==


Я так понимаю текст запроса в предыдущей статье.

Здесь будут серьезные проблемы с производительностью.
1) Вызов функций общих модулей. Включите замер производительности и посмотрите сколько раз СКД их вызовет.

2) Сам запрос и передача таблицы в СКД с последующим выводом. Подробностей специально не привожу, вам для самостоятельного изучения. Подсказка - посмотрите результирующий запрос СКД от обычного набора данных Запрос.
20. VVi3ard 52 24.12.21 13:30 Сейчас в теме
(19)
Здесь будут серьезные проблемы с производительностью.


Откуда у всех 1Сников такая тяга к производительности? Можно подумать тут каждый комментатор сидит на базе в 12 Tb с сотней тысяч запросов в секунду.

90% задач это задачи уровня завода, небольшого холдинга, а подобные отчёты формируются 5-7 пользователями 2-3 раза в месяц.

Любой кто разрабатывал производственные отчёты на 40-50 колонок понимает что производительность тут даже близко не главная проблема, проблема в том что бы эти отчёты сопровождать и дорабатывать. Это адский труд.

Я имею опыт сопровождения и разработки конфигурации которая работает на терабайтных базах, и даже там вопросы производительности относятся к достаточно узкому классу задач (регламентные, core функционал расчетов и.т.п.)
И могу сказать что в 99% случаев задачи где важна оптимизация нужно максимально упрощать, а такие сложные задачи как отчёты с множеством формул можно делать не оптимально, и это будет правильным решением.

Я встречал "оптимальные" отчеты которые формируются 10 секунд вместо 5 минут, вот только не встречал людей которые помнят и знают как работает огромный запрос и почему там сделано так а не иначе (комментариев то нет в запросе). И в итоге доработка таких отчетов занимает недели вместо 5 минут. И каждый раз хочется найти этого придурка который что то наваял в состоянии потока, потешил свое ЧСВ, и ушел в закат, да заставить его переписывать запросы на 30 пакетов с кучей формул. А если таких отчетов 5-6 да все они связаны между собой вообще туши свет.
OzzY; timurkarimov; shusharu; +3 Ответить
Оставьте свое сообщение