Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Запрос. Количество работающий в периоде час.

Запрос. Количество работающий в периоде час.
Я
   lg2marvel
 
01.11.19 - 09:47
Всем привет.
Второй день обдумываю одну вещь, может посоветуете что-нибудь.
Документ в своей табличной части имеет 31 реквизит ВремяНачалаХХ и 31 ВремяОкончанияХХ в формате ДД.ММ.ГГ ЧЧ.ММ.
Нужно получить количество работающих с интервалом час - пока в голову ничего не лезет, Запросом получил периоды
....
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&ДатаНачала, ЧАС, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) КАК Час
ПОМЕСТИТЬ ТабЧасов
ИЗ
    ТабЦифр КАК ТабЦифр1,
    ТабЦифр КАК ТабЦифр2,
    ТабЦифр КАК ТабЦифр3,
    ТабЦифр КАК ТабЦифр4
ГДЕ
    ДОБАВИТЬКДАТЕ(&ДатаНачала, ЧАС, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) <= КОНЕЦПЕРИОДА(&ДатаКонца, ДЕНЬ)

ИНДЕКСИРОВАТЬ ПО
    Час
;

получил вот это:
Час
01.10.2019 0:00:00
01.10.2019 1:00:00
01.10.2019 2:00:00
01.10.2019 3:00:00

В разрезе дней данные можно получить как-то так:
ВЫБРАТЬ
    ДанныеОВремени.Должность КАК Должность,
    ДанныеОВремени.Сотрудник КАК Сотрудник,
    ВЫБОР
        КОГДА ДанныеОВремени.ВремяНачала1 = ДАТАВРЕМЯ(1, 1, 1)
                ИЛИ ДанныеОВремени.ВремяОкончания1 = ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК День1,
    ВЫБОР
        КОГДА ДанныеОВремени.ВремяНачала2 = ДАТАВРЕМЯ(1, 1, 1)
                ИЛИ ДанныеОВремени.ВремяОкончания2 = ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК День2

Но не могу придумать как быть с периодом час. Может кто делал что-то подобное, посоветуйте пожалуйста
 
 
   Beduin
 
1 - 01.11.19 - 09:52
РазностьДат(ВремяОкончанияХХ,ВремяНачалаХХ,Минута) -тут определяешь, что равно 60
Это в условие и все.
   lg2marvel
 
2 - 05.11.19 - 09:45
(1) Спасибо, что-то начало получаться:

    ВЫБОР
        КОГДА (РАЗНОСТЬДАТ(ДанныеОВремени.ВремяНачала1, ТабЧасов.Час, МИНУТА) > -60) И (РАЗНОСТЬДАТ(ДанныеОВремени.ВремяОкончания1, ТабЧасов.Час, МИНУТА)<60)
            ТОГДА 1
        ИНАЧЕ  0
    КОНЕЦ КАК День1,
   lg2marvel
 
3 - 05.11.19 - 11:18
Получилось как-то так:

ВЫБРАТЬ
    ДанныеОВремени.Должность КАК Должность,
    ДанныеОВремени.Сотрудник КАК Сотрудник,
    ДанныеОВремени.ВремяНачала1 КАК НачалоРаботыСотрудника,
    ДанныеОВремени.ВремяОкончания1 КАК ОкончаниеРаботыСотрудника,
    ВЫБОР
            КОГДА ДЕНЬ(ТабЧасов.Час) = 1
                ТОГДА ВЫБОР
                        КОГДА РАЗНОСТЬДАТ(ДанныеОВремени.ВремяНачала1, ТабЧасов.Час, МИНУТА) > -60
                                И РАЗНОСТЬДАТ(ДанныеОВремени.ВремяОкончания1, ТабЧасов.Час, МИНУТА) < 60
                                И ДЕНЬ(ТабЧасов.Час) = 1
                            ТОГДА 1
                        ИНАЧЕ 0
                    КОНЕЦ
            КОГДА ДЕНЬ(ТабЧасов.Час) = 2
                ТОГДА ВЫБОР
                        КОГДА РАЗНОСТЬДАТ(ДанныеОВремени.ВремяНачала2, ТабЧасов.Час, МИНУТА) > -60
                                И РАЗНОСТЬДАТ(ДанныеОВремени.ВремяОкончания2, ТабЧасов.Час, МИНУТА) < 60
                                И ДЕНЬ(ТабЧасов.Час) = 2
                            ТОГДА 1
                        ИНАЧЕ 0
                    КОНЕЦ
...
        КОНЕЦ КАК Работа,
    ТабЧасов.Час КАК Час,
    ТабЧасов.Час КАК День,
    ДанныеОВремени.Ссылка.Подразделение КАК Подразделение,
    ДЕНЬ(ТабЧасов.Час) КАК НомерДня
ИЗ
    Документ._КЕ_ЖурналУчетаРабочегоВремени.ДанныеОВремени КАК ДанныеОВремени,
    ТабЧасов КАК ТабЧасов
ГДЕ
    ДанныеОВремени.Ссылка.Подразделение.Наименование ПОДОБНО &МагазиныПредставление
    И ДанныеОВремени.Ссылка.ПериодРегистрации = НАЧАЛОПЕРИОДА(&ПериодРегистрации, МЕСЯЦ)

Но есть одно НО: в группировке выводится примерно так:
Продавец
00 час
01 час
02 час
03 час
...
23 час
00 час
01 час
02 час
...
т.е. не группируется по дням. Есть мысли как сгруппировать по дням?

http://i.piccy.info/i9/cdca58a196cf5a37dd8684c613f1a791/1572941839/40808/1341874/Snymok.jpg
   lg2marvel
 
4 - 05.11.19 - 11:23

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.