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