Ни один из вариантов в этой теме мне не понравился)). Предлагаю свой:
1. Подсистема "Экзамен" (все добавленные объекты метаданных в него)
2.Константы (первые три для движений и отчета, четвертая только для отчета)
2.1. ПоказательСредниеПоказатели (элемент справочника ПоказателиРасчетаЗарплаты)
2.2. ПоказательПовышеннаяТемпература (то же самое)
2.3. ПоказательПовышеннаяТемператураВлажность (то же самое)
2.4. НачислениеЗаОсобыеУсловия (ПланВидовРасчета.Начисление)
3. ЭлементыСправочников
3.1. Показатели расчета зарплаты
3.1.1. ПоказательСредниеПоказатели (для сотрудника, числовой, используется только в месяце, в котором вводится значение, накапливается по отдельным значениям...)
3.1.2. ПоказательПовышеннаяТемпература (то же самое)
3.1.3. ПоказательПовышеннаяТемператураВлажность (то же самое)
3.2 Сотрудники, Физлица - расшифровывать не буду
4. Начисления
4.1. Начисление за особые условия (Повременная оплата труда и надбавки, Начисление ведется только если введено значение показателя, формула "(30*ДниСреднихПоказателей + 40*ДниПовышеннойТемпературы + 50*ДниПовышеннойТемпературыВлажности) / 100 * СтоимостьДня", значения накапливаемых показателей подбираются: по соответствию даты регистрации интервалу начисления)
5. Документы
5.1.График работ в особых условиях
5.1.1. Реквизиты Организация, Подразделение.
5.1.2. Табчасть Плановые работы (Сотрудник (справочникссылка.Сотрудники), Особые условия (перечислениессылка.ОсобыеУсловия), ДатаНачала (дата), ДатаОкончания (дата)).
5.1.3. Движений нет. В отчете используются только те документы, у которых не установлена пометка удаления.
5.1.4. Модуль объекта:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Дата = Дата(Год(Дата), Месяц(Дата), 25);
КонецПроцедуры
5.2. Работы в особых условиях
5.2.1. Реквизиты Организация, Подразделение, ПеридРегистрации.
5.2.2. Табчасти Сотрудники (Сотрудник (справочникссылка.Сотрудники)), ФактическиеРаботы (ДеньДата (Дата), Особые условия (перечислениессылка.ОсобыеУсловия)).
5.2.3. Движения: РН ЗначенияОперативныхПоказателейРасчетаЗарплатыСотрудников. В модуле получаем таблицу из двух табличных частей документа,
ВЫБРАТЬ
Факт.ДеньДата КАК Период,
Сот.Сотрудник КАК Сотрудник,
Сот.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо,
ВЫБОР
КОГДА Факт.ОсобыеУсловия = ЗНАЧЕНИЕ(Перечисление.ОсобыеУсловия.СредниеПоказатели) ТОГДА &Показатель0
КОГДА Факт.ОсобыеУсловия = ЗНАЧЕНИЕ(Перечисление.ОсобыеУсловия.ПовышеннаяТемпература) ТОГДА &Показатель1
КОГДА Факт.ОсобыеУсловия = ЗНАЧЕНИЕ(Перечисление.ОсобыеУсловия.ПовышеннаяТемператураВлажность) ТОГДА &Показатель2
КОНЕЦ КАК Показатель,
1 КАК Значение,
Шап.Организация КАК Организация,
Шап.Подразделение КАК Подразделение
ПОМЕСТИТЬ ДанныеДокумента
ИЗ Документ.РаботыВОсобыхУсловиях.Сотрудники КАК Сот
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РаботыВОсобыхУсловиях КАК Шап ПО Сот.Ссылка = Шап.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РаботыВОсобыхУсловиях.ФактическиеРаботы КАК Фак ПО Сот.Ссылка = Факт.Ссылка
ГДЕ Сот.Ссылка = &ТекСсылка
сравниваем с данными табеля и выкидываем из неё строки дней, где у сотрудника нет явки (одним запросом, конечно же).
6. Перечисления
6.1. Особые условия (СредниеПоказатели, ПовышеннаяТемпература,ПовышеннаяТемператураВлажность )
7. Отчет
7.1 ПланФактРаботыВОсобыхУсловиях.
ВЫБРАТЬ
ПР.Сотрудник КАК Сотрудник,
НАЧАЛОПЕРИОДА(ПР.ДатаНачала, МЕСЯЦ) КАК ПериодДействия,
СУММА(1) КАК КоличествоПлан
ПОМЕСТИТЬ План
ИЗ
Документ.ГрафикРаботВОсобыхУсловиях.ПлановыеРаботы КАК ПР
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ГрафикРаботВОсобыхУсловиях КАК Ша
ПО ПР.Ссылка = Ша.Ссылка
ГДЕ
Ша.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаОт, МЕСЯЦ) И КОНЕЦПЕРИОДА(&ДатаПо, МЕСЯЦ)
И НЕ Ша.ПометкаУдаления
СГРУППИРОВАТЬ ПО
ПР.Сотрудник,
НАЧАЛОПЕРИОДА(ПР.ДатаНачала, МЕСЯЦ)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗОП.Сотрудник КАК Сотрудник,
1 КАК ЗначениеОборот,
ЗОП.Период КАК Период
ПОМЕСТИТЬ ФактРегистр
ИЗ
РегистрНакопления.ЗначенияОперативныхПоказателейРасчетаЗарплатыСотрудников КАК ЗОП
ГДЕ
ЗОП.Период МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаОт, МЕСЯЦ) И КОНЕЦПЕРИОДА(&ДатаПо, МЕСЯЦ)
И ЗОП.Показатель В (&Показатель0, &Показатель1, &Показатель2)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
НачисленияДанныеГрафика.Сотрудник КАК Сотрудник,
НачисленияДанныеГрафика.ПериодДействия КАК ПериодСрезаКадровыхДанных,
НачисленияДанныеГрафика.Результат КАК Результат,
НачисленияДанныеГрафика.ПериодДействияНачало КАК ПериодДействияНачало,
НачисленияДанныеГрафика.ПериодДействияКонец КАК ПериодДействияКонец
ПОМЕСТИТЬ ДанныеГрафика
ИЗ
РегистрРасчета.Начисления.ФактическийПериодДействия(
периодрегистрации МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаОт, МЕСЯЦ) И КОНЕЦПЕРИОДА(&ДатаПо, МЕСЯЦ)
И ВидРасчета = &Особые) КАК НачисленияДанныеГрафика
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
вложЗапрос.Сотрудник КАК Сотрудник,
вложЗапрос.ПериодДействия КАК ПериодДействия,
СУММА(вложЗапрос.Результат) КАК Результат,
СУММА(вложЗапрос.ЗначениеОборот) КАК ЗначениеОборот
ПОМЕСТИТЬ Факт
ИЗ
(ВЫБРАТЬ
Дан.Сотрудник КАК Сотрудник,
Дан.ПериодСрезаКадровыхДанных КАК ПериодДействия,
Дан.Результат КАК Результат,
СУММА(Фак.ЗначениеОборот) КАК ЗначениеОборот
ИЗ
ДанныеГрафика КАК Дан
ЛЕВОЕ СОЕДИНЕНИЕ ФактРегистр КАК Фак
ПО Дан.Сотрудник = Фак.Сотрудник
И (Фак.Период МЕЖДУ Дан.ПериодДействияНачало И Дан.ПериодДействияКонец)
СГРУППИРОВАТЬ ПО
Дан.Сотрудник,
Дан.ПериодСрезаКадровыхДанных,
Дан.Результат) КАК вложЗапрос
СГРУППИРОВАТЬ ПО
вложЗапрос.Сотрудник,
вложЗапрос.ПериодДействия
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЕСТЬNULL(Пла.Сотрудник, Фак.Сотрудник) КАК Сотрудник,
ЕСТЬNULL(Пла.ПериодДействия, Фак.ПериодДействия) КАК Период,
Фак.Результат КАК Результат,
Фак.ЗначениеОборот КАК КоличествоФакт,
Пла.КоличествоПлан КАК КоличествоПлан,
ВЫБОР
КОГДА ЕСТЬNULL(Фак.ЗначениеОборот, 0) = 0
ТОГДА 0
ИНАЧЕ Фак.Результат / ЕСТЬNULL(Фак.ЗначениеОборот, 0)
КОНЕЦ КАК СреднийДень
ПОМЕСТИТЬ Итог
ИЗ
План КАК Пла
ПОЛНОЕ СОЕДИНЕНИЕ Факт КАК Фак
ПО Пла.Сотрудник = Фак.Сотрудник
И Пла.ПериодДействия = Фак.ПериодДействия
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
ДАТАВРЕМЯ(1, 1, 1) КАК Период,
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников
ИЗ
Итог КАК Ито
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Ито.Сотрудник КАК Сотрудник,
Ито.Период КАК Период,
Ито.Результат КАК Результат,
Ито.КоличествоФакт КАК КоличествоФакт,
Ито.КоличествоПлан КАК КоличествоПлан,
Ито.СреднийДень КАК СреднийДень,
КадровыеДанныеСотрудников.Должность КАК Должность
ИЗ
Итог КАК Ито
ЛЕВОЕ СОЕДИНЕНИЕ Представления_КадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
ПО Ито.Сотрудник = КадровыеДанныеСотрудников.Сотрудник
И Ито.Период = КадровыеДанныеСотрудников.Период
танец с СКД расписывать неинтересно: образец задан, танец предсказуем.
Чем плох вариант? То, что в обсуждениях нашёл.
1. Использовать показатель по организации, с моей точки зрения неверно: Если планово привязывают к каждому сотруднику выход на особые работы, то и факт должен быть привязан к каждому сотруднику. Так как прибор сотрудников не видит, то две части: данные прибора и сотрудники, которые в это время работали.
2. От табеля не зависит.
3. Больничные, отпуска etc исключаются из оплаты.
4. При изменении должности, категории, etc, считается правильно.