Имя: Пароль:
1C
1С v8
Нулевые остатки по дням
0 ittaxi
 
23.08.17
15:52
отчет депозит по водителям получить по дням

НаСервере
Процедура ОтчетДепозит()
    
    ТабЧастьДепозит = Отчет.ТабличнаяЧастьДепозитВодителей;
    
    НачалоПериода     = Отчет.НачалоПериода;
    ОкончаниеПериода     = Отчет.КонецПериода;

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

    
    
    Результат = Запрос.Выполнить().Выбрать();
    
    ТабЧастьДепозит.Очистить();
            
    Пока Результат.Следующий() Цикл
                НоваяСтрока = ТабЧастьДепозит.Добавить();
                
                НоваяСтрока.Водитель = Результат.ВодительФамилия;
                НоваяСтрока.Депозит = Результат.ДепозитОборот;
                НоваяСтрока.Дата = Результат.Период;
                
        КонецЦикла;

    
    
КонецПроцедуры

получаю только те дни где есть движение.
как получить по дням которые указываешь в параметрах?
например с 01 по 05
и получить  01 = 0
             02 = 500
             03 = -500
             04 = 0
             05 = 0
1 X Leshiy
 
23.08.17
15:55
Запрос в цикле!!!
2 term1t52
 
23.08.17
15:57
Сгенерируйте таблицу дней, например по производственному календарю, с ней соединитесь
3 МихаилМ
 
23.08.17
15:58
в поиск по "остатки на каждый день"
4 term1t52
 
23.08.17
15:58
Или в СКД есть функции дозаполнения, вроде как для таких случаев
5 ittaxi
 
23.08.17
16:00
(1) нет
6 X Leshiy
 
23.08.17
16:02
(5) Переходи на темную сторону, у нас есть печеньки!
7 ittaxi
 
23.08.17
16:03
(2) база самописная нет производственного календаря
8 akpaevj
 
23.08.17
16:08
Если отчет строится с помощью СКД, то в группировке периода выбери "Тип дополнения" - День, получишь то, что хочешь.
9 ittaxi
 
23.08.17
16:09
(8) нет, не скд просто запрос
10 Irbis
 
23.08.17
16:10
(9) так сделай ТЗ с днями, её как параметр в запрос и цепляй к ней всё
11 ittaxi
 
23.08.17
16:23
(8) "Тип дополнения"  найти не могу где это
12 akpaevj
 
23.08.17
16:32
НачалоПериода = '20170801';
    КонецПериода = '20170831';
    
    ТаблицаЗначений = Новый ТаблицаЗначений;
    ТаблицаЗначений.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата"));
    
    Для Сч = 0 По (КонецПериода - НачалоПериода) / 86400 Цикл
        
        НоваяСтрока = ТаблицаЗначений.Добавить();
        НоваяСтрока.Период = НачалоПериода + (Сч * 86400);
        
    КонецЦикла;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТаблицаПериодов.Период
        |ПОМЕСТИТЬ ВТ_ТаблицаПериодов
        |ИЗ
        |    &ТаблицаПериодов КАК ТаблицаПериодов
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ_ТаблицаПериодов.Период,
        |    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоОстаток
        |ИЗ
        |    ВТ_ТаблицаПериодов КАК ВТ_ТаблицаПериодов
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ТоварыНаСкладахОстаткиИОбороты
        |        ПО ВТ_ТаблицаПериодов.Период = ТоварыНаСкладахОстаткиИОбороты.Период";
    
    Запрос.УстановитьПараметр("ТаблицаПериодов", ТаблицаЗначений);
    Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
    Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
13 ittaxi
 
23.08.17
16:34
(12) сейчас попробую
14 term1t52
 
23.08.17
16:40
(11) В СКД. Ты же написал, что у тебя не СКД
15 ittaxi
 
23.08.17
16:46
(14) ну я начал делать через СКД
16 akpaevj
 
23.08.17
16:49
17 akpaevj
 
23.08.17
16:51
Извиняюсь, не то выложил.
Вот http://www.picshare.ru/view/8247733/
18 Бубр
 
23.08.17
16:52
(11)   в параметрах  виртуальной таблицы
19 akpaevj
 
23.08.17
16:53
(18) В параметрах - "Метод дополнения". Это несколько другое
20 ittaxi
 
23.08.17
17:05
(12) работает спасибо большое
21 Tateossian
 
23.08.17
19:29
ОП, не слушай вот этого (10). Вот тебе запрос, сделает календарь за лююой период

ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, 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 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
22 Tateossian
 
23.08.17
19:31
(21) И этот календарь соединяй по периоду с временной таблицей, выгруженной и проиндексированной по периоду из виртуальной таблицы.
23 akpaevj
 
23.08.17
21:20
(22) разница исключительно в объёме кода и в том, что в Вашем варианте расчёт дней происходит средствами базы данных. По поводу индексирования - соглашусь, при значительных объёма.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой