SeiOkami / OneS

Предложения по улучшению платформы
50 stars 3 forks source link

Добавить флажок "Добавлять в запросы ведущего объекта" объекту метаданных регистра #298

Open tormozit opened 1 month ago

tormozit commented 1 month ago

https://partners.v8.1c.ru/forum/t/2204446/m/2204446 При активном использовании выноса хранения часто меняющихся атрибутов ссылочных объектов в регистры сведений - появляется множество регистров с единственным измерением соответствующего ссылочного типа и обычно периодическими. Например это может быть какая то часто пересчитываемая классификация объектов или курс валюты или какие то итоговые показатели по объекту. В таких случаях пользователи часто просят делать поля этих регистров доступными для выбора в большинстве мест, где такие объекты присутствуют в доступных полях компоновки (например в динамических списках и отчетах). Платформа в текущем виде не позволяет эффективно решать такие задачи, т.к. приходится явно прописывать вручную соединения с этими регистрами в большом числе запросов и схем компоновки. Но и даже это иногда не дает достаточной универсальности, т.к. требующее соединения поле может находиться где то в глубине дерева доступных полей компоновки, и для всех таких вариантов прописывать эти соединения становится слишком затратно.

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

изображение

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

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

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

  1. В настройках компоновки данных при раскрытии доступного поля типа "Контрагенты" будет видна дочерняя папка доступных полей с заголовком из представления регистра ABCКлассификацияПокупателей с добавкой "СрезПоследних" и дочерними полями из полей этого регистра. При выборе такого дочернего поля компоновка сама добавит в запрос явное соединение с этим регистром аналогично тому, как делает механизм "Характеристики".
  2. В конструкторе запросов программист при раскрытии доступного поля типа "Контрагенты" будет видеть дочернюю папку доступных полей с заголовком из представления регистра ABCКлассификацияПокупателей с добавкой "Срез последних" и дочерними полями из полей этого регистра. При выборе такого дочернего поля в запрос должно добавляться явное соединение с этим регистром.

Иллюстрации (см. вложенные картинки) из ограниченной прикладной реализации этой идеи в инструменте "Подбор и обработка объектов ИР"

изображение

изображение

Запрос, полученный в результате наложения отбора на такое неявное дочернее поле:

ВЫБРАТЬ
    Т.Ссылка КАК Ссылка,
    ABCКлассификацияПокупателейТ.ABCКлассПокупателя КАК ABCКлассификацияПокупателей_ABCКлассПокупателя,
ИЗ
    Справочник.Контрагенты КАК Т
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ABCКлассификацияПокупателей.СрезПоследних(, ) КАК ABCКлассификацияПокупателейТ
        ПО Т.Ссылка = ABCКлассификацияПокупателейТ.Контрагент
ГДЕ
    ABCКлассификацияПокупателейТ.ABCКлассПокупателя = &П