Как правильно писать запросы для СКД. Фундаментальное исследование

12.11.25

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

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

Почему это важно?

 

Любая учетная система решает три ключевые задачи: ввод, хранение и анализ данных. Т.е. анализ – это значительная доля от поставленных перед учетной системой задач. Что такое анализ для нас (как разработчиков)? – это запросы и отчеты.

 

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

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

На вопрос, как правильно писать запросы – ответа нет. И, если кто-то вас будет убеждать в обратном – не верьте! А вот на вопрос, как правильно писать запросы для СКД, есть вполне хороший ответ.

 

В ЧЕМ ОТЛИЧИЕ ЗАПРОСА ДЛЯ СКД ОТ ОБЫЧНОГО ЗАПРОСА?

 

Для начала разберемся, почему запрос для СКД принципиально отличается от обычного запроса.

Все очень просто – запрос, помещенный в схему компоновки данных, НИКОГДА НЕ ВЫПОЛНЯЕТСЯ.

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

Если вы выполните запрос из общего модуля – платформа будет работать ровно с тем текстом запроса, который вы написали. А вот при формировании отчета, платформа всегда выполняет какой-то другой запрос. Какой?

 

ГДЕ ПОСМОТРЕТЬ ИСПОЛНЯЕМЫЙ (ПЛАТФОРМОЙ) ТЕКСТ ЗАПРОСА?

 

 

Что происходит при формировании отчета? Схема компоновки данных и Настройки компоновки данных передаются в Компоновщик макета компоновки данных. Компоновщик готовит нам макет компоновки – некую «сводную инструкцию» по формированию отчета, в которой в том числе будет текст исполняемого запроса. Далее «инструкция», а также, при желании, внешние наборы данных (и/или) менеджер временных таблиц передаются в процессор компоновки Процессор компоновки «передается» в процессор вывода. Процессор компоновки по запросу от процессора вывода формирует к БД запрос. На выходе - отчет (или данные). Еще не уснули?

(Как на такой «зубодробительной» терминологии можно нынешнее поколение стажеров, которые и слова-то такого страшного «Компоновка» не знают, обучать?!)

 

Что для нас ключевое? Наш текст запроса попадает вместе с различными настройками в компоновщик и что-то там с ним происходит. Давайте разбираться – что? И как этим управлять?

 

 

Какой запрос выполняется при формировании отчета?

 

Возьмем «идеальный» запрос – выберем парочку полей из справочника и «скормим» его СКД. Количество – это ресурс, суммируем.

Смотрите, какой интересный результат мы получим:

 

 

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

Почему это произошло?

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

 

 

Во-вторых, с неупорядоченной выборкой пользователю работать не удобно. Группировать логичнее упорядоченную выборку. Группировку (уже в смысле агрегирования) и сортировку выборки выгоднее выполнять средствами СУБД, а не платформы. (Это мнение разработчиков платформы, а не мое. Иначе бы мы не увидели картинку с «пухлым» исполняемым запросом).

Вот платформа и добавила нам в НАШ запрос упорядочивание и группировку выборки, и заодно вытянула поля представления.

Можно ли как-то этим управлять? Да, можно. Переопределив поля упорядочивания и представления (сортировка/группировка будут выполняться тогда платформой) и отключив галку «Использовать группировки запроса, если возможно». В таком случае будет выполнятся платформой ровно тот запрос, который вы напишете. (Так он все-таки иногда выполняется? Или нет?)

 

 

Если вы сейчас решили, что я призываю вас переопределять поля представления/ упорядочивания -  вы не правы. НЕ ВЗДУМАЙТЕ это делать!

Во-первых, если сортировка/группировка будут выполняться платформой, а не СУБД, вы можете на самом деле получить деградацию в скорости.

Во-вторых, MS SQL отлично «вытягивает» подобные запросы. И даже, если вы сделали по тексту запроса соединение с какой-то таблицей, из которой можно выбрать сразу и поле представления, «накладные расходы» на то, чтобы «протащить» его через «десяток» временных таблиц, могут оказаться больше, чем «расходы» на левое соединение в последнем запросе пакета. Для PostgreSQL иногда это может привести к выигрышу по скорости, но с каждым запросом нужно разбираться индивидуально.

В-третьих, разработчики платформы- далеко не глупые люди, и лучше нас понимают проблематику. Например, если для поля составного типа нужно получить представление, скорее всего платформа сформирует отдельные запросы для массива ссылок к разным таблицам, а не сделает левое соединение с безумным количеством таблиц в запросе. А вот разработчик 1С может принудительно это «безумное» соединение создать. А потом сидеть и удивляться, «а чего отчет не формируется?»

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

ВСЕ, ЧТО ВЫ ДОЛЖНЫ ИЗВЛЕЧЬ ДЛЯ СЕБЯ ИЗ ДАННОГО ПРИМЕРА – БЕСПОЛЕЗНО ОТЛАЖИВАТЬ В КОНСОЛИ ЗАПРОСОВ ИСХОДНЫЙ ЗАПРОС! ЗАЧЕМ ОТЛАЖИВАТЬ ТО, ЧТО НЕ ВЫПОЛНЯЕТСЯ?

 

ПРОБЛЕМА МИНИМИЗАЦИИ ВЫБОРКИ

Какие у нас есть общие правила по созданию запросов?

«Нужно стараться минимизировать объем выборки, то есть выбирать запросом только те данные, которые нужны». (цитата с сайта ИТС).

НО. Отчет в себе подразумевает возможность гибкой настройки. Пользователь может удалить или добавить какие-то поля. Может установить отборы. Значит, независимо от настроек, исполняемый при формировании отчета, запрос должен минимизировать объемы выборки.

Давайте введем определение:

«Хороший» запрос для СКД – это запрос, который независимо от настроек формирует минимально необходимые для вывода в отчет выборки. (Естественно, с учетом ограничений заложенных самой структурой запроса.)

(При отсутствии официальной терминологии от вендора - мы имеем право вводить любую.)

Что такое выборка? Как вы ее у себя в голове представляете? Скорее всего, как таблицу. Таблица - это «пересечение строк и колонок». Как можно уменьшить объем таблицы? Удалить из нее лишние «колонки» и/или «строки». Начнем с «колонок».

 

 

УДАЛЕНИЕ НЕНУЖНЫХ ПОЛЕЙ ИЗ ТЕКСТА ЗАПРОСА

Компоновщик макета старается удалить все ненужные «колонки» из текста запроса. Если пользователь не запросил на вывод какие-то поля – он старается от них избавиться.

 

 

Исключения:

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

Логика, примерно, следующая:

 

 

Очень частая ошибка при написании запросов для СКД– поле группировки не выведено в отчет. Любой расчет, завязанный на присутствие поля в выборке – приведет к "ошибке" (к результату, не соответствующему первоначальной постановке).

 

 

Какие это дает возможности при написании запроса?

 

МОЖНО выбрать что-нибудь полезное «про запас» для пользователя. В запросе для СКД мы не обременены жестким правилом «минимизации выборки». Компоновщик все невостребованное сам из текста запроса удалит.

МОЖНО выбрать что-нибудь полезное для себя (чем мы хуже пользователя?):

    • Очень важную информацию, которую должен прочитать разработчик.
    • Комментарии по логике построения запроса.
    • Поля для разметки текста запроса.

 

С чем нужно быть осторожным, когда выбираем что-нибудь «полезное» –так это с последним запросом в пакете (если галку «автозаполнение» сняли). Алгоритм оптимизации текста запроса явно анализирует список полей набора схемы КД (это то, что над запросом). Если выбранное в последнем запросе поле не попадет в поля набора схемы КД – оптимизация текста запроса (только последнего запроса в пакете) не случится.

 

 

А еще компоновщик игнорирует вложенные запросы! Совсем-совсем! Не совсем, но почти!

 

 

(С параметризацией виртуальных таблиц во вложенных запросах компоновщик все-таки справляется. Но это немножко из другой оперы!)

Уперлись, видимо, разработчики компоновщика в не уникальность круглых скобок (обрамляющих вложенный запрос) в тексте запроса. Были бы они квадратные – оптимизация, вероятно, давно бы состоялась (навскидку, поместить текст вложенного запроса во временную таблицу выше, применить алгоритм оптимизации и вернуть обратно – технически, вполне, возможно. Даже с учетом «многоуровнести» вложенности запросов). НО! Нерешаемых задач, ведь, нет! Может, пора уже эту задачу решить?

Или алгоритм компоновщика появился в платформе раньше, чем вложенные запросы. И живет по принципу: «работает – не трогай»! (Ответ на вопрос в комментариях дал tormozit. Вложенные запросы появились раньше. НО! Автору (очень сильно) не нравится принцип! Пусть, вопрос останется!)

 

УДАЛЕНИЕ НЕНУЖНЫХ ТАБЛИЦ И СОЕДИНЕНИЙ

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

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

По умолчанию, если мы сделали обязательное соединение в запросе и не вывели поля из правого набора в отчет – мы получим следующую картину:

 

Но, если мы сделаем соединение «необязательным» (за это отвечают фигурные скобочки) - временная таблица из текста запроса будет полностью исключена:

Работает алгоритм исключения ненужных таблиц из текста запроса примерно по следующей логике:

 

Нам же это дает преимущество: в один запрос можно заложить сбор данных для разных вариантов отчета (кратких и расширенных). Запрос всегда будет «хороший»! Не плодите десятки одинаковых форм – сделайте одну. Одну сопровождать проще!

 

«МИНИМИЗАЦИЯ СТРОК». ПОЛЬЗОВАТЕЛЬСКИЕ ОТБОРЫ

Если пользователь установит в отчете отбор по какому-либо полю, компоновщик постарается в исходный текст запроса подставить условие «ГДЕ» на это поле (или параметризовать виртуальную таблицу). Пример корректной автоматической расстановки условий:

 

Но, стоит нам немного пошалить (переименуем поле) - и алгоритм начинает сбоить:

