Как отключить автоматический отбор при выборе номенклатуры в отчете на СКД?

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

При разработке отчетов на базе схемы компоновки данных (СКД), объединяющих несколько табличных частей документов (например, ПоступлениеТоваровУслуг.Товары и ПоступлениеТоваровУслуг.Услуги), разработчики часто сталкиваются с неожиданным поведением формы выбора. Когда пользователь пытается установить отбор по полю Номенклатура в настройках отчета, открывающийся справочник содержит предустановленный фильтр: отображаются только товары (Услуга = Ложь) либо только услуги (Услуга = Истина).

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

Выясним причину возникновения автоматического отбора

В типовых конфигурациях (включая 1С:Бухгалтерию предприятия) для табличных частей документов в дереве метаданных заданы жесткие параметры выбора. Для реквизита Номенклатура табличной части Товары установлено ограничение вида Отбор.Услуга = Ложь, а для табличной части Услуги — Отбор.Услуга = Истина.

Когда в запросе СКД используется оператор ОБЪЕДИНИТЬ ВСЕ, результирующее поле набора данных автоматически наследует свойства и параметры выбора реквизита из первой таблицы запроса. Если первой в запросе идет табличная часть Товары, то поле компоновки получает параметры выбора для товаров. Если первой идет таблица Услуги — наследуются параметры выбора для услуг.

Способ 1. Настройка параметров редактирования поля в СКД

Разберем основной и самый простой способ устранения проблемы непосредственно в схеме компоновки данных без изменения текстов запросов и написания программного кода.

  1. Откроем схему компоновки данных и перейдем на вкладку Наборы данных.
  2. В верхней таблице выберем соответствующий набор данных (запрос), а в нижней таблице со списком полей найдем поле Номенклатура.
  3. В колонке Параметры редактирования нажмем кнопку выбора (с тремя точками).
  4. В открывшемся окне настроим параметры: найдем пункт Параметры выбора, установим напротив него флажок и оставим список параметров пустым либо удалим унаследованный отбор по признаку услуги.
  5. Аналогично проверим пункт Связи параметров выбора: установим флажок и убедимся, что автоматические связи очищены.

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

Способ 2. Явное указание формы выбора в схеме компоновки

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

  1. В схеме компоновки данных перейдем на вкладку Наборы данных и найдем поле Номенклатура.
  2. Откроем окно Параметры редактирования.
  3. Найдем параметр Форма выбора, установим флажок и выберем основную форму: Справочник.Номенклатура.Форма.ФормаВыбора.

Явное указание формы выбора в параметрах редактирования поля переопределяет правила открытия формы и предотвращает передачу унаследованных отборов из метаданных документа.

Способ 3. Приведение типа в тексте запроса

Рассмотрим еще один прием на уровне текста запроса набора данных. Чтобы разорвать связь поля с метаданными табличной части конкретного документа, можно применить явное приведение типов с помощью функции ВЫРАЗИТЬ.

Посмотрим на пример фрагмента запроса с объединением таблиц:


ВЫБРАТЬ
    ВЫРАЗИТЬ(ПоступлениеТовары.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
    ПоступлениеТовары.Количество КАК Количество,
    ПоступлениеТовары.Сумма КАК Сумма
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТовары

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВЫРАЗИТЬ(ПоступлениеУслуги.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
    ПоступлениеУслуги.Количество КАК Количество,
    ПоступлениеУслуги.Сумма КАК Сумма
ИЗ
    Документ.ПоступлениеТоваровУслуг.Услуги КАК ПоступлениеУслуги

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

Способ 4. Программная настройка в отчетах на базе БСП

Если отчет встроен в конфигурацию с использованием подсистемы Варианты отчетов Библиотеки Стандартных Подсистем (БСП), поведение формы выбора можно переопределить в модуле объекта отчета.

Разберем программную настройку через процедуру ОпределитьНастройкиФормы:


Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
    Настройки.События.ПриОпределенииПараметровВыбора = Истина;
КонецПроцедуры

Затем в соответствующем обработчике можно программно очистить структуру отбора или переопределить состав параметров выбора для элемента настроек компоновщика.

← На главную