Имя: Пароль:
1C
1С v8
УТ 11.3: При подборе товаров в "Заказ покупателя" меняется дата отгрузки
0 21stas
 
03.07.17
18:32
При подборе товаров через Заполнить - Подобрать товары в "Заказ покупателя" меняется дата отгрузки (проставляется следующий за текущей датой день), причём это происходит только при подборе некоторых товаров.
Прошу подсказать - где в бескрайнем мозге УТ 11 такая логика? Это какое-то обеспечение заказа? В доступном наличии товар есть.
1 WhiteDragon93
 
03.07.17
18:37
(0) В параметрах обеспечения потребностей "некоторый" товар фигурирует?
2 21stas
 
03.07.17
20:18
(1) Да, я в коде нашёл что-то про обеспечение потребностей.
Но где дальше смотреть - пока не понял.
Где посмотреть параметры обеспечения потребностей?
3 21stas
 
03.07.17
20:19
Это про это?
http://joxi.ru/Vm63yPXfxxwEl2
4 21stas
 
03.07.17
20:22
Ведь остатки есть, причём уже сейчас:
http://joxi.ru/DmBRXOGiNNEQKm
5 21stas
 
04.07.17
06:13
В коде вижу, чтобы даты берёт из запроса в общем модуле ОбеспечениеСервер, Функция РассчитатьДатуОтгрузкиВТаблице(Таблица).

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

/////////////////////////
ВЫБРАТЬ
    ТаблицаФорматы.Склад          КАК Склад,
    ТаблицаФорматы.ФорматМагазина КАК ФорматМагазина
ПОМЕСТИТЬ ВтФорматыСкладов
ИЗ
    РегистрСведений.ИсторияИзмененияФорматовМагазинов.СрезПоследних(,
        Склад В(
            ВЫБРАТЬ РАЗЛИЧНЫЕ
                ТаблицаСклады.Склад
            ИЗ
                ВтТовары КАК ТаблицаСклады)
        {Склад.* КАК Склад}) КАК ТаблицаФорматы
ГДЕ
    ТаблицаФорматы.ФорматМагазина <> ЗНАЧЕНИЕ(Справочник.ФорматыМагазинов.ПустаяСсылка)
ИНДЕКСИРОВАТЬ ПО
    Склад
;

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

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

ВЫБРАТЬ РАЗЛИЧНЫЕ
    Календарь.Значение            КАК Календарь,
    Т.ГарантированныйСрокОтгрузки КАК ЧислоДней,
    &НачалоТекущегоДня            КАК ДатаОтсчета
ПОМЕСТИТЬ ВтПараметрыПоиска
ИЗ
    ВтРеквизитыСпособовОбеспечения КАК Т,
    Константа.ОсновнойКалендарьПредприятия КАК Календарь
ГДЕ
    НЕ Т.ФормироватьПлановыеЗаказы
    И Календарь.Значение <> ЗНАЧЕНИЕ(Справочник.Календари.ПустаяСсылка)
;
/////////////////////////////////////////////////

ВЫБРАТЬ
    Т.Календарь   КАК Календарь,
    Т.ЧислоДней   КАК ЧислоДней,
    Т.ДатаОтсчета КАК ДатаОтсчета,
    ЕСТЬNULL(ПоставкаВТекущемГоду.ДатаГрафика, ПоставкаВСледующемГоду.ДатаГрафика) КАК Дата
ПОМЕСТИТЬ ВтДатыГрафика
ИЗ
    ВтПараметрыПоиска КАК Т //шаблон
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КалендарныеГрафики КАК ТекущаяДата
        ПО Т.Календарь = ТекущаяДата.Календарь
         И ТекущаяДата.Год         = ГОД(Т.ДатаОтсчета)
         И ТекущаяДата.ДатаГрафика = Т.ДатаОтсчета

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КалендарныеГрафики КАК ПоставкаВТекущемГоду
        ПО Т.Календарь = ПоставкаВТекущемГоду.Календарь
         И ПоставкаВТекущемГоду.ДеньВключенВГрафик
         И ПоставкаВТекущемГоду.Год = ГОД(Т.ДатаОтсчета)
         И ПоставкаВТекущемГоду.КоличествоДнейВГрафикеСНачалаГода
            = ТекущаяДата.КоличествоДнейВГрафикеСНачалаГода
            + Т.ЧислоДней

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КалендарныеГрафики КАК ПоследняяДатаГода
        ПО ПоставкаВТекущемГоду.ДатаГрафика ЕСТЬ NULL
         И Т.Календарь = ПоследняяДатаГода.Календарь
         И ПоследняяДатаГода.Год = ГОД(Т.ДатаОтсчета)
         И ПоследняяДатаГода.ДатаГрафика = НАЧАЛОПЕРИОДА(КОНЕЦПЕРИОДА(Т.ДатаОтсчета, ГОД), ДЕНЬ)

        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КалендарныеГрафики КАК ПоставкаВСледующемГоду
        ПО ПоставкаВТекущемГоду.ДатаГрафика ЕСТЬ NULL
         И Т.Календарь = ПоставкаВСледующемГоду.Календарь
         И ПоставкаВСледующемГоду.ДеньВключенВГрафик
         И ПоставкаВСледующемГоду.Год = ГОД(Т.ДатаОтсчета) + 1
         И ПоставкаВСледующемГоду.КоличествоДнейВГрафикеСНачалаГода
            = Т.ЧислоДней
            - (ПоследняяДатаГода.КоличествоДнейВГрафикеСНачалаГода
                - ТекущаяДата.КоличествоДнейВГрафикеСНачалаГода)