Что можно путем эксперимента выяснить про алгоритм расстановки условий:

  • Расстановка условий выполняется до удаления полей (в т.ч. для необязательных таблиц).
  • Алгоритм анализирует только временные таблицы и виды соединений (левое/внутреннее) между ними.
  • Во временных таблицах алгоритм анализирует только наличие поля, имя которого (после как) соответствует полю, на которое установлен отбор.
  • Алгоритм, м.б. как-то анализирует метаданные, т.к. параметризация виртуальных таблиц выполняется только, если имя измерения совпало с именем поля отбора. И принудительно пытается параметризовать виртуальную таблицу, даже если измерение не выбрано в тексте запроса.
  • После левого соединения, если поле выбрано из правого набора, устанавливается повторный отбор.

 

 

 

  • АЛГОРИТМ НЕ АНАЛИЗИРУЕТ условия соединений между временными таблицами и не анализирует «трансформации» поля по тексту запроса.
  • Вложенные запросы игнорируются.

 

 

Скорее всего алгоритм работает примерно следующим образом («исходники», естественно, я не видела -могу только предполагать. Но противоречий с описанной логикой пока не выявила, и, на 90% уверена, что работает он примерно так).

Из временных таблиц составляется «пусть будет дерево» («новобранцы» - выпускники ВУЗов, что это за структура данных и как называется алгоритм обхода?), где корнем является последний запрос в пакете, а листьями - временные таблицы, в которых нет выборки данных из других временных таблиц. В узлах этого «дерева» сливаются в левых и внутренних соединениях временные таблицы (и/или/не выбираются доп. данные из БД), стремясь «объединиться в единое целое» в последнем запросе пакета. Выстраиваются все цепочки «слияний» временных таблиц от листьев до корня. Циклов здесь быть не может (ВТ не может являться источником данных для самой себя). Вероятно, рассчитывается для каждого узла максимальная длина пути до корня, и в порядке убывания этой величины выполняется обход. (Объединения в запросах, вероятно, разбиваются на отдельные узлы и сливаются в один вспомогательный).

  • Если в узле есть поле (с нужным наименованием), и нет отбора в поддеревьях –устанавливается отбор.
  • Если в узле внутреннее соединение между ВТ– и есть отбор в поддеревьях (соответствующих этим ВТ) – отбор не нужен.
  • Если в узле левое соединение тогда:
    • Если в поддереве, соответствующем, правому набору был отбор, а в соответствующем левому отсутствует – устанавливается дополнительный отбор (на поле правого набора).
    • Если в поддереве, соответствующему левому набору – был, то отбор не устанавливается.

 

 

Главное здесь:

  • не выполняется анализ, выбрано ли поле из БД;
  • не анализируются условия соединений;
  • не анализируется – пропадало ли поле/ появлялось/ переименовывалось/ переопределялось.

 

Ключевое для алгоритма – был ли в поддеревьях отбор.

 

 

Следовательно, для того, чтобы алгоритм работал корректно (если ничего дополнительно не предпринимать):

  • Если поле присутствует в последнем тексте запроса, то от любой временной таблицы, в которой это поле появилось, оно должно без переименований и модификаций (исключение – проверка на ЕстьNull) «дойти до финиша». Или пропасть (из правого набора) в условии соединения. (Пропадать и вновь появляться от листьев к корню по цепочке ВТ оно не должно). Вводить по тексту запроса разные «сущности» с одинаковым наименованием (с целью позднее переименовать) также запрещено.

 

Переименования полей по тексту запроса приводят к некорректной работе алгоритма.

 

Переопределение полей тоже:

 

  • При левом соединении поле не может быть выбрано из правого набора, отсутствовать в условии соединения, и присутствовать в левом наборе. (Вообще - это логическая ошибка построения запроса).

 

 

  • Переименовывать при выборке из виртуальных таблиц измерения – запрещено.

 

 

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

 

  • Для виртуальных таблиц срабатывает принудительная параметризация на не выбранное измерение, если его имя совпадает с именем поля, на которое установлен отбор. Т.е. названия выбираемых по тексту запроса ниже полей не должны совпадать с именами не выбранных измерений виртуальной таблицы. (И если у нас две виртуальные таблицы с одинаковыми названиями измерений, в одной из которых нужен отбор, а во второй нет - заходим в тупик).

 

  • Выбирать данные из БД во вложенных запросах запрещено. Причем, смотрите, как интересно - с установкой отбора после левого соединения ВТ во вложенных запросах , алгоритм все-таки справляется: 

 

ПРОБЛЕМА УСТАНОВКИ ОТБОРОВ НА РЕСУРСЫ

Давайте сразу уточним – под «ресурсами» понимаем только количественные и суммовые поля. Если вы, вдруг, группируете даты в массив или делаете конкатенацию строк – для нас это не ресурсы, а аналитики (которые пользователю зачем-то в одной ячейке нужны).

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

 

Для установки отборов по ресурсам, срабатывает точно такая же логика, как и для всех остальных полей – отбор накладывается в первом (по «дереву» ВТ) месте появления поля в запросе (и после левых соединений вт на поля правых наборов). С учетом удаления лишних полей в зависимости от пользовательской настройки – к чему этот отбор будет применен, предугадать невозможно.

 

 

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

Задачу можно решить принудительным суммированием (с отключением промежуточного отбора) в последнем запросе пакета:

 

 

 

Тогда отбор все-таки будет применен к агрегированному значению (но если будут обязательные поля, не выведенные в отчет - все-равно будет работать некорректно). А еще, не поверите – проблема решается просто запретом установки отборов на ресурсы. Или запретом редактирования структуры отчета. Так тоже МОЖНО.

 

ПРОЧИЕ МОДИФИКАЦИИ ТЕКСТА ЗАПРОСА

Чаще всего галку «Автозаполнение» разработчика заставляет снимать некорректная параметризация виртуальных таблиц по периоду. Независимо от того, прописаны ли параметры-периоды в запросе, принудительно добавляются параметры с определенными наименованиями в параметры схемы компоновки. И, если вдруг эти параметры будут установлены – компоновщик пропишет их в текст исполняемого запроса.

Проблема возникнет, например, если:

  • Срезы последних/обороты нужны на/за разные периоды в одном запросе.
  • Если хотим и обороты, и срез последних в одном запросе.
  • Если нужен запрос к таблице итогов регистра сведений (для этого параметризации по периоду не нужна).

 

 

А если автоматически добавленному параметру «Период» (для среза последних) тип переопределить на «стандартный период» - отчет вообще формироваться не будет.

 

«РАЗМЫШЛИЗМЫ»

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

Гадать – угадает ли компоновщик с расстановкой отборов по тексту запроса - не хочется. 

