В практической деятельности розничных магазинов часто возникает дилемма при настройке контроля остатков. С одной стороны, жесткий контроль необходим для подакцизных товаров (поможет автоматизированный контроль алкоголя в РМК 1С:Розница), маркированной продукции и дорогостоящего штучного ассортимента. Продажа таких позиций «в минус» гарантированно приводит к расхождениям в государственных информационных системах (ЕГАИС, «Честный Знак»), хаосу в учете и внушительным штрафам от контролирующих органов.
С другой стороны, существует категория товаров (например, свежая выпечка, хлеб, весовые овощи и фрукты), жесткий контроль остатков по которым может парализовать работу кассы. Если горячий хлеб привезли в 8:30 утра, а товаровед приступает к работе и заносит накладные в базу только в 10:00, кассир физически не сможет продать товар покупателям при включенном контроле остатков. Покупатели уйдут к конкурентам, а магазин понесет прямые убытки.
В этой статье мы подробно разберем, как устроен контроль остатков в типовой конфигурации 1С:Розница, почему стандартные механизмы не позволяют решить задачу выборочного контроля и как реализовать этот функционал технически с помощью расширения конфигурации — для этого подойдёт конструктор условий контроля проведения документов без программирования.
Проанализируем стандартные возможности конфигурации. В коробочной версии программы «1С:Розница» разработчиками предусмотрен только глобальный контроль остатков. Настроить его попозиционно (для конкретных папок номенклатуры или отдельных карточек товаров) в режиме пользователя невозможно. Система предлагает только два варианта работы:
Администрирование -> Настройки пользователей и прав -> Персональные настройки -> Дополнительные права пользователей. За это отвечает флаг Контролировать остатки и резерв товаров.Контролировать остатки товаров при закрытии чека.Если эти опции включены, система будет жестко блокировать проведение чеков при нехватке хотя бы одной единицы любого товара. Если их отключить — программа разрешит продавать в минус абсолютно всё, что неминуемо приведет к пересортице и ошибкам учета — решить проблему поможет обработка поиска и анализа причин отрицательных остатков.
Рассмотрим подробнее экономические и юридические причины, требующие выборочного подхода к контролю остатков:
EAN-13, но в системе ЕГАИС они числятся под разными кодами алкогольной продукции (алкокодами) из-за разных КПП заводов-изготовителей. При сканировании штрихкода кассиру выводится окно выбора конкретной позиции. Если разрешить продажу в минус, кассир в спешке выберет не ту позицию. В результате по одному алкокоду образуется глубокий минус, а по другому — виртуальный плюс. Акт списания в ЕГАИС будет отклонен сервером из-за нехватки остатков на балансе, что является прямым нарушением методологии учета ФСРАР и грозит штрафом для юридических лиц от 150 000 до 200 000 рублей по статье 14.19 КоАП РФ — для этой задачи есть сверка и корректировка остатков ЕГАИС и 1С.Выясним, как обойти ограничение платформы без снятия конфигурации с поддержки. Наиболее изящным и безопасным способом является создание расширения конфигурации (.cfe). Мы кастомизируем логику проверки остатков, не изменяя основную базу, что позволит без проблем обновлять «1С:Розницу» в будущем.
Разберем по шагам алгоритм создания и внедрения такого решения:
Для того чтобы программа знала, по каким позициям разрешен минус, нам нужно добавить соответствующий признак в карточку номенклатуры. Мы можем сделать это через типовой механизм дополнительных реквизитов и сведений (без программирования):
Администрирование -> Общие настройки -> Дополнительные реквизиты и сведения.Номенклатура добавим новый реквизит с наименованием Разрешить продажу в минус (тип значения: Булево).Да (Истина) (поможет массовое изменение свойств и реквизитов номенклатуры). Для пива, сигарет и крепкого алкоголя оставим значение Нет (Ложь).Теперь нам необходимо написать программный код в расширении, который будет анализировать данный реквизит перед пробитием чека. Нам нужно перехватить процедуру, отвечающую за проверку остатков при проведении чека ККМ.
Обычно проверка остатков в «1С:Розница» вызывается при проведении документа ЧекККМ или при закрытии чека в РМК. Мы можем перехватить процедуру проверки в общем модуле, который занимается контролем остатков (например, в модуле ПроведениеСервер или специализированном модуле контроля остатков).
Рассмотрим пример кода расширения, который модифицирует таблицу проверяемых товаров непосредственно перед осуществлением контроля остатков в БД. Мы применим аннотацию &Вместо или &Перед для перехвата процедуры:
&Вместо("ПроверитьОстаткиТоваров")
Процедура Расш_ПроверитьОстаткиТоваров(ТаблицаТоваров, ПараметрыПроверки, Отказ)
// Создаем массив строк, которые необходимо исключить из проверки остатков
СтрокиДляУдаления = Новый Массив;
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
// Получаем значение нашего дополнительного реквизита
РазрешитьМинус = Ложь;
РеквизитРазрешитьМинус = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Разрешить продажу в минус");
Если ЗначениеЗаполнено(РеквизитРазрешитьМинус) Тогда
// Ищем значение свойства в табличной части дополнительных реквизитов номенклатуры
НайденнаяСтрока = СтрокаТовара.Номенклатура.ДополнительныеРеквизиты.Найти(РеквизитРазрешитьМинус, "Свойство");
Если НайденнаяСтрока <> Неопределено Тогда
РазрешитьМинус = НайденнаяСтрока.Значение;
КонецЕсли;
КонецЕсли;
// Если для товара разрешена продажа в минус, помечаем строку на удаление из таблицы проверки
Если РазрешитьМинус Тогда
СтрокиДляУдаления.Добавить(СтрокаТовара);
КонецЕсли;
КонецЦикла;
// Удаляем помеченные строки из таблицы, которая отправляется на стандартную проверку остатков
Для Каждого СтрокаИзчезновения Из СтрокиДляУдаления Цикл
ТаблицаТоваров.Удалить(СтрокаИзчезновения);
КонецЦикла;
// Вызываем оригинальный алгоритм проверки остатков 1С для оставшихся позиций (где минус запрещен)
ПродолжитьВызов(ТаблицаТоваров, ПараметрыПроверки, Отказ);
КонецПроцедуры
Проанализируем, как работает написанный алгоритм совместными усилиями расширения и платформы:
ТаблицаТоваров, в которую попадают все позиции из корзины покупателя для контроля наличия на складе.ТоварыНаСкладах.Разрешить продажу в минус = Истина, данная строка полностью удаляется из проверочной таблицы.Ложь. Если пива нет на складе, сработает стандартное системное исключение, касса заблокирует продажу и выдаст предупреждение кассиру. Если же на складе нет хлеба, система просто проигнорирует этот факт и успешно пробьет чек ККМ, списав товар в минус.Мы выяснили, что попозиционный контроль остатков — крайне востребованная функция для автоматизации розницы, помогающая соблюдать баланс между требованиями законодательства и непрерывностью бизнес-процессов продаж. Хотя «из коробки» в «1С:Розница 2.3» реализовать выборочную проверку нельзя, проблема легко и быстро решается созданием небольшого расширения, которое сохраняет базу полностью обновляемой и типовой.