ГДЕ
    НЕ ЕСТЬNULL(ПоставкаВТекущемГоду.ДатаГрафика, ПоставкаВСледующемГоду.ДатаГрафика) ЕСТЬ NULL
ИНДЕКСИРОВАТЬ ПО
    Календарь, ЧислоДней, ДатаОтсчета
;

////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Т.СпособОбеспечения КАК СпособОбеспечения,
    ДатыГрафика.Дата    КАК Дата
ПОМЕСТИТЬ ВтДатыПлановойПоставки
ИЗ
    ВтРеквизитыСпособовОбеспечения КАК Т
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДатыГрафика КАК ДатыГрафика
        ПО Т.ГарантированныйСрокОтгрузки = ДатыГрафика.ЧислоДней
ГДЕ
    НЕ Т.ФормироватьПлановыеЗаказы

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Т.СпособОбеспечения КАК СпособОбеспечения,
    ДОБАВИТЬКДАТЕ(&НачалоТекущегоДня, ДЕНЬ, Т.ГарантированныйСрокОтгрузки)
ИЗ
    ВтРеквизитыСпособовОбеспечения КАК Т,
    Константа.ОсновнойКалендарьПредприятия КАК Календарь
ГДЕ
    НЕ Т.ФормироватьПлановыеЗаказы
    И Календарь.Значение = ЗНАЧЕНИЕ(Справочник.Календари.ПустаяСсылка)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Т.СпособОбеспечения         КАК СпособОбеспечения,
    Т.ПлановаяДатаПоставки      КАК Дата
ИЗ
    ВтРеквизитыСпособовОбеспечения КАК Т
ГДЕ
    Т.ФормироватьПлановыеЗаказы
    И Т.ПлановаяДатаПоставки >= &НачалоТекущегоДня

ИНДЕКСИРОВАТЬ ПО
    СпособОбеспечения
;
/////////////////////////////////////////////////

ВЫБРАТЬ
    Товары.НомерСтроки КАК НомерСтроки,
    
    ВЫБОР КОГДА ЕСТЬNULL(ДатыПлановойПоставки.Дата, ДАТАВРЕМЯ(1,1,1)) > Товары.ЖелаемаяДатаОтгрузки ТОГДА
                ДатыПлановойПоставки.Дата
            ИНАЧЕ
                Товары.ЖелаемаяДатаОтгрузки
        КОНЕЦ          КАК ДатаОтгрузки
ИЗ
    ВтТовары КАК Товары
        
        ЛЕВОЕ СОЕДИНЕНИЕ ВтСпособыОбеспечения КАК СпособыОбеспечения
        ПО СпособыОбеспечения.Номенклатура   = Товары.Номенклатура
         И СпособыОбеспечения.Характеристика = Товары.Характеристика
         И СпособыОбеспечения.Склад          = Товары.Склад
        
        ЛЕВОЕ СОЕДИНЕНИЕ ВтДатыПлановойПоставки КАК ДатыПлановойПоставки
        ПО ДатыПлановойПоставки.СпособОбеспечения  = СпособыОбеспечения.СпособОбеспеченияПотребностей
6 21stas
 
04.07.17
06:34
Убрал из РС "Варианты обеспечения товарами" товар - теперь дата не сдвигается.
Что это за варианты?
Где про это почитать, чтобы понять? F1 молчит

В
Склад и доставка – Настройки и справочники - Схемы обеспечения
ничего такого нет:
http://joxi.ru/12Mx1qdU44Vndm

В номенклатуре я тоже не вижу схем обеспечения:
http://joxi.ru/MAje04wFvv6EN2

В складе галочка "Контролировать обеспечение" стоит:
http://joxi.ru/v29yQ61CGG09a2