Почему не отображаются все поля в Компоновщике настроек СКД?

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

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

Проверка программной инициализации компоновщика

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


// Получаем схему из макета
Схема = Отчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
АдресСхемы = ПоместитьВоВременноеХранилище(Схема, УникальныйИдентификатор);

// Создаем источник и инициализируем компоновщик
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);

Если после этого шага поля всё ещё отсутствуют, переходим к следующему этапу.

Анализ настроек Набора данных

Частой причиной является выключенная опция автоматического заполнения полей. Система 1С анализирует ваш текст запроса и, если свойство АвтоЗаполнениеДоступныхПолей установлено в Истина, сама определяет список доступных полей. Давайте проверим это программно или в конструкторе:

  1. Откройте схему компоновки данных.
  2. Перейдите на вкладку Наборы данных.
  3. Убедитесь, что для вашего набора данных флаг Автозаполнение установлен.
  4. Если вы меняете запрос программно перед инициализацией, убедитесь, что свойство АвтоЗаполнениеДоступныхПолей вашего набора данных равно Истина.

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

Влияние функциональных опций и прав доступа

Самая неочевидная, но часто встречающаяся причина — это ФункциональныеОпции. Система 1С обладает интеллектуальным механизмом: даже если поле прописано в запросе, но функциональная опция, связанная с этим полем, выключена (например, \"Использовать несколько валют\" или \"Использовать характеристики\"), платформа автоматически исключит это поле из списка доступных для пользователя.

Как проверить:

Проанализируйте, не зависит ли отсутствующее поле от какой-либо настройки конфигурации. В случае с валютами, если в УНФ или другой типовой конфигурации отключен учет в валюте, реквизит Валюта может программно блокироваться для отображения в настройках компоновщика. Попробуйте включить соответствующую настройку в режиме 1С:Предприятие, чтобы увидеть, появится ли поле в списке.

Пошаговый план решения проблемы

  1. Проверьте запрос: Выполните запрос в консоли запросов и убедитесь, что поле физически выбирается из базы данных и имеет корректный тип.
  2. Проверьте настройки СКД: Зайдите в \"Наборы данных\" и проверьте, не стоит ли \"Ограничение доступности\" (галочки выбора/отбора/сортировки) на нужном вам поле.
  3. Проверьте кэширование: Если вы меняете запрос программно, убедитесь, что вы обновляете адрес во временном хранилище именно с той схемой, в которой уже изменен запрос.
  4. Проверка прав и опций: Убедитесь, что ваш пользователь имеет права на чтение объекта, к которому относится поле, и что в настройках программы активированы все необходимые функциональные опции, от которых зависит работа с данными полями.
  5. Программный сброс: Если ничего не помогает, попробуйте принудительно обновить настройки компоновщика: КомпоновщикНастроек.Настройки.Очистить() перед загрузкой настроек по умолчанию.

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

← На главную