Перейти к содержанию

Обращение к стандартному реквизиту регистра составного типа без использования конструкции Выразить или с неверным использованием Выразить

Обращение к реквизитам составного регистратора регистра составного типа без использования конструкции Выразить

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

Например:

  • у регистра накопления РегистрНакопленияНесколькоРегистраторов существуют 2 документа, регистрирующие в нём движения - документ1 и документ2.

В таком случае текст запроса:

Неправильный

ВЫБРАТЬ
    РегистрНакопленияНесколькоРегистраторов.Регистратор.Дата КАК ДатаРегистратора
ИЗ
    РегистрНакопления.РегистрНакопленияНесколькоРегистраторов КАК РегистрНакопленияНесколькоРегистраторов

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

ВЫБРАТЬ
    ВЫРАЗИТЬ(РегистрНакопленияНесколькоРегистраторов.Регистратор КАК Документ.Документ1).Дата КАК ДатаРегистратора
ИЗ
    РегистрНакопления.РегистрНакопленияНесколькоРегистраторов КАК РегистрНакопленияНесколькоРегистраторов

Правильный

ВЫБРАТЬ
    КОГДА РегистрНакопленияНесколькоРегистраторов.Регистратор ССЫЛКА Документ.Документ1
        ТОГДА ВЫРАЗИТЬ(РегистрНакопленияНесколькоРегистраторов.Регистратор КАК Документ.Документ1).Дата
    КОГДА РегистрНакопленияНесколькоРегистраторов.Регистратор ССЫЛКА Документ.Документ2
        ТОГДА ВЫРАЗИТЬ(РегистрНакопленияНесколькоРегистраторов.Регистратор КАК Документ.Документ2).Дата
    КОНЕЦ КАК ДатаРегистратора
ИЗ
    РегистрНакопления.РегистрНакопленияНесколькоРегистраторов КАК РегистрНакопленияНесколькоРегистраторов

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

Согласно сертификации "Специалист 1С" по платформе 1С:Предприятие 8.x документ обязан совершить свои движения и отразить все необходимые ресурсы и измерения в регистрах, после чего его функция завершена.

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

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

Обращение к полям регистратора "через точку" приводит к неявному соединению с дополнительными таблицами.

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

См. также

Экранирование кода

// sonar:CompositePropsInTheQuery:off
// sonar:CompositePropsInTheQuery:on