ЗУП 3.1.14.154. В июле начисляется зарплата сотруднику 23000 руб.
По графику у него 22 явки и 1 день ОН (1 июля). В настройках стоит галочка "указ от 1 июля".
Соответственно 1 июля не должно включаться в средний.
В регистр "Данные о начислениях для расчета среднего (общий)" должно попасть:
23 000 руб / 23 * 22 = 22000 руб. А попадает 21083.33 руб.
Какая может быть причина такого поведения? В демо базе смоделировал ситуацию - там все правильно 22000 руб. Уж и базу тестировал - не помогает.
(8) Эта настройка добавляет отработанные дни (часы) к ЯВКЕ по указанным видам времени. Вы добавили неопл. дни, норма стала не 23, а 24 дня, т.к. это для программы дополнительные к рабочим дни, а отработанными остались те же 22, вот и получилось 21083,33.
(4)Это я для упрощения ситуации. Я вот сейчас экспериментирую. Принял нового сотрудника с таким же начислением - считает некорректно. Поменял вместо "Оплата по окладу" на "Оплата по окладу (по часам)" - считает корректно. Похоже какая-то проблема именно с начислением, но не пойму какая - формула как и в демо базе, на закладке "Средний заработок" настройки те же.
(8) Эта настройка добавляет отработанные дни (часы) к ЯВКЕ по указанным видам времени. Вы добавили неопл. дни, норма стала не 23, а 24 дня, т.к. это для программы дополнительные к рабочим дни, а отработанными остались те же 22, вот и получилось 21083,33.
(9) Как оказалось бухгалтера использовали эту настройку для того, чтобы отгулы не уменьшали оклад сотрудника. Но в данном месяце у сотрудника не было отгулов. Получается, что норма времени увеличилась за счет 24 июня (оплачиваемого нерабочего дня (ОН)). Разве это корректное поведение, ведь для ОН есть свой вид времени - "оплачиваемые нерабочие дни", а не "дополнительные выходные дни (неоплачиваемые)". Или я что - то не понимаю?
(12) Да по этой статье. Теперь непонятно что делать. Получается нужно выбирать или неправильно считается средний заработок, или неправильно считается зарплата из-за отгулов.
(16) Ну самое простое можно было попробовать убрать доп.время и пересчитать средний за июль, потом вернуть настройку обратно и ждать исправления. А то может там 1 отгул, его пересчитать вручную проще ведь.
(20)
Возможно временно поможет и вам: нужно через конфигуратор функцию "КоэффициентыОплаченногоРабочегоВремениНачислений" в общем модуле "РасчетЗарплатыРасширенный" заменить на нижеследующую:
Функция КоэффициентыОплаченногоРабочегоВремениНачислений(МенеджерВременныхТаблиц) Экспорт
Коэффициенты = Новый ТаблицаЗначений;
Коэффициенты.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
Коэффициенты.Колонки.Добавить("ВидРасчета", Новый ОписаниеТипов("ПланВидовРасчетаСсылка.Начисления"));
Коэффициенты.Колонки.Добавить("Месяц", Новый ОписаниеТипов("Дата"));
Коэффициенты.Колонки.Добавить("Сторно", Новый ОписаниеТипов("Булево"));
Коэффициенты.Колонки.Добавить("Коэффициент", Новый ОписаниеТипов("Число"));
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ВыделятьНерабочиеДниОтдельнымВидомВремени", УчетРабочегоВремениРасширенный.ВыделятьНерабочиеДниОтдельнымВидомВремени());
Запрос.УстановитьПараметр("ОплачиваемыеНерабочиеДни",
ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.ОплачиваемыеНерабочиеДни"));
Запрос.УстановитьПараметр("РабочееВремя",
ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РабочееВремя"));
Запрос.Текст =
"ВЫБРАТЬ
| НачисленияФактическийПериодДействия.Сотрудник КАК Сотрудник,
| НачисленияФактическийПериодДействия.ПериодДействия КАК Месяц,
| НачисленияФактическийПериодДействия.ВидРасчета КАК ВидРасчета,
| НачисленияФактическийПериодДействия.ПериодДействияНачало КАК ПериодДействияНачало,
| НачисленияФактическийПериодДействия.ПериодДействияКонец КАК ПериодДействияКонец,
| НачисленияФактическийПериодДействия.ГрафикРаботы КАК ГрафикРаботы,
| НачисленияФактическийПериодДействия.ОбщийГрафик КАК ОбщийГрафик,
| НачисленияФактическийПериодДействия.ПериодРегистрацииВремени КАК ПериодРегистрацииВремени,
| НачисленияФактическийПериодДействия.ВремяВЧасах КАК ВремяВЧасах,
| НачисленияФактическийПериодДействия.ПериодРегистрации КАК ПериодРегистрации,
//++ Исправление
|НачисленияФактическийПериодДействия.ОтработаноДней КАК ОтработаноДней,
|НачисленияФактическийПериодДействия.ОтработаноЧасов КАК ОтработаноЧасов,
//-- Исправление
| НачисленияФактическийПериодДействия.Сторно КАК Сторно
|ПОМЕСТИТЬ ВТНачисленияСотрудниковПредварительно
|ИЗ
| РегистрРасчета.Начисления.ФактическийПериодДействия(
| (Сотрудник, ПериодДействия) В
| (ВЫБРАТЬ
| СотрудникиМесяцы.Сотрудник,
| СотрудникиМесяцы.Месяц
| ИЗ
| ВТСотрудникиМесяцы КАК СотрудникиМесяцы)) КАК НачисленияФактическийПериодДействия
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТНачисленияСотрудниковПредварительно.Сотрудник КАК Сотрудник,
| ВТНачисленияСотрудниковПредварительно.Месяц КАК Месяц,
| ВТНачисленияСотрудниковПредварительно.ВидРасчета КАК ВидРасчета,
| ВТНачисленияСотрудниковПредварительно.ПериодДействияНачало КАК ПериодДействияНачало,
| ВТНачисленияСотрудниковПредварительно.ПериодДействияКонец КАК ПериодДействияКонец,
| ВТНачисленияСотрудниковПредварительно.ГрафикРаботы КАК ГрафикРаботы,
| ВТНачисленияСотрудниковПредварительно.ОбщийГрафик КАК ОбщийГрафик,
| ВТНачисленияСотрудниковПредварительно.ПериодРегистрацииВремени КАК ПериодРегистрацииВремени,
| ВТНачисленияСотрудниковПредварительно.ВремяВЧасах КАК ВремяВЧасах,
//++ Исправление
|ВТНачисленияСотрудниковПредварительно.ОтработаноДней КАК ОтработаноДней,
|ВТНачисленияСотрудниковПредварительно.ОтработаноЧасов КАК ОтработаноЧасов,
//-- Исправление
| ВТНачисленияСотрудниковПредварительно.Сторно КАК Сторно
|ПОМЕСТИТЬ ВТНачисленияСотрудников
|ИЗ
| ВТНачисленияСотрудниковПредварительно КАК ВТНачисленияСотрудниковПредварительно
| ЛЕВОЕ СОЕДИНЕНИЕ ВТНачисленияСотрудниковПредварительно КАК ВТНачисленияСотрудниковПредварительноСторно
| ПО ВТНачисленияСотрудниковПредварительно.Сотрудник = ВТНачисленияСотрудниковПредварительноСторно.Сотрудник
| И ВТНачисленияСотрудниковПредварительно.Месяц = ВТНачисленияСотрудниковПредварительноСторно.Месяц
| И ВТНачисленияСотрудниковПредварительно.ВидРасчета = ВТНачисленияСотрудниковПредварительноСторно.ВидРасчета
| И ВТНачисленияСотрудниковПредварительно.ПериодДействияНачало = ВТНачисленияСотрудниковПредварительноСторно.ПериодДействияНачало
| И ВТНачисленияСотрудниковПредварительно.ПериодДействияКонец = ВТНачисленияСотрудниковПредварительноСторно.ПериодДействияКонец
| И ВТНачисленияСотрудниковПредварительно.ПериодРегистрации < ВТНачисленияСотрудниковПредварительноСторно.ПериодРегистрации
| И (ВТНачисленияСотрудниковПредварительноСторно.Сторно)
|ГДЕ
| ВТНачисленияСотрудниковПредварительноСторно.Сотрудник ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТНачисленияСотрудников.Сотрудник КАК Сотрудник,
| ВТНачисленияСотрудников.ВидРасчета.УчитыватьВесьЗаработок КАК УчитыватьВесьЗаработок,
| ВТНачисленияСотрудников.ВремяВЧасах КАК ВремяВЧасах,
| ВТНачисленияСотрудников.Месяц КАК Месяц,
| ВТНачисленияСотрудников.ВидРасчета КАК ВидРасчета,
| ВТНачисленияСотрудников.ПериодДействияНачало КАК ПериодДействияНачало,
| ВТНачисленияСотрудников.ПериодДействияКонец КАК ПериодДействияКонец,
| ВТНачисленияСотрудников.ГрафикРаботы КАК ГрафикРаботы,
| ВТНачисленияСотрудников.Сторно КАК Сторно,
//++ Исправление
//| СУММА(ВЫБОР
//| КОГДА &ВыделятьНерабочиеДниОтдельнымВидомВремени
//| И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ОплачиваемыеНерабочиеДни
//| И НачисленияВидыВремени.ВидВремени = &РабочееВремя
//| ТОГДА 0
//| ИНАЧЕ ЕСТЬNULL(ГрафикиРаботыПоВидамВремени.ОсновноеЗначение, 0)
//| КОНЕЦ) КАК ОтработаноДней,
//| СУММА(ВЫБОР
//| КОГДА &ВыделятьНерабочиеДниОтдельнымВидомВремени
//| И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ОплачиваемыеНерабочиеДни
//| И НачисленияВидыВремени.ВидВремени = &РабочееВремя
//| ТОГДА 0
//| ИНАЧЕ ЕСТЬNULL(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначение, 0)
//| КОНЕЦ) КАК ОтработаноЧасов,
//-- Исправление
| СУММА(ВЫБОР
| КОГДА &ВыделятьНерабочиеДниОтдельнымВидомВремени
| И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ОплачиваемыеНерабочиеДни
| И НЕ ПериодыНерабочихДнейКалендаря.НомерПериода ЕСТЬ NULL
| ТОГДА ЕСТЬNULL(ГрафикиРаботыПоВидамВремени.ОсновноеЗначение, 0)
| ИНАЧЕ 0
| КОНЕЦ) КАК Дней,
| СУММА(ВЫБОР
| КОГДА &ВыделятьНерабочиеДниОтдельнымВидомВремени
| И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ОплачиваемыеНерабочиеДни
| И НЕ ПериодыНерабочихДнейКалендаря.НомерПериода ЕСТЬ NULL
| ТОГДА ЕСТЬNULL(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначение, 0)
| ИНАЧЕ 0
| КОНЕЦ) КАК Часов
//++ Исправление
|ПОМЕСТИТЬ ВТИсправленная
//-- Исправление
|ИЗ
| ВТНачисленияСотрудников КАК ВТНачисленияСотрудников
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления.ВидыВремени КАК НачисленияВидыВремени
| ПО ВТНачисленияСотрудников.ВидРасчета = НачисленияВидыВремени.Ссылка
//++ Исправление
| И ЛОЖЬ
//-- Исправление
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
| ПО ВТНачисленияСотрудников.ГрафикРаботы = ГрафикиРаботыПоВидамВремени.ГрафикРаботы
| И ВТНачисленияСотрудников.Месяц = ГрафикиРаботыПоВидамВремени.Месяц
| И ВТНачисленияСотрудников.ПериодРегистрацииВремени = ГрафикиРаботыПоВидамВремени.ПериодРегистрации
| И (ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = НачисленияВидыВремени.ВидВремени
| ИЛИ ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ОплачиваемыеНерабочиеДни)
| И (ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ ВТНачисленияСотрудников.ПериодДействияНачало И ВТНачисленияСотрудников.ПериодДействияКонец)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПериодыНерабочихДнейКалендаря КАК ПериодыНерабочихДнейКалендаря
| ПО ВТНачисленияСотрудников.ОбщийГрафик.ПроизводственныйКалендарь = ПериодыНерабочихДнейКалендаря.ПроизводственныйКалендарь
| И (ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ ПериодыНерабочихДнейКалендаря.ДатаНачала И ПериодыНерабочихДнейКалендаря.ДатаОкончания)
|
|СГРУППИРОВАТЬ ПО
| ВТНачисленияСотрудников.Сотрудник,
| ВТНачисленияСотрудников.ВидРасчета.УчитыватьВесьЗаработок,
| ВТНачисленияСотрудников.ВремяВЧасах,
| ВТНачисленияСотрудников.Месяц,
| ВТНачисленияСотрудников.ВидРасчета,
| ВТНачисленияСотрудников.ПериодДействияНачало,
| ВТНачисленияСотрудников.ПериодДействияКонец,
| ВТНачисленияСотрудников.ГрафикРаботы,
| ВТНачисленияСотрудников.Сторно
|
//++ Исправление
|;
|ВЫБРАТЬ
| ВТНачисленияСотрудников.Сотрудник КАК Сотрудник,
| ВТНачисленияСотрудников.ВидРасчета.УчитыватьВесьЗаработок КАК УчитыватьВесьЗаработок,
| ВТНачисленияСотрудников.ВремяВЧасах КАК ВремяВЧасах,
| ВТНачисленияСотрудников.Месяц КАК Месяц,
| ВТНачисленияСотрудников.ВидРасчета КАК ВидРасчета,
| ВТНачисленияСотрудников.ПериодДействияНачало КАК ПериодДействияНачало,
| ВТНачисленияСотрудников.ПериодДействияКонец КАК ПериодДействияКонец,
| ВТНачисленияСотрудников.ГрафикРаботы КАК ГрафикРаботы,
| ВТНачисленияСотрудников.Сторно КАК Сторно,
| ВТНачисленияСотрудников.ОтработаноДней КАК ОтработаноДней,
| ВТНачисленияСотрудников.ОтработаноЧасов КАК ОтработаноЧасов,
| ВТИсправленная.Дней,
| ВТИсправленная.Часов
|ИЗ
| ВТНачисленияСотрудников КАК ВТНачисленияСотрудников
| ЛЕВОЕ СОЕДИНЕНИЕ ВТИсправленная КАК ВТИсправленная
| ПО ВТНачисленияСотрудников.Сотрудник = ВТИсправленная.Сотрудник
| И ВТНачисленияСотрудников.ВидРасчета.УчитыватьВесьЗаработок = ВТИсправленная.УчитыватьВесьЗаработок
| И ВТНачисленияСотрудников.ВремяВЧасах = ВТИсправленная.ВремяВЧасах
| И ВТНачисленияСотрудников.Месяц = ВТИсправленная.Месяц
| И ВТНачисленияСотрудников.ВидРасчета = ВТИсправленная.ВидРасчета
| И ВТНачисленияСотрудников.ПериодДействияНачало = ВТИсправленная.ПериодДействияНачало
| И ВТНачисленияСотрудников.ПериодДействияКонец = ВТИсправленная.ПериодДействияКонец
| И ВТНачисленияСотрудников.ГрафикРаботы = ВТИсправленная.ГрафикРаботы
| И ВТНачисленияСотрудников.Сторно = ВТИсправленная.Сторно
//-- Исправление
|УПОРЯДОЧИТЬ ПО
| Сотрудник,
| Месяц,
| ВидРасчета,
| Сторно";
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат Коэффициенты;
КонецЕсли;
Выборка = Результат.Выбрать();
Пока Выборка.СледующийПоЗначениюПоля("Сотрудник") Цикл
Пока Выборка.СледующийПоЗначениюПоля("Месяц") Цикл
Пока Выборка.СледующийПоЗначениюПоля("ВидРасчета") Цикл
Пока Выборка.СледующийПоЗначениюПоля("Сторно") Цикл
НоваяСтрока = Коэффициенты.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
ОбщееВремя = 0;
ОплачиваемоеНерабочееВремя = 0;
Пока Выборка.Следующий() Цикл
ОбщееВремя = ОбщееВремя +
?(Выборка.ВремяВЧасах, Выборка.ОтработаноЧасов, Выборка.ОтработаноДней);
ОплачиваемоеНерабочееВремя = ОплачиваемоеНерабочееВремя +
?(Выборка.ВремяВЧасах, Выборка.Часов, Выборка.Дней);
КонецЦикла;
НоваяСтрока.Коэффициент = ?(ОбщееВремя = 0, 1, (ОбщееВремя-ОплачиваемоеНерабочееВремя)/ОбщееВремя);
Если Выборка.УчитыватьВесьЗаработок
И НоваяСтрока.Коэффициент > 0 Тогда
НоваяСтрока.Коэффициент = 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Возврат Коэффициенты;
КонецФункции
(21) Доработанный под большее количество случаев вариант функции "КоэффициентыОплаченногоРабочегоВремениНачислений" в общем модуле "РасчетЗарплатыРасширенный".
Требования: версия 3.1.14.183, перерасчитать сотрудника и/или провести документ начисления
Функция КоэффициентыОплаченногоРабочегоВремениНачислений(МенеджерВременныхТаблиц) Экспорт
Коэффициенты = Новый ТаблицаЗначений;
Коэффициенты.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
Коэффициенты.Колонки.Добавить("ВидРасчета", Новый ОписаниеТипов("ПланВидовРасчетаСсылка.Начисления"));
Коэффициенты.Колонки.Добавить("Месяц", Новый ОписаниеТипов("Дата"));
Коэффициенты.Колонки.Добавить("Сторно", Новый ОписаниеТипов("Булево"));
Коэффициенты.Колонки.Добавить("Коэффициент", Новый ОписаниеТипов("Число"));
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ВыделятьНерабочиеДниОтдельнымВидомВремени", УчетРабочегоВремениРасширенный.ВыделятьНерабочиеДниОтдельнымВидомВремени());
Запрос.УстановитьПараметр("ОплачиваемыеНерабочиеДни",
ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.ОплачиваемыеНерабочиеДни"));
Запрос.УстановитьПараметр("РабочееВремя",
ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РабочееВремя"));
Запрос.Текст =
"ВЫБРАТЬ
| НачисленияФактическийПериодДействия.Сотрудник КАК Сотрудник,
| НачисленияФактическийПериодДействия.ПериодДействия КАК Месяц,
| НачисленияФактическийПериодДействия.ВидРасчета КАК ВидРасчета,
| НачисленияФактическийПериодДействия.ПериодДействияНачало КАК ПериодДействияНачало,
| НачисленияФактическийПериодДействия.ПериодДействияКонец КАК ПериодДействияКонец,
| НачисленияФактическийПериодДействия.ГрафикРаботы КАК ГрафикРаботы,
| НачисленияФактическийПериодДействия.ОбщийГрафик КАК ОбщийГрафик,
| НачисленияФактическийПериодДействия.ПериодРегистрацииВремени КАК ПериодРегистрацииВремени,
| НачисленияФактическийПериодДействия.ВремяВЧасах КАК ВремяВЧасах,
| НачисленияФактическийПериодДействия.ПериодРегистрации КАК ПериодРегистрации,
| НачисленияФактическийПериодДействия.Сторно КАК Сторно
|ПОМЕСТИТЬ ВТНачисленияСотрудниковПредварительно
|ИЗ
| РегистрРасчета.Начисления.ФактическийПериодДействия(
| (Сотрудник, ПериодДействия) В
| (ВЫБРАТЬ
| СотрудникиМесяцы.Сотрудник,
| СотрудникиМесяцы.Месяц
| ИЗ
| ВТСотрудникиМесяцы КАК СотрудникиМесяцы)) КАК НачисленияФактическийПериодДействия
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТНачисленияСотрудниковПредварительно.Сотрудник КАК Сотрудник,
| ВТНачисленияСотрудниковПредварительно.Месяц КАК Месяц,
| ВТНачисленияСотрудниковПредварительно.ВидРасчета КАК ВидРасчета,
| ВТНачисленияСотрудниковПредварительно.ПериодДействияНачало КАК ПериодДействияНачало,
| ВТНачисленияСотрудниковПредварительно.ПериодДействияКонец КАК ПериодДействияКонец,
| ВТНачисленияСотрудниковПредварительно.ГрафикРаботы КАК ГрафикРаботы,
| ВТНачисленияСотрудниковПредварительно.ОбщийГрафик КАК ОбщийГрафик,
| ВТНачисленияСотрудниковПредварительно.ПериодРегистрацииВремени КАК ПериодРегистрацииВремени,
| ВТНачисленияСотрудниковПредварительно.ВремяВЧасах КАК ВремяВЧасах,
| ВТНачисленияСотрудниковПредварительно.Сторно КАК Сторно
|ПОМЕСТИТЬ ВТНачисленияСотрудников
|ИЗ
| ВТНачисленияСотрудниковПредварительно КАК ВТНачисленияСотрудниковПредварительно
| ЛЕВОЕ СОЕДИНЕНИЕ ВТНачисленияСотрудниковПредварительно КАК ВТНачисленияСотрудниковПредварительноСторно
| ПО ВТНачисленияСотрудниковПредварительно.Сотрудник = ВТНачисленияСотрудниковПредварительноСторно.Сотрудник
| И ВТНачисленияСотрудниковПредварительно.Месяц = ВТНачисленияСотрудниковПредварительноСторно.Месяц
| И ВТНачисленияСотрудниковПредварительно.ВидРасчета = ВТНачисленияСотрудниковПредварительноСторно.ВидРасчета
| И ВТНачисленияСотрудниковПредварительно.ПериодДействияНачало = ВТНачисленияСотрудниковПредварительноСторно.ПериодДействияНачало
| И ВТНачисленияСотрудниковПредварительно.ПериодДействияКонец = ВТНачисленияСотрудниковПредварительноСторно.ПериодДействияКонец
| И ВТНачисленияСотрудниковПредварительно.ПериодРегистрации < ВТНачисленияСотрудниковПредварительноСторно.ПериодРегистрации
| И (ВТНачисленияСотрудниковПредварительноСторно.Сторно)
|ГДЕ
| ВТНачисленияСотрудниковПредварительноСторно.Сотрудник ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТНачисленияСотрудников.Сотрудник КАК Сотрудник,
| ВТНачисленияСотрудников.ВидРасчета.УчитыватьВесьЗаработок КАК УчитыватьВесьЗаработок,
| ВТНачисленияСотрудников.ВремяВЧасах КАК ВремяВЧасах,
| ВТНачисленияСотрудников.Месяц КАК Месяц,
| ВТНачисленияСотрудников.ВидРасчета КАК ВидРасчета,
| ВТНачисленияСотрудников.ПериодДействияНачало КАК ПериодДействияНачало,
| ВТНачисленияСотрудников.ПериодДействияКонец КАК ПериодДействияКонец,
| ВТНачисленияСотрудников.ГрафикРаботы КАК ГрафикРаботы,
| ВТНачисленияСотрудников.Сторно КАК Сторно,
| СУММА(ВЫБОР
| КОГДА &ВыделятьНерабочиеДниОтдельнымВидомВремени
| И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ОплачиваемыеНерабочиеДни
| И НачисленияВидыВремени.ВидВремени = &РабочееВремя
| ТОГДА 0
| ИНАЧЕ ЕСТЬNULL(ГрафикиРаботыПоВидамВремени.ОсновноеЗначение, 0)
| КОНЕЦ) КАК ОтработаноДней,
| СУММА(ВЫБОР
| КОГДА &ВыделятьНерабочиеДниОтдельнымВидомВремени
| И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ОплачиваемыеНерабочиеДни
| И НачисленияВидыВремени.ВидВремени = &РабочееВремя
| ТОГДА 0
| ИНАЧЕ ЕСТЬNULL(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначение, 0)
| КОНЕЦ) КАК ОтработаноЧасов,
| СУММА(ВЫБОР
| КОГДА &ВыделятьНерабочиеДниОтдельнымВидомВремени
| И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ОплачиваемыеНерабочиеДни
| И НЕ ПериодыНерабочихДнейКалендаря.НомерПериода ЕСТЬ NULL
| ТОГДА ЕСТЬNULL(ГрафикиРаботыПоВидамВремени.ОсновноеЗначение, 0)
| ИНАЧЕ 0
| КОНЕЦ) КАК Дней,
| СУММА(ВЫБОР
| КОГДА &ВыделятьНерабочиеДниОтдельнымВидомВремени
| И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ОплачиваемыеНерабочиеДни
| И НЕ ПериодыНерабочихДнейКалендаря.НомерПериода ЕСТЬ NULL
| ТОГДА ЕСТЬNULL(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначение, 0)
| ИНАЧЕ 0
| КОНЕЦ) КАК Часов
|ИЗ
| ВТНачисленияСотрудников КАК ВТНачисленияСотрудников
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления.ВидыВремени КАК НачисленияВидыВремени
| ПО ВТНачисленияСотрудников.ВидРасчета = НачисленияВидыВремени.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
| ПО ВТНачисленияСотрудников.ГрафикРаботы = ГрафикиРаботыПоВидамВремени.ГрафикРаботы
| И ВТНачисленияСотрудников.Месяц = ГрафикиРаботыПоВидамВремени.Месяц
| И ВТНачисленияСотрудников.ПериодРегистрацииВремени = ГрафикиРаботыПоВидамВремени.ПериодРегистрации
| И (ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = НачисленияВидыВремени.ВидВремени
//++ Исправление
//| ИЛИ ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ОплачиваемыеНерабочиеДни)
| ИЛИ (ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ОплачиваемыеНерабочиеДни И НачисленияВидыВремени.НомерСтроки = 1))
//-- Исправление
| И (ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ ВТНачисленияСотрудников.ПериодДействияНачало И ВТНачисленияСотрудников.ПериодДействияКонец)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПериодыНерабочихДнейКалендаря КАК ПериодыНерабочихДнейКалендаря
| ПО ВТНачисленияСотрудников.ОбщийГрафик.ПроизводственныйКалендарь = ПериодыНерабочихДнейКалендаря.ПроизводственныйКалендарь
| И (ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ ПериодыНерабочихДнейКалендаря.ДатаНачала И ПериодыНерабочихДнейКалендаря.ДатаОкончания)
|
|СГРУППИРОВАТЬ ПО
| ВТНачисленияСотрудников.Сотрудник,
| ВТНачисленияСотрудников.ВидРасчета.УчитыватьВесьЗаработок,
| ВТНачисленияСотрудников.ВремяВЧасах,
| ВТНачисленияСотрудников.Месяц,
| ВТНачисленияСотрудников.ВидРасчета,
| ВТНачисленияСотрудников.ПериодДействияНачало,
| ВТНачисленияСотрудников.ПериодДействияКонец,
| ВТНачисленияСотрудников.ГрафикРаботы,
| ВТНачисленияСотрудников.Сторно
|
|УПОРЯДОЧИТЬ ПО
| Сотрудник,
| Месяц,
| ВидРасчета,
| Сторно";
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат Коэффициенты;
КонецЕсли;
Выборка = Результат.Выбрать();
Пока Выборка.СледующийПоЗначениюПоля("Сотрудник") Цикл
Пока Выборка.СледующийПоЗначениюПоля("Месяц") Цикл
Пока Выборка.СледующийПоЗначениюПоля("ВидРасчета") Цикл
Пока Выборка.СледующийПоЗначениюПоля("Сторно") Цикл
НоваяСтрока = Коэффициенты.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
ОбщееВремя = 0;
ОплачиваемоеНерабочееВремя = 0;
Пока Выборка.Следующий() Цикл
ОбщееВремя = ОбщееВремя +
?(Выборка.ВремяВЧасах, Выборка.ОтработаноЧасов, Выборка.ОтработаноДней);
ОплачиваемоеНерабочееВремя = ОплачиваемоеНерабочееВремя +
?(Выборка.ВремяВЧасах, Выборка.Часов, Выборка.Дней);
КонецЦикла;
НоваяСтрока.Коэффициент = ?(ОбщееВремя = 0, 1, (ОбщееВремя-ОплачиваемоеНерабочееВремя)/ОбщееВремя);
Если Выборка.УчитыватьВесьЗаработок
И НоваяСтрока.Коэффициент > 0 Тогда
НоваяСтрока.Коэффициент = 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Возврат Коэффициенты;
КонецФункции