Проблема отрицательных остатков в розничной торговле — это классический «гордиев узел» автоматизации. С одной стороны, финансовый директор и главный бухгалтер требуют идеального учета, корректной себестоимости и отсутствия «красноты» в отчетах. С другой стороны, розничный магазин не может остановить продажи из-за того, что в программе «не бьется» пачка сока или пакет молока. Попытка жестко запретить продажи в минус часто приводит к коллапсу на кассах и потере клиентов, а полное отключение контроля превращает базу данных в хаос, ломая партионный учет и расчет себестоимости при закрытии месяца.
В этой статье мы подробно разберем, как найти баланс между бесперебойными продажами на кассах и жестким учетом в центральном офисе. Мы проанализируем причины возникновения отрицательных остатков, рассмотрим технические и организационные методы борьбы с ними, а также настроим правильное взаимодействие между фронт-офисом (кассовой программой) и бэк-офисом (управленческой системой).
Прежде чем приступать к лечению болезни, выясним ее причины. В продуктовой и непродуктовой рознице отрицательные остатки в 1С:Розница или других кассовых программах возникают по нескольким стандартным сценариям:
Кажется, что самый простой способ решить проблему — поставить галочку «Запретить продажи при отсутствии остатков» на кассовых узлах. Проанализируем последствия такого решения:
В аптечном бизнесе или торговле дорогой электроникой этот метод работает отлично. Там порядок учета жестко регламентирован законодательством (маркировка, предметно-количественный учет). Но в продуктовом супермаркете с большим трафиком жесткий запрет приводит к катастрофе. Представим ситуацию: вечерняя очередь, у покупателя на ленте 20 товаров, и один из них не проводится из-за отсутствия остатка в системе. Касса блокируется. Кассир пытается аннулировать позицию, покупатель нервничает, очередь растет, лояльность падает. Клиент может просто оставить всю корзину и уйти. Бизнес не должен страдать от проблем внутреннего учета. Продажи должны идти в любом случае.
Разберем наиболее жизнеспособную схему, которую используют крупные розничные сети. Суть схемы заключается в разделении зон ответственности между кассовым ПО (фронт-офисом) и центральной базой (бэк-офисом, например, 1С:Управление торговлей или 1С:УПП / 1С:ERP).
Рассмотрим этот бизнес-процесс по шагам:
1С:Розница) временно возникают отрицательные остатки.ОтчетОРозничныхПродажах (ОРП) и выгружается в центральную базу.Чтобы облегчить жизнь товароведу и не заставлять его вручную сопоставлять сотни позиций, мы можем автоматизировать этот процесс. Разработаем концепт алгоритма, который будет анализировать документ ОтчетОРозничныхПродажах, находить отрицательные остатки и автоматически подбирать для них «кандидатов» на пересортицу из числа излишков аналогичных товаров на том же складе.
Рассмотрим пример кода на языке 1С, который выполняет такой анализ:
Процедура АнализМинусовИПоискПересорта(ДокументОРП) Экспорт
// Получаем таблицу товаров из проведенного или записываемого ОРП
ТаблицаТоваров = ДокументОРП.Товары.Выгрузить();
СкладМагазина = ДокументОРП.Склад;
МоментКонтроля = ДокументОРП.Дата;
// Создаем таблицу для фиксации выявленных минусов
ТаблицаМинусов = Новый ТаблицаЗначений;
ТаблицаМинусов.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТаблицаМинусов.Колонки.Добавить("Нехватка", Новый ОписаниеТипов("Число"));
// 1. Проверяем остатки по каждой позиции документа
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
ОстатокНаСкладе = ПолучитьОстатокТовара(СтрокаТовара.Номенклатура, СкладМагазина, МоментКонтроля);
Если ОстатокНаСкладе < 0 Тогда
НоваяСтрока = ТаблицаМинусов.Добавить();
НоваяСтрока.Номенклатура = СтрокаТовара.Номенклатура;
НоваяСтрока.Нехватка = Abs(ОстатокНаСкладе);
КонецЕсли;
КонецЦикла;
// 2. Если минусы найдены, ищем потенциальный пересорт (излишки в той же ценовой группе)
Если ТаблицаМинусов.Количество() > 0 Тогда
Для Каждого СтрокаМинуса Из ТаблицаМинусов Цикл
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Момент, Склад = &Склад) КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.ВНаличииОстаток > 0
| И ТоварыНаСкладахОстатки.Номенклатура.Родитель = &РодительНоменклатуры";
Запрос.УстановитьПараметр("Момент", МоментКонтроля);
Запрос.УстановитьПараметр("Склад", СкладМагазина);
Запрос.УстановитьПараметр("РодительНоменклатуры", СтрокаМинуса.Номенклатура.Родитель);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Записываем лог или автоматически предлагаем создать документ "Пересортица товаров"
ЗаписьЖурналаРегистрации("УчетОстатков", УровеньЖурналаРегистрации.Предупреждение, , ,
"Возможный пересорт: нехватка товара '" + СтрокаМинуса.Номенклатура +
"' может быть закрыта излишком товара '" + Выборка.Номенклатура + "' в количестве " + Выборка.Остаток);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Использование подобных автоматизированных рабочих мест (АРМ) позволяет товароведу за пару кликов сформировать документы ПересортицаТоваров или ОприходованиеТоваров на основе реального анализа продаж, сводя рутинную работу к минимуму.
Если мы разрешаем проведение документов в минус в управленческой базе (даже временно), мы сталкиваемся с технической проблемой расчета себестоимости. При партионном учете списание товара, которого нет на остатке, приводит к тому, что система не может определить партию списания. В результате себестоимость списываемой позиции становится равной нулю, что искажает валовую прибыль. При использовании режима РАУЗ (Режим аналитического учета затрат) в 1С:УПП или 1С:КА отрицательные остатки на конец месяца не позволят системе успешно выполнить документ РасчетСебестоимостиВыпуска, программа выдаст ошибки распределения затрат.
Чтобы избежать коллапса при закрытии месяца, применим следующие правила:
ОприходованиеТоваров, оценивая их по последней закупочной цене или по типу цен номенклатуры. Это позволяет программе рассчитать себестоимость без зависания партионного движка.Ни одна, даже самая совершенная программа, не решит проблему отрицательных остатков, если в магазине царит хаос. Проанализируем организационные шаги, которые необходимо предпринять руководству торговой сети:
1. Внедрение скользящих (циклических) инвентаризаций. Не нужно закрывать магазин раз в месяц на глобальную ревизию. Внедрите практику ежедневных микро-пересчетов. Каждое утро система должна автоматически выдавать товароведу список из 10–15 позиций, по которым вчера были зафиксированы минусы или подозрительные продажи. Пересчет такого количества позиций с помощью ТСД (терминала сбора данных) занимает не более 10 минут, но позволяет держать базу в актуальном состоянии.
2. Запрет ручного ввода количества на кассе для штучного товара. Распространенная ошибка — когда кассир ленится сканировать каждую бутылку газировки разного вкуса и вводит количество вручную на одну позицию. В настройках прав кассира в 1С:Розница необходимо отключить возможность ручного редактирования количества для определенных товарных групп. Кассир должен отсканировать каждую физическую единицу товара отдельно.
3. Персональная материальная ответственность. Результаты инвентаризации должны напрямую влиять на материальное вознаграждение сотрудников магазина (как продавцов, так и товароведов). Если персонал знает, что за халатность при приемке или за пересорт придется платить из собственного кармана, мотивация следить за корректностью учета возрастает многократно.
Борьба с отрицательными остатками в 1С — это не поиск «волшебной настройки» в программе, а выстраивание комплексного бизнес-процесса. Оптимальный путь выглядит следующим образом: мы отключаем контроль остатков на кассовых аппаратах, чтобы обеспечить максимальную скорость обслуживания покупателей, но при этом вводим жесткий регламент ежедневного разбора минусов товароведами в центральной базе. Автоматизация поиска пересортицы и скользящие инвентаризации позволяют свести ручной труд к минимуму и гарантируют, что закрытие месяца в 1С пройдет без ошибок, а отчеты по валовой прибыли покажут реальную картину состояния бизнеса.