Как устранить и предотвратить отрицательные остатки в ячейках при ордерной схеме в УТ 11

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

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

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

Причины возникновения отрицательных остатков в адресном хранении

Проанализируем ключевые факторы, из-за которых в ячейках появляются отрицательные показатели:

  1. Изменение документов задним числом: Если менеджеры или операторы отменяют проведение документов Расходный ордер на товары или Отбор (размещение) товаров после того, как по ячейке уже зафиксированы последующие перемещения или списания, баланс регистра становится отрицательным.
  2. Неоперативное проведение в автоматических цепочках: Типовой контроль остатков в ячейках полноценно функционирует при оперативном проведении. При программном создании цепочки документов через фоновые задания проверка может проводиться на момент времени документа, не учитывая будущие движения, либо вовсе обходиться при программной записи наборов записей.
  3. Конкуренция транзакций без явных блокировок: При одновременной обработке заказов несколькими потоками система может прочитать одинаковый положительный остаток в ячейке для двух параллельных заданий на отбор. Без применения объекта БлокировкаДанных оба документа успешно запишутся, уведя итоговый остаток в минус.
  4. Самовольные действия линейного персонала: Сборщик видит нехватку товара в целевой ячейке, берет недостающее количество из соседней ячейки по своему усмотрению, а оператор проводит исходное задание без корректировки топологии.

Шаг 1. Выравнивание остатков с помощью пересчета товаров

Для исправления накопленных ошибок необходимо привести учетные данные к фактическому состоянию. В типовом функционале адресного склада инвентаризация выполняется через специализированный механизм пересчета.

Разберем процедуру выравнивания по шагам:

  1. Перейдем в раздел складских документов и создадим документ Пересчет товаров с указанием конкретного склада, помещения и проблемных ячеек (или секций склада).
  2. Переведем документ в статус Внесение результатов. На этой стадии система фиксирует учетные остатки регистра Товары в ячейках.
  3. Заполним колонку с фактическим количеством номенклатуры. Если в ячейке числится отрицательное значение, а по факту товар отсутствует, проставляем ноль. Система автоматически рассчитает отклонение.
  4. Переведем Пересчет товаров в статус Выполнен.
  5. На основании пересчета сформируем складские ордера для закрытия расхождений: Ордер на отражение недостач товаров (при нехватке) или Ордер на отражение излишков товаров (при выявлении неучтенного товара).

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

Шаг 2. Корректный регламент фиксации расхождений при отборе

Рассмотрим, как должен строиться процесс, если сборщик физически не обнаружил заявленное количество товара в ячейке:

  1. Сборщик фиксирует фактический отбор (например, в задании значится 10 штук, а в ячейке найдено только 8). Категорически запрещается добирать недостающие 2 штуки из соседних ячеек без отражения в системе.
  2. Документ Отбор (размещение) товаров переводится оператором в статус Выполнен с ошибками.
  3. В табличной части документа указывается реальное количество (8 штук). Программа спишет из ячейки только отобранный объем, а оставшиеся 2 штуки останутся в распоряжении на отгрузку, но освободятся от привязки к пустой ячейке.
  4. На ячейку, где обнаружена нехватка, немедленно блокируются операции и назначается локальный пересчет для списания недостачи складским ордером.
  5. Для недополученных 2 штук система формирует новое задание на отбор из альтернативной ячейки, где данный товар имеется в наличии.

Шаг 3. Техническая защита от повторного появления минусов

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

Во-первых, закроем редактирование документов складского контура задним числом. Для документов со статусами Отгружен (в расходных ордерах) и Выполнен без ошибок (в отборах) необходимо программно блокировать интерактивную отмену проведения и перезапись.

Во-вторых, при программном создании документов цепочки из EDI внедряем управляемые транзакционные блокировки. Посмотрим на пример установки блокировки перед распределением ячеек:


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

НачатьТранзакцию();
Попытка
    Блокировка.Заблокировать();
    
    // Проверка свободного остатка с учетом резервов
    // Формирование и проведение документа "Отбор (размещение) товаров"
    
    ЗафиксироватьТранзакцию();
Исключение
    ОтменитьТранзакцию();
    ВызватьИсключение;
КонецПопытки;

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


Процедура ЗафиксироватьИзменениеСкладскогоДокумента(Источник, Отказ) Экспорт
    Если Источник.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    ЗаписьЖурнала = РегистрыСведений.АудитСкладскихОпераций.СоздатьМенеджерЗаписи();
    ЗаписьЖурнала.Период = ТекущаяДатаСеанса();
    ЗаписьЖурнала.Документ = Источник.Ссылка;
    ЗаписьЖурнала.Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
    ЗаписьЖурнала.Событие = ?(Источник.Проведен, "Проведение/Перепроведение", "Отмена проведения");
    ЗаписьЖурнала.Записать();
КонецПроцедуры

Комбинация организационных правил (запрет самоуправства сборщиков, использование статуса «Выполнен с ошибками»), регулярных точечных пересчетов ячеек и блокировки изменения документов закрытых периодов позволяет полностью ликвидировать отрицательные остатки в ячейках и обеспечить стабильную работу адресного склада.

← На главную