Почему выбранные ресурсы не отображаются в доступных полях СКД

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

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

Различие видимости полей в Конфигураторе и в режиме Предприятие

Первое, что нам необходимо осознать: среда разработки (Конфигуратор) и пользовательский режим работают с метаданными по-разному. В Конфигураторе мы видим «статическую» картину — всё, что в принципе заложено в структуру таблиц. Однако в режиме «1С:Предприятие» система накладывает на эту структуру несколько динамических фильтров. Если вы загружаете схему в консоль компоновки данных и видите там крестики на полях или их полное отсутствие, это не всегда ошибка самой консоли. Чаще всего это работа механизмов платформы, которые защищают целостность данных и логику конфигурации.

Анализ влияния функциональных опций

Одной из самых частых причин исчезновения полей в таких конфигурациях, как КА 2.2 или ERP, является использование функциональных опций (ФО). Проанализируем ситуацию на примере ресурсов СуммаПР и СуммаВР. Эти поля напрямую связаны с ведением учета по ПБУ 18/02.

Если в настройках учетной политики организации не включен учет по ПБУ 18/02 или выбран метод, не предполагающий явное отражение постоянных и временных разниц в проводках, платформа автоматически скрывает эти поля. Для СКД это означает, что поле становится недоступным для выбора, даже если оно явно прописано в тексте запроса. Система считает, что раз функциональность отключена, то и данные в этих полях не имеют смысла.

Чтобы проверить эту гипотезу, выполните следующие действия:

  1. Проверьте, включены ли соответствующие функциональные опции в константах или настройках параметров учета.
  2. Убедитесь, что в схеме компоновки данных у полей не стоит привязка к функциональной опции, которая в данный момент выключена.

Ограничение прав доступа на уровне полей (RLS)

Выясним еще одну причину: права доступа. В 1С существует возможность ограничивать чтение не только всей таблицы (регистра), но и отдельных его полей. Это называется Field Level Security. Если у текущего пользователя нет прав на просмотр конкретного ресурса (например, налоговых показателей), СКД исключит это поле из списка доступных сразу после инициализации макета компоновки.

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

Настройки ограничений в наборе данных СКД

Иногда мы сами того не замечая, выставляем ограничения в самой схеме. Откроем закладку Наборы данных и внимательно изучим колонки в списке полей:

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

Программное добавление полей и ресурсов в СКД

Бывают задачи, когда структуру отчета нужно формировать динамически программным кодом. Разберем ситуацию, когда автоматическое заполнение доступных полей (АвтоЗаполнениеДоступныхПолей = Истина) не дает нужного результата.

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


// Создаем поле в наборе данных
ПолеНабора = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабора.Заголовок = "Сумма ПР (Остаток)";
ПолеНабора.ПутьКДанным = "СуммаПРКонечныйОстаток";
ПолеНабора.Поле = "СуммаПРКонечныйОстаток";

// Добавляем созданное поле в ресурсы схемы, чтобы оно стало доступным для агрегатных функций
Ресурс = СхемаКомпоновкиДанных.Ресурсы.Добавить();
Ресурс.ПутьКДанным = "СуммаПРКонечныйОстаток";
Ресурс.Выражение = "Сумма(СуммаПРКонечныйОстаток)";

Разберем по шагам, что здесь происходит. Сначала мы регистрируем поле в самом наборе данных, указывая ПутьКДанным. Это позволяет СКД понять, откуда брать значения. Затем мы обязательно добавляем запись в коллекцию Ресурсы. Если этого не сделать, поле будет считаться обычным реквизитом, и вы не сможете вывести по нему итоги в группировках.

Нюансы работы с виртуальными таблицами регистра бухгалтерии

Проанализируем специфику работы с таблицей ОстаткиИОбороты. Платформа 1С оптимизирует запросы к виртуальным таблицам. Если в параметрах виртуальной таблицы не указан конкретный счет или условие по счету, а в метаданных регистра для некоторых счетов учет по ПР/ВР отключен, платформа может "перестраховаться" и не выводить эти поля, так как они не являются универсальными для всего регистра.

Рекомендуется в тексте запроса СКД явно назначать псевдонимы полям. Вместо простого выбора поля из виртуальной таблицы используйте конструкцию ВЫРАЗИТЬ или хотя бы явный псевдоним:


ВЫБРАТЬ
    ХозрасчетныйОстаткиИОбороты.СуммаПРНачальныйОстаток КАК СуммаПРНачальныйОстаток,
    ХозрасчетныйОстаткиИОбороты.СуммаВРНачальныйОстаток КАК СуммаВРНачальныйОстаток
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , , , ) КАК ХозрасчетныйОстаткиИОбороты

Явное указание псевдонимов помогает СКД жестко зафиксировать наличие этих полей в результирующем наборе данных, уменьшая вероятность их автоматического исключения платформой.

Очистка кэша метаданных

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

Попробуйте выполнить следующие действия:

  1. Измените имя объекта отчета (не заголовок, а именно имя в свойствах).
  2. Очистите кэш метаданных пользователя.
  3. Создайте новый вариант отчета и проверьте список доступных полей в нем.

Подводя итог, можно сказать, что проблема "исчезающих" полей в СКД почти всегда имеет логическое объяснение, связанное с механизмами динамического управления метаданными в 1С. Тщательная проверка функциональных опций, прав доступа и программных настроек ресурсов позволяет успешно решить эту задачу и вывести все необходимые показатели в отчет.

← На главную