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