При ежедневной работе с базой 1С разработчики и опытные пользователи часто сталкиваются с вопросом: есть ли реальная разница между обычным нажатием кнопки Провести для уже проведенного документа и сценарием, когда документ сначала снимается с проведения (Отменить проведение), а затем проводится заново? На первый взгляд кажется, что конечный результат должен быть идентичен: документ получает статус проведенного, а в регистрах формируются соответствующие записи. Однако с точки зрения платформы 1С:Предприятие и логики типовых прикладных решений эти операции протекают совершенно по-разному. Разберем детально, как ведут себя движения регистров, транзакции и служебные механизмы системы в обоих случаях.
Рассмотрим ключевое архитектурное различие — поведение транзакций базы данных:
Проанализируем поведение документов, в которых включен признак ручной корректировки движений (реквизит РучнаяКорректировка). В типовой конфигурации 1С:Бухгалтерия предприятия бухгалтер может скорректировать проводки вручную, установив соответствующий флажок на форме движений документа.
Если выполнить простое нажатие кнопки Провести, система сохраняет флаг ручной корректировки и оставляет введенные пользователем проводки без перезаписи типовым алгоритмом. Однако если выполнить операцию Отменить проведение, типовой механизм очищает все наборы записей по регистрам и безвозвратно сбрасывает флаг ручной правки. При последующем проведении алгоритм сформирует типовые движения с нуля, а все пользовательские корректировки будут потеряны.
Посмотрим на поведение свойств метаданных самого документа. В ветке конфигуратора у каждого документа предусмотрено свойство УдалениеДвижений, которое может принимать значения:
Записывать наборов записей). Если разработчик допустил ошибку и не очистил движения удаленных строк табличной части, при обычном перепроведении старые записи могут «зависнуть» в регистре. В то же время явная отмена проведения принудительно очистит регистры.При отмене проведения платформа гарантированно удаляет наборы записей по всем движениям, где данный документ выступает регистратором. При обычном перепроведении типовые конфигурации стараются не выполнять лишних операций с базой данных: если новый набор записей полностью идентичен старому, физической перезаписи таблиц СУБД (запросов DELETE и INSERT) не происходит, что экономит ресурсы сервера.
Выясним причину, почему после отмены проведения документов часто нарушаются регламентные расчеты. В современных конфигурациях (1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей) активно применяются отложенные механизмы закрытия месяца (партионный учет, распределение дополнительных расходов, расчет себестоимости):
В конфигурациях 1С:ERP Управление предприятием, 1С:КА и 1С:УТ 11 распределение запасов (собственный товар, комиссионный, давальческий) хранится в служебной табличной части или регистре сведений ВидыЗапасов. При стандартном перепроведении документа эта таблица не перезаполняется, если не изменились реквизиты строк, влияющие на подбор (управляется дополнительным свойством объекта ПерезаполнитьВидыЗапасов):
// В типовых решениях признак перезаполнения может передаваться через ДополнительныеСвойства:
ДокументОбъект.ДополнительныеСвойства.Вставить("ПерезаполнитьВидыЗапасов", Истина);
Если же документ сначала отменяется, а затем проводится, таблица видов запасов заполняется заново по текущим правилам и остаткам, что может изменить структуру партий документа, если ранее они были подобраны по другой схеме.
Разберем дополнительные системные факторы, возникающие при разрыве операции на два этапа:
DELETE), а затем повторную вставку (INSERT). Простое перепроведение с оптимизацией записи перезаписывает только измененные строки, существенно снижая фрагментацию индексов и размер журналов транзакций СУБД.Подведем итог: простое перепроведение документа и отмена проведения с повторным проведением — это не эквивалентные операции. Разница проявляется на уровне блокировок транзакций, сброса ручных корректировок, очистки служебных очередей расчета себестоимости и актуализации видов запасов. Рекомендуется использовать отмену проведения только тогда, когда документ действительно требуется временно исключить из цепочки учета или полностью пересчитать зависимые служебные таблицы.