К статье
Практический материал

Документы и Печать · 9 мин

Как выбрать документы в 1С: журналы, отборы и запросы

Как выбрать документы в 1С: отбор в журнале, выборка запросом по периоду, организации и виду документа, типичные ошибки и проверка результата.

Задача «выбрать документы» в 1С возникает в двух разных контекстах: пользователю нужно найти и отфильтровать документы в журнале, а разработчику — получить выборку документов запросом или методами встроенного языка. Подходы принципиально различаются: в первом случае работа идёт через интерфейс, во втором — через код и конструктор запросов.

Правильный выбор способа зависит от цели. Если нужно разово найти накладные за месяц по контрагенту — достаточно отбора в журнале. Если требуется обработать тысячи документов, сформировать отчёт или выгрузку — без запроса не обойтись. Ниже разобраны оба сценария с конкретными действиями, условиями и проверками результата.

Отбор документов в журнале: базовый сценарий

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

Если стандартных полей не хватает, нажмите «Ещё» → «Настроить список» (или «Установить отбор и сортировку списка» в обычных формах). Здесь можно добавить условие по любому реквизиту документа: сумме, складу, ответственному, комментарию. Условия комбинируются по «И», то есть документ попадёт в список, только если удовлетворяет всем отборам одновременно.

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

Порядок действий в журнале
  1. 1
    Откройте журнал нужного вида документов
  2. 2
    Установите период и заполните поля быстрого отбора
  3. 3
    При необходимости откройте «Настроить список» и добавьте условия по реквизитам
  4. 4
    Проверьте, что список обновился и условия отображаются в панели отборов
  5. 5
    Сохраните настройку как вариант, если отбор нужен регулярно

Поиск конкретного документа по номеру и содержимому

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

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

Выборка документов запросом

В коде документы выбирают запросом к виртуальной или физической таблице вида Документ.РеализацияТоваровУслуг. Минимальный запрос выглядит так: указывается таблица документа, а в секции ГДЕ — условия по дате, проведению и реквизитам. Период всегда передавайте параметрами &НачалоПериода и &КонецПериода, а не конкатенацией строк.

bsl
ВЫБРАТЬ

	Ссылка,

	Номер,

	Дата,

	Контрагент

ИЗ

	Документ.РеализацияТоваровУслуг

ГДЕ

	Дата МЕЖДУ &НачалоПериода И &КонецПериода

	И Проведен

	И Организация = &Организация

Условие Проведен отсекает помеченные на удаление и непроведённые документы — для отчётов по учётным данным это почти всегда обязательно. Если нужны в том числе черновики, замените условие на НЕ ПометкаУдаления. Помните: просто «существующий» документ и «проведённый» документ — разные множества, и смешение этих понятий — источник расхождений в отчётах.

Результат запроса получают методом Выполнить().Выбрать() для последовательного обхода или Выгрузить() для таблицы значений. Для обхода больших выборок предпочтительнее Выбрать() — он не загружает всё в память сразу.

Альтернатива: метод Выбрать() менеджера документа

Без запроса выборку можно получить методом Документы.РеализацияТоваровУслуг.Выбрать(НачалоПериода, КонецПериода). Метод возвращает выборку документов за интервал, отсортированную по дате. Отбор по реквизитам здесь ограничен: в типовых случаях можно указать отбор только по определённым полям, поэтому для сложных условий запрос удобнее и быстрее.

Используйте Выбрать() менеджера, когда нужен простой перебор всех документов вида за период без дополнительных условий — например, в регламентной обработке перенумерации или проверки. Для всего остального запрос даёт больше контроля и лучше оптимизируется платформой.

Сравнение способов выборки

Отбор в журнале

Разовый поиск пользователем; не подходит для обработки и выгрузки больших объёмов

Запрос с ГДЕ

Гибкие условия, соединения с другими таблицами; требует навыка написания запросов

Метод Выбрать()

Простой перебор за период; ограниченные возможности отбора по реквизитам

СКД и произвольные отчёты

Настройка отборов пользователем без изменения кода; нужна готовая схема компоновки

Отбор по нескольким условиям и произвольным реквизитам

Когда условие зависит от ситуации (например, отбор по контрагенту только если он заполнен в параметрах), применяйте приём с проверкой параметра: ГДЕ (&Контрагент = НЕОПРЕДЕЛЕНО ИЛИ Контрагент = &Контрагент). Это позволяет использовать один запрос вместо набора ветвлений в коде.

Для отбора по списку значений (несколько складов, несколько видов операций) используйте оператор В (&СписокЗначений), передав параметром массив или список значений. Для отбора по данным табличной части (например, документы, где есть конкретная номенклатура) соединяйтесь с таблицей Документ.Имя.Товары и применяйте РАЗЛИЧНЫЕ, чтобы не задвоить шапки.

Типичные ошибки
01
Отбор без ограничения периода — запрос сканирует всю таблицу и работает медленно на больших базах
02
Сравнение даты без учёта времени: документы за последний день теряются, используйте МЕЖДУ или конец дня
03
Забытое условие Проведен — в отчёт попадают черновики и помеченные на удаление
04
Поиск «Содержит» по всей базе без периода — долгое выполнение и блокировки
05
Соединение с табличной частью без РАЗЛИЧНЫЕ — дубли документов в выборке

Проверка результата выборки

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

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

Контрольные точки

Как проверить результат

Количество строк выборки
Норма

Совпадает с числом документов в журнале с тем же отбором

Тревожный признак

Меньше — проверьте период, Проведен и параметры-ссылки

Документы на границах периода
Норма

Первый и последний день включены полностью

Тревожный признак

Теряются документы последнего дня — неверная граница даты

Наличие дублей
Норма

Каждый документ встречается один раз

Тревожный признак

Дубли — соединение с табличной частью без РАЗЛИЧНЫЕ

Ограничения и безопасная работа

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

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

Итог

Что важно запомнить

Разовый поиск делайте отбором в журнале, обработку и отчёты — запросом с параметрами периода и условием Проведен. Проверяйте результат сверкой с журналом, а любую массовую обработку — только после копии базы.

Частые вопросы

Как выбрать документы только за сегодня?

В журнале установите период «Сегодня» через кнопку выбора периода. В запросе передайте параметры НачалоДня(ТекущаяДата) и КонецДня(ТекущаяДата) — конец дня обязателен, иначе документы с ненулевым временем не попадут в выборку.

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

Чаще всего причины: документ не проведён, а в запросе стоит условие Проведен; дата документа выходит за границы параметров из-за времени; параметр-ссылка (организация, контрагент) не совпадает с реквизитом документа. Снимите условия по одному и найдите то, которое отсекает документ.

Как выбрать документы по нескольким организациям сразу?

Передайте в запрос параметр со списком значений или массивом организаций и используйте условие «Организация В (&СписокОрганизаций)». В журнале в настройке списка выберите вид сравнения «В списке» и отметьте нужные организации.

Можно ли сохранить настроенный отбор, чтобы не задавать его каждый раз?

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

Как выбрать документы, в которых есть конкретный товар?

В пользовательском режиме такой отбор в шапке журнала обычно недоступен — используйте отчёт по продажам или движениям с отбором по номенклатуре. В запросе соедините таблицу документа с его табличной частью Товары по ссылке и добавьте условие на номенклатуру, не забыв РАЗЛИЧНЫЕ по ссылкам документов.

Чем отличается Выбрать() от ВыбратьИерархически() для документов?

Для документов иерархии нет — эти методы отличаются для иерархических справочников. У документов доступен только обычный обход выборки. Если встретили ВыбратьИерархически в коде документов, это ошибка или путаница со справочником.