Зачем в документах 1С:Управление торговлей 11 используется табличная часть «Виды запасов» и как работают связанные с ней блокировки?

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

При переходе на архитектуру конфигураций нового поколения (1С:УТ 11, КА 2, 1С:ERP) разработчики часто сталкиваются с появлением вспомогательных табличных частей, таких как ВидыЗапасов в документах реализации и поступления. На первый взгляд может показаться избыточным предварительное заполнение табличной части документом с последующим считыванием данных при проведении в регистры накопления вместо прямого формирования движений единым запросом. Разберем подробно, какие архитектурные и прикладные задачи решает данный механизм.

1. Разделение складского и финансово-юридического контуров

В типовых решениях предыдущих поколений (например, УПП 1.3 или УТ 10.3) в строках документа отгрузки жестко фиксировались складские остатки, партии и конкретные свойства юридического владения товаром. В УТ 11 эти контуры разделены:

  1. Логистический контур (склад): Менеджер или кладовщик работает с основной табличной частью Товары, где указывает номенклатуру, характеристики, серии и физическое количество. Ему не обязательно знать, какой именно организации принадлежит товар на складе или по какому договору он поступил.
  2. Финансовый контур (организации и запасы): Табличная часть ВидыЗапасов формируется алгоритмами распределения и определяет юридическую принадлежность списываемого товара — собственный товар организации, товар комитента, давальческое сырье или товар другой организации холдинга (схема «Интеркампани»).

2. Фиксация номеров ГТД и неизменность печатных форм

Проанализируем ситуацию с продажей импортных товаров. В документах реализации данные о номерах ГТД и странах происхождения привязаны именно к видам запасов. Сохранение этой информации непосредственно в документе решает ключевую задачу:

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

3. Возможность ручной корректировки распределения

Посмотрим на практическое использование документа пользователями и консультантами. В типовом интерфейсе доступна команда:

Еще → Открыть виды запасов

Если автоматический алгоритм подобрал партию или организацию-владельца не так, как требовалось в нестандартной хозяйственной ситуации, пользователь с соответствующими правами может открыть эту табличную часть, снять признак автоматического заполнения и вручную скорректировать распределение по видам запасов, организациям и номерам ГТД. Если бы данные собирались «на лету» исключительно запросом при проведении, возможность штатной ручной правки без изменения исходных реквизитов строк была бы невозможна.

4. Оптимизация производительности и структура регистров

Табличная часть ВидыЗапасов выступает связующим звеном с регистрами накопления ТоварыОрганизаций и СебестоимостьТоваров. Справочник ВидыЗапасов выступает в роли ключа аналитики. Использование ключей учета позволяет:

  1. Существенно уменьшить число измерений в регистрах накопления.
  2. Сократить размер индексов таблиц СУБД.
  3. Ускорить запись наборов записей при параллельной работе пользователей.

5. Особенности наложения управляемых блокировок

При проведении документов и работе с регистрами накопления в конфигурациях на платформе 1С:Предприятие 8.3 важно понимать, как накладываются транзакционные блокировки.

Платформа при вызове метода Записать() у набора записей регистра автоматически накладывает неявную исключительную управляемую блокировку на значения измерений записываемого набора. Однако такой блокировки недостаточно для защиты от чтения некорректных остатков в многопользовательском режиме.

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

Разберем пример правильной программной установки управляемой блокировки в коде проведения:


Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыОрганизаций");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.УстановитьЗначение("Организация", ЭтотОбъект.Организация);
ЭлементБлокировки.ИсточникДанных = ЭтотОбъект.Товары;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
Блокировка.Заблокировать();

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

← На главную