Приемы работы с СКД: делаем за 5 минут то, на что у других уйдет час

03.09.18

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

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

Я поделюсь опытом, как сложное сделать простым: как сократить (и даже отказаться) от написания кода при выводе отчетов.

«Лучше день потерять, потом за 5 минут долететь…» – это на 100% про систему компоновки данных. Механизмы компоновки многим непонятны – не очевидно, что это, зачем это нужно и как работает. Но в компоновке надо разбираться, потому что она открывает очень интересные возможности.

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

 

Как избежать вывода отчета «кодом»

Начнем с первого вопроса – как избежать того, чтобы выводить отчет «кодом», как сделать его на компоновке, не прибегая к сложным запросам.

 

Вывод для проекта пройденных и предстоящих контрольных точек

Приведу пример из личного опыта. В нашей компании отдел разработки автоматизирован на системе 1С:СППР – это система фактического учета задач. Каждая задача делится на контрольные точки, и разработчик при ее выполнении отмечает, что контрольная точка пройдена.

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

Когда я отдал отчет на разработку, разработчик ответил мне, что на это нужно минимум полдня работы. Я очень удивился, потому что, на мой взгляд, это делается за 10-15, может быть, 20 минут. Начал разбираться.

Оказалось, что разработчик хотел в процедуре «ПриКомпоновкеРезультата» составить таблицу значений с этапами, обработать ее в цикле (для определения того, пройден этап или еще нет), а в одной из колонок будет в виде текста скомпонованы нужные мне этапы. Результат в свою очередь подать на вход компоновки с помощью набора данных вида «Набор-объект».

 

Очень сложно и непонятно. Действительно, работы больше, чем на полдня и хорошо, если уложится.

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

  • Готовим данные путем объединения запросов – выбираем все необходимые контрольные точки и технические проекты.

 

И с помощью функций «СоединитьСтроки» и «ТаблицаЗначений» выводим пройденные и предстоящие этапы в качестве отдельных полей-ресурсов.

В результате получается то, что надо – пройденные и предстоящие этапы в отдельных колонках строки.

Что делает функция «ТаблицаЗначений»? Эта функция по детальным записям собирает таблицу значений, которую можно подать на вход функции «СоединитьСтроки». Таким образом, получается нужная строка с переносами.

 

ABC-анализ разработчиков в разрезе ошибок

Другой пример. Я захотел посмотреть, кто больше всех в отделе «косячит» – решил провести ABC-анализ разработчиков в разрезе ошибок.

Что это значит? Берем разработчиков, упорядочиваем по количеству ошибок. Первые 20% этого списка – хорошие разработчики, «косячат» мало., следующие 30% – середнячки, и оставшиеся 50% – самые «косячники».

На компоновке эта задача решается очень просто – за пять или семь минут. Хотя, казалось бы – надо упорядочить таблицу, как-то посчитать эти классы, где-то их зафиксировать... На самом деле, ничего этого не надо.

Первый вариант

Мы прямо в ресурсе вызываем функцию общего модуля, которой на вход подаем результат встроенной в СКД функции «ГрупповаяОбработка».

Что делает функция «ГрупповаяОбработка»? Она возвращает все значения группировок в виде таблицы значений. Таким образом, при вызове функции общего модуля можно получить доступ к соседним строкам, чтобы определить класс ABC на основании количества ошибок.

Это первый путь, он длинный. Есть путь еще короче.

 

Второй вариант

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

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

 

Другие функции СКД

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

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

 

Как эффективно применить СКД в коде

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

Упрощение применения СКД в коде

На слайде показан пример, который я взял из «Яндекса», написав запрос: «Как вывести результат компоновки в таблицу значений». Где здесь оптимизация? Ведь нужно написать кучу кода. Как с помощью этого можно что-то оптимизировать?

Ответ очень простой – используйте свои библиотеки.

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

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

 

Особенности использования СКД в коде

Если вы будете применять систему компоновки данных в коде, то обязательно столкнетесь с одной ее маленькой особенностью.

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

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

Если посмотреть замер производительности, мы увидим, что 90% времени уходит на формирование макета компоновки. Что это такое?

 

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

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

Таким образом, мы увидим привычную нам картину, когда основное время уходит на чтение данных и на работу с базой.

 

Советы по разработке собственных фреймворков

Если будете делать для себя какую-то библиотеку для работы с компоновкой, старайтесь делать так, чтобы:

  • было минимум функций – желательно таких, с которыми удобно работать (чтобы вы могли получить результат выполнения компоновки данных одной, двумя, тремя строками);
  • при этом не очень хорошо делать так, чтобы весь код по выгрузке результата компоновки данных в таблицу значений находился в одной функции, потому что:
    • часто нужно посмотреть, что лежит в макете (какой запрос будет исполняться фактически);
    • возникает необходимость выгрузить промежуточное значение – в таблицу значений или в дерево значений.

 

