Разработчики отчетов в системе «1С:Предприятие» часто сталкиваются с загадочным поведением Системы компоновки данных (СКД). Вы создаете запрос, тестируете его в консоли запросов — все работает идеально, нужные данные выбираются. Открываете схему компоновки в конфигураторе — поле присутствует в списке доступных, его можно добавить в группировки или выбранные поля. Однако при запуске отчета в режиме «1С:Предприятие» поле бесследно исчезает из настроек отчета, колонка не выводится, а пользователи не могут его выбрать.
В этой статье мы подробно разберем, почему в СКД пропадает поле НоменклатураГруппаФинансовогоУчета (или любое другое аналогичное поле, получаемое через цепочку связей) на примере конфигураций «Управление торговлей 11», «ERP Управление предприятием» или «Комплексная автоматизация», и рассмотрим пошаговые методы решения этой проблемы.
Для начала проанализируем запрос, который используется в качестве источника данных для СКД:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
АналитикаНоменклатуры.Номенклатура.ГруппаФинансовогоУчета КАК НоменклатураГруппаФинансовогоУчета,
АналитикаНоменклатуры.Номенклатура КАК Номенклатура,
ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК КоличествоОборот,
ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот КАК СуммаВыручкиОборот
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(, , , ) КАК ВыручкаИСебестоимостьПродажОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаНоменклатуры
ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры = АналитикаНоменклатуры.КлючАналитики
В данном запросе поле ГруппаФинансовогоУчета выбирается через «длинную» цепочку связей: мы берем его из измерения Номенклатура, которое, в свою очередь, получается через левое соединение с регистром сведений АналитикаУчетаНоменклатуры. Именно такие составные пути и левые соединения чаще всего становятся источником проблем в компоновщике данных.
Рассмотрим по шагам все возможные причины исчезновения поля и способы их устранения.
---
Поскольку поле ГруппаФинансовогоУчета выбирается через левое соединение, в результирующей выборке СУБД для некоторых записей значение поля АналитикаНоменклатуры.Номенклатура может принимать значение NULL. При оптимизации запроса СКД пытается определить точные типы данных.
Если цепочка связей слишком длинная, а промежуточные звенья могут содержать неопределенные значения, СКД в режиме «1С:Предприятие» может просто исключить это поле из дерева доступных из-за невозможности однозначно сопоставить типы на уровне метаданных.
Что нужно сделать:
В тексте запроса схемы компоновки данных явно приведите тип промежуточного объекта (в данном случае справочника Номенклатура) к его конкретному типу. Измените исходный запрос следующим образом:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВЫРАЗИТЬ(АналитикаНоменклатуры.Номенклатура КАК Справочник.Номенклатура).ГруппаФинансовогоУчета КАК НоменклатураГруппаФинансовогоУчета,
АналитикаНоменклатуры.Номенклатура КАК Номенклатура,
ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК КоличествоОборот,
ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот КАК СуммаВыручкиОборот
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(, , , ) КАК ВыручкаИСебестоимостьПродажОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаНоменклатуры
ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры = АналитикаНоменклатуры.КлючАналитики
Использование оператора ВЫРАЗИТЬ гарантирует платформе, что по данной ветке связи всегда будет возвращаться либо пустая ссылка справочника Номенклатура, либо заполненный объект этого типа, что позволит СКД беспрепятственно прочитать реквизит ГруппаФинансовогоУчета.
---
Иногда разработчики случайно накладывают ограничения на доступность полей непосредственно в схеме компоновки данных в конфигураторе.
Разберем по шагам, как это проверить:
.xsd вашего отчета) в конфигураторе.НоменклатураГруппаФинансовогоУчета.Если в какой-либо из этих колонок установлена галочка, снимите ее, сохраните отчет и проверьте результат в режиме Предприятия.
---
В современных конфигурациях, построенных на базе БСП (Библиотеки стандартных подсистем), видимость практически всех интерфейсных элементов и полей данных регулируется Функциональными опциями (ФО). Если какая-то подсистема отключена в настройках программы, платформа автоматически скрывает связанные с ней реквизиты метаданных.
Поле ГруппаФинансовогоУчета напрямую связано с функционалом финансового учета номенклатуры. Проблема может крыться в следующем:
АналитикаУчетаНоменклатуры или какими-то его свойствами, платформа автоматически отсекает и все вложенные реквизиты (включая группы фин. учета), даже если отчет запускается под учетной записью с Полными правами.Как проверить влияние ФО:
ГруппаФинансовогоУчета справочника Номенклатура.---
Оптимизатор запросов СКД работает достаточно агрессивно. Если поле не выведено напрямую в текущую группировку или в область видимости отчета, СКД может принять решение «выкинуть» его из результирующего SQL-запроса к базе данных в целях повышения производительности.
Чтобы заставить СКД гарантированно выбирать это поле из СУБД, выполните следующие действия:
НоменклатураГруппаФинансовогоУчета.После этого СКД принудительно будет включать данное поле во все генерируемые запросы, вне зависимости от текущих настроек компоновки пользователем.
---
Часто проблема кроется не в кодовой части, а в том, что платформа «запомнила» старую структуру отчета и подгружает ее из кэша или сохраненных настроек пользователя.
Рекомендуется выполнить комплексную очистку:
/ClearCache или вручную удалите папки кэша из каталогов %localappdata%\1C\1Cv8 и %appdata%\1C\1Cv8.---
Если отчет интегрирован в конфигурацию или зарегистрирован как дополнительный отчет в справочнике «Дополнительные отчеты и обработки», БСП сохраняет снимок схемы компоновки в своих служебных регистрах сведений.
Если вы обновили схему в конфигураторе, но не обновили вспомогательные данные в режиме Предприятия, система продолжит использовать старый вариант схемы, где нужного поля не было.
Для исправления ситуации воспользуйтесь специальной обработкой БСП:
ИнструментыРазработчикаОбновлениеВспомогательныхДанных.epf.Применяя данные методы последовательно — от простого приведения типов к конкретному справочнику с помощью ВЫРАЗИТЬ до анализа функциональных опций и сброса кэша настроек, — вы гарантированно решите проблему с отображением поля НоменклатураГруппаФинансовогоУчета в вашем отчете.