Как добавить выбор склада в отчет 1С и настроить отображение доступных значений

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

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

Настройка поля выбора в схеме компоновки данных

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

  1. Откроем конструктор СКД и перейдем на закладку «Настройки».
  2. В нижней части окна выберем вкладку «Отбор».
  3. Добавим новое поле, выбрав в качестве левого значения Склад.
  4. Нажмем на кнопку «Свойства пользовательской настройки» (иконка с изображением ключа).
  5. В появившемся окне установим флажок «Включать в пользовательские настройки».
  6. Выберем режим редактирования: «Быстрый доступ» позволит полю отображаться непосредственно в шапке отчета, а не в отдельном окне настроек.

Если после этих действий поле появилось, но список выбора пуст, перейдем к проверке технических нюансов.

Проверка типов данных и связей параметров

Одной из самых распространенных причин, по которой список выбора не открывается или пуст, является некорректное определение типа данных в наборе данных СКД. Выясним причину, изучив закладку «Наборы данных».

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

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

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

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

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


// Пример установки программного отбора для выбора склада
ПараметрСклад = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Склад");
Если ПараметрСклад <> Неопределено Тогда
    // Если нужно задать фиксированный список доступных складов
    СписокСкладов = Новый СписокЗначений;
    СписокСкладов.Добавить(Справочники.Склады.НайтиПоНаименованию("Основной склад"));
    СписокСкладов.Добавить(Справочники.Склады.НайтиПоНаименованию("Склад готовой продукции"));
    
    // Устанавливаем доступные значения для параметра
    ПараметрСклад.ДоступныеЗначения = СписокСкладов;
КонецЕсли;

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


// Установка значения по умолчанию в пользовательских настройках
Для Каждого Настройка Из Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
    Если ТипЗнч(Настройка) = Тип("ЭлементОтбораКомпоновкиДанных") 
        И Настройка.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Склад") Тогда
        
        Настройка.Использование = Истина;
        Настройка.ПравоеЗначение = Справочники.Склады.НайтиПоКоду("00001");
    КонецЕсли;
КонецЦикла;

Влияние прав доступа и механизма RLS

Проанализируем ситуацию, когда у одного пользователя список складов заполнен, а у другого — пуст, при идентичных настройках отчета. Скорее всего, причина кроется в RLS (Record Level Security) — ограничении доступа на уровне записей.

Если в системе настроены ограничения по складам, то запрос СКД при получении списка выбора будет автоматически отфильтрован. Пользователь увидит только те элементы, на которые у него есть право «Чтение». Важно понимать, что если у пользователя нет прав на просмотр справочника Склады в целом, то форма выбора вообще не откроется, даже если данные по этим складам присутствуют в регистрах и доступны для вывода в самом отчете.

Особенности использования предопределенных данных

При работе с предопределенными складами следует соблюдать осторожность. Часто разработчики пытаются настроить фильтрацию по имени склада, используя строковые значения. Это ненадежно. Всегда используйте СправочникСсылка. В СКД на закладке «Параметры» убедитесь, что для параметров, связанных со складами, не стоит галочка «Ограничение доступности», если вы хотите, чтобы пользователь мог ими управлять.

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

← На главную