|
Запрос с группировкой | ☑ | ||
---|---|---|---|---|
0
Neznakomka
27.09.12
✎
09:28
|
Помогите, пжалуйста с запросом. Строки необходимо группировать по ргистратору, а при этом вид отпуска писать просто "Отпуск", при этом начало периода брать меньшую дату , а окончание последнюю дату. то есть сгруппировать строки по регистратору. сейчас группирются, но группируются еще и по виду отпуска. а не должны
Запрос.УстановитьПараметр("СписокОтпусков", СписокОтпусков); Запрос.УстановитьПараметр("НеиспользованныйОтпуск", Перечисления.ИспользованиеОтпусковВидСтроки.НеиспользованныйОтпуск); Запрос.УстановитьПараметр("СостояниеОтпускЕжегодный", Перечисления.СостоянияРаботникаОрганизации.ОтпускЕжегодный); Запрос.УстановитьПараметр("РегистрацияОтпуска", Перечисления.ИспользованиеОтпусковВидСтроки.РегистрацияОтпуска); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ИспользованиеОтпуска.ВидТрудовогоОтпуска.ОчередностьПредоставленияОтпуска КАК ОчередностьПредоставленияОтпуска, | ВЫБОР | КОГДА НЕ ИспользованиеОтпуска.ВидТрудовогоОтпуска ЕСТЬ NULL | ТОГДА ИспользованиеОтпуска.ВидТрудовогоОтпуска.Наименование | ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ПериодыОтпуска.Состояние) | КОНЕЦ КАК ВидОтпуска, | ИспользованиеОтпуска.РабочийГодС КАК РабочийГодС, | ИспользованиеОтпуска.РабочийГодПо КАК РабочийГодПо, | МАКСИМУМ(ВЫБОР | КОГДА НЕ ИспользованиеОтпуска.Период ЕСТЬ NULL | ТОГДА ИспользованиеОтпуска.Период | ИНАЧЕ ПериодыОтпуска.НачалоОтпуска | КОНЕЦ) КАК Период, | МАКСИМУМ(ВЫБОР | КОГДА НЕ ИспользованиеОтпуска.ДатаНачала ЕСТЬ NULL | ТОГДА ИспользованиеОтпуска.ДатаНачала | ИНАЧЕ ПериодыОтпуска.НачалоОтпуска | КОНЕЦ) КАК НачалоОтпуска, | МАКСИМУМ(ВЫБОР | КОГДА НЕ ИспользованиеОтпуска.ДатаОкончания ЕСТЬ NULL | ТОГДА ИспользованиеОтпуска.ДатаОкончания | ИНАЧЕ ДОБАВИТЬКДАТЕ(ПериодыОтпуска.ОкончаниеОтпуска, ДЕНЬ, -1) | КОНЕЦ) КАК ОкончаниеОтпуска, | СУММА(ВЫБОР | КОГДА НЕ ИспользованиеОтпуска.ИспользованоДней ЕСТЬ NULL | ТОГДА ИспользованиеОтпуска.ИспользованоДней | ИНАЧЕ РАЗНОСТЬДАТ(ПериодыОтпуска.НачалоОтпуска, ПериодыОтпуска.ОкончаниеОтпуска, ДЕНЬ) | КОНЕЦ) КАК Продолжительность, | ВЫБОР | КОГДА НЕ ИспользованиеОтпуска.ВидСтроки ЕСТЬ NULL | ТОГДА ПРЕДСТАВЛЕНИЕ(ИспользованиеОтпуска.ВидСтроки) | ИНАЧЕ """" | КОНЕЦ КАК ВидСтроки, | ПериодыОтпуска.Регистратор КАК Регистратор, | ПериодыОтпуска.Регистратор.Дата КАК ДатаПриказа, | ПериодыОтпуска.Регистратор.Номер КАК НомерПриказа |ИЗ | (ВЫБРАТЬ | ДатыУходаВОтпуск.Период КАК НачалоОтпуска, | ВЫБОР | КОГДА ДатыУходаВОтпуск.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1) | ИЛИ ДатыУходаВОтпуск.ПериодЗавершения > МИНИМУМ(ДОБАВИТЬКДАТЕ(ДатыВозвращенияИзОтпуска.Период, ДЕНЬ, -1)) | ТОГДА МИНИМУМ(ДОБАВИТЬКДАТЕ(ДатыВозвращенияИзОтпуска.Период, ДЕНЬ, -1)) | ИНАЧЕ ДатыУходаВОтпуск.ПериодЗавершения | КОНЕЦ КАК ОкончаниеОтпуска, | ДатыУходаВОтпуск.Состояние КАК Состояние, | ДатыУходаВОтпуск.Регистратор КАК Регистратор | ИЗ | РегистрСведений.СостояниеРаботниковОрганизаций КАК ДатыУходаВОтпуск | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций КАК ДатыВозвращенияИзОтпуска | ПО ДатыУходаВОтпуск.Сотрудник = ДатыВозвращенияИзОтпуска.Сотрудник | И ДатыУходаВОтпуск.Организация = ДатыВозвращенияИзОтпуска.Организация | И ДатыУходаВОтпуск.Период < ДатыВозвращенияИзОтпуска.Период | ГДЕ | ДатыУходаВОтпуск.Период МЕЖДУ &ДатаПриема И &ДатаАктуальности | И ДатыУходаВОтпуск.Состояние В(&СписокОтпусков) | И ДатыУходаВОтпуск.Сотрудник.Физлицо = &ФизЛицо | И ДатыУходаВОтпуск.Регистратор.Организация В(&СписокСтруктурныхЕдиниц) | И (ДатыУходаВОтпуск.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | ИЛИ НЕ ДатыВозвращенияИзОтпуска.Период ЕСТЬ NULL ) | | СГРУППИРОВАТЬ ПО | ДатыУходаВОтпуск.Период, | ДатыУходаВОтпуск.ПериодЗавершения, | ДатыУходаВОтпуск.Состояние, | ДатыУходаВОтпуск.Регистратор) КАК ПериодыОтпуска | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | НАЧАЛОПЕРИОДА(ИспользованиеОтпуска.Период, ДЕНЬ) КАК Период, | ИспользованиеОтпуска.ДатаНачала КАК ДатаНачала, | ИспользованиеОтпуска.ДатаОкончания КАК ДатаОкончания, | ИспользованиеОтпуска.ВидТрудовогоОтпуска КАК ВидТрудовогоОтпуска, | ИспользованиеОтпуска.ВидСтроки КАК ВидСтроки, | ИспользованиеОтпуска.ИспользованоДней КАК ИспользованоДней, | ИспользованиеОтпуска.РабочийГодС КАК РабочийГодС, | ИспользованиеОтпуска.РабочийГодПо КАК РабочийГодПо | ИЗ | РегистрНакопления.ИспользованиеОтпусковРаботникамиОрганизаций КАК ИспользованиеОтпуска | ГДЕ | ИспользованиеОтпуска.Период МЕЖДУ &ДатаПриема И КОНЕЦПЕРИОДА(&ДатаАктуальности, ДЕНЬ) | И ИспользованиеОтпуска.Сотрудник.Физлицо = &ФизЛицо | И ИспользованиеОтпуска.Организация В(&СписокГоловныхОрганизаций) | И ИспользованиеОтпуска.ВидСтроки В(&РегистрацияОтпуска)) КАК ИспользованиеОтпуска | ПО ПериодыОтпуска.НачалоОтпуска = ИспользованиеОтпуска.Период | И (ПериодыОтпуска.Состояние = &СостояниеОтпускЕжегодный) | |СГРУППИРОВАТЬ ПО | ПериодыОтпуска.Регистратор, | ПериодыОтпуска.Регистратор.Дата, | ПериодыОтпуска.Регистратор.Номер, | ИспользованиеОтпуска.ВидТрудовогоОтпуска.ОчередностьПредоставленияОтпуска, | ИспользованиеОтпуска.РабочийГодПо, | ИспользованиеОтпуска.РабочийГодС, | ВЫБОР | КОГДА НЕ ИспользованиеОтпуска.ВидТрудовогоОтпуска ЕСТЬ NULL | ТОГДА ИспользованиеОтпуска.ВидТрудовогоОтпуска.Наименование | ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ПериодыОтпуска.Состояние) | КОНЕЦ, | ВЫБОР | КОГДА НЕ ИспользованиеОтпуска.ВидСтроки ЕСТЬ NULL | ТОГДА ПРЕДСТАВЛЕНИЕ(ИспользованиеОтпуска.ВидСтроки) | ИНАЧЕ """" | КОНЕЦ | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ИспользованиеОтпуска.ВидТрудовогоОтпуска.ОчередностьПредоставленияОтпуска, | ИспользованиеОтпуска.ВидТрудовогоОтпуска.Наименование, | ИспользованиеОтпуска.РабочийГодС, | ИспользованиеОтпуска.РабочийГодПо, | ИспользованиеОтпуска.Период, | ВЫБОР | КОГДА ИспользованиеОтпуска.ДатаНачала <> ДАТАВРЕМЯ(1, 1, 1) | ТОГДА ИспользованиеОтпуска.ДатаНачала | ИНАЧЕ НАЧАЛОПЕРИОДА(ИспользованиеОтпуска.Период, ДЕНЬ) | КОНЕЦ, | ИспользованиеОтпуска.ДатаОкончания, | ИспользованиеОтпуска.ИспользованоДней, | ПРЕДСТАВЛЕНИЕ(ИспользованиеОтпуска.ВидСтроки), | ИспользованиеОтпуска.Регистратор, | ИспользованиеОтпуска.Регистратор.Дата, | ИспользованиеОтпуска.Регистратор.Номер |ИЗ | РегистрНакопления.ИспользованиеОтпусковРаботникамиОрганизаций КАК ИспользованиеОтпуска |ГДЕ | ИспользованиеОтпуска.Период МЕЖДУ &ДатаПриема И КОНЕЦПЕРИОДА(&ДатаАктуальности, ДЕНЬ) | И ИспользованиеОтпуска.Регистратор.Организация В(&СписокСтруктурныхЕдиниц) | И ИспользованиеОтпуска.Сотрудник.Физлицо = &ФизЛицо | И НЕ ИспользованиеОтпуска.ВидСтроки В (&НеиспользованныйОтпуск, &РегистрацияОтпуска) | |УПОРЯДОЧИТЬ ПО | Период, | НачалоОтпуска, | ОчередностьПредоставленияОтпуска"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаРезультата = РезультатЗапроса.Выбрать(); инд = 0; Пока ВыборкаРезультата.Следующий() Цикл инд = инд + 1; СтрокаОтпуска.Параметры.Заполнить(ВыборкаРезультата); Если ВыборкаРезультата.РабочийГодС <> NULL Тогда СтрокаОтпуска.Параметры.ОтпускЗаПериод = Формат(ВыборкаРезультата.РабочийГодС,"ДФ=дд.ММ.гг") + "-" + Формат(ВыборкаРезультата.РабочийГодПо,"ДФ=дд.ММ.гг"); Иначе СтрокаОтпуска.Параметры.ОтпускЗаПериод = ""; КонецЕсли; СтрокаОтпуска.Параметры.ОснованиеОтпуска = ?(ВыборкаРезультата.ВидСтроки <> "", СокрЛП(ВыборкаРезультата.ВидСтроки) + " ", "") + "пр.№ "+ СокрЛП(ВыборкаРезультата.НомерПриказа) + " от " + Формат(ВыборкаРезультата.ДатаПриказа, "ДФ=dd.MM.yy"); ДокументРезультат.Вывести(СтрокаОтпуска); КонецЦикла; |
|||
1
Loyt
27.09.12
✎
10:01
|
(0) Если вид отпуска не нужен, нафига его тогда вообще в поля добавлять? Убери и не будет по нему группировать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |