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