Документации нормальной по данному вопросу от фирмы 1С у нас нет. Вообще никакой нет((( 

(Вот, кстати, больная тема, а по какому вопросу она у нас вообще есть? Фирма 1С мается - не знает, как квалифицированные кадры получить. Внедряют систему наставничества, ИИ активно рекламируют, чтобы он нам стажеров (?м)учил (ну вот как можно «неокрепшим молодым умам» давать игрушку, которая на одинаковом коде различные рекомендации выдает?!!).

Я знаю ответ на этот вопрос. ДОКУМЕНТАЦИЮ НОРМАЛЬНУЮ НУЖНО НАПИСАТЬ! ЕМКУЮ И ЧИТАЕМУЮ! Без «перлов» на подобии «управляемой формы, единой в двух ипостасях &НаКлиенте и &НаСервере». И без "зубодробительного" компоновщика макета компоновки данных. Пока документации не будет – квалифицированных специалистов ждать бесполезно!)

Какой из этого всего вывод? Контролируем процесс самостоятельно! Тем более, что все возможности у нас для этого есть.

 

ИНСТРУКЦИИ КОМПОНОВЩИКУ. СНИМАЕМ ГАЛКУ

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

(Абсолютно дурацкое, кстати, название! Предлагаю переименовать в «Оптимизация». Слово модное, привлекательное –сразу и интерес у разработчиков появится (и букв в слове меньше)! Чувствуете, как красиво с правильно подобранным названием смыслы смещаются?)

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

 

Инструкции по формированию полей набора схемы (доступных для вывода)

 

Немного остановимся на втором виде инструкций. Опытным путем выявлено, что:

  • Поля формируются (при снятой галке) только по инструкциям последнего запроса пакета.

  • Не влияют на модификацию запроса, если пользователь в отчет выведет какие-то реквизиты доступных полей (через «.») Все что через «.» попадет безусловно в последний запрос пакета. Если у вас поля составного типа или очень большие таблицы – запрещайте выбор реквизитов. (И даже так МОЖНО!)

 

 

  • Могут запутать компоновщик. (Этот результат получен при установленной галке).

 

 

ВЫВОД. Должны находиться только в последнем запросе пакета.

 

Инструкции для подстановки условий в текст запроса (нежесткой параметризации)

Тут тоже все просто. Можно указать компоновщику:

  • Подставить условие на поле отбора в запрос в секцию «ГДЕ»
  • Подставить условие на поле отбора в параметры виртуальной таблицы.
  • Подставить условие (или параметр-период виртуальной таблицы), если пользователь заполнил необязательный параметр. С полями так, кстати, не получится (подставить отбор на поле, если пользователь вывел это поле в отчет).

 

 

(Вот, кстати, а что помешало разработчикам платформы при снятии галки автоматически инструкции в текст запроса добавлять? Алгоритм же есть! Заглушку от плохих запросов к БД в виде галки сделали, а вот от не очень умного разработчика 1с, который эту галку может снять –нет. Нелогично. Снова ограничения синтаксиса?)

 

ИНСТРУКЦИИ VS АЛГОРИТМ

А что будет, если одновременно оставить галку и указать инструкции?

Если условие установить ниже по тексту запроса, чем место, которое рассчитает алгоритм компоновщика -  отбор будет подставлен и по инструкции, и по алгоритму.

 

 

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

 

 

Причем, похоже, общая схема следующая:

  • Расстановка отборов по инструкциям
  • Расстановка отборов по алгоритму (если не сняли галку) 
  • Удаление ненужных полей
  • Удаление ненужных таблиц (временные таблицы без соединений (ошибочно оставленные), вероятно, удаляются сразу, в момент построения дерева)

 

Переубедить, кстати, компоновщик НЕ размещать условие «где» в тексте запроса с помощью инструкций за счет переопределения псевдонима тоже не получится. А вот отключить параметризацию виртуальных таблиц поможет :

 

 

 

«Базовый рецепт» расстановки инструкций для компоновщика

Нам сейчас абсолютно не важно, какой у нас написан запрос (плохой/ хороший/ оптимальный/ неоптимальный…). Наша задача – превратить его в «хороший» для СКД. Сделать это можно следующим образом:

  • Делим все выбираемые поля на «аналитики» и «ресурсы». «Ресурсы» – это только суммовые и количественные поля, к которым будем применять агрегатные функции. Все, что не «ресурсы» – это «аналитики».
  • Если поле - «аналитика» выбирается из БД (в т.ч. через «.» от ссылки) и отсутствует жесткая параметризация на это поле– обязательно устанавливается «нежесткая» параметризация.
  • Если поле «приходит» за счет внутреннего соединения между временными таблицами – параметризация не нужна. (Естественно, на все новое - расчетное или вытаскиваемое из таблиц БД - инструкция.)
  • Если поле «приходит» за счет левого соединения между временными таблицами – дополнительная параметризация на поле из правой таблицы (с проверкой на ЕстьNull).
  • Ко всем «ресурсам» – нежесткая параметризация на уровне последнего запроса в пакете (с обязательным применением агрегатных функций). Или вообще отборы не разрешать устанавливать.

 

 

Когда «базовый рецепт» не работает?

  • Когда одна и та же выборка будет анализироваться в разных аналитических разрезах, т.е. отбор «максимально рано» не нужен.
  • Когда не уследим за переименованиями/переопределениями.

 

НО! В чем «прелесть»? Если инструкции расставлены некорректно – это сразу выявится при тестировании/ в процессе эксплуатации. А если не оставлены (например, «плюхнуты» на уровень последнего запроса пакета) – этого никто никогда не найдет и править не будет!.

 

В чем смысл? Компоновщик же по «базовому рецепту» и работает?

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

Почему?

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

 

Во–вторых, компоновщик не может определить, будут ли выбираться данные из БД, он может только на имя поля ориентироваться. А вот вы –да.

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

В-четвертых, мы даем абсолютно убогие наименования объектам метаданных. Любой, оставленный нами код контекстен. О чем вы думали полгода назад, когда какой-то реквизит наименовывали – тайна, покрытая мраком. Так что переименований не избежать!

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

И, напоследок - это прекрасное упражнение для мозга. Причем совершенно бесплатно!

 

Чек-лист.

Перед началом работы.

  1. Вспомнить, что пишете не запрос, а запрос для СКД. Ваш запрос формироваться не будет, а будет формироваться бесконечное множество каких-то других. И все они д.б. «хорошие»!

 

 

До открытия конструктора запроса.

  1. Создать отчет в конфигураторе! Никогда не может создание запроса для СКД начинаться с консоли запросов в пользовательском режиме! ( Вспомнить п.1. Консоль запросов предназначена для написания запросов, а не запросов для СКД!)
  2. Переопределить метод «ПриКомпоновкеДанных».
  3. Снять галку «Автозаполнение». (Если в пакетном запросе будет хотя бы одна временная таблица). Пусть вас утешает мысль, что вы умнее алгоритма.

 

Пишем запрос

  1. Написать запрос. Расставить инструкции. Создали временную таблицу/вложенный запрос – СРАЗУ заполнили «нежесткие отборы» по "базовому рецепту". Над каждым выбранным полем в каждой временной таблице размышляем, должен ли сработать отбор. (Ну или напишите себе обработку, которая инструкции за вас расставит. Разработчики вы, или кто? UPDATE. Кнопка есть. "Ищите и обрящете" в комментариях. НО! Своей головой, все-таки, контролируемее! А вот надежнее, как ни печально, скорее всего по кнопке...)
  2. Оставить комментарии для «потомков». Чтобы потом не страдать, вспоминая, что в своем же собственном запросе сотворили.

 

 

Проверки

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

 

 

  1.  Проверить, что все инструкции для параметризации запроса оставлены:
  • Есть выборка из БД и нет нежесткой (или жесткой) параметризации по выбранным полям. Ответить почему.
  • Есть выборка из временной таблицы, к которой делается левое соединение. Проверить наличие инструкций на поля из правого набора с проверкой на ЕстьNULL.
  • Проверить расшифровки. Все поля исходной группировки должны попасть в отбор.

 

  1. Проверить, что не было переименований полей (до «как» и после). Если были – перепроверить инструкции компоновщику.

  1. Проверить поля наборы схемы на «странные» наименования. Уделить внимание полям, доступным только для отбора. Если есть – перепроверить инструкции.

 

  1. Проверить текст запроса на наличие конструкции «Сгруппировать» и «Различные». Можно для проверки удалить поля группировки из выводимых полей. Если результат некорректный – сделать поля обязательными.
  2. Проверить соединения между таблицами. Ответить на вопрос, точно ли должны быть обязательными?
  3. Проверить запрос на наличие вложенных. Вспомнить, что алгоритм оптимизации не справляется с удалением невостребованных полей из вложенных запросов. (Не должно быть в них много "полезного" про запас.)
  4. Проверить периодичность виртуальных таблиц оборотов РН. Не должно быть меньше месяца. В идеале – д.б. «АВТО» или «Период».

 

 

Не может платформа ничего «оптимизировать» (опять проблема отсутствия нормальной документации), если периодичность меньше месяца –это детерминировано логикой хранения данных в БД в двух таблицах (в одной общие суммы за месяц, в другой – все данные). Платформа только «сгруппировать» (это разве оптимизация?) в текст запроса по таблице движений сможет добавить – с этим вы способны справиться самостоятельно. Не занимайтесь самообманом – пишите запрос к основной таблице, чтобы не получалась такая «красота» в виде соединения таблицы оборотов с основной таблицей ради реквизитов.

 

 

Отладка

  1. Отлаживать ТОЛЬКО исполняемый запрос. Все правки вносить только в конфигураторе.

На этом наше исследование подошло к концу. Пишите запросы для СКД правильно! 

P.S. Так он все-таки иногда выполняется? Или все-таки нет?  

После того, как найдете подтверждение, что он все-таки "ИНОГДА" выполняется, ответьте на вопрос: "А пользователю это надо"?

P.S.2 Мне кажется, мой труд заслуживает спасибо, даже, если где-то были допущены неточности. (Если найдете - пишите. Поправим.) Как минимум потому, что редактор текста на данном сайте очень похож на инструмент для пыток. Гадости (под "гадостями" автор понимает в т.ч. не аргументированную критику), «испражнения» и не объединенные общим смыслом наборы букв оставляйте, пожалуйста, при себе. "Оно" мне мне не надо (могу и вернуть!). Претензии по качеству скриншотов (с нечетким изображением) – напрямую разработчикам сайта (ибо у широких скриншотов, при автоматическом уменьшении размера, существенно страдает четкость!).

P.S.3 Ну и, конечно, ЛЮБИТЕ СКД ТАК, КАК ЛЮБЛЮ ЕЕ Я! И ДОЛОЙ СТЕРЕОТИПЫ – СВОБОДУ МЫСЛИ!

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

 

Вступайте в нашу телеграмм-группу Инфостарт

архитекторы развлекаются любите СКД долой стереотипы пофилосовствуем? 1С дай документацию

См. также

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

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

15500 руб.

02.09.2020    226504    1228    415    

1074

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

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

01.07.2025    6347    krasnoshchekovpavel    3    

64

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

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

27.02.2025    13900    ovetgana    50    

92

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

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

24.12.2024    11394    Akcium    17    

46

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

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

15.05.2024    20483    implecs    9    

52

Инструментарий разработчика СКД Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

3 стартмани

05.02.2024    12100    78    obmailok    21    

86

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

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

1 стартмани

31.01.2024    4946    7    Yashazz    2    

34
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1931 29.10.25 13:17 Сейчас в теме
Не уверен, что кто-то прочитает от начала до конца... Как будто целый курс выложили...
Не читал, но одобряю :)
Kinestetik; baranchikov; ardn; user1827801; CrystalEyeNN; Трактор; frying; +7 Ответить
2. PerlAmutor 160 29.10.25 14:04 Сейчас в теме
Довольно-таки мощная попытка реверс-инжениринга. Стоит чтобы поместить в закладки.
Kinestetik; baranchikov; Трактор; +3 Ответить
3. SerVer1C 993 29.10.25 15:20 Сейчас в теме
(2)
реверс-инжениринга
Для инженера и реверсера слово инжиниринг пишется через И (извините, цепляет)
4. PerlAmutor 160 29.10.25 15:54 Сейчас в теме
5. DmitriyV 3 29.10.25 17:33 Сейчас в теме
(3) Я люблю кушать инжир
Трактор; +1 Ответить
9. Трактор 1274 30.10.25 10:07 Сейчас в теме
(3) вопросы языкознания самые удобные для беззлобного срача.
Слово инженер заимствовано из французского ingénieur, которое в свою очередь восходит к латинскому ingenium.
Буквы "е", "и" взаимопереходящие, также как "г", "ж", поэтому неудивительно, что мы, простые носители языка, не озабоченные его литературностью, по-разному используем эти переходы.
alehinsasha; baranchikov; +2 Ответить
105. starik-2005 3201 14.11.25 11:14 Сейчас в теме
(9) Используйте термин "обратная разработка" (ну или "обратная инженерия").
6. alexey-simf 30 29.10.25 17:56 Сейчас в теме
Только мне показалось что некоторые некоторые примеры-скрины выглядят некорректными (запутанными), например
Временные таблицы и шаги в разные стороны

...а примеры вида "до" и "после" выглядят сложно-сравнимыми либо, вообще, несопоставимыми
до и после

?
7. booksfill 29.10.25 18:17 Сейчас в теме
Спасибо большое за статью.

Есть пара вопросов.

"Если вы сейчас решили, что я призываю вас переопределять поля представления - вы не правы. НЕ ВЗДУМАЙТЕ это делать!"

Если я ничего не путаю, то как раз таки если тянем представление, то СУБД вообще ничего с ним сделать не может, в т.ч. и упорядочить, отобрать или сгруппировать.

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

В связи с этим не ясно, чем это хуже получения, например, наименования в качестве представления?
Разумеется, если нет требования всегда показывать ссылку как этого "хочет" обработчик представления объекта.

============================================================­=======

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

И что? Заменит 10 левых соединений по индексу (т.е. ссылке), на, например, получение, непонятно откуда, массива ссылок, создание объединение из 10 разных таблиц с последующим соединением по ссылке же с основной таблицей?

Как вообще это выглядит на практике?

Может кто-то уже с этим разбирался?
8. vasilev2015 2832 29.10.25 19:34 Сейчас в теме
При расчете итогов по полям остатка в СКД с использованием Ролей НачОст, КонОст, Период (подробнее https://its.1c.ru/db/v8316doc#bookmark:dev:TI000000627) возникает неоправданно высокая нагрузка на сервер приложений. Отчет зависает. Предлагаю изменять текст запроса, переносить нагрузку на СУБД. Если вас заинтересует эта проблема - https://infostart.ru/1c/articles/2060362, на примере Сводная ведомость расчетов «РасчетыСПартнерами».
baranchikov; +1 Ответить
10. DmitryKSL 175 30.10.25 10:44 Сейчас в теме
Претензии по качеству скриншотов – напрямую разработчикам сайта.

С какого-то момента картинки стали обрезаться до 1024. Писал полгода назад в техподдержку, сначала обнадежили, мол проблема передана разработчикам, ожидайте. Потом перестали отвечать, тупо игнорят. Ну блин, напишите что мол так и так, кризис экономим место, все понял-бы и простил.
Даже в канал им писал, они там танцульки устраивают, все у них замечательно.
Прикрепленные файлы:
11. Трактор 1274 30.10.25 11:02 Сейчас в теме
Никогда не может создание запроса для СКД начинаться с консоли запросов в пользовательском режиме!

Странное правило. Схрена ли гости понаехали? Вас жестоко обманули. В пользовательском режиме запрос удобно отлаживать. Потом можно допилить для СКД. Зачем страдать, если результат одинаков?
Боюсь, что совет для начинающих изучать 1С в статью для продвинутых писателей запросов попал случайно.
baranchikov; +1 Ответить
20. Трактор 1274 30.10.25 16:09 Сейчас в теме
@ovetgana прошу воспринимать моё (11) как стилистическое замечание. Поднятые Вами вопросы важны, изыскания интересны. Спасибо, что стремитесь донести их до общественности.
baranchikov; +1 Ответить
22. ovetgana 207 30.10.25 18:43 Сейчас в теме
(20)
Потому что потом - никогда не наступает. Если вы способны себя дисциплинировать и после того как отладите запрос в консоли, пойти и инструкции расставить - вы в полном праве так поступать. Большинство с этой задачей не справляется. И, кстати, я прекрасно осведомлена про наличие ИР и консоли отчетов. Для меня они бесполезны, я к ним прибегаю крайне редко. Про проблему промежуточной отладки запросов я уже очень давно забыла. Верю, что она есть, но абсолютно честно много лет не понимаю зачем. Запрос нужно писать сразу от и до. Что там непонятного? А правки в двух местах: и в конфигураторе и в пользовательском режиме - приводят к тому, что обязательно что-то теряется. Неэффективная трата времени.
baranchikov; bulpi; +2 Ответить
26. Трактор 1274 30.10.25 21:27 Сейчас в теме
(22) 1. Можно и не потом, а сразу в консоли писать инструкции СКД. Это не первостепенный вопрос.
2. Ваш подход "писать сразу правильно" хорош, если разработчик досконально знает и конфигурацию и данные. Плюс, если заказчик или аналитик точно поставил исполнимую задачу. Чаще встречаются случаи, когда нужно проверить как оптимальнее брать данные, заполнены ли они, возможно ли получить требуемое, а если нет, то какая дополнительная обработка требуется. А ещё некоторые аналитики вполне пользуются консолью запросов и консолью СКД.

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

Красный шрифт с восклицательными знаками:
переименований не избежать!

Инструкция, очень похожая на пошаговый приказ:
Создать отчет в конфигураторе!


Вы пишете статью для коллег, которые, вполне вероятно, не уступают Вам в квалификации и самооценке, поэтому не стоит удивляться отторжению, которое вызывает её тон.
Если же вы нарочно эпатируете коллег, то моё почтение за смелость. Бойцов я уважаю.
echo77; baranchikov; +2 Ответить
27. ovetgana 207 30.10.25 21:59 Сейчас в теме
(26)
Если Вы внимательно читали - то это презентационные материалы, на которых, естественно, ключевое выделялось цветом и шрифтом.

(26)

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

Я открыта к диалогу. Докажите обратное.

(26)
Красный шрифт с восклицательными знаками:
переименований не избежать!

И? Что не так? Я сама на наименованиях косячу. А уж что, разработчики вокруг меня творят... Так что переименований по тексту запроса не избежать, что приведет к некорректной работе алгоритма при оставленной галке. Что вас обидело?

(26)
Инструкция, очень похожая на пошаговый приказ:
Создать отчет в конфигураторе!


Вообще-то, это чек-лист. Он и должен быть в повелительном наклонении написан. Плюс наполовину - это шутка юмора. Акцент был на том, что сразу оставить инструкции проще, чем когда-нибудь потом.

Короче, я не понимаю, что вас так негативно зацепило.
baranchikov; user792041; +2 Ответить
76. sharindv 08.11.25 22:11 Сейчас в теме
(27)
Я открыта к диалогу. Докажите обратное.

тоже покоробила безальтернативность суждений
если запрос содержит простые типы и перечисления и все поля выводятся в детальные записи, то с запросом ничего не происходит (см. доказательство в прикрепленном файле)
Прикрепленные файлы:
ТестОтчет.erf
echo77; baranchikov; +2 Ответить
90. ovetgana 207 09.11.25 18:46 Сейчас в теме
(76) А еще в нем не должны устанавливаться отборы.
А теперь, если выйти из лабораторных условий в реальный мир, то возникает вопрос - а нужен ли пользователю такой отчет? Сколько реально создано отчетов (для использования, а не эксперимента), при формировании которых исполняемый текст запроса совпадет с исходным? Мне кажется, процент от общего количества стремится к нулю.

Про безальтернативность где-то ниже отвечала. Это додумки.
92. sharindv 09.11.25 20:55 Сейчас в теме
(90)
А еще в нем не должны устанавливаться отборы.

Естественно, при доп. настройки будут вносится изменения в текст запроса - и эта возможность была еще в 8.0 при использовании построителя запроса или построителя отчета (собственно, в статье исследована только возможности построителя запроса, а не СКД)
Но утверждение звучало как "запрос, помещенный в схему компоновки данных, НИКОГДА НЕ ВЫПОЛНЯЕТСЯ" и его неверность доказывает пример выше.
Если нужен реальный кейс, то вот пример: ежедневная рассылка отчета в виде плоской таблице Excel для аналитиков, т.е. пишется запрос с параметрами, запрос закидывается в отчет, а по отчету настраивается рассылка.

Про безальтернативность: статья называется "как правильно писать запросы СКД" и я думал рекомендовать её разработчикам команды, но когда стал читать, то увидел много спорных утверждений - одно выше разобрали (хоть оно и носит "лабораторный" характер). Но дальше пошли рекомендации на основе утверждений и часть из них неверны: например, запрет переименования измерений виртуальных таблиц - переименовывать можно, только нужно с помощью инструкций компоновки настроить отбор в параметрах виртуальной таблицы (ниже tormozit описал как это делается). Вот из-за таких рекомендаций я и не буду рекомендовать эту статью.
93. ovetgana 207 09.11.25 22:46 Сейчас в теме
(92) мы ниже разобрали, в чем недопонимание. По структуре статьи сначала возможность использования инструкций не рассматривается. Описывается только поведение алгоритма, если ничего дополнительно не делать. Автор позднее устранит эту неточность. Рекомендовать или нет - это полное Ваше право. У автора крайне специфическое чувство юмора, и половина статьи, в т.ч. и название продиктовано им. Ничего ложного автор в статье намеренно не писал. А решение, что из статьи применять на практике, каждый должен принимать самостоятельно.
12. Somebody1 69 30.10.25 11:22 Сейчас в теме
Мощное, глубокое исследование! И хорошая подача материала. Спасибо!
baranchikov; +1 Ответить
13. triviumfan 102 30.10.25 11:57 Сейчас в теме
Светлана, а если запрос в наборе данных имеет лишь "пустышку", а реальный формируется конкатенацией из множества пакетов, то подходят ли эти рекомендации? Есть ли особенности?
24. ovetgana 207 30.10.25 18:56 Сейчас в теме
(13) У Вас есть вся необходимая информация, чтобы ответить на свой вопрос самостоятельно. Неужели Вам не интересно, самостоятельно к ответу прийти?
48. LhgDead 06.11.25 13:44 Сейчас в теме
(24) Вам бы на мисту с таким говором и манерой отвечать) Попробуйте воспринимать информацию немного попроще, особенно замечания и вопросы 😉
echo77; BomjBandit; 1С-ИжТиСи; Трактор; +4 Ответить
14. Дмитрий74Чел 248 30.10.25 12:32 Сейчас в теме
Стойкое ощущуение что автор не знаком с консолью СКД из пакета "Инструменты разработчика", т.к. тексты модифицированных запросов похожи на скриншот из отладчика. В консоли скд можно получить такие запросы одной кнопкой.
Krotov_Valery; Трактор; kuzyara; echo77; baranchikov; tormozit; +6 Ответить
17. Трактор 1274 30.10.25 14:24 Сейчас в теме
(14) Согласен. ИР, ИнфостартТулз и прочие приблуды хороши.
ИМХО разработчик должен владеть и конфигуратором и прочими инструментами и хорошо писать ручками, без конструкторов.
Evg-Lylyk; baranchikov; +2 Ответить
18. RustIG 1931 30.10.25 15:17 Сейчас в теме
(17) Парни, прям обидно за автора. Не давите, пож-та, на автора своим авторитетом.
Во-первых, это девушка.
Во-вторых, на прошлых ее статьях налетели коллеги, ей пришлось закрыть комменты.
У всех своя картина мира и контекст, в котором приходится жить и работать.
baranchikov; +1 Ответить
19. Трактор 1274 30.10.25 16:06 Сейчас в теме
(18) ни в коем разе не хотел обидеть автора! Поднятая тема важна и хороша. Прошу принимать мои слова только как пожелания. Тем более, что они касаются второстепенных по отношению к теме замечаний.
23. ovetgana 207 30.10.25 18:53 Сейчас в теме
(18)
Мне очень лестна Ваша забота обо мне. Но я Вас разочарую. Проблема комментариев на данном сайте в том, что они очень глупые - потому комментарии и закрывала. Специально пишешь статью, чтобы читатель мозг включил, подумал, о том как он стереотипно мыслит, поэкспериментировал с кодом, и к каким-то собственным выводам пришел. Вместо этого набегает куча непонятно кого с глупыми, ничем не аргументированными, мнениями. А ничего не понявший читатель, вместо того, чтобы мозг напрячь и собственное мнение сформировать, читает эти глупые комментарии, видит рейтинг, и приходит к выводу, что автор глупость написал. НО, к сожалению, проблема данного сайта - закрываешь комментарии и никто не читает. В чем тогда смысл огромной проделанной работы был?
33. triviumfan 102 31.10.25 10:57 Сейчас в теме
(18)
ей пришлось закрыть комменты.

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

С таким отношением к сообществу...
echo77; qwinter; Трактор; +3 Ответить
34. ovetgana 207 31.10.25 12:00 Сейчас в теме
(33) У Вас есть возможность меня попробовать в этом переубедить. Давайте разберем комментарии под данной статьей. Первый же комментарий - это признание в несостоятельности прочитать большую статью.
Дальше идет ряд нейтральных благодарных/рекламных/с замечаниями по оформлению (за них спасибо) комментариев. У нас есть два вопроса, на один из которых я м.б. даже попозже отвечу, т.к. у коллеги вполне вероятно нет доступа к MSSQL, и самостоятельно провести исследование он не может. И Ваш - на который Вы вполне самостоятельно могли бы ответить, но почему-то поленились эту работу проделать.
И дальше у нас целая охапка комментариев с какими-то домыслами, в т.ч. лично в мой адрес. Причем ни одного аргумента, где неточности, или ссылок в подтверждение собственных же слов нет. Особо отличившийся товарищ, получив аргументированные возражения, у нас даже обиделся и побежал в соседней ветке гадости писать, противореча своим же собственным, ранее написанным, словам.
Теперь я готова выслушать Ваши аргументы, почему комментарии оставленные под данной статьей в большей своей массе - умные.
49. LhgDead 06.11.25 14:01 Сейчас в теме
(34) Автор - обиженный на мир человек, считающий всех кто мало-мальски с ней не согласен / не понял сразу глупыми и вообще отбросами. Таким обычно уже ничего не помогает. Она закрывает комментарии, кидает репорты, всем хейтерам отвечает. Но суть в том, что если зайти в аналогичные статьи, но где автор будет хоть немного воспитан - увидим совершенно другую картину. Все общаются, задают вопросы, автор принимает замечания, редачит, становится лучше. АвторША подумай пожалуйста хоть немного, неужели ты одна такая особенная, которую поливают просто так, а другие катаются в масле?
50. ovetgana 207 06.11.25 14:34 Сейчас в теме
(49) Сколько о себе интересного узнать можно:) Снова ничем не аргументированные домыслы в мой адрес...А Вы не думали, что проблема не в невоспитанности автора. А, наоборот, в отсутствии воспитания у комментаторов? И, может, просто не нужно никого грязью поливать? Зачем? Вам от этого лучше становится? Самое обидное, что все на столько привыкли к этой безнаказанности в интернете, что уже даже не понимают, что пишут что-то не то.

Я честно предупредила - гадости не писать. Так что в полном праве развлечься за счет тех, кто предупреждение проигнорировал.

И я очень позитивно отношусь к аргументированной критике - она делает нас лучше. К сожалению, под данной статьей был оставлен только один критический комментарий, из которого сделан вывод, что с некоторыми скринами я на самом деле накосячила. Могло быть лучше. Все остальное - это не про замечания. А попытки самоутвердиться за чужой счет, причем с достаточно грубыми формулировками и разводом на эмоции. Ваш комментарий такой же.
51. LhgDead 06.11.25 15:16 Сейчас в теме
(50) дадада, я же говорю, все неправы)
52. ovetgana 207 06.11.25 15:20 Сейчас в теме
(51) Ну почему сразу все? Только половина)))
98. kuzyara 2209 11.11.25 10:24 Сейчас в теме
(52) LhgDead, проходил через те же стадии как у ТС, но недавно изменил свой подход к публикациям.
Вместо того чтобы сразу опубликовывать материал на инфостарте - сначала публикую её на гитхабе и прошу в публичных тг-чатах найти ошибки. Тут срабатывает человеческая психология, люди любят указывать в чём автор не прав и критиковать. И вот уже после рецензий от контрольной группы редактирую все проблемные места и выкладываю в паблик. Чуть-чуть помогает)
106. starik-2005 3201 14.11.25 11:20 Сейчас в теме
(98)
люди любят указывать в чём автор не прав и критиковать
Не всегда. Иногда вот прям не за что критиковать. Даже у меня такие статьи есть.
107. starik-2005 3201 14.11.25 11:27 Сейчас в теме
(18)
Парни, прям обидно за автора. Не давите, пож-та, на автора своим авторитетом.
Давление, если у человека нет психологических проблем, делает сильнее. Если есть, то ты попадаешь в черный список, а потом автор уходит с сайта (вот Юра Премитин, например, и не он один, кстати). Надо уметь справляться с давлением. Я, например, был кикнут у Гилева в чате за двадцать минут. Для меня это достижение, но тут у Славы точно масса комплексов, так что я на его посты к моим статьям реагирую с улыбкой. Я даже минусы к статьям ставил раза два всего. И там действительно было за что. И у меня черного списка нет, и всех, кто просится в друзяшки, добавляю. Сейчас вот над статьей о производительности размышляю, основываясь на тезисе о том, что "никто ничего толком не знает" (да, за это и был кикнут Гилевым))))
ЗЫ: 116 попугаев в серверной - это результат?
pkorneenko; RustIG; +2 Ответить
15. Дмитрий74Чел 248 30.10.25 12:34 Сейчас в теме
Статья оставила двойственное впечатление. С одной стороны, автор пытался разобраться, и описал выводы.
С другой - кажется что вместо изучения документации (да, она сложная и запутанная) было больше экспериментов, с не всегда корректными выводами.
echo77; triviumfan; Трактор; +3 Ответить
21. ovetgana 207 30.10.25 18:31 Сейчас в теме
(15)
(16)

