В платформе 1С механизму последовательностей документов отведена ключевая роль: он гарантирует хронологическую правильность проведения документов и корректность расчетов (например, списания себестоимости по FIFO или средней). Однако при подготовке к экзаменам 1С:Специалист или при реальной разработке часто возникает путаница с тем, как именно меняется состав списка последовательности и ее граница при проведении различных документов.
Рассмотрим детально, почему документ, не входящий в состав входящих документов последовательности, может сдвигать ее границу назад, но при этом не меняет её при проведении будущей датой.
Чтобы понять внутреннюю логику платформы, разберем устройство объекта Последовательность. На техническом уровне платформа ведет две самостоятельные таблицы:
ВходящиеДокументы объекта Последовательность. Это те документы, чьи расчетные движения зависят от предшествующих операций (например, расходные накладные, рассчитывающие себестоимость партии при проведении).Кроме этого, у последовательности настраивается свойство Движения, влияющие на последовательность. В нем указываются регистры накопления или сведений, изменения в которых потенциально нарушают расчеты последующих документов.
Проанализируем ситуацию: проводится документ приходной накладной моментом времени, который находится раньше текущей границы последовательности. При этом приходная накладная не указана во входящих документах последовательности, но делает движения по регистру партий, указанному во влияющих движениях.
В этом случае платформа выполнят следующие действия:
Теперь рассмотрим обратную ситуацию: документ приходной накладной проводится моментом времени, который находится позже текущей границы последовательности (когда граница уже была нарушена ранее).
В такой ситуации происходят следующие процессы:
Автоматическое перемещение границы при проведении документов может существенно снижать производительность при высокой интенсивности ввода данных. Если в настройках объекта включено свойство Перемещение границы при проведении в значение Перемещать, то при проведении любого влияющего документа платформа накладывает блокировку СУБД на таблицу границ.
Для предотвращения проблем с производительностью рекомендуются следующие подходы:
Перемещение границы при проведении в значение Не перемещать для оперативного режима проведения.
ГраницаПоследовательности = Последовательности.СебестоимостьПродаж.ПолучитьГраницу();
Последовательности.СебестоимостьПродаж.УстановитьГраницу(МоментВремениДокумента);
Таким образом, проведение документа, влияющего на регистры последовательности, задним числом всегда восстанавливает актуальное состояние границы на момент этого документа, защищая учет от некорректных расчетов.