Примеры упрощения популярных задач

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

 

Накопительный итог

Первая задача – это накопительный итог. Я думаю, каждый сталкивался с ситуацией, когда нужно посчитать значение параметра накопительным итогом. Например, когда в первом периоде у нас было затрачено 10 человеко-часов и во втором периоде – 10 человеко-часов. И при выводе значения трудозатрат для второго периода нам нужно показывать, сколько всего было потрачено времени.

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

ГДЕ ТехПроект = ТехПроект И Период >= Период

После соединения вместо одной строки получается три, мы их группируем по основным измерениям и получаем результат накопительным итогом. Это сложно.

В компоновке эта задача решается элементарно – с помощью функции «ВычислитьВыражение»:

ВычислитьВыражение("Сумма(Трудозатраты)", , , "Первая", "Текущая", , , )

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

 

Предлагаю сравнить время выполнения запроса и компоновки. Параметры тестового стенда приведены на слайде – это два слабеньких сервера, на одном из них 1С-сервер, на втором SQL-сервер.

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

  • первый тест – это месячный объем;
  • второй тест – это двухмесячный объем и т.д.

Каждый тест проводился по 10 тыс. раз. Результирующее время было усреднено.

На графике видно, что разницы между СКД и запросами практически нет. А если нет разницы, зачем писать сложные запросы, когда можно решить задачу с помощью компоновки всего в одну строчку.

 

Курсы валют на конец месяца

Следующая задача – это получение курсов валют на конец периода, т.е. поиск ближайшего значения.

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

На компоновке эта задача решается очень просто. Мы делаем два набора.

  • В первом производим получение периодов;
  • Во втором – делаем запрос среза последних;
  • Для этих двух наборов делаем соединение с параметром «Период», используя его в качестве параметра виртуальной таблицы для второго запроса.

В результате, на каждую строчку таблицы периодов будет выполнен запрос со срезом последних. Фактически, это получается запрос в цикле, причем, без кода. Мы не пишем цикл, не заполняем таблицу. Просто делаем два «Набора-запроса» и соединение между ними с передачей параметров – ничего сложного.

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

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

Это – очень интересная возможность. Если у вас в компоновке используется несколько соединений, с помощью списка значений можно ограничить выборку из подчиненного набора.

Применение СКД позволяет сэкономить множество строчек кода:

  • «ВычислитьВыражение» упрощает расчет накопительного итога;
  • Очень удобно использовать подзапросы;
  • Используя свои библиотеки, мы намного удобнее работаем с компоновкой, чем, если бы работали напрямую с этими объектами.

 

Как искать ошибки в СКД?

Итак, мы научились использовать функции в компоновке, но что-то пошло не так. Как искать в компоновке ошибки?

Часто бывает, что сообщение с информацией, которое выдает компоновка, не информативно, и непонятно, что система от разработчика хочет.

 

Рассмотрим простой пример. Допустим, есть запрос, который из справочника технических проектов выбирает проекты и их заказчиков. Запрос простой, всего три строчки.

 

 

В режиме предприятия мы накладываем на этот запрос отборы по подразделению, к которому относится ответственный за проект, и департаменту самого проекта – делаем два отбора с иерархическим условием.

Давайте посмотрим, что получается в макете компоновки.

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

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

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

 

Заключение

Мы поговорили о том, как:

  • Вывести отчет СКД несмотря на сложные потребности
  • Вместо кода использовать функции СКД
  • Применять СКД не только для отчетов
  • Решать некоторые из популярных задач с помощью СКД
  • Искать ошибки в СКД

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

Изучайте СКД – это поможет вам сделать свой код совершеннее!

 

Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2017 COMMUNITY.

 

10 - 12 октября 2024 года состоится конференция INFOSTART TECH EVENT, на которой прозвучит 130+ докладов.

Темы конференции:

  • Приемы, методы разработки и тестирования
  • DevOps-практики, управление инфраструктурой разработки
  • Интеграция и обмен данными
  • Идеи и тренды в разработке 
  • Администрирование серверов 1С и СУБД. HighLoad оптимизация  
  • Развитие технической команды. Личная эффективность разработчика 

INFOSTART TECH EVENT - крупнейшая профессиональная конференция для программистов 1С.


Подробнее о конференции.

 


См. также

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

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

10000 руб.

02.09.2020    140753    772    391    

803

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    5233    implecs_team    6    

44

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

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

3 стартмани

05.02.2024    5593    43    obmailok    21    

78

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

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

1 стартмани

31.01.2024    2580    2    Yashazz    0    

33

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

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

2 стартмани

11.12.2023    9473    21    John_d    25    

