Имя: Пароль:
1C
1С v8
Получения остатков на каждый день
0 serg-lom89
 
21.06.17
15:26
как получить остатки на каждый день?
есть запрос

ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d), ДЕНЬ) КАК Период
ПОМЕСТИТЬ ДНИ
ИЗ
    (ВЫБРАТЬ
        0 КАК a
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        1
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        2
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        3
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        4
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        5
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        6
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        7
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        8
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        9) КАК aa
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК b
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9) КАК bb
        ПО (ИСТИНА)
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК c
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9) КАК cc
        ПО (ИСТИНА)
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК d
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9) КАК dd
        ПО (ИСТИНА)
ГДЕ
    aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)

ИНДЕКСИРОВАТЬ ПО
    Период
;

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

ИНДЕКСИРОВАТЬ ПО
    Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Дат.Период КАК Дата_,
    ЕСТЬNULL(Остатки.Склад, ЗНАЧЕНИЕ(справочник.Склады.пустаяСсылка)) КАК Склад,
    ЕСТЬNULL(Остатки.Номенклатура, ЗНАЧЕНИЕ(справочник.Номенклатура.пустаяСсылка)) КАК Номенклатура,
    ЕСТЬNULL(Остатки.КоличествоКонечныйОстаток, 0) КАК КоличествоОстаток,
    ЕСТЬNULL(Остатки.Литраж, 0) КАК Литраж
ИЗ
    ДНИ КАК ВТ_Дат
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОборотТовара КАК Остатки
        ПО ВТ_Дат.Период = Остатки.Период

и когда добавляю в скд и вовожу,получается что на начало периода и конец периода остатки правильные,а посредине периода(если строить по дням) неправильные...
ЧЯДНТ?
1 vicof
 
21.06.17
15:31
Начальный остаток тоже надо выбирать и включать его в одну группу итогов с конечным остатком
2 vicof
 
21.06.17
15:31
И вообще, осаттки на каждый день в скд получаются более элегантно
3 polosov
 
21.06.17
15:32
(0) Откуда ж вы лезете, сегодня...
4 serg-lom89
 
21.06.17
15:36
(2) ???
5 vicof
 
21.06.17
15:37
(4) Через два набора данных и связи. Погуглить за тебя?
6 serg-lom89
 
21.06.17
15:40
(5) я думаю через 2 набора дольше маслать будет
7 vicof
 
21.06.17
15:45
(6) Да нихрена, испробовано не один раз.
8 serg-lom89
 
21.06.17
15:49
(7) и на больших объемах ведет себя нормально ,хотите сказать?
9 polosov
 
21.06.17
15:51
10 d4rkmesa
 
21.06.17
15:52
Можно попробовать для начала дополнение включить в группировке СКД: https://its.1c.ru/db/metod8dev/content/1587/hdoc
11 vicof
 
21.06.17
15:52
(8) Нормально
12 serg-lom89
 
22.06.17
10:20
все равно не вариант...если еще добавить цены товаров(стоимостную оценку склада,то тормоза  жуткие)
13 serg-lom89
 
22.06.17
10:22
оно же будет из одного набора к другому обращаться...вариант хороший,просто но не быстрый
14 PRO100 NigGaZ
 
22.06.17
10:25
А можно к производственному календарю присобачить остатки, не?
он же есть почти везде
15 vicof
 
22.06.17
10:29
(12) Надо аккуратно механизм использовать, отборы добавлять, а не хреначить соединения по двум наборам.
16 serg-lom89
 
22.06.17
10:30
(15) с отборами понятно..но когда надо будет видно видеть всю картину ,в общем
17 serg-lom89
 
22.06.17
10:31
(16) вот тут и получается затык...что долго считает
18 serg-lom89
 
22.06.17
10:48
может у кого есть идеи как получить именно в запросе?
19 _Batoo
 
22.06.17
11:00
Чем (10) не устраивает? Аккуратно настроить роли для полей и СКД сама посчитает остатки на каждый день.
20 1dvd
 
22.06.17
11:08
Тестовое задание при собеседовании?
21 serg-lom89
 
22.06.17
11:24
(20) нет...отчет делаю)
22 undertaker
 
22.06.17
11:37
задача уже можно сказать классическая.

// таблица основная, в которой есть периоды

ВЫБРАТЬ
     НалоговыйОбороты.Регистратор,
     НалоговыйОбороты.СуммаНУОборотКт,
     НалоговыйОбороты.Период,
     НалоговыйОбороты.Субконто1 КАК ОсновноеСредство,
     НалоговыйОбороты.КорСчет КАК КорСчет
ПОМЕСТИТЬ ХозрасчетныйОбороты
ИЗ
     РегистрБухгалтерии.Хозрасчетный.Обороты(
               &ДатаНач,
               &ДатаКон,
               Регистратор,
               Счет В ИЕРАРХИИ (&Счет02)
                    И НЕ Счет = &Счет09,
               &ВидСубконто,
               Организация = &Организация
                    И Субконто1 = &ОС
                    И КорСубконто1.ВидРасходовНУ = &Амортизация,
               ,
               &ВидКорСубконто) КАК НалоговыйОбороты
;

// получаем хитро остатки

// в первом запросе - оборот, потом он сложится с начальным остатком из второго запроса

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

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

// начальный остаток для того чтобы сложить его с оборотом (см. выше)

ВЫБРАТЬ
     КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ДатаНач, МЕСЯЦ), ДЕНЬ, -1), МЕСЯЦ),
     ХозрасчетныйОстаткиИОбороты.Субконто1,
     ХозрасчетныйОстаткиИОбороты.СуммаНУОстатокДт
ИЗ
     РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаНач, Счет В ИЕРАРХИИ (&Счет01_), &ВидСубконто, Субконто1 = &Субконто1) КАК ХозрасчетныйОстаткиИОбороты
;

// получаем остатки на каждую дату периода

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
     ХозрасчетныйОбороты.Период,
     СУММА(врНачальнаяСтоимостьПериодами.СуммаНачальныйОстатокДт) КАК СуммаНачальныйОстатокДт
ИЗ
     ХозрасчетныйОбороты КАК ХозрасчетныйОбороты
          ЛЕВОЕ СОЕДИНЕНИЕ врНачальнаяСтоимостьПериодами КАК врНачальнаяСтоимостьПериодами
          ПО ХозрасчетныйОбороты.ОсновноеСредство = врНачальнаяСтоимостьПериодами.ОсновноеСредство
               И (врНачальнаяСтоимостьПериодами.Период <= ХозрасчетныйОбороты.Период)

СГРУППИРОВАТЬ ПО
     ХозрасчетныйОбороты.Период,
     ХозрасчетныйОбороты.ОсновноеСредство


Еще вариант
http://savepic.ru/14509736.jpg
23 serg-lom89
 
22.06.17
11:45
(22) ну так я вот как в ссылке делаю...вот и возникает вопрос отпимизации ...(именно так и делаю как в ссылке)
24 serg-lom89
 
22.06.17
15:03
есть еще такой вопрос..
получается когда  я считаю литраж..

Формула
Движения.КоличествоКонечныйОстаток * Движения.Номенклатура.ЕдиницаХраненияОстатков.Литраж

то за дней 25 ,выбивает ошибку "Ошибка SDBL"
25 МихаилМ
 
22.06.17
15:11
(24)
другой вопрос в отдельной ветке задайте.
не устраивайте винигрета
26 serg-lom89
 
22.06.17
15:19
(25) ок.спс)