Задача: получить в ЗУП 2.5 за определенный период все отпуска и больничные по сотруднику
вот пример запроса и кода:
//Получим все отпуска и больничные Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ОсновныеНачисленияРаботниковОрганизаций.ПериодДействия, | ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияНачало, | ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияКонец, | ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета, | ОсновныеНачисленияРаботниковОрганизаций.Сотрудник, | ОсновныеНачисленияРаботниковОрганизаций.Результат, | ОсновныеНачисленияРаботниковОрганизаций.НормаДней, | ОсновныеНачисленияРаботниковОрганизаций.НормаЧасов, | ОсновныеНачисленияРаботниковОрганизаций.ОтработаноДней, | ОсновныеНачисленияРаботниковОрганизаций.ОтработаноЧасов, | ОсновныеНачисленияРаботниковОрганизаций.ОтработаноДнейПоПятидневке |ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций |ГДЕ | ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета В(&ВидРасчета) | И ОсновныеНачисленияРаботниковОрганизаций.Сотрудник =Сотрудник | И ОсновныеНачисленияРаботниковОрганизаций.ПериодДействия МЕЖДУДатаН ИДатаК |"; кзСписокВидРасчета = Новый СписокЗначений; кзСписокВидРасчета.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарныеДни); кзСписокВидРасчета.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуБЛ); Запрос.УстановитьПараметр("ВидРасчета", кзСписокВидРасчета); Запрос.УстановитьПараметр("ДатаК", КонПериода); Запрос.УстановитьПараметр("ДатаН", НачалоМесяца(КонПериода)); Запрос.УстановитьПараметр("Сотрудник", Сотрудник); РезультатЧасовОтпускИБолн = Запрос.Выполнить().Выбрать();
// Отбирать нужно за 1 месяц // Выводит: Сотрудник, Организация, Норма в часах, норма в днях Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НАЧАЛОПЕРИОДА(Норма.ДатаКалендаря, МЕСЯЦ) КАК ПериодДействия, | СотрудникиОрганизаций.Ссылка КАК Сотрудник, | СотрудникиОрганизаций.ОбособленноеПодразделение КАК Организация, | СУММА(ВЫБОР | КОГДА Норма.ДатаКалендаря >= СотрудникиОрганизаций.ДатаПриемаНаРаботу | И Норма.ДатаКалендаря <= СотрудникиОрганизаций.ДатаУвольнения | ИЛИ Норма.ДатаКалендаря >= СотрудникиОрганизаций.ДатаПриемаНаРаботу | И СотрудникиОрганизаций.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) | ТОГДА Норма.НормаВЧасах | ИНАЧЕ 0 | КОНЕЦ) КАК НормаЧасов, | СУММА(ВЫБОР | КОГДА Норма.ДатаКалендаря >= СотрудникиОрганизаций.ДатаПриемаНаРаботу | И Норма.ДатаКалендаря <= СотрудникиОрганизаций.ДатаУвольнения | ИЛИ Норма.ДатаКалендаря >= СотрудникиОрганизаций.ДатаПриемаНаРаботу | И СотрудникиОрганизаций.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) | ТОГДА Норма.НормаВДнях | ИНАЧЕ 0 | КОНЕЦ) КАК НормаДней |ИЗ | (ВЫБРАТЬ | СУММА(ВЫБОР | КОГДА Норма.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий) | ТОГДА 8 | ИНАЧЕ ВЫБОР | КОГДА Норма.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный) | ТОГДА 7 | ИНАЧЕ 0 | КОНЕЦ | КОНЕЦ) КАК НормаВЧасах, | Норма.ДатаКалендаря КАК ДатаКалендаря, | ВЫБОР | КОГДА Норма.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий) | ТОГДА 1 | ИНАЧЕ ВЫБОР | КОГДА Норма.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный) | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ | КОНЕЦ КАК НормаВДнях | ИЗ | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Норма | ГДЕ | Норма.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода | | СГРУППИРОВАТЬ ПО | Норма.ДатаКалендаря, | ВЫБОР | КОГДА Норма.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий) | ТОГДА 1 | ИНАЧЕ ВЫБОР | КОГДА Норма.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный) | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ | КОНЕЦ) КАК Норма, | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций | |СГРУППИРОВАТЬ ПО | НАЧАЛОПЕРИОДА(Норма.ДатаКалендаря, МЕСЯЦ), | СотрудникиОрганизаций.Ссылка, | СотрудникиОрганизаций.ОбособленноеПодразделение"; Запрос.УстановитьПараметр("КонецПериода", Дата("31.05.2012 0:00:00")); Запрос.УстановитьПараметр("НачалоПериода", Дата("01.05.2012 0:00:00")); Результат = Запрос.Выполнить(); Выборка = Результат.Выгрузить(); Для каждого СтрокаТЗ Из Выборка Цикл КонецЦикла;