Имя: Пароль:
1C
1С v8
Помогите с запросом
0 Loko
 
14.12.23
06:11
Есть простой запрос. Выбираю остатки товара по дням. Если был на остатке, то 1, если нет, то 0. Потом суммирую это поле (1 и 0), т.е. получаю сколько дней был на остатке товар. В консоли все норм считает сумму. А в СКД упорно просто 1 показывает. Помогите)

ВЫБРАТЬ
    ТЗОстатки.Номенклатура КАК Номенклатура,
    ВЫБОР
        КОГДА ТЗОстатки.КоличествоОстаток > 0
            ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ КАК ДнейВРасчете,
    ТЗОстатки.Склад КАК Склад,
    ТЗОстатки.Дата КАК Дата
ПОМЕСТИТЬ ТЗОСТ
ИЗ
    ТЗОстатки КАК ТЗОстатки
;

//////
ВЫБРАТЬ
    ТЗОст.Номенклатура КАК Номенклатура,
    СУММА(ТЗОст.ДнейВРасчете) КАК ДНИ
ИЗ
    ТЗОСТ КАК ТЗОст

СГРУППИРОВАТЬ ПО
    ТЗОст.Номенклатура
1 rphosts
 
14.12.23
07:41
(0) проверь, что у тебя запросы идентичны, для начала и если так - проверь что входящие данные совпадают
2 Loko
 
14.12.23
07:55
(1) запросы совпадают. вот запрос полностью:

ВЫБРАТЬ РАЗЛИЧНЫЕ
    РегламентированныйПроизводственныйКалендарь.Дата КАК Дата
ПОМЕСТИТЬ Дни
ИЗ
    РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.Дата МЕЖДУ &НачПериода И &КонПериода
;

////////////
ВЫБРАТЬ
    Движения.Номенклатура КАК Номенклатура,
    ДНИ.Дата КАК Дата,
    СУММА(ВЫБОР
            КОГДА Движения.Период = &НачПериода
                ТОГДА Движения.ВНаличииКонечныйОстаток
            ИНАЧЕ ВЫБОР
                    КОГДА Движения.Период <= ДНИ.Дата
                        ТОГДА Движения.ВНаличииОборот
                    ИНАЧЕ 0
                КОНЕЦ
        КОНЕЦ) КАК КоличествоОстаток
ПОМЕСТИТЬ ТЗОстаткиПоДням
ИЗ
    Дни КАК ДНИ
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
                &НачПериода {(&НачПериода)},
                &КонПериода {(&КонПериода)},
                День,
                ,
                Номенклатура В ИЕРАРХИИ (&СписокНоменклатуры)
                    И Склад В ИЕРАРХИИ (&СкладыПродажи)) КАК Движения
        ПО (Движения.Период <= ДНИ.Дата)

СГРУППИРОВАТЬ ПО
    Движения.Номенклатура,
    ДНИ.Дата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТЗОстатки.Номенклатура КАК Номенклатура,
    СУММА(ВЫБОР
            КОГДА ТЗОстатки.КоличествоОстаток > 0
                ТОГДА 1
            ИНАЧЕ 0
        КОНЕЦ) КАК ВНаличииДней
ИЗ
    ТЗОстаткиПоДням КАК ТЗОстатки

СГРУППИРОВАТЬ ПО
    ТЗОстатки.Номенклатура
3 Loko
 
14.12.23
07:56
в консоли все норм отрабатывает. показывает количество дней товара на остатках. если все 30 дней был, то покажет 30. а в СКд этот запрос вставляю. Ресурс сумма для поля ВНаличииДней. И показывает 1 для всех товаров (где хотя бы 1 день был на остатке).
4 MaximSh
 
14.12.23
09:30
(3) сделай не через ВТ ТЗОстаткиПоДням , а через вложенный запрос
5 MaximSh
 
14.12.23
09:47
(3) или убери в ВТ и последнем запросе агрегат Сумма. В СКД поле ВНаличииДней  добавь в Ресурсы. В Настройке выводи только по группировке Номенклатура
6 KJlag
 
