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