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