Почему Корректировка реализации в 1С:УНФ ставит товар в резерв при отключенной функции резервирования и как это исправить?

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

В конфигурации 1С:Управление нашей фирмой (УНФ), редакции 1.6, пользователи часто сталкиваются с неочевидным поведением системы: при оформлении документа Корректировка реализации на уменьшение количества, товар автоматически попадает в резерв. Это происходит даже в тех случаях, когда функциональная опция Резервирование запасов в настройках программы полностью отключена. Ситуация создает неудобства, так как остатки «зависают» на складе, и их невозможно отгрузить другим клиентам без дополнительных манипуляций.

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

Проанализируем механику работы регистра «Запасы»

Для начала нам необходимо понять, как 1С:УНФ учитывает остатки и резервы. В отличие от многих других конфигураций, здесь нет отдельного регистра накопления для резервирования. Все данные хранятся в едином регистре Запасы. Ключевым моментом является наличие измерения ЗаказПокупателя в этом регистре.

Рассмотрим логику системы подробнее:

  1. Если в регистре Запасы указано количество товара, но измерение Заказ не заполнено — это считается свободным остатком.
  2. Если же в измерении Заказ указана ссылка на конкретный документ (Заказ покупателя), система интерпретирует это количество как резерв под данный заказ.

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

Способ 1: Использование документа «Корректировка запасов»

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

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

  1. Перейдем в меню Сервис и настройки (три полоски в правом верхнем углу) и выберем пункт Функции для технического специалиста (ранее назывался «Все функции»).
  2. В открывшемся списке найдем раздел Документы и выберем Корректировка запасов.
  3. Создадим новый документ с видом операции Резервирование.
  4. В табличной части выберем номенклатуру, которая попала в резерв.
  5. В колонке Заказ покупателя укажем тот самый заказ, к которому привязался товар после корректировки.
  6. В колонке Из запасов (или в поле уменьшения резерва) укажем количество, которое нужно освободить.
  7. Проведем документ. Проанализируем остатки — теперь товар должен числиться как свободный остаток.

Способ 2: Управление статусами и составом Заказа покупателя

Поскольку резерв жестко связан с документом Заказ покупателя, мы можем повлиять на него через изменение состояния заказа. Рассмотрим этот метод как наиболее правильный с точки зрения бизнес-логики программы.

Проанализируем алгоритм действий:

  1. После проведения документа Корректировка реализации откроем исходный Заказ покупателя.
  2. Если мы не планируем догружать клиенту этот товар, нам необходимо либо уменьшить количество в самом заказе до фактически отгруженного (после корректировки), либо полностью закрыть заказ.
  3. Установим заказу статус Завершен. При этом важно убедиться, что в настройках статуса (состояния) заказа стоит признак закрытия потребностей.
  4. В некоторых релизах системы помогает перепроведение заказа после того, как была сделана корректировка реализации. Это инициирует пересчет остатков в разрезе данного заказа.

Способ 3: Очистка ссылки на заказ в самой Корректировке

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

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

Способ 4: Программное решение (для разработчиков)

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

Проанализируем пример логики, которую можно внедрить в процедуру ОбработкаПроведения документа КорректировкаРеализации или в подписку на событие:


// Пример логики для предотвращения записи Заказа в регистр Запасы
// Код размещается в модуле проведения или через расширение
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьРезервированиеЗапасов") Тогда
    Для Каждого Движение Из НаборДвижений.Запасы Цикл
        // Очищаем измерение Заказ, чтобы товар не попадал в резерв
        Если ЗначениеЗаполнено(Движение.Заказ) Тогда
            Движение.Заказ = Документы.ЗаказПокупателя.ПустаяСсылка();
        КонецЕсли;
    КонецЦикла;
КонецЕсли;

При использовании расширения мы можем перехватить движения документа перед записью и принудительно очистить измерение Заказ, если в константах системы резервирование отключено. Это гарантирует, что любой возврат или корректировка будут увеличивать только свободный остаток.

Выясним причину различий в версиях

Важно отметить, что в более свежих релизах 1С:УНФ (начиная с 1.6.20 и выше) разработчики добавили дополнительные проверки. Например, в документе Корректировка реализации появилась команда Изменить резерв — Очистить колонку. Если у вас установлена старая версия (как у автора вопроса 1.6.19), данная кнопка может отсутствовать. В таком случае наиболее стабильным решением будет либо обновление конфигурации до актуального релиза, либо использование расширения для корректировки движений по регистру Запасы.

Резюмируем: появление резерва при отключенной опции — это следствие работы единого регистра Запасы, где любая связь с заказом трактуется как резерв. Чтобы этого избежать, нужно либо разрывать связь с заказом в самом документе корректировки, либо оперативно закрывать заказы покупателей после изменения объема отгрузки.

← На главную