Уважаемые, я считаю, что за собственные слова нужно отвечать. Я за каждое слово в любой своей статье ответить готова. Будьте добры - ссылку на документацию, в которой описано поведение алгоритма модификации текста запроса, ограничения его использования и рекомендации при снятии галки. Если все, чем вы меня порадовать сможете - это https://its.1c.ru/db/metod8dev#browse:13:-1:3199:3224:3226:3231 , то это даже не смешно будет.

Список неточных выводов - предъявляем. Я проанализирую и, если соглашусь с ними, внесу правки.

Также прошу просветить меня, как же именно некорректно я использовала данный инструмент. Немного вводных -я очень много лет, осознавая, что алгоритм расстановки отборов по тексту запроса работает не всегда корректно, снимаю галку и расставляю инструкции по собственному рецепту. В моем подразделении галка запрещена на уровне регламента. А, как оказывается "обратный инжиниринг", появился в рамках аргументации, почему галку нужно снимать. Причем я была приятно удивлена спустя много лет поняв, что алгоритм пытается реализовать ровно ту логику, по которой я самостоятельно инструкции расставляю, и достаточно успешно во многих случаях с задачей справляется. Теперь жду от вас список моих ошибок.
baranchikov; +1 Ответить
39. qwinter 684 05.11.25 09:55 Сейчас в теме
Будьте добры - ссылку на документацию, в которой описано поведение алгоритма модификации текста запроса, ограничения его использования

