Как вывести поле «Регистратор» в отчет СКД из таблицы оборотов в 1С?

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

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

Посмотрим на типичный исходный запрос, с которым возникает проблема:


ВЫБРАТЬ
    ПродажиИСебестоимостьОбороты.Организация КАК Организация,
    ПродажиИСебестоимостьОбороты.Контрагент КАК Контрагент,
    ПродажиИСебестоимостьОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
    ПродажиИСебестоимостьОбороты.Номенклатура КАК Номенклатура,
    ПродажиИСебестоимостьОбороты.КоличествоОборот КАК КоличествоОборот,
    ПродажиИСебестоимостьОбороты.ВыручкаБезНДСОборот КАК ВыручкаБезНДСОборот,
    ПродажиИСебестоимостьОбороты.СебестоимостьБезНДСОборот КАК СебестоимостьБезНДСОборот,
    ПродажиИСебестоимостьОбороты.ВыручкаБезНДСОборот - ПродажиИСебестоимостьОбороты.СебестоимостьБезНДСОборот КАК МаржаБезНДС,
    ПродажиИСебестоимостьОбороты.ДокументПартии КАК ДокументПартии
ИЗ
    РегистрНакопления.ПродажиИСебестоимость.Обороты КАК ПродажиИСебестоимостьОбороты

Выясним причину такого поведения. Виртуальные таблицы оборотов формируются платформой 1С динамически. По умолчанию, если параметр периодичности не задан, система агрегирует (сворачивает) итоги за весь указанный в параметрах интервал. Группировка данных выполняется только по измерениям регистра. Чтобы оптимизировать запрос и уменьшить объем данных, поля Регистратор и НомерСтроки физически исключаются из результирующей выборки. Именно поэтому конструктор запросов их не отображает.

Проанализируем доступные способы решения этой задачи и выберем наиболее подходящий.

Способ 1: Использование физической таблицы регистра

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

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

Однако этот подход имеет существенные минусы. Вам придется самостоятельно группировать данные по измерениям, суммировать ресурсы (обороты) и накладывать условия на активность записей (условие Активность = ИСТИНА). Это лишает вас главных преимуществ виртуальных таблиц, которые платформа оптимизирует автоматически. Поэтому данный способ стоит применять только в специфических случаях.

Способ 2: Настройка периодичности виртуальной таблицы (Рекомендуемый)

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

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

После подтверждения изменений вы увидите, что в левом списке полей таблицы появились новые данные: Регистратор, НомерСтроки, а также поля периодов (ПериодСекунда, ПериодДень и так далее). Теперь вы можете перетащить поле Регистратор в список выбранных полей запроса, и оно станет доступно для вывода и расшифровки в отчете.

Важные ограничения и особенности

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

Альтернативные подходы

Проанализируем еще два полезных варианта работы с данными, если таблица оборотов по каким-то причинам вас не устраивает.

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

2. Настройка стандартной расшифровки (Drill-down) в СКД
Если вы установите периодичность Авто, СКД позволяет не выводить поле Регистратор прямо в строки (детальные записи) отчета. Это поможет не перегружать внешний вид отчета лишней детализацией. Однако, само поле будет извлечено платформой и останется доступным во внутренних данных расшифровки. Таким образом, пользователь сможет сделать двойной клик по ячейке с суммой оборота и стандартными средствами СКД провалиться в документ-регистратор.

← На главную