Как в 1С:УТ и 1С:ERP настроить автоматическое перемещение товаров со складов, где есть свободные остатки?

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

В крупных торговых и производственных компаниях, использующих многозоновую складскую структуру, распределение запасов — одна из ключевых ежедневных задач. Часто возникает ситуация: у компании есть несколько складов снабжения (например, Склад 1 и Склад 2), а также центральный склад или розничные точки, на которые необходимо перемещать товары по мере возникновения дефицита. Логисты сталкиваются с проблемой: как сделать так, чтобы система 1С:ERP или 1С:Управление торговлей 11 сама определяла, на каком именно складе сейчас есть свободный остаток нужной номенклатуры, и автоматически подставляла его в качестве источника (отправителя) при формировании заказов на перемещение.

В этой статье мы подробно проанализируем, почему возникает эта проблема, рассмотрим типовые механизмы программы, разберем их ограничения и настроим обходные пути решения этой задачи без привлечения программистов, а также заглянем в сторону кастомизации алгоритмов обеспечения.

В чем суть проблемы? Анализируем исходную ситуацию

Допустим, у нас в системе настроена единая Схема обеспечения для розничной сети или удаленного склада-получателя. Схема подразумевает тип обеспечения Перемещение. В нашей компании числятся два склада-поставщика (Склад 1 и Склад 2). Возникает потребность в двух позициях:

Когда менеджер запускает стандартный помощник Формирование заказов по потребностям, система видит общую потребность в товарах, но при использовании единого общего способа перемещения для «работы с несколькими складами» программа не может «на лету» распределить строки по складам-отправителям на основании текущих свободных остатков. Логисту приходится вручную заходить в каждую строчку и указывать склад-отправитель. Если позиций в заказе сотни, процесс превращается в рутину с высоким риском ошибок.

Выясним, какие варианты настройки предлагает нам типовой функционал 1С:ERP и 1С:УТ 11 для автоматизации или упрощения этого процесса.

---

Вариант 1. Разделение через разные «Способы обеспечения» (Жесткая привязка)

Если в вашей компании ассортимент жестко закреплен за конкретными складами-источниками (например, Товар 1 всегда хранится и отгружается только со Склада 1, а Товар 2 — только со Склада 2), то самым надежным и простым решением будет разделение способов обеспечения.

Рассмотрим по шагам, как настроить эту схему:

  1. Перейдем в раздел CRM и маркетинг — Настройки и справочники — Способы обеспечения потребностей.
  2. Создадим новый способ обеспечения. Назовем его «Перемещение со Склада 1». Установим тип обеспечения Перемещение.
  3. В поле «Использовать для работы» переключаем тумблер в положение «С одним складом (распределительным центром)» и жестко указываем в качестве отправителя «Склад 1».
  4. Аналогично создаем второй способ обеспечения — «Перемещение со Склада 2», где отправителем указываем «Склад 2».
  5. Теперь перейдем в Схемы обеспечения. Мы можем создать единую схему обеспечения для наших складов-получателей. Внутри этой схемы для разной номенклатуры (или для разных групп номенклатуры) мы назначим свои способы обеспечения: для Товара 1 привяжем способ «Перемещение со Склада 1», для Товара 2 — «Перемещение со Склада 2».

При таком подходе во время работы помощника Формирование заказов по потребностям программа четко определит источник для каждой номенклатуры, основываясь на ее индивидуальных настройках обеспечения. Менеджеру не придется ничего выбирать вручную.

Минус этого подхода: Он абсолютно нединамичен. Если завтра Товар 1 закончится на Складе 1, но появится на Складе 2, система все равно будет упорно пытаться заказать его со Склада 1, выдавая ошибку об отсутствии остатков, либо сформирует заказ «в пустоту».

---

Вариант 2. Использование механизма «Группы складов»

Это более гибкий метод, который позволяет задействовать встроенные алгоритмы распределения запасов внутри логистической группы. Посмотрим, как это работает на практике.

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

  1. Переходим в справочник Склады и магазины (раздел НСИ и администрирование).
  2. Создаем новую группу складов, назовем ее, например, «Группа складов-отправителей».
  3. В настройках этой группы обязательно устанавливаем флаг «Разрешить в заказах и накладных». Это ключевая настройка, которая позволяет выбирать не конкретную физическую территорию, а группу складов целиком прямо в документах обеспечения.
  4. Помещаем наши Склад 1 и Склад 2 внутрь этой созданной группы.

