Как правильно закрыть и отменить заказ покупателя с резервом после возврата товара в 1С:УНФ

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

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

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

Почему возникает ошибка: анализируем движения по регистрам

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

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

С точки зрения строгой методологии учета, заказ, по которому уже произошла отгрузка и последующий возврат, не может быть просто аннулирован статусом «Отменен». Тем не менее, оставлять его в статусе «В работе» или «Недогружен» нельзя, так как это искажает управленческую отчетность. Рассмотрим, как решить эту задачу правильно.

Способ 1. Штатное решение через отмену неотгруженных строк (для всех версий 1С:УНФ)

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

Выполним следующие шаги вместе:

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

Почему это работает? С точки зрения системы, заказ был выполнен успешно, но итоговый объем отгрузки по нему скорректирован до фактически оставшихся у клиента позиций (в нашем случае — до 0 шт.). Программа зафиксирует закрытие потребности без попытки аннулировать исторический резерв, и документ проведется без ошибок.

Способ 2. Использование инструмента «Закрытие заказов» в 1С:УНФ 3.0

Если вы работаете в современной редакции системы (1С:УНФ 3.0 и выше), разработчики добавили более гибкий инструмент для решения подобных коллизий.

Проанализируем работу с этим инструментом:

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

Способ 3. Использование документа «Корректировка регистров» (для закрытых периодов)

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

В этом случае мы можем скорректировать регистры вручную, выполнив следующие действия:

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

Техническое решение: Автоматизация через расширение (для программистов)

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

Рассмотрим пример программного кода, который можно использовать в расширении для автоматического заполнения признака отмены строк в заказе покупателя при наличии возврата:


&НаСервере
Процедура АвтоматическаяОтменаСтрокЗаказа(ДокументСсылка) Экспорт
    
    ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
    ТаблицаТоваров = ДокументОбъект.Товары.Выгрузить();
    
    Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
        // Проверяем, если по строке количество заказано больше, чем осталось в окончательной реализации
        Если СтрокаТовара.Количество > 0 Тогда
            СтрокаТовара.Отменено = Истина;
            СтрокаТовара.ПричинаОтмены = Справочники.ПричиныОтменыЗаказов.НайтиПоНаименованию("Возврат/Отказ");
        КонецЕсли;
    КонецЦикла;
    
    ДокументОбъект.Товары.Загрузить(ТаблицаТоваров);
    
    Попытка
        ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
        ВызватьИсключение "Не удалось автоматически скорректировать заказ: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
    КонецПопытки;
    
КонецПроцедуры

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

Резюме

Мы выяснили, что появление ошибки резервов при отмене заказа после возврата — это не сбой программы, а следствие строгой бизнес-логики 1С:УНФ. Для успешного решения проблемы используйте наиболее подходящий вам метод:

← На главную