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