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