В практике работы с современными конфигурациями на платформе «1С:Предприятие 8.3», такими как «Управление торговлей 11», «Комплексная автоматизация» или «ERP», пользователи часто сталкиваются с ситуацией, когда система позволяет зарезервировать товар в заказе клиента, даже если фактически у выбранной организации этого товара нет (но он есть у другой организации на том же складе). Это вызывает недоумение у менеджеров и бухгалтеров, так как на этапе отгрузки система внезапно выдает ошибку о нехватке остатков. Разберем подробно, почему так происходит, как устроена архитектура системы и какие существуют пути решения данной задачи.
Для начала проанализируем, как 1С:УТ 11 обрабатывает информацию о товарах. В системе реализовано четкое разделение между физическим наличием товара на складе и его финансовой принадлежностью конкретному юридическому лицу (организации). Рассмотрим два ключевых регистра накопления, которые участвуют в этом процессе:
Склад, Номенклатура, Характеристика и Серия. Обратите внимание — измерения Организация здесь нет. Именно этот регистр используется системой для постановки товара в резерв при проведении документа Заказ клиента. Для системы склад — это единая «куча» товаров, и ей неважно, кто купил этот товар, пока дело не дошло до оформления документов перехода права собственности.Организация присутствует. Однако контроль по этому регистру в типовой конфигурации по умолчанию срабатывает только в момент реализации (отгрузки), а не в момент заказа (резервирования).Выясним причину такого решения разработчиков: логика 1С заключается в том, что резерв — это намерение занять физическую единицу товара на полке склада. Если менеджер видит, что болт на складе есть, он его резервирует. А вопрос о том, как это будет оформлено юридически (через прямую продажу или через механизм межфирменных продаж), решается позже.
Самый простой и методически верный с точки зрения разработчиков 1С способ — это разделение одного физического склада на несколько логических складов в программе. Рассмотрим этот процесс по шагам:
Заказа клиента менеджер выбирает склад, соответствующий организации заказа.В этом случае система будет видеть остатки только по конкретному складу, и резервирование физически не сможет занять товар другой организации. Однако у этого метода есть существенный минус: если один и тот же товар может продаваться от разных лиц с одного и того же стеллажа, кладовщику придется работать с несколькими складами в системе, что усложняет приемку и отгрузку.
Если ваша компания использует несколько юридических лиц для оптимизации налогообложения или разделения потоков, но товар физически хранится вместе, проанализируем механизм «Передачи между организациями» (Интеркомпани). Выясним, как это работает:
В разделе НСИ и администрирование — Настройка НСИ и разделов — Финансовый результат и контроллинг — Учет товаров включим опцию Контроль остатков товаров организаций и настроим схему Интеркомпани. Это позволит системе:
Передача товаров между организациями.Если же ваша задача — запретить одной организации трогать товар другой, то «Интеркомпани» настраивать не нужно, но проблему резервирования на одном складе это само по себе не решит без дополнительных настроек.
Рассмотрим подробнее настройку «Контроль остатков товаров организаций». Если этот флаг установлен, система не даст провести документ Реализация товаров и услуг, если у организации нет остатка. Но, как мы уже выяснили, Заказ клиента в статусе «К выполнению» с действием «Резервировать на складе» все равно проведется.
Для того чтобы менеджер видел проблему раньше, в новых версиях (начиная с 11.5) можно использовать рабочее место «Состояние обеспечения заказов». Проанализируем ситуацию: в этом рабочем месте можно увидеть, обеспечен ли заказ реальным остатком. Однако жесткого запрета на проведение заказа «в резерв» без наличия товара у конкретной организации в типовом коде по-прежнему нет.
Если разделение на склады невозможно, а контроль нужен именно в момент заказа, придется прибегнуть к расширению конфигурации. Разберем логику, которую необходимо реализовать. Нам нужно вмешаться в процедуру проведения Заказа клиента и добавить проверку по регистру ТоварыОрганизаций.
Пример алгоритма проверки на языке 1С (концептуально):
// В модуле объекта или через расширение в обработке проведения
Процедура ПередПроверкойОстатковПоОрганизации(Отказ, ДокументОбъект)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыОрганизацийОстатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыОрганизаций.Остатки(&МоментВремени, Организация = &Организация И Номенклатура = &Номенклатура И Склад = &Склад) КАК ТоварыОрганизацийОстатки";
Запрос.УстановитьПараметр("МоментВремени", ДокументОбъект.МоментВремени());
Запрос.УстановитьПараметр("Организация", ДокументОбъект.Организация);
// ... установка остальных параметров для каждой строки ТЧ ...
Результат = Запрос.Выполнить();
// Если Остаток < ТребуемыйРезерв, тогда Отказ = Истина;
КонецПроцедуры
Такой подход позволяет жестко ограничить действия менеджеров. Однако помните, что это значительно увеличит нагрузку на систему при проведении заказов, так как 1С придется каждый раз обращаться к тяжелому регистру Товары организаций.
Подведем итоги нашего анализа. Обслуживающая компания формально права: в «коробочной» версии 1С:УТ 11.4 нет функционала, который бы запрещал резервировать товар по организации на общем складе. Это осознанное архитектурное решение фирмы «1С».
Для решения вашей задачи мы рекомендуем следующий план действий:
Посмотрим на ситуацию со стороны бизнеса: иногда излишний контроль мешает продажам. Если клиенту нужно 2 болта, а у «ООО Ромашка» есть только один, лучше позволить менеджеру зарезервировать оба, а вопрос нехватки решить оперативной передачей товара между своими фирмами, чем отказать покупателю из-за внутренних учетных ограничений.