https://v8.1c.ru/metod/books/185303.htm всего каких то 500 рублей...
40. ovetgana 207 05.11.25 10:57 Сейчас в теме
(39) А поточнее? В какой главе искать? Список глав доступен по вашей ссылке.
41. qwinter 684 05.11.25 11:04 Сейчас в теме
(40) Пример 19. Консоль системы компоновки данных
42. ovetgana 207 05.11.25 11:30 Сейчас в теме
(41) Да, там целых два предложения на эту тему есть:

Дело в том, что автоматическое заполнение
полей и значений параметров не всегда оптимально и иногда может привести
к ошибкам.


и

Рассмотрим теперь другую важную особенность системы компоновки
данных: система исключает из результирующего запроса поля, не участвующие в настройках отчета. Это также может приводить к ошибкам.
baranchikov; +1 Ответить
43. qwinter 684 05.11.25 11:55 Сейчас в теме
(42) То есть вы утверждаете, что в этом разделе нет сравнений изменений запросов при выполнении занимающие в книге 15 страниц?
44. ovetgana 207 05.11.25 12:43 Сейчас в теме
(43) Постановка задачи была:
ссылку на документацию, в которой описано поведение алгоритма модификации текста запроса, ограничения его использования"


Если из 11 скриншотов (до и после) в этой главе с запросами (даже без временных таблиц) к виртуальной таблице регистра накопления, для Вас очевидна вся логика работы алгоритма по модификации текста запроса и его ограничения - видимо, Вы куда умнее меня.
baranchikov; +1 1 Ответить
16. osa92 74 30.10.25 14:21 Сейчас в теме
Сначала подумал интересная статья для изучения, но к сожалению оказалось не так.
Автор проделала огромную работу по обратному инжинирингу и тестированию вместо изучения документации.
СКД очень мощный и классный инструмент, и пофиг что он запросы раздувает и меняет их, если ты понимаешь как он работает он сделает ровно то что ты от него хочешь. Я на СКД пишу уже очень давно, многих моментов не знаю, постоянно узнаю что-то новое, НО никогда у меня не было каких либо сверх сложных проблем, всегда были решения!
Любой инструмент можно применять неправильно, как автор и делала. Некоторые вещи из всего этого было полезно узнать, но их очень мало из того что я и так знал.
pkorneenko; Трактор; +2 Ответить
25. bulpi 217 30.10.25 20:20 Сейчас в теме
Первая статья, в которой я все это наконец то узнал. Может, еще где то в книгах есть, но я не находил. Спасибо!
Вот за эту всю фигню я и не люблю СКД :)
baranchikov; emx628; +2 Ответить
28. ovetgana 207 30.10.25 22:59 Сейчас в теме
(25) Столкнетесь с очень крупным сопровождением- полюбите.
29. BackinSoda 30.10.25 23:12 Сейчас в теме
Как-то за всё время не доводилось отключать галочку автозаполнения. Фигурные скобки решают большую часть "глюков"
echo77; baranchikov; triviumfan; rozer; Трактор; +5 Ответить
30. Трактор 1274 30.10.25 23:44 Сейчас в теме
(29)
не доводилось отключать галочку автозаполнения

