Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PlugFox/8426888e3c201257903e0e15bc55e022 to your computer and use it in GitHub Desktop.
Save PlugFox/8426888e3c201257903e0e15bc55e022 to your computer and use it in GitHub Desktop.
Запрос отбора рабочего времени
////////////////////////////////////////////////////////////////////////////////////////////////
// Отбор рабочего времени использует метод Islands and Gaps,
// результат собирается из 2-х различных способов вычисления нахождения на рабочем месте
// (от каждого берется наибольшее значение)
// Входные параметры запроса:
// Дата - любая дата внутри месяца за который нужно получить рабочее время
// Сотрудник - сотрудник, по которому необходимо получить данные (если пустая ссылка, то по всем)
// Используемый регистр сведений содержит следующие измерения:
// Период, Время, Сотрудник, Дверь, Направление
////////////////////////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////////////////////////
// Делаю основную выборку данных по проходам из РС
////////////////////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Сотрудник КАК Сотрудник,
Сотрудник.НормаВремениЗаСмену КАК НормаВремениЗаСмену,
Период КАК День,
ДобавитьКДате(Период, СЕКУНДА, РазностьДат(ДАТАВРЕМЯ(1, 1, 1), Время, СЕКУНДА)) КАК Дата,
Направление КАК Направление,
Дверь КАК Дверь,
ВЫБОР
КОГДА Сотрудник.НормаВремениЗаСмену >= 12
ТОГДА 9
ИНАЧЕ 6
КОНЕЦ КАК МинимальноеВремяДома
ПОМЕСТИТЬ ПроходыСигур
ИЗ
РегистрСведений.ПроходыСигур
ГДЕ
Период Между ДобавитьКДате(НачалоПериода(&Дата, МЕСЯЦ), ДЕНЬ, -2) И ДобавитьКДате(КонецПериода(&Дата, МЕСЯЦ), ДЕНЬ, 2)
И ВЫБОР
КОГДА &Сотрудник = Значение(Справочник.Сотрудники.ПустаяСсылка)
ТОГДА Истина
ИНАЧЕ Сотрудник = &Сотрудник
КОНЕЦ
;
//
//
////////////////////////////////////////////////////////////////////////////////////////////////
// 1-ый способ расчета, ищутся пары Вход-Выход для входных дверей,
// которые вписываются в условие между 2 часами И (нормой времени за смену * 2 + 3)
////////////////////////////////////////////////////////////////////////////////////////////////
// Добавляю к исходным данным за три дня до и после даты входа и выхода
// на случай если там ничего нет
// Например: выходные-праздники-отпуск
ВЫБРАТЬ Дата, Сотрудник, МинимальноеВремяДома
ПОМЕСТИТЬ Дано
ИЗ ПроходыСигур КАК ПроходыСигур
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ РАЗЛИЧНЫЕ ДобавитьКДате(НачалоПериода(&Дата, МЕСЯЦ), ДЕНЬ, -3), Сотрудник, МинимальноеВремяДома
ИЗ ПроходыСигур КАК ПроходыСигур
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ РАЗЛИЧНЫЕ ДобавитьКДате(КонецПериода(&Дата, МЕСЯЦ), ДЕНЬ, 3), Сотрудник, МинимальноеВремяДома
ИЗ ПроходыСигур КАК ПроходыСигур
ИНДЕКСИРОВАТЬ ПО Дата, Сотрудник
;
////////////////////////////////////////////////////////////////////////////////////////////////
// Отбираю периоды 'отсутсвий' на работе больше N часов
ВЫБРАТЬ
Максимум(Раньше.Дата) КАК От,
Дано.Дата КАК До,
Дано.Сотрудник КАК Сотрудник,
Дано.МинимальноеВремяДома КАК МинимальноеВремяДома
ПОМЕСТИТЬ Отсутствия
ИЗ
Дано КАК Раньше
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Дано КАК Дано
ПО Раньше.Сотрудник = Дано.Сотрудник
И Раньше.Дата < Дано.Дата
СГРУППИРОВАТЬ ПО
Дано.Сотрудник,
Дано.Дата,
Дано.МинимальноеВремяДома
ИМЕЮЩИЕ
РазностьДат(Максимум(Раньше.Дата), Дано.Дата, ЧАС) > Дано.МинимальноеВремяДома
ИНДЕКСИРОВАТЬ ПО Сотрудник, От, До
;
УНИЧТОЖИТЬ Дано
;
////////////////////////////////////////////////////////////////////////////////////////////////
// Строю присутсвия на основании отсутсвий
ВЫБРАТЬ
Отсутствия.Сотрудник КАК Сотрудник,
Максимум(Раньше.До) КАК От,
Отсутствия.От КАК До,
ПроходыСигур.НормаВремениЗаСмену КАК НормаВремениЗаСмену
ПОМЕСТИТЬ НахождениеНаРаботе
ИЗ
Отсутствия КАК Отсутствия
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Отсутствия КАК Раньше
ПО Отсутствия.Сотрудник = Раньше.Сотрудник И Раньше.До < Отсутствия.От
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПроходыСигур КАК ПроходыСигур
ПО Отсутствия.Сотрудник = ПроходыСигур.Сотрудник
СГРУППИРОВАТЬ ПО
Отсутствия.От,
Отсутствия.Сотрудник,
ПроходыСигур.НормаВремениЗаСмену
;
УНИЧТОЖИТЬ Отсутствия
;
////////////////////////////////////////////////////////////////////////////////////////////////
// Получаю результат способа 1
ВЫБРАТЬ
Сотрудник КАК Сотрудник,
День(От) КАК День,
От КАК От,
До КАК До,
ВЫБОР
КОГДА РазностьДат(От, До, МИНУТА)/60 МЕЖДУ 24 И НормаВремениЗаСмену*2+3
ТОГДА 24
ИНАЧЕ РазностьДат(От, До, МИНУТА)/60
КОНЕЦ КАК ЧасовНаРаботе,
НормаВремениЗаСмену КАК НормаВремениЗаСмену
ПОМЕСТИТЬ Способ1
ИЗ НахождениеНаРаботе
ГДЕ
От Между НачалоПериода(&Дата, МЕСЯЦ) И КонецПериода(&Дата, МЕСЯЦ)
И РазностьДат(От, До, ЧАС) МЕЖДУ 2 И НормаВремениЗаСмену*2+3
;
УНИЧТОЖИТЬ НахождениеНаРаботе
;
//
//
////////////////////////////////////////////////////////////////////////////////////////////////
// 2-ый способ расчета, ищутся пары Вход-Выход для входных дверей,
// которые вписываются в условие между 2 часами и нормой времени за смену * 1.5
////////////////////////////////////////////////////////////////////////////////////////////////
// Собираю данные по входам, беру только двери ведущие на внешнюю территорию
ВЫБРАТЬ Сотрудник, НормаВремениЗаСмену, День, Дата
ПОМЕСТИТЬ Входы
ИЗ ПроходыСигур
ГДЕ
Направление = Значение(Перечисление.НаправлениеПроходаСигур.Вход)
И Дверь В(Значение(Перечисление.ДвериСигур.Дверь04), Значение(Перечисление.ДвериСигур.Дверь07))
ИНДЕКСИРОВАТЬ ПО Сотрудник, Дата
;
////////////////////////////////////////////////////////////////////////////////////////////////
// Собираю данные по выходам, беру только двери ведущие на внешнюю территорию,
// а также расчитываю МинДатаВхода - означающае минимальную дату входа в пару к текущему выходу
ВЫБРАТЬ
Сотрудник, Дата,
ДобавитьКДате(Дата, ЧАС, -НормаВремениЗаСмену*1.5) КАК МинДатаВхода
ПОМЕСТИТЬ Выходы
ИЗ ПроходыСигур
ГДЕ
Направление = Значение(Перечисление.НаправлениеПроходаСигур.Выход)
И Дверь В(Значение(Перечисление.ДвериСигур.Дверь04), Значение(Перечисление.ДвериСигур.Дверь07))
;
УНИЧТОЖИТЬ ПроходыСигур
;
////////////////////////////////////////////////////////////////////////////////////////////////
// Собираю все возможные и допустимые пары Вход/Выход
ВЫБРАТЬ
Входы.Сотрудник КАК Сотрудник,
Входы.НормаВремениЗаСмену КАК НормаВремениЗаСмену,
Входы.День КАК День,
Входы.Дата КАК От,
Выходы.Дата КАК До,
Максимум(РазностьДат(Входы.Дата, Выходы.Дата, МИНУТА)/60) КАК ЧасовНаРаботе
ПОМЕСТИТЬ ВозможныеПериоды
ИЗ
Входы КАК Входы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Выходы КАК Выходы
ПО Входы.Сотрудник = Выходы.Сотрудник
И Входы.Дата МЕЖДУ Выходы.МинДатаВхода И Выходы.Дата
СГРУППИРОВАТЬ ПО
Входы.Сотрудник, Входы.НормаВремениЗаСмену, Входы.День, Входы.Дата, Выходы.Дата
ИМЕЮЩИЕ
Максимум(РазностьДат(Входы.Дата, Выходы.Дата, МИНУТА)/60) МЕЖДУ 2 И НормаВремениЗаСмену*2+3
;
УНИЧТОЖИТЬ Входы
;
УНИЧТОЖИТЬ Выходы
;
ВЫБРАТЬ
ВозможныеПериоды.Сотрудник КАК Сотрудник,
День(ВозможныеПериоды.День) КАК День,
ВозможныеПериоды.От КАК От,
ВозможныеПериоды.До КАК До,
ВозможныеПериоды.ЧасовНаРаботе КАК ЧасовНаРаботе,
ВозможныеПериоды.НормаВремениЗаСмену КАК НормаВремениЗаСмену
ПОМЕСТИТЬ Способ2
ИЗ
ВозможныеПериоды КАК ВозможныеПериоды
ГДЕ
От Между НачалоПериода(&Дата, МЕСЯЦ) И КонецПериода(&Дата, МЕСЯЦ)
;
УНИЧТОЖИТЬ ВозможныеПериоды
;
//
//
////////////////////////////////////////////////////////////////////////////////////////////////
// Объединяю данные двух запросов и привожу к ожидаемому виду
////////////////////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ *
ПОМЕСТИТЬ Общее
ИЗ Способ1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ *
ИЗ Способ2
;
УНИЧТОЖИТЬ Способ1
;
УНИЧТОЖИТЬ Способ2
;
////////////////////////////////////////////////////////////////////////////////////////////////
// После объединения оставляю только наибольшее зарегистрированное отработаное время,
// а также вычитаю час на обед для 8 часовой смены
// (если они находились на работе не меньше своей нормы - 2 часа)
ВЫБРАТЬ
ОбщееМакс.Сотрудник КАК Сотрудник,
ОбщееМакс.День КАК День,
Общее.От КАК От,
Общее.До КАК До,
ВЫБОР // ОбщееМакс.ЧасовНаРаботе,
КОГДА ОбщееМакс.ЧасовНаРаботе > Общее.НормаВремениЗаСмену-2 //
И Общее.НормаВремениЗаСмену < 12 //
ТОГДА ОбщееМакс.ЧасовНаРаботе-1 //
ИНАЧЕ ОбщееМакс.ЧасовНаРаботе //
КОНЕЦ КАК ЧасовНаРаботе, //
Общее.НормаВремениЗаСмену КАК НормаВремениЗаСмену
ПОМЕСТИТЬ Результат
ИЗ
Общее КАК Общее
ПРАВОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ Сотрудник, День, Максимум(ЧасовНаРаботе) КАК ЧасовНаРаботе
ИЗ Общее СГРУППИРОВАТЬ ПО Сотрудник, День) КАК ОбщееМакс
ПО Общее.Сотрудник = ОбщееМакс.Сотрудник
И Общее.День = ОбщееМакс.День
И Общее.ЧасовНаРаботе = ОбщееМакс.ЧасовНаРаботе
ИНДЕКСИРОВАТЬ ПО
ОбщееМакс.Сотрудник
;
УНИЧТОЖИТЬ Общее
;
////////////////////////////////////////////////////////////////////////////////////////////////
// Компоную по дням, а также добавляю правым соединением сотрудников у которых небыло проходов
ВЫБРАТЬ
С.Ссылка КАК Сотрудник,
С.Группа КАК Группа,
Максимум(ВЫБОР КОГДА Р.День = 01 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч1_От,
Максимум(ВЫБОР КОГДА Р.День = 01 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч1_До,
Максимум(ВЫБОР КОГДА Р.День = 01 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч1,
Максимум(ВЫБОР КОГДА Р.День = 02 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч2_От,
Максимум(ВЫБОР КОГДА Р.День = 02 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч2_До,
Максимум(ВЫБОР КОГДА Р.День = 02 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч2,
Максимум(ВЫБОР КОГДА Р.День = 03 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч3_От,
Максимум(ВЫБОР КОГДА Р.День = 03 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч3_До,
Максимум(ВЫБОР КОГДА Р.День = 03 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч3,
Максимум(ВЫБОР КОГДА Р.День = 04 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч4_От,
Максимум(ВЫБОР КОГДА Р.День = 04 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч4_До,
Максимум(ВЫБОР КОГДА Р.День = 04 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч4,
Максимум(ВЫБОР КОГДА Р.День = 05 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч5_От,
Максимум(ВЫБОР КОГДА Р.День = 05 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч5_До,
Максимум(ВЫБОР КОГДА Р.День = 05 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч5,
Максимум(ВЫБОР КОГДА Р.День = 06 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч6_От,
Максимум(ВЫБОР КОГДА Р.День = 06 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч6_До,
Максимум(ВЫБОР КОГДА Р.День = 06 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч6,
Максимум(ВЫБОР КОГДА Р.День = 07 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч7_От,
Максимум(ВЫБОР КОГДА Р.День = 07 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч7_До,
Максимум(ВЫБОР КОГДА Р.День = 07 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч7,
Максимум(ВЫБОР КОГДА Р.День = 08 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч8_От,
Максимум(ВЫБОР КОГДА Р.День = 08 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч8_До,
Максимум(ВЫБОР КОГДА Р.День = 08 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч8,
Максимум(ВЫБОР КОГДА Р.День = 09 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч9_От,
Максимум(ВЫБОР КОГДА Р.День = 09 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч9_До,
Максимум(ВЫБОР КОГДА Р.День = 09 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч9,
Максимум(ВЫБОР КОГДА Р.День = 10 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч10_От,
Максимум(ВЫБОР КОГДА Р.День = 10 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч10_До,
Максимум(ВЫБОР КОГДА Р.День = 10 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч10,
Максимум(ВЫБОР КОГДА Р.День = 11 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч11_От,
Максимум(ВЫБОР КОГДА Р.День = 11 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч11_До,
Максимум(ВЫБОР КОГДА Р.День = 11 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч11,
Максимум(ВЫБОР КОГДА Р.День = 12 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч12_От,
Максимум(ВЫБОР КОГДА Р.День = 12 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч12_До,
Максимум(ВЫБОР КОГДА Р.День = 12 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч12,
Максимум(ВЫБОР КОГДА Р.День = 13 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч13_От,
Максимум(ВЫБОР КОГДА Р.День = 13 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч13_До,
Максимум(ВЫБОР КОГДА Р.День = 13 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч13,
Максимум(ВЫБОР КОГДА Р.День = 14 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч14_От,
Максимум(ВЫБОР КОГДА Р.День = 14 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч14_До,
Максимум(ВЫБОР КОГДА Р.День = 14 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч14,
Максимум(ВЫБОР КОГДА Р.День = 15 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч15_От,
Максимум(ВЫБОР КОГДА Р.День = 15 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч15_До,
Максимум(ВЫБОР КОГДА Р.День = 15 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч15,
Максимум(ВЫБОР КОГДА Р.День = 16 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч16_От,
Максимум(ВЫБОР КОГДА Р.День = 16 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч16_До,
Максимум(ВЫБОР КОГДА Р.День = 16 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч16,
Максимум(ВЫБОР КОГДА Р.День = 17 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч17_От,
Максимум(ВЫБОР КОГДА Р.День = 17 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч17_До,
Максимум(ВЫБОР КОГДА Р.День = 17 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч17,
Максимум(ВЫБОР КОГДА Р.День = 18 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч18_От,
Максимум(ВЫБОР КОГДА Р.День = 18 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч18_До,
Максимум(ВЫБОР КОГДА Р.День = 18 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч18,
Максимум(ВЫБОР КОГДА Р.День = 19 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч19_От,
Максимум(ВЫБОР КОГДА Р.День = 19 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч19_До,
Максимум(ВЫБОР КОГДА Р.День = 19 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч19,
Максимум(ВЫБОР КОГДА Р.День = 20 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч20_От,
Максимум(ВЫБОР КОГДА Р.День = 20 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч20_До,
Максимум(ВЫБОР КОГДА Р.День = 20 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч20,
Максимум(ВЫБОР КОГДА Р.День = 21 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч21_От,
Максимум(ВЫБОР КОГДА Р.День = 21 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч21_До,
Максимум(ВЫБОР КОГДА Р.День = 21 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч21,
Максимум(ВЫБОР КОГДА Р.День = 22 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч22_От,
Максимум(ВЫБОР КОГДА Р.День = 22 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч22_До,
Максимум(ВЫБОР КОГДА Р.День = 22 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч22,
Максимум(ВЫБОР КОГДА Р.День = 23 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч23_От,
Максимум(ВЫБОР КОГДА Р.День = 23 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч23_До,
Максимум(ВЫБОР КОГДА Р.День = 23 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч23,
Максимум(ВЫБОР КОГДА Р.День = 24 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч24_От,
Максимум(ВЫБОР КОГДА Р.День = 24 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч24_До,
Максимум(ВЫБОР КОГДА Р.День = 24 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч24,
Максимум(ВЫБОР КОГДА Р.День = 25 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч25_От,
Максимум(ВЫБОР КОГДА Р.День = 25 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч25_До,
Максимум(ВЫБОР КОГДА Р.День = 25 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч25,
Максимум(ВЫБОР КОГДА Р.День = 26 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч26_От,
Максимум(ВЫБОР КОГДА Р.День = 26 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч26_До,
Максимум(ВЫБОР КОГДА Р.День = 26 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч26,
Максимум(ВЫБОР КОГДА Р.День = 27 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч27_От,
Максимум(ВЫБОР КОГДА Р.День = 27 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч27_До,
Максимум(ВЫБОР КОГДА Р.День = 27 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч27,
Максимум(ВЫБОР КОГДА Р.День = 28 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч28_От,
Максимум(ВЫБОР КОГДА Р.День = 28 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч28_До,
Максимум(ВЫБОР КОГДА Р.День = 28 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч28,
Максимум(ВЫБОР КОГДА Р.День = 29 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч29_От,
Максимум(ВЫБОР КОГДА Р.День = 29 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч29_До,
Максимум(ВЫБОР КОГДА Р.День = 29 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч29,
Максимум(ВЫБОР КОГДА Р.День = 30 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч30_От,
Максимум(ВЫБОР КОГДА Р.День = 30 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч30_До,
Максимум(ВЫБОР КОГДА Р.День = 30 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч30,
Максимум(ВЫБОР КОГДА Р.День = 31 ТОГДА Р.От ИНАЧЕ 0 КОНЕЦ) КАК Ч31_От,
Максимум(ВЫБОР КОГДА Р.День = 31 ТОГДА Р.До ИНАЧЕ 0 КОНЕЦ) КАК Ч31_До,
Максимум(ВЫБОР КОГДА Р.День = 31 ТОГДА Р.ЧасовНаРаботе ИНАЧЕ 0 КОНЕЦ) КАК Ч31,
Р.НормаВремениЗаСмену КАК НормаВремениЗаСмену,
Сумма(Р.ЧасовНаРаботе) КАК ИтогоЗаМесяц
ИЗ
Результат КАК Р
ПРАВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК С
ПО С.Ссылка = Р.Сотрудник
ГДЕ
ВЫБОР
КОГДА &Сотрудник = Значение(Справочник.Сотрудники.ПустаяСсылка)
ТОГДА Истина
ИНАЧЕ С.Ссылка = &Сотрудник
КОНЕЦ
СГРУППИРОВАТЬ ПО
С.Ссылка, Р.НормаВремениЗаСмену
УПОРЯДОЧИТЬ ПО
С.Ссылка ВОЗР
АВТОУПОРЯДОЧИВАНИЕ
;
УНИЧТОЖИТЬ Результат
////////////////////////////////////////////////////////////////////////////////////////////////
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment