Как получить реквизиты составного поля Регистратор в пользовательских полях СКД

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

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

Анализ проблемы: почему реквизиты недоступны

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

  1. Ограничение доступности в наборе данных. Это самая частая причина. В конфигураторе на закладке «Наборы данных» для поля Регистратор может быть установлен флаг «Ограничение доступности». Если в описании полей набора данных не указана «звездочка» (Регистратор.*), система не позволит пользователю обращаться к дочерним реквизитам в режиме «1С:Предприятие».
  2. Проблема пустых значений (NULL). В отчетах, построенных на сложных соединениях (как ведомости по партиям), поле Регистратор может принимать значение NULL. При попытке вычислить Регистратор.Комментарий, если сам объект отсутствует, СКД может выдать ошибку или вернуть пустое значение, блокируя дальнейшие вычисления.
  3. Специфика синтаксиса пользовательских полей. Пользовательские поля в интерфейсе отчета используют ограниченный синтаксис. Конструкции, привычные для языка запросов (например, ВЫРАЗИТЬ(... КАК ...) или ССЫЛКА), там работают иначе или не работают вовсе.

Решение 1: Снятие ограничений через «Звездочку»

Если у нас есть доступ к схеме компоновки данных в конфигураторе или через расширение, проверим настройки полей. Выясним причину «невидимости» через настройки доступности.

Рассмотрим шаги по исправлению:

  1. Откроем схему компоновки данных (СКД).
  2. Перейдем на закладку Наборы данных.
  3. В списке полей найдем Регистратор.
  4. Обратим внимание на колонку Путь к данным и колонку Ограничение доступности.
  5. Чтобы разрешить пользователю вытаскивать любые реквизиты регистратора, убедимся, что поле описано как доступное для расширения. В некоторых случаях помогает добавление в список полей записи вида Регистратор.*.
  6. Снимем галочки в колонках Ограничение поля и Ограничение настройки для этого поля.

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

Решение 2: Использование правильного синтаксиса в пользовательском поле

Если мы не хотим менять запрос, а пытаемся написать выражение прямо в настройках отчета, нужно учитывать, что оператор ССЫЛКА в пользовательских полях часто не воспринимается. Вместо него проанализируем использование функции ТИПЗНАЧЕНИЯ().

Посмотрим на пример правильного выражения для пользовательского поля:


ВЫБОР 
    КОГДА ТИПЗНАЧЕНИЯ(Регистратор) = ТИП("Документ.РеализацияТоваровУслуг") 
    ТОГДА Регистратор.Комментарий 
    ИНАЧЕ "" 
КОНЕЦ

Важные моменты при написании такого выражения:

Решение 3: Обработка NULL и пустых ссылок

Как мы выяснили, если Регистратор равен NULL, обращение к его свойствам может привести к ошибке исполнения компоновки. Чтобы этого избежать, используем функцию ЕСТЬNULL.

Разберем пример выражения с защитой от пустых значений:


ВЫБОР 
    КОГДА Регистратор ЕСТЬ НЕ NULL 
    ТОГДА Регистратор.Комментарий 
    ИНАЧЕ "" 
КОНЕЦ

Однако стоит помнить: в СКД, если поле Регистратор в наборе данных ограничено (запрет на вложенные поля), то даже проверка на NULL не поможет «дотянуться» до комментария. Система отсекает такие обращения еще на этапе парсинга выражения.

Решение 4: Создание отдельного поля в наборе данных (для разработчиков)

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

Алгоритм действий:

  1. В СКД на закладке Наборы данных добавим новое поле.
  2. В колонке Путь к данным укажем понятное имя, например КомментарийРегистратора.
  3. В колонке Выражение пропишем: ВЫРАЗИТЬ(Регистратор КАК Документ.РеализацияТоваровУслуг).Комментарий Или, если типов много, можно оставить просто Регистратор.Комментарий, так как на уровне запроса или выражений набора данных ограничения работают мягче.
  4. В колонке Заголовок напишем «Комментарий (из регистратора)».

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

Дополнительные нюансы: Роли и функциональные опции

Проанализируем еще два редких, но важных фактора:

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

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

Таким образом, для успешного получения комментария из регистратора в пользовательском поле, необходимо сначала убедиться в отсутствии флага Ограничение доступности в конфигураторе, а затем использовать конструкцию ВЫБОР КОГДА с проверкой типа значения или наличия ссылки.

← На главную