14.12.23
09:51
(4) вложенные запросы.. бррр
как вспомню "провалиться во вложенный запрос, провалиться там во вложенный запрос и так далее"
7 Loko
 
14.12.23
09:55
(4) получилось!

ВЫБРАТЬ РАЗЛИЧНЫЕ
    РегламентированныйПроизводственныйКалендарь.Дата КАК Дата
ПОМЕСТИТЬ Дни
ИЗ
    РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.Дата МЕЖДУ &НачПериода И &КонПериода
;

/////////////////
ВЫБРАТЬ
    ВложенныйЗапрос.Номенклатура КАК Номенклатура,
    СУММА(ВЫБОР
            КОГДА ВложенныйЗапрос.КоличествоОстаток > 0
                ТОГДА 1
            ИНАЧЕ 0
        КОНЕЦ) КАК ВНаличииДней
ИЗ
    (ВЫБРАТЬ
        Движения.Номенклатура КАК Номенклатура,
        ДНИ.Дата КАК Дата,
        СУММА(ВЫБОР
                КОГДА Движения.Период = &НачПериода
                    ТОГДА Движения.ВНаличииКонечныйОстаток
                ИНАЧЕ ВЫБОР
                        КОГДА Движения.Период <= ДНИ.Дата
                            ТОГДА Движения.ВНаличииОборот
                        ИНАЧЕ 0
                    КОНЕЦ
            КОНЕЦ) КАК КоличествоОстаток
    ИЗ
        Дни КАК ДНИ
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
                    &НачПериода {(&НачПериода)},
                    &КонПериода {(&КонПериода)},
                    День,
                    ,
                    Номенклатура В ИЕРАРХИИ (&СписокНоменклатуры)
                        И Склад В ИЕРАРХИИ (&СкладыПродажи)) КАК Движения
            ПО (Движения.Период <= ДНИ.Дата)
    
    СГРУППИРОВАТЬ ПО
        Движения.Номенклатура,
        ДНИ.Дата) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Номенклатура
8 Loko
 
14.12.23
09:56
(5) я так тоже делал. не получалось
9 Loko
 
14.12.23
09:57
(7) + странное. мне нужно было агрегат МАКСИМУМ вернуть. а он возвращает 1. заменил на СУММА и она возвращает именно то, что мне нужно - МАКСИМУМ. ниче не понимаю.. но работает. спасибо!
10 Loko
 
14.12.23
10:00
(9) МАКСИМУМ из складов.
11 Loko
 
14.12.23
10:02
(5) а нет. так не делал. так тоже работает)
12 MaximSh
 
14.12.23
10:06
(8) Странно.
1. В запросе вообще без агрегатов, это задача ресурсов
2. поле ВНаличииДней в Ресурс, суммирование.
3. Настройка одна группировка по полю Номенклатура. Отчет Выбранные поля: ВНаличииДней и Номенклатура

Запрос такой

ВЫБРАТЬ
    Движения.Номенклатура КАК Номенклатура,
    ДНИ.Дата КАК Дата,
    ВЫБОР
        КОГДА Движения.Период = &НачПериода
            ТОГДА Движения.ВНаличииКонечныйОстаток
        ИНАЧЕ ВЫБОР
                КОГДА Движения.Период <= ДНИ.Дата
                    ТОГДА Движения.ВНаличииОборот
                ИНАЧЕ 0
            КОНЕЦ
    КОНЕЦ КАК КоличествоОстаток
ПОМЕСТИТЬ ТЗОстаткиПоДням
ИЗ
    Дни КАК ДНИ
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачПериода {(&НачПериода)}, &КонПериода {(&КонПериода)}, День, , Склад В ИЕРАРХИИ (&СкладыПродажи)) КАК Движения
        ПО (Движения.Период <= ДНИ.Дата)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТЗОстатки.Номенклатура КАК Номенклатура,
    ВЫБОР
        КОГДА ТЗОстатки.КоличествоОстаток > 0
            ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ КАК ВНаличииДней
ИЗ
    ТЗОстаткиПоДням КАК ТЗОстатки
13 Loko
 
14.12.23
10:07
(12) да, работает. спасибо)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn