Имя: Пароль:
1C
 
Контроль остатков товаров на складах по массиву документов.
0 breezee
 
10.06.19
08:30
Коллеги, добрый день. УПП 1.3. Есть самописный механизм контроля отрицательных остатках при закрытии смен. Механизм получает документы требования-накладные и в цикле на дату документа смотрит остатки по товарам на складах. Документов много, смотрит долго, нагрузку создает серьезную.
Я решил перенести контроль остатков сразу по массиву документов. Написал запрос к остаткам и оборотам. И увидел что количество конечный остаток, который который получается после движения тн не совпадает с остаткам из таблицы остатков. Если я в остатках и оборотах указываю дату явно, то остатки совпадают, т.е. вот запрос без указания дат:
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
            ,
            ,
            ,
            ,
            Номенклатура = &Номенклатура
                И СерияНоменклатуры = &СерияНоменклатуры) КАК ТоварыНаСкладахОстаткиИОбороты
результат:
Номенклатура    КоличествоКонечныйОстаток    КоличествоОборот    КоличествоНачальныйОстаток
Сосиска    -28,300    -28,300    
Вот запрос с указанием дат:
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
            &ДатаДокумента,
            &ДатаДокумента,
            ,
            ,
            Номенклатура = &Номенклатура
                И СерияНоменклатуры = &СерияНоменклатуры) КАК ТоварыНаСкладахОстаткиИОбороты
вот результат с указанием дат
Номенклатура    КоличествоКонечныйОстаток    КоличествоОборот    КоличествоНачальныйОстаток
сосиска    124,670        124,670
Из таблицы остатков остаток равен 124,670

В принципе всё логично, на разные даты - разные остатки.

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

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Склад
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.СерияНоменклатуры КАК СерияНоменклатуры
ИЗ
    ВТ_ТребованийНакладных КАК ВТ_ТребованийНакладных
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
                ,
                ,
                Регистратор,
                ,
                (Склад, Номенклатура) В
                    (ВЫБРАТЬ
                        ВТ_ТребованийНакладных.Склад,
                        ВТ_ТребованийНакладных.Номенклатура
                    ИЗ
                        ВТ_ТребованийНакладных КАК ВТ_ТребованийНакладных)) КАК ТоварыНаСкладахОстаткиИОбороты
        ПО ВТ_ТребованийНакладных.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура
            И ВТ_ТребованийНакладных.Склад = ТоварыНаСкладахОстаткиИОбороты.Склад
            И ВТ_ТребованийНакладных.ДокументТребованиеНакладная = ТоварыНаСкладахОстаткиИОбороты.Регистратор
            И ВТ_ТребованийНакладных.Дата = ТоварыНаСкладахОстаткиИОбороты.Период
ГДЕ
    ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ТребованиеНакладная
    И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток < 0
    И ТоварыНаСкладахОстаткиИОбороты.Регистратор В
            (ВЫБРАТЬ
                ВТ_ТребованийНакладных.ДокументТребованиеНакладная
            ИЗ
                ВТ_ТребованийНакладных КАК ВТ_ТребованийНакладных)
и
результат у него такой:
КоличествоНачальныйОстаток    КоличествоКонечныйОстаток    Номенклатура    СерияНоменклатуры
1,400    -1,930 Сосиска
Вопрос, можно ли как-то получить остатки одним запросом по регистратору из остатков и оборотов так, чтобы они совпадали с остатками таблицы остатков товаров на складах?
Спасибо заранее, что как минимум прочли моё полотно
1 butterbean
 
10.06.19
08:36
(0) >> можно ли как-то получить остатки одним запросом по регистратору из остатков и оборотов так, чтобы они совпадали с остатками таблицы остатков товаров на складах?
неправильная постановка вопроса, ибо отчет всегда покажет остатки на конец или начало какой-то даты, а для документа нужны остатки на момент его проведения
2 d4rkmesa
 
10.06.19
08:37
(0) Ха-ха, какой шустрый. Нельзя так.
3 breezee
 
10.06.19
09:30
(1) (2) Вообще ни как?(
Независимо от того, куда вы едете — это в гору и против ветра!