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

Разработка и Конфигурация · 9 мин

Как добавить движения в документ 1С

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

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

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

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

Проверьте, подключён ли регистр к документу

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

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

Добавьте движения в модуле проведения

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

Пример движения по регистру накопления «ТоварыНаСкладах»:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

Движения.ТоварыНаСкладах.Записывать = Истина;

Для Каждого СтрокаТовары Из Товары Цикл

Движение = Движения.ТоварыНаСкладах.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = Дата;

Движение.Номенклатура = СтрокаТовары.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = СтрокаТовары.Количество;

КонецЦикла;

КонецПроцедуры

Строка Движения.ТоварыНаСкладах.Записывать = Истина обязательна, если записи формируются не автоматически: без неё платформа не запишет набор при завершении проведения. Вид движения (Приход или Расход) указывается только для регистров остатков; для регистров оборотов это поле отсутствует.

bsl
Движение = Движения.Взаиморасчеты.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.Сумма = СуммаДокумента;

Используйте конструктор движений

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

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

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

Как добавить движения программно из внешнего кода

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

Ключевой момент: набор записей регистра всегда привязан к регистратору. Через ДокументОбъект.Движения.ИмяРегистра вы получаете набор, который запишется вместе с документом. Альтернатива — создать независимый набор через РегистрыНакопления.ИмяРегистра.СоздатьНаборЗаписей(), установить отбор по регистратору и записать его с параметром Замещение = Истина. Второй способ опаснее: он полностью перезаписывает движения документа по этому регистру, минуя логику проведения.

Ручная корректировка движений без доработки

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

Более безопасный инструмент — документ «Корректировка регистров» (в разных конфигурациях может называться «Операция», «Корректировка записей регистров»). Он создаёт собственные движения по выбранным регистрам, не трогая чужие документы. Это стандартный способ внести начальные остатки или исправить ошибку учёта с документальным основанием.

Сравнение вариантов

Доработка ОбработкаПроведения

Правильный путь для постоянной логики. Требует конфигуратора и снятия с поддержки в типовых решениях

Ручная корректировка движений

Подходит для разового исправления. Правки теряются при перепроведении документа

Документ «Корректировка регистров»

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

Проверка результата и типичные ошибки

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

Если записей нет, проверьте три вещи: отмечен ли регистр в свойствах документа, установлено ли Записывать = Истина у набора, не срабатывает ли Отказ = Истина где-то в процедуре проведения. Частая причина «пустых» движений — исключение в коде до строки добавления записей: смотрите журнал регистрации и сообщения об ошибках.

Типичные ошибки
01
Регистр не отмечен в свойствах документа — код выполняется, но записей нет
02
Пропущена строка Движения.Регистр.Записывать = Истина — набор не сохраняется
03
Перепутан вид движения Приход/Расход — остатки уходят в минус или завышаются
04
Период движения не заполнен — запись попадает не в ту дату и ломает отчёты
05
Запись набора напрямую с замещением затирает штатные движения документа
Контрольные точки

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

Записи в регистре после проведения
Норма

Строки с верным периодом, видом движения и суммами

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

Регистр пуст или записи с нулевыми ресурсами

Отчёт по регистру
Норма

Документ влияет на остатки и обороты

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

Отчёт не меняется после проведения

Перепроведение документа
Норма

Движения пересоздаются без ошибок

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

Ошибки контроля остатков или дубли записей

Ответы на частые вопросы

Можно ли добавить движения существующему проведённому документу без перепроведения?

Да, если записать набор записей регистра с отбором по этому регистратору. Но при следующем перепроведении документа платформа перезапишет движения по логике ОбработкаПроведения, и ручные добавления исчезнут. Для постоянного результата логику нужно вносить в модуль проведения.

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

Чаще всего регистр не отмечен в свойствах документа на закладке «Движения» либо в коде не установлено свойство Записывать у набора записей. Также проверьте, не устанавливается ли Отказ = Истина до момента добавления записей — тогда транзакция проведения откатывается.

Как удалить движения документа?

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

Чем отличается регистр накопления от регистра сведений при добавлении движений?

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

Нужно ли снимать конфигурацию с поддержки для добавления движений?

Для изменения состава движений или кода проведения типового документа — да, объект придётся снять с полной поддержки или перевести в режим «с сохранением поддержки». Альтернатива без снятия — подписки на события проведения в расширении конфигурации, если функциональность расширений доступна в вашей версии платформы.

Итог

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

Движения добавляются в два этапа: регистр отмечается в свойствах документа, а записи формируются в ОбработкаПроведения через Движения.ИмяРегистра с обязательным Записывать = Истина. Для разовых исправлений без доработки используйте «Корректировку регистров», а прямую запись наборов с замещением применяйте только в сервисных обработках после резервного копирования.