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