Отчеты и Аналитика · 11 мин
Как сделать отбор по типу документа в 1С
Как сделать отбор по типу документа в 1С: в журнале документов, отчётах СКД, динамических списках и запросах. Конкретные шаги, примеры кода и типичные ошибки.
Отбор по типу документа — одна из самых частых задач при работе с 1С: бухгалтеру нужно видеть только счета-фактуры, менеджеру — только заказы покупателей, а разработчику — выбрать документы определённого вида в запросе или отчёте. В зависимости от того, где выполняется отбор, механизм отличается: в журнале документов это настройка отображаемых видов, в отчётах — отбор СКД, в динамических списках — настройка запроса, а в коде — методы Выбрать() или конструкция запроса.
Ниже разобраны все основные сценарии: от простого пользовательского отбора в журнале до программной выборки в запросе. Каждый способ сопровождается условиями применения, ограничениями и способом проверить результат. Материал ориентирован на типовые конфигурации на платформе 1С:Предприятие 8.3 — «Управление торговлей», «Бухгалтерия предприятия», «ERP», а также на самописные решения.
Отбор по типу документа в журнале документов
Журналы документов в типовых конфигурациях объединяют несколько видов документов в одном списке — например, журнал «Документы продажи» показывает и заказы, и реализации, и счета-фактуры. Чтобы оставить только нужный тип, откройте журнал, нажмите «Ещё» → «Настроить список» (в некоторых конфигурациях — «Настройка списка») и в появившемся окне снимите флажки с лишних видов документов, оставив только требуемый.
После применения настройки список перестроится и будет показывать документы только выбранного вида. Настройка сохраняется для текущего пользователя и действует при следующих открытиях журнала. Если нужно вернуть полный состав, повторите действие и включите все виды обратно.
В управляемых формах, построенных на динамическом списке, доступен и быстрый отбор: нажмите «Ещё» → «Установить отбор и сортировку списка» и добавьте условие по полю, если оно доступно. Однако для типа документа этот путь не всегда работает — поле «Тип» в отборе журнала обычно недоступно, поэтому основной способ именно настройка состава видов.
- 1Откройте нужный журнал документов
- 2Нажмите «Ещё» → «Настроить список»
- 3Снимите флажки с ненужных видов документов, оставьте требуемый
- 4Нажмите «ОК» и проверьте, что в списке остались документы только выбранного типа
Отбор по типу документа в отчётах на СКД
В отчётах, построенных на системе компоновки данных (СКД), отбор по типу документа настраивается на вкладке «Отбор» в настройках отчёта. Откройте отчёт, нажмите «Настройки» (или «Ещё» → «Изменить вариант»), перейдите на вкладку «Отбор» и добавьте условие по полю, содержащему ссылку на документ.
Ключевой момент — вид сравнения. Если поле имеет составной тип (например, «Документ-основание» может ссылаться на разные документы), используйте вид сравнения «Тип» или «Содержит тип» в зависимости от версии платформы и конфигурации, и выберите нужный вид документа. Если поле ссылается только на один вид документа, достаточно обычного условия «Равно» с конкретным документом или «В списке» с перечнем ссылок.
После установки отбора нажмите «Сформировать» и проверьте результат: в отчёт должны попасть строки только с документами выбранного типа. Если отбор не сработал, убедитесь, что условие добавлено именно в отбор отчёта, а не группировки, и что флажок использования условия включён.
Отбор по типу документа в динамическом списке
Динамический список — основа большинства форм списков в управляемом приложении. Если вы дорабатываете форму или создаёте свою, отбор по типу документа задаётся либо в самом запросе динамического списка, либо через свойство «Отбор» программно.
В запросе динамического списка условие добавляется в секцию ГДЕ. Например, чтобы список показывал только реализации, запрос строится по таблице Документ.РеализацияТоваровУслуг — тогда отдельное условие по типу вообще не нужно, тип задан самой таблицей. Если же источником служит регистр или составное поле, применяется функция ТИПЗНАЧЕНИЯ().
Программно отбор устанавливается через компоновщик настроек списка: добавьте элемент отбора, укажите поле, вид сравнения и значение. Учтите, что для полей составного типа значением отбора должна быть ссылка соответствующего вида, иначе условие отработает некорректно или выдаст пустой список.
ВЫБРАТЬ
Документы.Ссылка,
Документы.Номер,
Документы.Дата
ИЗ
Документ.РеализацияТоваровУслуг КАК Документы
ГДЕ
НЕ Документы.ПометкаУдаленияОтбор по типу документа в запросе и в коде
В языке запросов 1С самый надёжный способ отобрать документы нужного типа — обратиться напрямую к таблице конкретного вида документа: Документ.ПоступлениеТоваровУслуг, Документ.СчетФактура и т.д. Тогда отбор по типу выполняется на уровне источника данных и не требует дополнительных условий.
Если данные берутся из поля составного типа — например, из реквизита «ДокументОснование» регистра — используйте функцию ТИПЗНАЧЕНИЯ() в сочетании с оператором ТИП(). Условие выглядит так: ГДЕ ТИПЗНАЧЕНИЯ(Регистр.ДокументОснование) = ТИП(Документ.ЗаказПокупателя). Это стандартный и корректно оптимизируемый платформой способ.
В коде встроенного языка перебор документов одного типа выполняется менеджером документа: Документы.РеализацияТоваровУслуг.Выбрать(НачалоПериода, КонецПериода). Метод возвращает выборку только документов этого вида. Для проверки типа произвольной ссылки применяйте функцию ТипЗнч() и сравнение с Тип("ДокументСсылка.ЗаказПокупателя").
ВЫБРАТЬ
Движения.ДокументОснование КАК Основание
ИЗ
РегистрНакопления.Взаиморасчеты КАК Движения
ГДЕ
ТИПЗНАЧЕНИЯ(Движения.ДокументОснование) = ТИП(Документ.ЗаказПокупателя)Сравнение способов отбора
Выбор способа зависит от того, где вы работаете и какой результат нужен. Пользователю в типовой конфигурации обычно достаточно настройки журнала или отбора в отчёте; доработка форм и запросов — зона ответственности разработчика или администратора с доступом к конфигуратору.
Сравнение вариантов
Подходит пользователю без программирования. Ограничение: работает только внутри конкретного журнала и не переносится в отчёты.
Гибкие условия, сохранение вариантов отчёта. Ограничение: требует понимания структуры полей отчёта.
Самый быстрый и надёжный для разработки. Ограничение: нужен доступ к конфигуратору или консоли запросов.
Единственный вариант для составных полей и регистров. Ограничение: условие сложнее оптимизируется, на больших таблицах возможно замедление.
Проверка результата и типичные ошибки
После применения отбора убедитесь, что результат соответствует ожиданию: в списке или отчёте должны присутствовать только документы нужного вида, а их количество не должно быть нулевым, если документы в базе точно есть. Пустой результат чаще всего означает либо неверно выбранный тип, либо дополнительные скрытые отборы (по периоду, организации, пометке удаления).
Отдельная ловушка — помеченные на удаление документы. В журналах они отображаются с зачёркнутым номером, а в запросах без условия НЕ ПометкаУдаления попадают в выборку. Если нужны только проведённые документы, добавляйте условие Проведен или обращайтесь к данным регистров, куда непроведённые документы движений не делают.
Как проверить результат
Видны только документы выбранного вида
Попадаются документы других типов — отбор не применён
Количество больше нуля и соответствует ожиданиям
Пусто при заведомо существующих документах — проверьте период и лишние отборы
Помеченные документы исключены или видны осознанно
Помеченные попадают в отчёт и искажают итоги
Ограничения и когда лучше обратиться к специалисту
Пользовательские настройки отборов безопасны: они не меняют данные и легко откатываются через «Ещё» → «Установить стандартные настройки». Риск появляется при доработке конфигурации: ошибка в запросе динамического списка может замедлить открытие формы для всех пользователей, а неверное условие в отчёте — исказить управленческие данные.
Если отбор нужен регулярно, а стандартных настроек не хватает — например, требуется отбор по типу документа-основания в нескольких отчётах сразу — имеет смысл поручить разработчику добавить предопределённый вариант отчёта или отдельную обработку. Это дешевле, чем каждый раз настраивать условия вручную и рисковать ошибкой.
Как выбрать действие
Частые вопросы
Почему в журнале нет кнопки настройки списка?
В некоторых конфигурациях и простых формах списка настройка состава видов отсутствует — журнал жёстко привязан к одному типу документов или настройка скрыта правами. Проверьте меню «Ещё» и права пользователя; при необходимости попросите администратора включить нужную команду.
Как отобрать документы сразу двух типов?
В настройке журнала оставьте флажки на обоих нужных видах. В запросе используйте ОБЪЕДИНИТЬ ВСЕ для двух таблиц документов либо условие ТИПЗНАЧЕНИЯ(Поле) В (ТИП(Документ.Вид1), ТИП(Документ.Вид2)) для составного поля.
Можно ли отобрать документы по типу в консоли запросов?
Да. В консоли запросов работают те же конструкции: прямое обращение к таблице Документ.ИмяДокумента или функция ТИПЗНАЧЕНИЯ(). Это удобный способ проверить условие перед переносом в отчёт или обработку.
Почему отбор по типу в отчёте работает медленно?
Условие ТИПЗНАЧЕНИЯ() по неиндексированному составному полю заставляет платформу просматривать большой объём записей. Сократите выборку другими отборами (период, организация) или перестройте запрос так, чтобы тип определялся источником данных.
Как в коде проверить тип ссылки на документ?
Используйте функцию ТипЗнч(Ссылка) и сравните результат с нужным типом: Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда ... КонецЕсли;. Это надёжнее, чем анализ строкового представления или метаданных через Метаданные() в простых проверках.
Сохранится ли настройка отбора для других пользователей?
Настройки журнала и варианты отчётов по умолчанию сохраняются персонально. Чтобы настройка была общей, сохраните вариант отчёта с признаком доступности всем пользователям (требуются соответствующие права) или задайте отбор в конфигураторе.
Что важно запомнить
В журнале отбор по типу делается настройкой состава видов, в отчётах — условием СКД, в запросах — выбором таблицы документа или ТИПЗНАЧЕНИЯ(). Всегда проверяйте результат на пустоту, лишние отборы и помеченные на удаление документы, а доработки тестируйте на копии базы.