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