Это скорее страховка и перфекционизм отдельных методологов. Чтобы ни в коем разе лишние поля в выборку не попали. Буквы экономят.
Ещё. При снятой галке легче программно изменять СКД. Но это отдельная тема.
baranchikov; +1 Ответить
31. ovetgana 207 31.10.25 00:02 Сейчас в теме
(30) Какой нежный и трогательный мальчик! А говорят, что женщины-истерички...)))
32. rozer 313 31.10.25 01:34 Сейчас в теме
(29) добавлю что как раз комбинация отключенной галки и расширения языка СКД и дают эффект полного контроля над результирующим запросом в макете компановки- это вещают на любых курсах по 1с и по скд в частности. Статья интересная и с половиной выводов согласен но остальное - это ИМХО частный опыт автора на какой-то конкретной задаче и на какой-то версии 1с-платформы. А верить на 100% можно лишь официальной доке/обучению от вендора...
66. tormozit 7319 08.11.25 07:50 Сейчас в теме
(32)
комбинация отключенной галки и расширения языка СКД и дают эффект полного контроля над результирующим запросом

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

Тут https://www.hostedredmine.com/issues/923054 более подробно описано.
Там искажается результат, начиная с непоследнего запроса пакета. Исправить это невозможно через расширение языка запросов для СКД и отключение их автозаполнения.
71. tormozit 7319 08.11.25 10:32 Сейчас в теме
(66) Кстати в конструкторе запросов ИР есть решение этой проблемы "одним нажатием" https://www.hostedredmine.com/issues/998323
35. RustIG 1931 01.11.25 23:34 Сейчас в теме
(0) Тут промелькнуло слово "безапелляционно звучит"... Да, чувствуется... Сложно с вами спорить...

До открытия конструктора запроса.

1. Создать отчет в конфигураторе! Никогда не может создание запроса для СКД начинаться с консоли запросов в пользовательском режиме!


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

Есть отчет АВС-анализ - я его из СКД полностью переделал под обработку с табличной частью, с возможностью задавать параметры диапазонов, сами диапазоны, разрезы проведения анализа - в обработке в цикле внутри цикла был произведен сложный алгоритм расчета показателей - получилось даже интереснее, чем отчет на СКД. На СКД он выглядел громоздко, выполнялся долго и тяжело сопровождался - не всякий 1сник умеет так сложно писать алгоритмы на языке запросов... Поэтому задача лежала на полке 2 года, пока я "все просто" не сделал. На ИС выложил пример самой простой подобной реализации.


До открытия конструктора запроса.

2. Переопределить метод «ПриКомпоновкеДанных».


В своей практике я переопределял для одной цели - ограничить пользователей видеть "ненужные" данные + автоматом задавать нужные параметры и отборы. Понятно, что это ограниченный круг задач. Но получается, что я не всегда переопределял метод ПриКомпоновке.

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

До открытия конструктора запроса.

3. Снять галку «Автозаполнение». (Если в пакетном запросе будет хотя бы одна временная таблица). Пусть вас утешает мысль, что вы умнее алгоритма.


Кто-то до меня снял галочку для отчета простой структуры Доходы-Раходы: НачПериода, Приход, Расход, КонПериод - всего 8 полей. Далее понадобилось добавить поля " Без НДС" и "С НДС" - то есть добавил еще 16 полей. Вместо одного часа работы, потратил 16 часов. Там каждое поле нужно было вручную прописать - какую "роль" оно играет - нач. остаток или конечный, переименовать его красиво... при доработке отчета пришлось воспользоваться вот этой статьей
https://its.1c.ru/db/metod8dev/content/3093/hdoc

Я проверил, если бы не снимали эту галку "Автозаполнение", то отчет был такой же, но сопровождать его становится намного легче и быстрее - добавить 16 полей "с ндс" и "без ндс" - получилось бы за пару часов.

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

ПС. В целом, кроме вашего исследования на ИС описано много нюансов работы СКД - много полезного и много прям совсем "нюансов" черного ящика СКД. Полагаю, что этим исследование СКД не заканчивается.

ПС2. Вы много упоминали новичков, стажеров, которые слов "компоновка" не знают, и сразу выдали им свою "базу"... Возможно, все же им стоит начать с консоли запросов пользователя - чтобы прочувствовать другую "базу"....

ПС3. Вы также с некоторым сомнением описывали логику работы СКД (так, как вы понимаете СКД). Остается непонятным, делали ли вы попытки написать в техподдержку 1с-разработчикам, и какой ответ от них получали...

ПС4. За 15 лет уже не хочется писать только умные комментарии, в последнее время хочется ощутить сопричастность к сообществу, и иногда поддержать автора заочно и авансом. К слову сказать, первый пост был мой. И он говорит лишь о хорошем моем расположении к автору статьи, а не о моих способностях и расписках в несостоятельности.

Всем хоккей! :)
baranchikov; Трактор; +2 Ответить
36. ovetgana 207 02.11.25 08:30 Сейчас в теме
(35) Я верю, что Вы никакой негативный смысл в свои комментарии не вкладывали, но получилось, что в первом комментарии Вы зачем-то себя оскорбили, а в следующем уже меня (предположив, например, что товарищ Трактор для меня является авторитетом, и что я страдающая от негативных комментариев барышня:)). Такие комментарии, не радуют, а огорчают.

Посмотрите, пожалуйста, последние два слова в данной статье, и подумайте, может ли статья, в которой автор "безапеляционно" требует следовать рекомендациям в тексте, заканчиваться ими.

Естественно, разработчик 1С должен и консолью запросов владеть и знать про возможности СКД. Любое техническое решение, решающее баланс Качество/Скорость/Цена и не приводящее к проблемам является правомерным. Если пользователям нужна форма, чтобы распечатать, подписать и вложить в папочку, то функциональность СКД может для них быть ненужным усложнением. А какому-то крайне важна возможность установки отборов/донастройки для анализа. И тогда разработчик должен понимать, как работает СКД. Я перед собой задачу написать документацию за 1с по всем вопросам не ставила. Эта статья посвящена только описанию логики модификации текста запроса.

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

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

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

Лично я в этом алгоритме вижу огромный потенциал - именно про это у меня три другие статьи написаны. Можно написать один запрос и за счет инструкций получать десятки разных других, причем к БД всегда будет выполняться оптимальный запрос. Это актуально, например, для систем с большим количеством изменений. Если определенная выборка данных нужна в десятке различных мест, можно не в десятках мест дырки после очередного изменения закрывать, а только в одном. Потому всегда снимаю галку и все модификации контролирую самостоятельно. Как это делать - в этой статье поделилась.

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

Хорошего Вам дня и не пишите больше про себя гадости ради чувства причастности к сообществу.
37. RustIG 1931 02.11.25 12:37 Сейчас в теме
(36)
Не читал, но одобряю

- это не то, что вы думаете:
не пишите больше про себя #$%^&@

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

платформа и конфигурации всегда были сложными в плане того, что имели в себе косяки и непонятности, документации всегда не хватало, со временем к этому привыкаешь, и лишь благодаря сообществу все вопросы начали решаться очень быстро...
45. ovetgana 207 05.11.25 20:48 Сейчас в теме
(37) А Вы замените "Не читал, но одобряю" на "Спасибо за статью. Обязательно постараюсь ознакомиться на выходных". Смотрите, какой красивый и благородный аналог. И без негативного покровительственного оттенка.
Слово - страшная сила. Им пользоваться аккуратно нужно.

