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