124

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

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

05.12.2023    6212    PROSTO-1C    13    

67
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Dzenn 879 03.09.18 09:44 Сейчас в теме
Что один будет делать 20 минут, другой будет делать три дня, и это нормально.
temdj; bocharovki; vassa4ever; Aligator69; ашот; IvanGorbunov; IvanovAV; jaroslav.h; milov.aleksey; user621724_Dimav1979; alex-l19041; kild; portwein; ivanov660; +14 Ответить
2. karpik666 3802 03.09.18 10:50 Сейчас в теме
Супер, обязательно схожу на выступление в этом году.
SergeyN; kild; +2 Ответить
3. bulpi 216 03.09.18 11:35 Сейчас в теме
Плохо, что нет толковых книг с примерами по этим вопросам. Или я их не знаю.
temdj; SagittariusA; bocharovki; maxst22; Aligator69; IvanovAV; eeeio; kild; +8 Ответить
4. qwinter 682 03.09.18 11:43 Сейчас в теме
5. dreamcreal 04.09.18 01:04 Сейчас в теме
6. HAMMER_59 247 04.09.18 07:45 Сейчас в теме
"Вот, всего две строчки кода!"
На днях писал обработку заполнения для документа "Бухгалтерская операция", для различных конфигураций, в т.ч. для КА 1, и БП 2, в которых обработки заполнения не поддерживаются. Пришлось искать альтернативные варианты, сделал через внешнюю печатную форму.
С заполнением трудностей не возникло, а вот как обновить данные после заполнения на форме. Всего три строчки кода :), но именно на эти три строчки кода ушло больше всего времени.
7. SergeyN 1086 04.09.18 09:26 Сейчас в теме
(6)
С заполнением трудностей не возникло, а вот как обновить данные после заполнения на форме. Всего три строчки кода :), но именно на эти три строчки кода ушло больше всего времени.


Напоминает старый анекдот про "1$ за удар, 999$ за то, что знаю куда ударить". Для этого мы здесь и делимся знаниями, что бы экономить время на "на три строчки кода" ))
temdj; Aligator69; OlegTor; milov.aleksey; +4 Ответить
20. Lapitskiy 1060 03.10.18 23:08 Сейчас в теме
8. Pwnish3r 05.09.18 13:33 Сейчас в теме
В результате, на каждую строчку таблицы периодов будет выполнен запрос со срезом последних. Фактически, это получается запрос в цикле, причем, без кода. Мы не пишем цикл, не заполняем таблицу. Просто делаем два «Набора-запроса» и соединение между ними с передачей параметров – ничего сложного.

Эту же задачу можно решить в 1 корреляционный запрос.
9. SergeyN 1086 05.09.18 13:57 Сейчас в теме
(8)
ожно решить в 1 корреляционный



Можно. Сравнительные замеры корреляционного запроса делали? По моему опыту для больших таблиц - намного медленнее, чем приведенные примеры.
12. s_vidyakin 68 05.09.18 18:38 Сейчас в теме
(9) Разве корреляционные запросы поддерживаются 1С ??
13. SergeyN 1086 05.09.18 21:54 Сейчас в теме
(12) Да. Такой вариант вполне рабочий:


ВЫБРАТЬ
	РеализацияТоваровУслуг.Ссылка КАК Ссылка,
	РеализацияТоваровУслуг.СуммаДокумента / КурсыВалют.Курс КАК СуммаДокумента
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
		ПО (КурсыВалют.Валюта = &ВалютаОценки)
			И (КурсыВалют.Период В
				(ВЫБРАТЬ ПЕРВЫЕ 1
					Фильтр.Период
				ИЗ
					РегистрСведений.КурсыВалют КАК Фильтр
				ГДЕ
					Фильтр.Период <= РеализацияТоваровУслуг.Дата
				УПОРЯДОЧИТЬ ПО
					Фильтр.Период УБЫВ))
Показать



В условии отбор по таблице из вышстоящего запроса.
15. kalyaka 1085 03.10.18 11:26 Сейчас в теме
(12) поддерживаются только для операции В, вот цитата из справки:
Заметим, что из запроса операции В возможно обращение к полям таблиц, которые встречались во внешнем запросе до появления операции
10. Бубузяка 62 05.09.18 14:46 Сейчас в теме
Очень позитивная статья. Спасибо.
11. TerveRus 05.09.18 16:54 Сейчас в теме
Спасибо, интересно!
Только фреймворков для скачивания не хватает.
Все свелось к "посмотрите как круто я могу". А кто сможет это повторить, кроме Вас?)
Goggy; CepeLLlka; ашот; Arxxximed; Дмитрий74Чел; echo77; jaroslav.h; +7 1 Ответить
14. SergeyN 1086 05.09.18 21:57 Сейчас в теме
(11) см модули

