Почему при подборе товаров в Заказ клиента в 1С:УТ 11 сдвигается дата отгрузки?

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

При оформлении документа Заказ клиента (или «Заказ покупателя») в «1С:Управление торговлей 11» пользователи нередко сталкиваются с ситуацией: при подборе номенклатурных позиций через обработку подбора дата отгрузки в строках документа автоматически смещается на следующий день или на более поздний срок. При этом свободный остаток по позиции на выбранном складе фактически присутствует в достаточном количестве.

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

Анализ программной логики расчета даты отгрузки

В типовых конфигурациях линейки УТ 11 (а также КА 2 и ERP 2) за расчет плановых сроков поставки и отгрузки отвечает общий модуль ОбеспечениеСервер и его функция РассчитатьДатуОтгрузкиВТаблице. Проанализируем ключевой фрагмент запроса, который определяет дату:


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

Как видно из структуры запроса, система действует по строгому алгоритму:

  1. Определяет для строки номенклатуры примененный Способ обеспечения потребностей. Наивысший приоритет отдается индивидуальным записям в регистре сведений ВариантыОбеспеченияТоварами. Если индивидуальная привязка отсутствует, способ берется из схемы обеспечения.
  2. Из найденного способа обеспечения считывается реквизит ГарантированныйСрокОтгрузки.
  3. По основному календарю предприятия система прибавляет число дней гарантированного срока к текущей дате.
  4. Если полученная расчетная дата оказывается позже, чем ЖелаемаяДатаОтгрузки, дата отгрузки в табличной части автоматически перезаписывается рассчитанным значением.

Таким образом, даже при физическом наличии остатка на складе, наличие заполненного гарантированного срока в связанном способе обеспечения заставляет систему переносить дату отгрузки вперед.

Как исправить поведение системы

Для устранения нежелательного сдвига даты отгрузки разберем несколько вариантов корректировки настроек конфигурации:

  1. Обнуление гарантированного срока отгрузки:

    Откроем справочник Способы обеспечения потребностей (раздел Склад и доставка — Настройки и справочники — Способы обеспечения потребностей). В используемом способе обеспечения найдем поле «Гарантированный срок отгрузки» и установим значение 0. В этом случае смещения по календарю происходить не будет, а расчетной датой останется текущий день.

  2. Очистка индивидуальных настроек в регистре:

    Если для конкретного товара ранее были заданы персональные параметры обеспечения, они хранятся в регистре сведений ВариантыОбеспеченияТоварами. Чтобы сбросить их, перейдем в карточку склада на вкладку настроек поддержания запасов либо воспользуемся обработкой «Настройка способов обеспечения потребностей» и удалим индивидуальную привязку проблемной номенклатуры.

  3. Проверка видимости схем обеспечения:

    Если в карточке номенклатуры не отображается реквизит Схема обеспечения, проверим общие настройки: перейдем в раздел НСИ и администрирование — Настройка НСИ и разделов — Склад и доставка — Обеспечение потребностей. Для полноценного управления схемами переключатель вариантов обеспечения должен быть установлен в положение «Расширенное».

← На главную