Почему документ сдвигает границу последовательности в 1С при проведении задним числом

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

В платформе 1С механизму последовательностей документов отведена ключевая роль: он гарантирует хронологическую правильность проведения документов и корректность расчетов (например, списания себестоимости по FIFO или средней). Однако при подготовке к экзаменам 1С:Специалист или при реальной разработке часто возникает путаница с тем, как именно меняется состав списка последовательности и ее граница при проведении различных документов.

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

Структура объекта Последовательность в платформе 1С

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

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

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

Принятие решений при проведении документа задним числом

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

В этом случае платформа выполнят следующие действия:

  1. Проверка состава списка: так как документ типа Приходная накладная не входит в состав входящих документов последовательности, он не регистрируется в таблице регистрации. Состав списка документов последовательности остается без изменений.
  2. Анализ влияющих движений: документ формирует движения по регистру, связанному с последовательностью. Новые приходные записи задним числом изменяют остатки и себестоимость партий на тот момент времени.
  3. Смещение границы назад: так как проведенный документ оказался по времени раньше текущей границы последовательности, ранее рассчитанные итоги для всех последующих расходных документов становятся неактуальными. Платформа автоматически сдвигает границу последовательности назад на момент времени проводимого документа.

Поведение границы при проведении документа позже текущей границы

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

В такой ситуации происходят следующие процессы:

  1. Состав списка: документ снова не добавляется в таблицу регистрации, так как не входит в состав входящих документов.
  2. Влияние на границу: поскольку граница уже нарушена где-то в прошлом, проведение нового документа в будущем не исправляет старую ошибку учета. В то же время, не являясь входящим документом последовательности, приходная накладная не может двигать границу вперед (двигать границу вперед способны только входящие документы при их последовательном проведении).
  3. Итог: ни состав списка последовательности, ни текущее значение границы не изменяются.

Оптимизация работы с границей последовательности и блокировки СУБД

Автоматическое перемещение границы при проведении документов может существенно снижать производительность при высокой интенсивности ввода данных. Если в настройках объекта включено свойство Перемещение границы при проведении в значение Перемещать, то при проведении любого влияющего документа платформа накладывает блокировку СУБД на таблицу границ.

Для предотвращения проблем с производительностью рекомендуются следующие подходы:

  1. Устанавливать свойство Перемещение границы при проведении в значение Не перемещать для оперативного режима проведения.
  2. Выносить пересчет себестоимости и списание партий в регламентные фоновые задания или процедуры закрытия месяца.
  3. Программно управлять границей последовательности с помощью менеджера последовательности после выполнения закрытия периода:

ГраницаПоследовательности = Последовательности.СебестоимостьПродаж.ПолучитьГраницу();
Последовательности.СебестоимостьПродаж.УстановитьГраницу(МоментВремениДокумента);

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

← На главную