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

Быстрый старт · 11 мин

Как вывести список документов в 1С

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

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

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

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

Как вывести список документов через журнал в режиме «Предприятие»

Самый простой способ увидеть документы — открыть соответствующий журнал. В типовых конфигурациях (Бухгалтерия, Управление торговлей, ERP) журналы сгруппированы по разделам: «Продажи», «Покупки», «Склад», «Кадры». Например, путь к реализациям в 1С:Бухгалтерии: раздел «Продажи» → «Реализация (акты, накладные, УПД)».

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

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

Порядок действий в журнале
  1. 1
    Откройте нужный раздел и журнал документов
  2. 2
    Проверьте и при необходимости расширьте период отображения
  3. 3
    Откройте настройку списка через «Ещё» → «Настроить список»
  4. 4
    Добавьте отборы по организации, контрагенту или другим полям
  5. 5
    Проверьте, что в списке появились ожидаемые документы

Общие журналы и отбор по нескольким видам документов

Когда нужно увидеть документы разных видов в одном списке — например, все поступления и реализации по контрагенту — используются общие журналы. В типовых решениях это, например, «Журнал операций» в Бухгалтерии или общие журналы документов по складу.

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

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

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

Для программного получения списка основной способ — запрос к виртуальной таблице документа. Минимальный пример для реализаций за период:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Реализация.Ссылка КАК Ссылка,

| Реализация.Дата КАК Дата,

| Реализация.Номер КАК Номер,

| Реализация.Контрагент КАК Контрагент,

| Реализация.СуммаДокумента КАК Сумма

|ИЗ

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

|ГДЕ

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

| И Реализация.Проведен

|УПОРЯДОЧИТЬ ПО

| Реализация.Дата";

Запрос.УстановитьПараметр("НачалоПериода", НачалоГода(ТекущаяДатаСеанса()));

Запрос.УстановитьПараметр("КонецПериода", КонецДня(ТекущаяДатаСеанса()));

Результат = Запрос.Выполнить().Выгрузить();

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

Параметры периода всегда передавайте через УстановитьПараметр, а не конкатенацией строки запроса. Это защищает от ошибок формата даты и делает код переносимым. Конец периода задавайте через КонецДня() или функцию запроса КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), иначе документы за последний день, созданные после 00:00, выпадут из выборки.

Динамический список на форме: когда нужен интерактивный список

Если список документов должен отображаться на собственной форме обработки или в отчёте с возможностью отбора и перехода к документу, используйте динамический список. Это реквизит формы с типом «ДинамическийСписок», у которого в свойствах задаётся основная таблица — например, Документ.РеализацияТоваровУслуг.

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

Для программной установки отбора в динамическом списке используется коллекция ЭлементыОтбора. Добавляйте элементы отбора с видом сравнения «Равно» или «БольшеИлиРавно» и проверяйте, что у добавленного элемента установлено Использование = Истина — без этого отбор молча не сработает.

Способы получения списка

Журнал документов

Для пользователя без программирования. Ограничение — только штатные отборы и колонки конфигурации.

Запрос к таблице документа

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

Динамический список на форме

Для интерактивных форм с большим числом записей. Не подходит для пакетной обработки данных.

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

Для последовательного обхода документов в цикле. Медленнее запроса на больших объёмах, удобен для простых обработок.

Обход документов методом Выбрать()

Альтернатива запросу — метод Выбрать() менеджера документов. Он возвращает выборку, которую можно перебрать в цикле и внутри цикла получать объект каждого документа для изменения:

Выборка = Документы.РеализацияТоваровУслуг.Выбрать(НачалоМесяца(ТекущаяДатаСеанса()), КонецМесяца(ТекущаяДатаСеанса()));

Пока Выборка.Следующий() Цикл

Сообщить(Строка(Выборка.Номер) + " от " + Строка(Выборка.Дата));

КонецЦикла;

Выбирайте этот способ, когда внутри цикла нужно не только прочитать, но и изменить документы — например, перепровести их или заполнить реквизит. Для простого вывода списка запрос предпочтительнее: он выполняется одним обращением к базе, тогда как Выбрать() с ПолучитьОбъект() генерирует обращение на каждый документ.

Типичные ошибки
01
Отбор по дате без КонецДня — документы последнего дня периода не попадают в список
02
Отсутствие фильтра Проведен — в списке появляются черновики и помеченные на удаление
03
Получение объекта документа в цикле ради пары полей — в сотни раз медленнее запроса
04
Отбор в динамическом списке без Использование = Истина — условие игнорируется
05
Поиск документов в журнале при слишком узком периоде — документы 'теряются' только из-за фильтра дат

Вывод списка в табличный документ и Excel

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

Для быстрого результата без макета подойдёт сохранение таблицы значений: выгрузите результат запроса, выведите его в табличное поле на форме обработки и сохраните через «Файл → Сохранить» в формате Excel. В типовых отчётах кнопка сохранения доступна сразу после формирования.

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

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

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

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

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

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

Строк меньше — проверьте период и фильтр Проведен

Последний день периода
Норма

Документы за конечную дату присутствуют

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

Документы последнего дня отсутствуют — дата задана без КонецДня

Помеченные на удаление
Норма

В списке только актуальные документы

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

Видны документы с пометкой удаления, которых не должно быть

Ограничения и частые проблемы

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

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

Различие номеров. Номер документа в запросе хранится как строка с лидирующими нулями, поэтому сортировка по номеру идёт лексикографически, а сравнение «Номер = 15» без дополнительных нулей не сработает. Для поиска по номеру используйте точное строковое значение в формате базы.

FAQ

Как вывести список документов всех видов за период одним запросом?

Одним запросом к разным таблицам — через ОБЪЕДИНИТЬ ВСЕ: выберите ссылку, дату и номер из каждой нужной таблицы документов и объедините результаты. Приведите поля к одинаковым типам, иначе запрос вернёт ошибку несовместимости. Для пользовательской задачи проще воспользоваться общим журналом или универсальным отчётом.

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

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

Как вывести список только непроведённых документов?

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

Что быстрее для большого объёма: запрос или Выбрать()?

Запрос. Он выполняется на сервере СУБД одним обращением и возвращает только нужные поля. Выборка через Выбрать() при чтении реквизитов каждого документа порождает отдельные обращения к базе, и на десятках тысяч записей разница достигает десятков раз.

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

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

Как сохранить список документов из журнала в Excel?

В большинстве типовых конфигураций: выделите строки списка (Ctrl+A для всех видимых), затем «Ещё» → «Вывести список» — откроется табличный документ, который сохраняется в Excel через «Файл → Сохранить как». Альтернатива — сформировать отчёт по документам и сохранить его результат.

Итог

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

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