Как запретить резервирование конкретных товаров в 1С:Управление торговлей 10.3?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы с заказами покупателей в 1С:Управление торговлей 10.3 часто возникает потребность исключить некоторые позиции из механизма автоматического резервирования. Например, если товар находится в производстве или на ответственном хранении, и его нельзя «застолбить» под конкретный заказ. Рассмотрим, как реализовать такую возможность с помощью доработки конфигурации.

Шаг 1: Добавление реквизита в справочник Номенклатура

Первым делом нам необходимо создать признак, по которому система будет определять «нерезервируемый» товар. Для этого откроем конфигуратор, найдем справочник Номенклатура и добавим в него новый реквизит (например, с именем ЗапретРезервирования) с типом данных Булево.

Шаг 2: Модификация процедуры автозаполнения

Основная логика резервирования в УТ 10.3 находится в общем модуле УправлениеЗаказами. Нам нужно найти процедуру Заказ_ЗаполнитьТабличныеЧастиВозможнымРазмещением. Именно здесь происходит подбор доступных остатков. Нам необходимо внести изменения в алгоритм, чтобы система игнорировала товары с установленным флагом ЗапретРезервирования.

Для этого в цикле обработки, где происходит формирование массива номенклатуры для запроса остатков, добавим проверку нашего нового реквизита:


// Пример фильтрации массива номенклатуры перед запросом
МассивНоменклатурыДляРезерва = Новый Массив;
Для каждого ЭлементМассива Из МассивНоменклатуры Цикл
    Если ЗначениеЗаполнено(ЭлементМассива) И НЕ ЭлементМассива.ЗапретРезервирования Тогда
        МассивНоменклатурыДляРезерва.Добавить(ЭлементМассива);
    КонецЕсли;
КонецЦикла;
// Далее используем отфильтрованный массив в запросе
ЗапросСвободныйОстаток.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатурыДляРезерва);

Шаг 3: Дополнительная защита в модуле документа

Чтобы гарантировать, что даже при ручном редактировании или ошибках в автозаполнении резерв не «проскочит» для запрещенных позиций, добавим проверку в процедуру ПередЗаписью модуля объекта документа ЗаказПокупателя. Это позволит очищать колонку Размещение при записи документа:


// Очистка размещения для товаров с запретом резервирования
N = ЭтотОбъект.Товары.Количество - 1;
Пока N > -1 Цикл
    Стр = ЭтотОбъект.Товары.Получить(N);
    Если Стр.Номенклатура.ЗапретРезервирования Тогда
        Стр.Размещение = Неопределено;
    КонецЕсли;
    N = N - 1;
КонецЦикла;

Шаг 4: Использование отдельного документа Резервирование товаров

Если бизнес-процесс компании требует более гибкого управления, рекомендуется рассмотреть использование специализированного документа Резервирование товаров. Этот подход позволяет отвязать процесс резервирования от документа Заказ покупателя. В таком случае в заказе покупателя колонка Размещение может быть программно скрыта или заблокирована для редактирования:

  1. Отключите доступность колонки Размещение в табличной части Товары документа Заказ покупателя.
  2. Разрешите резервирование только через документ Резервирование товаров.
  3. При заполнении документа Резервирование товаров, аналогично предыдущим шагам, проверяйте реквизит ЗапретРезервирования и исключайте такие позиции из обработки.

Важные рекомендации по реализации

Визуальное оповещение: Чтобы менеджеры не путались, почему товар не резервируется, используйте условное оформление в форме документа. Если у номенклатуры установлен флаг ЗапретРезервирования, подсвечивайте такую строку другим цветом или выводите предупреждение.

Перепроведение документов: После внесения изменений в логику, обязательно выполните перепроведение документов за прошлые периоды, если это необходимо, так как старые движения по регистрам ТоварыВРезервеНаСкладах могут конфликтовать с новой логикой.

Контроль дат: Обратите внимание, что штатный механизм ЗаполнитьИПровести в УТ 10.3 привязан к текущей дате документа. Если вам требуется резервировать товар будущими датами, предусмотрите программное изменение даты документа в процедуре ДействияФормыДействиеЗаполнитьИПровести, но будьте осторожны: оперативное проведение требует корректного учета остатков в текущем моменте.

Данные доработки позволяют полностью автоматизировать контроль запрета резервирования, минимизируя человеческий фактор и обеспечивая прозрачность складских остатков.

← На главную