Имя: Пароль:
1C
 
Помогите с запросом. Не могу группировать.
0 temsa
 
05.04.15
15:51
Есть кусок кода не полный но понятный

|ВЫБРАТЬ
|    РабочееВремяРаботниковОбороты.Подразделение,
|    РабочееВремяРаботниковОбороты.ФизЛицо,
|    ДЕНЬ(РабочееВремяРаботниковОбороты.Период) КАК Период,
|    ВЫБОР
|        КОГДА РабочееВремяРаботниковОбороты.ВидИспользваниеРабочегоВремени = Значение(Перечисление.ВидИспользваниеРабочегоВремени.РабочееВремя)
|         или РабочееВремяРаботниковОбороты.ВидИспользваниеРабочегоВремени = Значение(Перечисление.ВидИспользваниеРабочегоВремени.Ремонт)
|         или РабочееВремяРаботниковОбороты.ВидИспользваниеРабочегоВремени = Значение(Перечисление.ВидИспользваниеРабочегоВремени.Простой)
|            ТОГДА РабочееВремяРаботниковОбороты.ЧасыОборот
|        ИНАЧЕ 0
|    КОНЕЦ КАК Часы,
|    ВЫБОР
|        КОГДА РабочееВремяРаботниковОбороты.ЧасыОборот > 0  и
|            (РабочееВремяРаботниковОбороты.ВидИспользваниеРабочегоВремени = Значение(Перечисление.ВидИспользваниеРабочегоВремени.РабочееВремя)
|         или РабочееВремяРаботниковОбороты.ВидИспользваниеРабочегоВремени = Значение(Перечисление.ВидИспользваниеРабочегоВремени.Ремонт)
|         или РабочееВремяРаботниковОбороты.ВидИспользваниеРабочегоВремени = Значение(Перечисление.ВидИспользваниеРабочегоВремени.Простой))
|            ТОГДА 1
|        ИНАЧЕ 0
|    КОНЕЦ КАК Дни,
|ПОМЕСТИТЬ Табель
|ИЗ
|    РегистрНакопления.РабочееВремяРаботников.Обороты(&НачалоПериода, &КонецПериода, День,) КАК РабочееВремяРаботниковОбороты
|;
|///////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    ЕстьNULL(Работники.ФизЛицо,Табель.ФизЛицо) как ФизЛицо,
|    ЕстьNULL(Работники.Подразделение,Табель.Подразделение) как Подразделение,
|    ЕстьNULL(Табель.Период,1)Как Период,
|    ЕстьNULL(Табель.Часы,0)Как Часы,
|    ЕстьNULL(Табель.Дни,0) как  Дни
|ИЗ Табель как Табель
|   Полное СОЕДИНЕНИЕ Работники КАК Работники
|     ПО Табель.Физлицо = Работники.Физлицо
|     И  Табель.Подразделение = Работники.Подразделение
|Где Работники.Работает
|УПОРЯДОЧИТЬ ПО
|    Табель.ФизЛицо.Наименование
|ИТОГИ
|    СУММА(Часы),
|    СУММА(Дни)

|ПО
| Подразделение,
| ФизЛицо");

Поскольку записи в один день могут быть и по ремонту и по работе то при вывооде на печать Дни у меня получаются по 36  37 дней у некторых.

Как мне исключить суммирование "Дни" по дубль периоду???
1 temsa
 
05.04.15
15:59
по идее наряду с дни  часы есть и другие данные


|ВЫБРАТЬ
                    |    ЕстьNULL(Работники.ФизЛицо,Табель.ФизЛицо) как ФизЛицо,
                    |    ЕстьNULL(Работники.Подразделение,Табель.Подразделение) как Подразделение,
                    |    ЕстьNULL(Табель.Период,1)Как Период,
                    |    ЕстьNULL(Табель.Часы,0)Как Часы,
                    |    ЕстьNULL(Табель.Дни,0) как  Дни,
                    |    ЕстьNULL(Табель.Прогул,0) как  Прогул,
                    |    ЕстьNULL(Табель.БС,0) как  БС,
                    |    ЕстьNULL(Табель.МО,0) как  МО,
                    |    ЕстьNULL(Табель.Бол,0) как  Бол,
                    |    ЕстьNULL(Табель.ТО,0) как  ТО
                    |ИЗ Табель как Табель
                    |   Полное СОЕДИНЕНИЕ Работники КАК Работники
                    |     ПО Табель.Физлицо = Работники.Физлицо
                    |     И  Табель.Подразделение = Работники.Подразделение
                    |Где Работники.Работает
                    |УПОРЯДОЧИТЬ ПО
                    |    Табель.ФизЛицо.Наименование
                    |ИТОГИ
                    |    СУММА(Часы),
                    |    СУММА(Дни),
                    |    СУММА(Прогул),
                    |    СУММА(БС),
                    |    СУММА(МО),
                    |    СУММА(Бол),
                    |    СУММА(ТО)
                    
                    |ПО
                    | Подразделение,
                    | ФизЛицо
2 temsa
 