Я Вам прощаю (18) - унизительный (для меня как профессионала) комментарий в мой адрес. Мир, дружба, жвачка!
46. SirAlex 06.11.25 07:11 Сейчас в теме
(45) Снова, типа, чек-лист?))
ovetgana; +1 Ответить
47. ovetgana 207 06.11.25 10:29 Сейчас в теме
(46) нет. Просто хороший и добрый совет. НО. Это мысль! Может, на самом деле стоит написать чек-лист: "Как правильно писать комментарии к статьям на Инфостарте?" :))
38. RustIG 1931 02.11.25 12:41 Сейчас в теме
53. tormozit 7319 07.11.25 22:36 Сейчас в теме
Предлагаю заменить
запрос, помещенный в схему компоновки данных, НИКОГДА НЕ ВЫПОЛНЯЕТСЯ.

на
запрос, помещенный в схему компоновки данных, НЕ ВЫПОЛНЯЕТСЯ В ИСХОДНОМ ВИДЕ.
pkorneenko; Evg-Lylyk; alehinsasha; echo77; +4 Ответить
54. ovetgana 207 07.11.25 22:48 Сейчас в теме
(53) Не понимаю сейчас, в чем разница. Аргументируйте, пожалуйста, какое ключевое различие в формулировках? В мужской солидарности или в защите сирых и убогих?
55. tormozit 7319 07.11.25 23:01 Сейчас в теме
(54) Это классический прием для устранения двусмысленности или снижения неоднозначности. Автору обычно сложнее выявлять двусмысленности, т.к. он вкладывал в свои строки конкретный смысл. А вот со стороны свежим взглядом это лучше заметно.
Пример. Есть элемент справочника с названием "ИП Самсонов" или "Запрос 1", помещенный в БД. Я открыл его форму и изменил в нем комментарий и записал в БД. Дальше я упоминаю его в какой то инструкции опять же в виде - "ИП самсонов" или "Запрос 1". Как будет читатель понимать, что речь идет о конкретном состоянии/версии этого элемента или о всех его состояниях/версиях обобщенно?
57. ovetgana 207 07.11.25 23:22 Сейчас в теме
(55)
После "Пример." и до след. точки логика непонятная. Смысл от меня ускользает. Я путаюсь в терминологии запрос/ текст запроса?
77. sharindv 08.11.25 22:59 Сейчас в теме
(53)
помещенный в схему компоновки данных, НЕ ВЫПОЛНЯЕТСЯ В И

При определенных условиях выполняется - см.
(76)
56. ovetgana 207 07.11.25 23:09 Сейчас в теме
Дубль. Удаление недоступно.
58. tormozit 7319 07.11.25 23:40 Сейчас в теме
Предлагаю в
Очень частая ошибка при написании запросов для СКД– поле группировки не выведено в отчет. Любой расчет, завязанный на присутствие поля в выборке – приведет к ошибке.

заменить "приведет к ошибке" на "приведет к искажению результата", т.к. при выполнении запроса могут возникать и те ошибки, которые по-другому не назовешь (например деление на ноль). Причем на картинке текст почти так и сформулирован, т.е. без двусмысленности.
59. ovetgana 207 07.11.25 23:44 Сейчас в теме
60. tormozit 7319 07.11.25 23:51 Сейчас в теме
Отвечаю на
Или алгоритм компоновщика появился в платформе раньше, чем вложенные запросы.