ФинансоваяОтчетностьСервер

КомпоновкаДанныхСервер


в типовых УТ11, КА2, ЕРП2

Начать можно с адаптации под ваши задачи функций из этих модулей.
16. nytlenc 03.10.18 16:01 Сейчас в теме
Многабукаф, не осилил.
17. echo77 1865 03.10.18 19:13 Сейчас в теме
(16) Добавьте в мемориз, читайте по частям. Я тоже не осилил с первого раза :-)
18. echo77 1865 03.10.18 19:17 Сейчас в теме
(0) Замеры Подзапросов в СКД и запросов в цикле показали почти одинаковые результаты - не мудрено, и тут и там по сути запрос в цикле.
Вот эта (https://infostart.ru/public/77568/) статья хорошая - объясняется как получить срез на каждую дату в запросе. Кстати, ее писал владелец ресурса http://1cskd.ru/. В итоге, я делаю срезы на каждую дату в запросе и научил всех своих коллег делать так же.
Знать возможности СКД - это очень хорошо, но не обязательно их все применять.
Посмотрите мои статьи по СКД тоже.
Arxxximed; +1 Ответить
19. Lapitskiy 1060 03.10.18 23:07 Сейчас в теме
Отличная статья с примерами. Годится как пособие по СКД.
Есть одно "но" - автор грешит упрощениями типа "5 минут". Видимо работы с крупными компаниями или проектами/конфигурациями нет или мало.
Сейчас чтобы понять, "а что там в УТ 11" :) это надо полдня сидеть над кодом, а потом на всякий случай отдать на тестирование.
Еще момент - а процесс обсуждения и ознакомления разработчика с ТЗ - почему его не включаете? Есть такие "спецы" по объяснению ТЗ - чтобы их понять, потребуется также полдня.
bocharovki; Daynestro07; Atilla9999; +3 Ответить
21. fly_men 05.10.18 10:48 Сейчас в теме
Спасибо за опыт, одной граблей меньше.
22. unichkin 1572 07.10.18 22:51 Сейчас в теме
Обычная история.. Все это зависит от опыта программиста, и особенно - от его желания "сделать лучше". Далеко не каждый относится к задачам как к экзамену своих способностей, где нужно подумать \ решить наиболее оптимально.. Совсем недавно переделывал за одним товарищем - то, что он писал три дня (и не работало) - я налабал за ~5 часов, и взлетело. Все дело в опыте, и желании качественно решать задачи.
В такой статье неплохо бы упомянуть о консоли СКД из инструментов разработчика - где можно быстро и удобно разработать запрос и схемы отчета. Главное - возможность "на лету" видеть запрос, который генерирует СКД. У меня уже сложился некий тех. процесс - если нужен отчет на СКД, схему я разрабатываю именно там, уже потом добавляю ее в отчет, и при необходимости рисую формы и прочее.
23. ids79 8443 25.06.19 21:41 Сейчас в теме
Первую задачу можно еще решить использую функцию "ВычислитьВыражениеСГруппировкойТаблицаЗначений". Результат аналогичный получится.
user717534; +1 Ответить
24. strek_ivan 80 30.08.19 15:35 Сейчас в теме
И ведь всё актуально и по сей день!
25. vpaoli 26 02.09.19 18:00 Сейчас в теме
картинки мелкие и не читаются, жаль
26. seka09 4 15.10.19 14:09 Сейчас в теме
То что выполнялось у меня на скд 15 мин, запросом пару часов выполнялось. Я не согласен что разницы нет выполнения запроса или скд. Разница очень большая. Для больших объемов данных скд как раз и необходимо.
27. PerlAmutor 130 06.06.21 06:49 Сейчас в теме
(26) Дело в вашем умении оптимизировать запросы, а не в какой-то "магии" СКД. При должном опыте можно писать запросы эффективней, чем это делает СКД. Отдавать на откуп СКД все подряд я бы не стал. Слишком уж она багованная и не предсказуемая. Чего только стоят NULL в результатах, и функциональные опции отключающие поля выборки и отборов, невозможность выполнить запрос в привилегированном режиме, слишком раннее наложение отборов по одноименным полям, приводящим к искажению результатов и т.д.
28. PerlAmutor 130 06.06.21 07:03 Сейчас в теме
На самом деле большинство из "быстрых решений" потом приходится все-равно переписывать долгим методом, т.к. заказчик часто требует добавить еще "вот это и это", а "это" никаким образом не клеится с тем, что уже сделано. Кроме того применение удобных фреймворков негативно сказывается на знаниях по платформе, т.к. забывается то, как оно на самом деле реализуется на пустой конфигурации.
Serg2000mr; temdj; +2 Ответить
Оставьте свое сообщение