Имя: Пароль:
1C
1С v8
Получить в запросе количество выходных дней за каждый период выборки
,
0 Melcor
 
17.09.19
08:49
Добрый день. 1С 8.2
Подскажите как можно запросом получить кол-во выходных дней по каждой выборке запроса

Я для начала сформировал ВТ календаря с датами и переменной выходной день:

ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&д3пг, ДЕНЬ, ВложенныйЗапрос.НомерДняИзДиапазона) КАК Период
ПОМЕСТИТЬ ДНИ
ИЗ
    (ВЫБРАТЬ
        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 <= РАЗНОСТЬДАТ(&д3пг, &д1пг, ДЕНЬ)) КАК ВложенныйЗапрос
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДНИ.Период,
    ВЫБОР
        КОГДА ДЕНЬНЕДЕЛИ(ДНИ.Период) = 6
                ИЛИ ДЕНЬНЕДЕЛИ(ДНИ.Период) = 7
            ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ КАК Выходной
ПОМЕСТИТЬ ДНИ_СВыходными
ИЗ
    ДНИ КАК ДНИ
;


Но никак не пойму, как используя её получить кол-во выходных, есть готовая ВТ:

ВЫБРАТЬ
    ВТ_ОснТаб.ГруппаНоменклатура,
    ВТ_ОснТаб.Номенклатура,
    ВТ_ОснТаб.ХарактеристикаНоменклатуры,
    ВТ_ОснТаб.ДатаПриходаВСеть,
    ВТ_ОснТаб.ДатаПриходаНаФотостудию,
    ВТ_ОснТаб.ДатаФото,
    ВТ_ОснТаб.РазницаМеждуПриходомИФото,
    ВложенныйЗапрос.Выходной

ИЗ
    ВТ_ОснТаб КАК ВТ_ОснТаб

Здесь мне необходима переменная кол-во выходных между ОснТаб.ДатаПриходаНаФотостудию и ОснТаб.ДатаФото

Зная кол-во выходных я смогу посчитать кол-во рабочих дней.
Регистр календарь и валюты не предлагать)
Календаря нет, валюты не своевременно заполняется
1 Smile 8D
 
17.09.19
09:19
Сложно что-то сказать, если вы принципиально отказываетесь использовать молоток для забивания гвоздей. Если стоит задача подсчета рабочих и выходных дней, то для этого есть готовый инструмент - удобный, гибкий. Если вы хотите делать по своему, то делайте.
2 Melcor
 
17.09.19
09:21
(1) Так молотка нет, вот в чем проблема
3 Melcor
 
17.09.19
09:22
да и посути, какая разница у же сделал ВТ с датами, я не помогу понять как из неё за период выборки кол-во выходных получить, если это вообще возможно
4 ДенисЧ
 
17.09.19
09:24
выбрать Количество(Дата)
из ТаблицаДат
где Дата МЕЖДУ &НачДата И &КонДата
где ЭтоВыходной
5 Melcor
 
17.09.19
09:25
(4)  необходима переменная кол-во выходных между ОснТаб.ДатаПриходаНаФотостудию и ОснТаб.ДатаФото
6 bootini
 
17.09.19
09:31
Соединяй с таблице, в связи ставь Период Между ОснТаб.ДатаПриходаНаФотостудию и ОснТаб.ДатаФото И НЕ Выходной = 1, группировка Количество(Период)
7 bootini
 
17.09.19
09:32
(5) зачем тебе выходные если ты сам пишешь: "я смогу посчитать кол-во рабочих дней", конечная цель выходные или рабочие..
8 тарам пам пам
 
17.09.19
09:33
(5) так оно почти также и пишется (только проще сразу рабочие посчитать):

ВЫБРАТЬ
    ВТ_ОснТаб.ГруппаНоменклатура,
    ВТ_ОснТаб.Номенклатура,
    ВТ_ОснТаб.ХарактеристикаНоменклатуры,
    ВТ_ОснТаб.ДатаПриходаВСеть,
    ВТ_ОснТаб.ДатаПриходаНаФотостудию,
    ВТ_ОснТаб.ДатаФото,
    ВТ_ОснТаб.РазницаМеждуПриходомИФото,
    КОЛИЧЕСТВО(ДНИ_СВыходными.Выходной) КАК РабочиеДни

ИЗ
    ВТ_ОснТаб КАК ВТ_ОснТаб
    ЛЕВОЕ СОЕДИНЕНИЕ ДНИ_СВыходными
        ПО ДНИ_СВыходными.Период МЕЖДУ ВТ_ОснТаб.ДатаПриходаНаФотостудию И ВТ_ОснТаб.ДатаФото
            И ДНИ_СВыходными.Выходной = 0

СГРУППИРОВАТЬ ПО
    ВТ_ОснТаб.ГруппаНоменклатура,
    ВТ_ОснТаб.Номенклатура,
    ВТ_ОснТаб.ХарактеристикаНоменклатуры,
    ВТ_ОснТаб.ДатаПриходаВСеть,
    ВТ_ОснТаб.ДатаПриходаНаФотостудию,
    ВТ_ОснТаб.ДатаФото,
    ВТ_ОснТаб.РазницаМеждуПриходомИФото
9 Melcor
 
17.09.19
09:36
(7) Зная кол-во выходных я смогу посчитать кол-во рабочих дней, цель кол-во рабочих
10 Melcor
 
17.09.19
09:38
(8) Прекрасно! Спасибо!
11 Melcor
 
17.09.19
09:40
(8) Ан нет, двойные записи получаются)
12 Franchiser
 
гуру
17.09.19
09:46
Зачем, если есть производственный календарь
13 ДенисЧ
 
17.09.19
09:47
(12) "Календаря нет" (с)
14 ДенисЧ
 
17.09.19
09:48
(11) Так запихни выходные дни в временную таблицу сгруппированными и посчитанными.
15 Smile 8D
 
17.09.19
11:47
(2) я имел в виду производственный календарь из БСП. Обычно после подсчета суббот и воскресений встает вопрос о праздничных днях и других незапланированных выходных. Производственный календарь все это позволяет учесть.
2 + 2 = 3.9999999999999999999999999999999...