05.04.15
16:04
Вот вам и заполнение:

|ВЫБРАТЬ
                    |    ЕстьNULL(Работники.ФизЛицо,Табель.ФизЛицо) как ФизЛицо,
                    |    ЕстьNULL(Работники.Подразделение,Табель.Подразделение) как Подразделение,
                    |    ЕстьNULL(Табель.Период,1)Как Период,
                    |    ЕстьNULL(Табель.Часы,0)Как Часы,
                    |    ЕстьNULL(Табель.Дни,0) как  Дни,
                    |    ЕстьNULL(Табель.Прогул,0) как  Прогул,
                    |    ЕстьNULL(Табель.БС,0) как  БС,
                    |    ЕстьNULL(Табель.МО,0) как  МО,
                    |    ЕстьNULL(Табель.Бол,0) как  Бол,
                    |    ЕстьNULL(Табель.ТО,0) как  ТО
                    |ИЗ Табель как Табель
                    |   Полное СОЕДИНЕНИЕ Работники КАК Работники
                    |     ПО Табель.Физлицо = Работники.Физлицо
                    |     И  Табель.Подразделение = Работники.Подразделение
                    |Где Работники.Работает
                    |УПОРЯДОЧИТЬ ПО
                    |    Табель.ФизЛицо.Наименование
                    |ИТОГИ
                    |    СУММА(Часы),
                    |    СУММА(Дни),
                    |    СУММА(Прогул),
                    |    СУММА(БС),
                    |    СУММА(МО),
                    |    СУММА(Бол),
                    |    СУММА(ТО)
                    
                    |ПО
                    | Подразделение,
                    | ФизЛицо
3 temsa
 
05.04.15
16:04
ой простите


ПН =0;
    РезИтого = РезЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока РезИтого.Следующий() Цикл
        ОбластьПодр.Параметры.Заполнить(РезИтого);
        ДокументРезультат.Вывести(ОбластьПодр);    
        Рез = РезИтого.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        Пока Рез.Следующий() Цикл
        
            НайденнаяСтрока = ТЗ_2.Найти(Рез.ФизЛицо);
            Если Не НайденнаяСтрока = Неопределено Тогда
                ОбластьСтроки.Параметры.Должность = НайденнаяСтрока.Должность;
            КонецЕсли;    
            ПН = ПН+1;
            ОбластьСтроки.Параметры.ПН   = ПН;
            ОбластьСтроки.Параметры.ФИО  = Рез.ФизЛицо;
            ОбластьСтроки.Параметры.Часы = Рез.Часы;
            ОбластьСтроки.Параметры.Дни  = Рез.Дни;
            Рез2 = Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
            Для к = 1 по 31 Цикл
                ОбластьСтроки.Параметры["д"+к]  =  0;
            КонецЦикла;
            Пока Рез2.Следующий() Цикл
                ОбластьСтроки.Параметры["д"+Строка(Рез2.Период)]  = ОбластьСтроки.Параметры["д"+Строка(Рез2.Период)] +  Рез2.Часы;
            КонецЦикла;
            
            Рез2 = Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
            Пока Рез2.Следующий() Цикл
                Если Рез2.МО =1 Тогда
                    ОбластьСтроки.Параметры["д"+Строка(Рез2.Период)]  = "МО";
                КонецЕсли;    
                Если Рез2.ТО =1 Тогда
                    ОбластьСтроки.Параметры["д"+Строка(Рез2.Период)]  = "ТО";
                КонецЕсли;    
                Если Рез2.БС = 1 Тогда
                    ОбластьСтроки.Параметры["д"+Строка(Рез2.Период)]  = "БС";
                КонецЕсли;    
                Если Рез2.Прогул = 1 Тогда
                    ОбластьСтроки.Параметры["д"+Строка(Рез2.Период)]  = "П";
                КонецЕсли;    
                Если Рез2.Бол = 1 Тогда
                    ОбластьСтроки.Параметры["д"+Строка(Рез2.Период)]  = "Б";
                КонецЕсли;    
            КонецЦикла;
            
            ДокументРезультат.Вывести(ОбластьСтроки);    
        КонецЦикла;
    КонецЦикла;
4 temsa
 
05.04.15
16:26
Не стал заморачиватся  сдоп запросами или ТЗ или ВТ.

Сделал просто в цикле

Если Рез2.Дни > 0 Тогда
                    Если Рез2.Период = текПериод Тогда
                        
                    Иначе    
                        Дни = Дни +Рез2.Дни;
                    Конецесли;        
                    текПериод = Рез2.Период;
                Конецесли;    

))
5 fishb1
 
06.04.15
10:10
Можно первый запрос завернуть в подзапрос, перед помещением в таблицу Табель сгруппировать для поле "Дни" применить МАКСИМУМ() (т.е. будет если 0 то 0, если хоть одна единица - то 1).

P.S.
УПОРЯДОЧИТЬ ПО
    Табель.ФизЛицо.Наименование

Немного режет глаз, лучше использовать АВТОУПОРЯДОЧИВАНИЕ. :)