Как в СКД настроить отбор по типу документа Регистратора?

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

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

Способ 1. Использование оператора ССЫЛКА в тексте запроса

Это самый быстрый и производительный метод, работу которого можно проверить в управляемой консоли запросов — для этого отлично подойдёт универсальная консоль запросов и компоновки данных. Оператор ССЫЛКА позволяет на уровне СУБД проверить тип документа, что работает значительно быстрее функции ТИПЗНАЧЕНИЯ. Рассмотрим ситуацию, когда нам нужны только документы "Списание товаров" и "Оприходование товаров".

Проанализируем пример кода в тексте запроса набора данных:


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

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

Способ 2. Гибкий отбор через параметр СКД

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

Разберем, как реализовать условие с помощью конструкции ВЫБОР:


ГДЕ ВЫБОР 
    КОГДА &ТипДокументов В (0, 1) И Регистратор ССЫЛКА Документ.СписаниеТоваров ТОГДА ИСТИНА 
    КОГДА &ТипДокументов В (0, 2) И Регистратор ССЫЛКА Документ.ОприходованиеТоваров ТОГДА ИСТИНА 
    ИНАЧЕ ЛОЖЬ 
КОНЕЦ

Для корректной работы этого механизма выполним следующие шаги в конструкторе СКД:

  1. Перейдем на вкладку Параметры.
  2. Для параметра ТипДокументов укажем тип данных "Число".
  3. В колонке "Доступные значения" добавим три варианта: 0 — "Все (Списание и оприходование)", 1 — "Только списание", 2 — "Только оприходование".
  4. Важно: убедитесь, что снята галочка в колонке "Ограничение доступности", иначе параметр не будет виден пользователю.
  5. В настройках отчета включите этот параметр в "Пользовательские настройки".

Способ 3. Добавление поля типа в набор данных

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


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

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

Способ 4. Использование вычисляемых полей

Если изменять запрос нежелательно (например, используется типовой отчет), мы можем воспользоваться механизмом вычисляемых полей непосредственно в СКД. Выясним, как это настроить:

  1. Откроем вкладку Вычисляемые поля.
  2. Добавим новое поле с путем к данным ТипРегистратора.
  3. В выражении пропишем: ТипЗначения(Регистратор).
  4. Укажем понятный заголовок, например, "Вид документа".

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

Способ 5. Стандартный отбор по типу в пользовательском режиме

Мало кто знает, что СКД позволяет фильтровать по типу даже без программирования. Разберем алгоритм действий в режиме "1С:Предприятие":

  1. Зайдите в настройки отчета на вкладку Отбор.
  2. Добавьте поле Регистратор.
  3. В колонке "Значение" нажмите кнопку выбора (три точки), а затем в окне выбора нажмите кнопку "Т" (Выбор типа).
  4. Выберите нужный тип документа (например, "Списание товаров").
  5. Теперь в списке выбора будут отображаться только документы выбранного типа, и система применит фильтр именно по метаданным типа.

Решение проблемы "Ошибка в элементе отбора"

Часто при использовании параметров в условиях ГДЕ возникает ошибка: "глобальные элементы отбора обязательно должны использовать поля параметров данных...". Рассмотрим причины и способы исправления:

Эта ошибка чаще всего возникает, когда параметр добавлен в пользовательские настройки, но при этом в схеме компоновки на него наложено ограничение или он конфликтует с глобальными отборами. Чтобы исправить это, проанализируем настройки:

Сравнение производительности: ССЫЛКА vs ТИПЗНАЧЕНИЯ

Проанализируем ситуацию с точки зрения нагрузки на базу данных. Когда мы используем Регистратор ССЫЛКА Документ.Имя, платформа 1С генерирует оптимальный SQL-запрос, проверяя внутренний идентификатор типа в таблице движений. При использовании ТИПЗНАЧЕНИЯ(Регистратор) системе может потребоваться дополнительное время на получение метаданных для каждой строки.

Рекомендация: Для высоконагруженных отчетов с миллионами записей всегда отдавайте предпочтение оператору ССЫЛКА в тексте запроса.

← На главную