СКД появился в платформе 8.1, а вложенные запросы у нее есть с рождения (8.0)
62. ovetgana 207 08.11.25 00:07 Сейчас в теме
(60) Спасибо! Значит, ограничения синтаксиса!
61. tormozit 7319 08.11.25 00:01 Сейчас в теме
Прошу поправить опечатку "соединение"->"соединений"
АЛГОРИТМ НЕ АНАЛИЗИРУЕТ условия соединение
63. ovetgana 207 08.11.25 00:08 Сейчас в теме
(61) Спасибо! За огромное доставленное интеллектуальное удовольствие)) До пн не отвечу((
64. tormozit 7319 08.11.25 00:26 Сейчас в теме
Предлагаю заменить
Переименования полей по тексту запроса приводят к некорректной работе алгоритма.

на более четкое
Назначение разных псевдонимов одинаковым по смыслу полям приводит к логически некорректному наложению отбора


и
Переопределение полей тоже

на соответственно
Назначение одинаковых псевдонимов разным по смыслу полям тоже
65. tormozit 7319 08.11.25 07:37 Сейчас в теме
Касатально отборов в виртуальных таблицах - оба абзаца
Переименовывать при выборке из виртуальных таблиц измерения – запрещено.

Для виртуальных таблиц срабатывает принудительная параметризация на не выбранное измерение, если его имя совпадает с именем поля, на которое установлен отбор. Т.е. названия выбираемых по тексту запроса ниже полей не должны совпадать с именами не выбранных измерений виртуальной таблицы. (И если у нас две виртуальные таблицы с одинаковыми названиями измерений, в одной из которых нужен отбор, а во второй нет - заходим в тупик).

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

1. Поэтому нет смысла запрещать "переименование", т.е. назначение нестандартных псевдонимов, таким полям.
Пример
Наложим отбор по полю "МояВалюта" в запросе
ВЫБРАТЬ
	Т.Валюта КАК МояВалюта
ИЗ
	РегистрСведений.КурсыВалют.СрезПоследних(, {Валюта.* КАК МояВалюта}) КАК Т

получим
ВЫБРАТЬ
	Т.Валюта КАК МояВалюта
ИЗ
	РегистрСведений.КурсыВалют.СрезПоследних(, (Валюта) = &П) КАК Т


2. И нет тупика в случае двух виртуальных таблиц с одинаковыми именами полей отбора виртуальных таблиц. Достаточно назначить тому полю, на которое отбор накладывать не нужно, уникальный псевдоним и скрыть его доступность для пользователя.
Пример
Наложим отбор по полю "Валюта" в запросе
ВЫБРАТЬ
	Т.Валюта КАК МояВалюта 
ИЗ
	РегистрСведений.КурсыВалют.СрезПоследних(, {Валюта.* КАК МояВалюта}) КАК Т
;
ВЫБРАТЬ
	Т.Валюта
ИЗ
	РегистрСведений.КурсыВалют.СрезПоследних() КАК Т
Показать

получим
ВЫБРАТЬ
	Т.Валюта КАК МояВалюта
ИЗ
	РегистрСведений.КурсыВалют.СрезПоследних(, ) КАК Т
;
ВЫБРАТЬ
	Т.Валюта КАК Валюта
ИЗ
	РегистрСведений.КурсыВалют.СрезПоследних(, (Валюта) = &П) КАК Т
Показать
Прикрепленные файлы:
Трактор; +1 Ответить
78. ovetgana 207 09.11.25 17:01 Сейчас в теме
(65) Утверждения вырваны из контекста. По ходу повествования инструкции еще не введены и рассматривается только автоматическая логика работы алгоритма. Как обойти - рассматривается в статье ниже. В разделе "Инструкции vs Алгоритм".
85. tormozit 7319 09.11.25 18:11 Сейчас в теме
(78)
рассматривается только автоматическая логика работы алгоритма

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

(78)
Как обойти - рассматривается в статье ниже. В разделе "Инструкции vs Алгоритм".

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

Предлагаю более явно в первой части статьи обозначить, что она рассматривает только режим без инструкций компоновки.
88. ovetgana 207 09.11.25 18:29 Сейчас в теме
(85) Поняла. Спасибо за разъяснения. Я немного переформулирую, чтобы случайно не так ни у кого в голове не отложилось.
67. tormozit 7319 08.11.25 08:01 Сейчас в теме
А еще компоновщик игнорирует вложенные запросы! Совсем-совсем!

Некорректное утверждение. Отборы виртуальных таблиц компоновка видит на любом уровне вложенности.
Пример.
Наложим отбор по полю "Валюта" на запрос
ВЫБРАТЬ
	Т.Валюта КАК Валюта
ИЗ
	РегистрСведений.КурсыВалют.СрезПоследних КАК Т,
	(ВЫБРАТЬ
		1
	ИЗ
		РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалют_СрезПоследнихТ) КАК КурсыВалют_СрезПоследнихТ

получим
ВЫБРАТЬ
	Т.Валюта КАК Валюта
ИЗ
	РегистрСведений.КурсыВалют.СрезПоследних(, (Валюта) = &П) КАК Т,
	(ВЫБРАТЬ
		1 КАК Поле1
	ИЗ
		РегистрСведений.КурсыВалют.СрезПоследних(, (Валюта) = &П) КАК КурсыВалют_СрезПоследнихТ) КАК КурсыВалют_СрезПоследнихТ


Поэтому предлагаю такую формулировку
А еще компоновщик игнорирует минимизацию состава выбираемых полей и иногда отборы во вложенных запросах
Прикрепленные файлы:
Трактор; +1 Ответить
68. tormozit 7319 08.11.25 08:19 Сейчас в теме
Про флажок "Автозаполнение"
что помешало разработчикам платформы при снятии галки автоматически инструкции в текст запроса добавлять?

Давно я просил подобную возможность у них https://partners.v8.1c.ru/forum/t/1657786/m/1657786
Устал ждать и написал свой конструктор запроса с такой функцией http://www.hostedredmine.com/issues/886728
pkorneenko; +1 Ответить
79. ovetgana 207 09.11.25 17:06 Сейчас в теме
(68) Предлагаю устранить двусмысленность. Все мысли в этой статье (умные/глупые/стебные) - мои собственные. Ничего ни у кого не подглядывала. Нижеупомянутые ИР в последний раз открывала году в 2019. С ними, в отличие от СКД, у меня любовь не случилась. Про кнопку не знала, алгоритм не анализировала.
83. ovetgana 207 09.11.25 17:53 Сейчас в теме
(68)
Я не нашла описаний ограничения использования кнопки. Есть документация? Если нет, то по-уму этой кнопкой можете пользоваться только Вы сами, и, м.б. Ваши ученики. Или нужно отдельное исследование проводить уже Вашего алгоритма. Сомневаюсь, что многие осознанно перепроверяют полученный результат, не смотря на предупреждение в подсказке. Я пока останусь при мнении, что инструкции лучше расставлять самостоятельно и всегда снимать галку. Не так это много времени отнимает.
89. tormozit 7319 09.11.25 18:41 Сейчас в теме
(83) Ограничений нет. Документация - указанная в описании ссылка на скудную статью ИТС. Исследовать СКД тебе нравится, поэтому кажется что тебя эта кнопка заинтересует.
69. tormozit 7319 08.11.25 08:51 Сейчас в теме
убедить, кстати, компоновщик НЕ размещать условие «где» в тексте запроса с помощью инструкций за счет переопределения псевдонима тоже не получится

Чтобы сделать эту сухую констатацию факта более понятной, предлагаю добавить пояснение.
Флажок "Автозаполнение" динамически добавляет отдельную секцию {ГДЕ} с перечислением всех выбранных в запросе полей. Поэтому пока он включен, назначение своего псевдонима полю в ручной секции {ГДЕ} просто дает полю второе имя, а не переименовывает его.
Пример
Для запроса
ВЫБРАТЬ
	Т.Валюта КАК Валюта
ИЗ
	РегистрСведений.КурсыВалют КАК Т
{ГДЕ
	Т.Валюта.* КАК МояВалюта} // Ручная секция с назначением своего имени
{ГДЕ
	Т.Валюта.* КАК Валюта} // Динамическая секция от флажка "Автозаполнение" формируется перечислением всех выбранных полей

получим оба поля (МояВалюта и Валюта) доступными для отбора. При наложении отбора по обоим сразу получим такой запрос
ВЫБРАТЬ
	Т.Валюта КАК Валюта,
ИЗ
	РегистрСведений.КурсыВалют КАК Т
ГДЕ
	Т.Валюта = &П
	И Т.Валюта = &П2
Прикрепленные файлы:
Трактор; +1 Ответить
72. tormozit 7319 08.11.25 10:44 Сейчас в теме
(69) Если у кого то есть предположения о том, почему компоновщик не анализирует ручную секцию {ГДЕ} при заполнении динамической, то прошу поделиться с нами. Похоже на недоработку механизма, т.к. пользы от этого я не вижу.
74. gybson 08.11.25 15:34 Сейчас в теме
(72) да он анализирует, просто ничего с ней не делает
пишите сколько хотите этих ваших секций, все для блага человека
Прикрепленные файлы:
75. tormozit 7319 08.11.25 16:44 Сейчас в теме
(74) Я писал про анализ в процессе заполнения динамической секции {ГДЕ}. Если бы он выполнялся, то кажется логичным исключать найденные выражения из динамической секции {ГДЕ}, т.е. не создавать второй псевдоним у выражений, которые уже обозначены в ручной секции {ГДЕ}.
70. tormozit 7319 08.11.25 09:21 Сейчас в теме
Никогда не может создание запроса для СКД начинаться с консоли запросов в пользовательском режиме!

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

Уверен, если бы автор освоил эту консоль, то он сделал бы еще более наглядные иллюстрации и с меньшими усилиями.
Трактор; +1 Ответить
80. ovetgana 207 09.11.25 17:12 Сейчас в теме
(70) Предлагаю договориться (т.к. аргументированная критика закончилась, и началась не аргументированная), что автор комментария хотел приобщить автора статьи к искренней радости обладания "волшебным мультитулом". И никакой негативный смысл в комментарий не вкладывал. Как и автор статьи в ответных сообщениях.
81. ovetgana 207 09.11.25 17:22 Сейчас в теме
Утверждение "Никогда не может создание запроса для СКД начинаться с консоли запросов в пользовательском режиме!" никаким образом не противоречит утверждению "Создание запроса может начинаться с открытия консоли компоновки данных в пользовательском режиме". Автор считает себя не вправе учить тому, что сам не делает по следующим соображениям:
1. Потери не сохраненного в пользовательском режиме случаются чаще, чем в конфигураторе.
2. Если правки вносятся в пользовательском режиме, то есть вероятность, что они не попадут в конфигуратор.
3. Промежуточная отладка запроса - бесполезная трата времени. Отлаживать нужно сразу исполняемый запрос. А ошибки удобно искать уже с помощью консоли запросов, безбоязненно удаляя ненужные временные таблицы.
4. Если ошибка возвращается от пользователя, то удобнее сразу смотреть исполняемый текст запроса по точке останова в конфигураторе.

А что из предложенного в статье принимать и пользоваться каждый должен определять для себя самостоятельно.
82. ovetgana 207 09.11.25 17:49 Сейчас в теме
(70)
как раз учу всех наоборот делать - по возможности создавать и отлаживать компоновку данных сначала в консоли компоновки данных в связке с консолью запросов.


Категорически не согласна. Учить нужно тому как работает и почему. И исследования проводить, когда документация ответов на вопрос не дает. А определять, какими инструментами пользоваться, каждый должен решать самостоятельно. Главное, чтобы осознанно было.
84. ovetgana 207 09.11.25 18:06 Сейчас в теме
(70)
более наглядные иллюстрации и с меньшими усилиями.

Предлагаю сойтись на том, что на вкус и цвет все фломастеры разные. Автору нравятся собственные иллюстрации, с красивыми розовыми примечаниями. И не очень нравятся предлагаемые на замену (слишком много лишнего и раскраска цветом отвлекает от того, на что автор хочет обратить внимание).
Есть сомнения, что ИР позволят обойти проблему автоматического уменьшения широких скриншотов с существенным ухудшением четкости изображения на сайте. Но автор обязательно проверит - вдруг, они на самом деле волшебные!
tormozit; +1 Ответить
86. ovetgana 207 09.11.25 18:12 Сейчас в теме
(70) Все остальные предложения будут тщательным образом рассмотрены, обдуманы и учтены в тексте (естественно, с авторскими правками). Автор выражает искреннюю благодарность за бескорыстный вклад в улучшение статьи и повышение ее читаемости.
73. gybson 08.11.25 14:34 Сейчас в теме
Начало крайне неудачное. Помимо категоричности еще и очень расплывчатая цель "делать хорошо". Ну ладно. А со сделанным то что делать? Я вот ЗУП открываю и там эти глупые 1Сники все отчет неправильно сделали.
Трактор; +1 Ответить
87. ovetgana 207 09.11.25 18:26 Сейчас в теме
(73) Ну да, не по SMART цель. Но, может, и не всегда нужно? А можно просто на уровне эмоций: нравится/удовольствие доставляет?
91. gybson 09.11.25 19:46 Сейчас в теме
(87) На уровне эмоций мне конечно не понравится такая категоричность и менторство :)
Я бы подал как только один из подходов которым пользуются профессионалы, в том случае "когда я сел писать отчет и он никак не получался и тогда я стал вот так делать и туда смотреть и все получилось, всегда так буду делать", это было бы ближе людям и душевнее. А так не очень понятно в чем была проблема, если сам никогда не сталкивался.

И где-то у вас потерялась доля выпадающая на обработку информации. Проведение, закрытие месяца, куда их? Ну интеграцию еще можно во ввод добавить и то со скрипом. Тут тоже немножко обидели :)
94. m_aster 127 10.11.25 01:41 Сейчас в теме
Не понравился тон статьи(да и сама статья, споткнулся на первом же запросе, запрос в СКД и тот, что на картинке с профайлером это два разных запроса).
Одно только "Как на такой «зубодробительной» терминологии можно нынешнее поколение стажеров, которые и слова-то такого страшного «Компоновка» не знают, обучать?!)" чего стоит.
Отчего Вы решили, что стажеры ничего не смыслят? Почему не допустить, что, возможно, они знают больше Вас? Черпают информацию с ИТС, например, там много чего полезного и, главное, правильного.
И эта категоричность, отчего Вы решили, что, например, в СКД, как Выпишете:
"Все очень просто – запрос, помещенный в схему компоновки данных, НИКОГДА НЕ ВЫПОЛНЯЕТСЯ."
Или это:
ВСЕ, ЧТО ВЫ ДОЛЖНЫ ИЗВЛЕЧЬ ДЛЯ СЕБЯ ИЗ ДАННОГО ПРИМЕРА – БЕСПОЛЕЗНО ОТЛАЖИВАТЬ В КОНСОЛИ ЗАПРОСОВ ИСХОДНЫЙ ЗАПРОС! ЗАЧЕМ ОТЛАЖИВАТЬ ТО, ЧТО НЕ ВЫПОЛНЯЕТСЯ?
Кто Вам это сказал?))
Я Вам покажу, что это не так.
Все зависит от того, что Вы хотите получить, зная как работает СКД.
В Вашем примере ключевой момент это "....Ссылка", когда Вы добавляете ее в запрос и потом в настройках выбираете, например, Наименование, то в запросе можно не указывать это поле, чтобы не было дублей в запросе СКД.
Это удобно, когда по ссылке пользователь может в пользовательском режиме добавлять в отчет дополнительные поля.
То, что у Вас Left Join в профайлере почему Вас так удивляет, запрос не распухает, это называется неявный вызов присоединеной таблицы, тут ничего удивительного нет(я уже не говорю об "СБ_ТранспортныеСредства.Модификация.Наименование").
Вообще, на ИТС по поводу СКД есть мысли почему так, запрос нужен для получения набора данных(с минимумом отборов), дальнейшие действия выполняются средствами СКД(поля, отбор и т.д.)
Теперь про запрос в наборе данных, который, как бы, не выполняется, и запрос на выходе в макете компоновки(не знаю Вашей конфигурации(хорошо было бы указать, впрочем, для проверки достаточно реквизита ссылочного типа в любом справочнике)):
Первый вариант, когда "жестко" задаем типы полей в запросе(без ссылок):
Прикрепленные файлы:
starik-2005; +1 Ответить
95. m_aster 127 10.11.25 01:42 Сейчас в теме
(94) Теперь только ссылка и посмотрите набор выбранных полей в настройках отчета(обратите внимание на дублирование ссылки ссылочного реквизита(в моем случае это "ВидНоменклатуры")):
Прикрепленные файлы:
Для отправки сообщения требуется регистрация/авторизация