Теперь проанализируем логику работы документов при такой структуре. В Заказе клиента или в Заказе на перемещение в качестве склада-отправителя (или склада обеспечения) мы указываем не конкретный Склад 1 или Склад 2, а нашу созданную Группу складов-отправителей.

При заполнении табличной части заказа мы можем воспользоваться стандартным механизмом распределения остатков:

Важный нюанс: Этот способ отлично работает, если у вас есть исходное распоряжение (например, Заказ клиента, под который нужно привезти товар перемещением), и вы проводите резервирование. Если же вы хотите, чтобы заказы на перемещение создавались регламентно в фоновом режиме по «минимуму-максимуму» запасов без участия пользователя, этот метод может потребовать ручного контроля статусов обеспечения.

---

Вариант 3. Обособленное обеспечение («Под назначение»)

Если перемещение товаров со складов-источников выполняется под конкретные заказы клиентов (то есть используется обособленное обеспечение), в последних версиях платформ 1С:ERP и 1С:УТ реализован продвинутый алгоритм.

Программа умеет анализировать доступность обособленных запасов на всех складах-отправителях, зарегистрированных в системе. При формировании потребностей логист может открыть специализированное рабочее место График перемещения товаров. В этом интерфейсе наглядно отображаются остатки по всем складам-отправителям, и система сама предлагает оптимальный склад-источник, исходя из сроков доставки и наличия свободных остатков.

---

Что делать, если нужен полностью автоматический динамический выбор?

Если ни один из вариантов стандартной настройки вас не устраивает, поскольку вам требуется строго автоматическое создание документов Заказ на перемещение в фоновом режиме с динамическим распределением по складам-источникам (где в данный момент больше свободного остатка), придется прибегнуть к доработке системы.

Для программистов 1С рассмотрим логику работы расширения, которое может автоматизировать данный процесс. Нам необходимо перехватить алгоритм заполнения склада-отправителя при программном создании документов ЗаказНаПеремещение.

Алгоритм работы кастомного фонового задания или расширения выглядит следующим образом:

  1. Система собирает все потребности складов-получателей (на основании настроек минимального и максимального остатка или неудовлетворенного спроса из заказов покупателей).
  2. По каждой дефицитной позиции номенклатуры выполняется запрос к остаткам складов-отправителей.
  3. Программа ранжирует склады по приоритету (например, сначала Склад 1, затем Склад 2) и по величине свободного остатка.
  4. Формируются документы Заказ на перемещение, в которых строки автоматически разделяются по реальным складам-отправителям.

Посмотрим на пример кода запроса, который позволяет получить свободный остаток номенклатуры в разрезе складов, входящих в определенную группу:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ТоварыНаСкладахОстатки.Склад КАК СкладИсточник,
    |	ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    |	ТоварыНаСкладахОстатки.ВНаличииОстаток - ЕСТЬNULL(ТоварыВРезервеОстатки.ВРезервеОстаток, 0) КАК СвободныйОстаток
    |ИЗ
    |	РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад В ИЕРАРХИИ(&ГруппаСкладов)) КАК ТоварыНаСкладахОстатки
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКОформлениюПередачи.Остатки(&Период, Склад В ИЕРАРХИИ(&ГруппаСкладов)) КАК ТоварыВРезервеОстатки
    |		ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеОстатки.Номенклатура
    |		И ТоварыНаСкладахОстатки.Склад = ТоварыВРезервеОстатки.Склад
    |ГДЕ
    |	ТоварыНаСкладахОстатки.ВНаличииОстаток - ЕСТЬNULL(ТоварыВРезервеОстатки.ВРезервеОстаток, 0) > 0
    |УПОРЯДОЧИТЬ ПО
    |	СвободныйОстаток УБЫВ";

Запрос.УстановитьПараметр("Период", ТекущаяДата());
Запрос.УстановитьПараметр("ГруппаСкладов", СсылкаНаГруппуСкладов);
РезультатЗапроса = Запрос.Выполнить();

Используя этот запрос в обработке автозаказа, вы сможете гарантировать, что система всегда будет выбирать склад-источник с наибольшим свободным остатком товара, минимизируя ручную работу логистов компании.

Резюме

Для решения задачи автоматического выбора склада-отправителя без доработки конфигурации рекомендуется использовать механизм Групп складов с разрешением их использования в заказах. Если логика распределения жестко привязана к видам товаров — настройте несколько способов обеспечения и распределите их в единой Схеме обеспечения по категориям номенклатуры. Для полностью автоматического бесшовного распределения «на лету» оптимальным решением станет использование небольшого расширения конфигурации или внешних обработок автозаказа.

← На главную