Имя: Пароль:
1C
1С v8
Остатки и обороты по месяцам с нулевыми оборотами
0 slafor
 
10.02.21
00:19
Знаю, тема уже неоднократно поднималась, но нормального решения я та и не нашел, а делать "костыли" не хочется. Хотя можно...

В общем, есть запрос:

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

УПОРЯДОЧИТЬ ПО
   Месяц,
   Склад
ИТОГИ
   СУММА(СуммаКонечныйОстаток)
ПО
   Месяц ПЕРИОДАМИ(МЕСЯЦ, , ).

В итоге я помесячно получаю стоимостную оценку склада в ценах себестоимости. Но если в этом месяце не было движений по регистру, то я получаю 0. Вот пример: https://yadi.sk/i/Ga8ndAUkokgjyA .

Прочитал, что можно использовать конструкцию "ВСЕ":
ВыборкаПериод = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Месяц", "ВСЕ");

Но тогда получается вообще ересь: https://yadi.sk/i/2_5wfApQNJqt6w .

Опять же повторюсь, что можно придумать "костыли" типа обрабатывать наличие движений приход/расход, и если нет, использовать предыдущую запись, но уже на этапе обработки аыборки, но это правда "костыли" и как-то не очень хочется.

Может, кто подскажет?
1 МихаилМ
 
10.02.21
00:43
за 4 года запросы не освоили тд не освоили.
поиск в интернет не освоили


1с выпустила отдельную книгу по запросам. изучите её
2 ASU_Diamond
 
10.02.21
06:56
"Но если в этом месяце не было движений по регистру" - неверное утверждение, у тебя берутся конечные остатки
3 Толич
 
10.02.21
07:12
В яндексе забанили?
http://catalog.mista.ru/public/518415/
4 Толич
 
10.02.21
07:15
Вместо обращения к производственному календарю, лучше так все периоды соберите:
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&ДатаНачало, ДЕНЬ, Цифры4.Цифра * 1000 + Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1) КАК ДатаДень
ПОМЕСТИТЬ Выборка
ИЗ
    (ВЫБРАТЬ
        0 КАК Цифра
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        1
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        2
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        3
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        4
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        5
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        6
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        7
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        8
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        9) КАК Цифры1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            9) КАК Цифры2
        ПО (Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&ДатаНачало, &ДатаОкончания, ДЕНЬ))
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            9) КАК Цифры3
        ПО (Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&ДатаНачало, &ДатаОкончания, ДЕНЬ))
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК Цифра
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            9) КАК Цифры4
        ПО (Цифры4.Цифра * 1000 + Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&ДатаНачало, &ДатаОкончания, ДЕНЬ))
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Выборка.ДатаДень КАК ДатаДень
ПОМЕСТИТЬ ВыборкаПериодов
ИЗ
    Выборка КАК Выборка
ГДЕ
    Выборка.ДатаДень <= &ДатаОкончания
    И Выборка.ДатаДень >= &ДатаНачало

СГРУППИРОВАТЬ ПО
    Выборка.ДатаДень
;
5 slafor
 
10.02.21
09:57
(2) Движений нет, остатки - не движения. Хотя тогда непонятно, почему на последний месяц остатки все-таки берутся? Ведь движений там тоже не было.

(3)(4)
Спасибо, просто я когда видел выражение "Производственный календарь", думал, что это относится к расчетным задачам и сразу уходил )