Решение.
1) "Разбросаем" ВР по разным ВР и настроим зависимости.
"Гарантированный Оклад" - в Дополнительные начисления.
Оклад - в Основные
Невыход-в Основные( для того чтобы вытеснял оклад и сверхурочные)
Сверхурочные - в Основные
2) Доработаем обработку "Заполнение графиков" и заполним графики. (подробнее)
3) Заведем РС "Гарантированные оклады" с периодичностью квартал.
4) Создаем регистры расчета.
5)Дорабатываем документ "Начисление ЗП", в обработке проведения формируем первичные записи. Для "Гарантированного оклада" сразу же в документе и заполним значение.
остальные записи рассчитаем в общем модуле
Сверхурочные рассчитываются так:
В ТЧ "Основные начисления" для реквизитов "ДатаНачала" и "ДатаОкончания" изменяем состав на "Дата и время". Таким образом можем в запросе получить количество часов отработанных сверхурочно с помощью выражения:
ВЫБОР
КОГДА НачислениеЗарплатыОсновныеНачисления.ВидРасчета = &Сверхурочные
ТОГДА РАЗНОСТЬДАТ(НачислениеЗарплатыОсновныеНачисления.ДатаНачала, НачислениеЗарплатыОсновныеНачисления.ДатаОкончания, ЧАС)
ИНАЧЕ 0
КОНЕЦ КАК Сверхурочные
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) ;
ПериодРегистрации = НачалоМесяца(ПериодРегистрации);
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОсновныеНачисления.Записывать = Истина;
Движения.ДополнительныеНачисления.Записывать = Истина;
ПериодРегистрации = НачалоМесяца(ПериодРегистрации);
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| НачислениеЗарплатыОсновныеНачисления.Ссылка,
| НачислениеЗарплатыОсновныеНачисления.НомерСтроки,
| НачислениеЗарплатыОсновныеНачисления.Сотрудник КАК Сотрудник,
| НачислениеЗарплатыОсновныеНачисления.Подразделение,
| НачислениеЗарплатыОсновныеНачисления.ВидРасчета,
| НАЧАЛОПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаНачала, ДЕНЬ) КАК ПериодДействияНачало,
| КОНЕЦПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаОкончания, ДЕНЬ) КАК ПериодДействияКонец,
| НачислениеЗарплатыОсновныеНачисления.ИсходныеДанные,
| НачислениеЗарплатыОсновныеНачисления.График,
| НачислениеЗарплатыОсновныеНачисления.Ссылка.ПериодРегистрации,
| ЕСТЬNULL(СведенияОСотрудникахСрезПоследних.Оклад, 0) КАК Оклад,
| ВЫБОР
| КОГДА НачислениеЗарплатыОсновныеНачисления.ВидРасчета = &Сверхурочные
| ТОГДА РАЗНОСТЬДАТ(НачислениеЗарплатыОсновныеНачисления.ДатаНачала, НачислениеЗарплатыОсновныеНачисления.ДатаОкончания, ЧАС)
| ИНАЧЕ 0
| КОНЕЦ КАК Сверхурочные
|ИЗ
| Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках.СрезПоследних(&НаДату, ) КАК СведенияОСотрудникахСрезПоследних
| ПО НачислениеЗарплатыОсновныеНачисления.Подразделение = СведенияОСотрудникахСрезПоследних.Подразделение
| И НачислениеЗарплатыОсновныеНачисления.Сотрудник = СведенияОСотрудникахСрезПоследних.Сотрудник
|ГДЕ
| НачислениеЗарплатыОсновныеНачисления.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НачислениеЗарплатыДополнительныеНачисления.Ссылка,
| НачислениеЗарплатыДополнительныеНачисления.НомерСтроки,
| НачислениеЗарплатыДополнительныеНачисления.Сотрудник КАК Сотрудник,
| НачислениеЗарплатыДополнительныеНачисления.Подразделение,
| НачислениеЗарплатыДополнительныеНачисления.ВидРасчета,
| НачислениеЗарплатыДополнительныеНачисления.Ссылка.ПериодРегистрации,
| ЕСТЬNULL(ГарантированныеОкладыСрезПоследних.ГарантированныйОклад, 0) КАК ГарантированныйОклад
|ИЗ
| Документ.НачислениеЗарплаты.ДополнительныеНачисления КАК НачислениеЗарплатыДополнительныеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГарантированныеОклады.СрезПоследних(&НаДату, ) КАК ГарантированныеОкладыСрезПоследних
| ПО НачислениеЗарплатыДополнительныеНачисления.Сотрудник = ГарантированныеОкладыСрезПоследних.Сотрудник
| И НачислениеЗарплатыДополнительныеНачисления.Подразделение = ГарантированныеОкладыСрезПоследних.Подразделение
|ГДЕ
| НачислениеЗарплатыДополнительныеНачисления.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НачислениеЗарплатыОсновныеНачисления.Сотрудник КАК Сотрудник
|ИЗ
| Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НачислениеЗарплатыДополнительныеНачисления.Сотрудник КАК Сотрудник
|ИЗ
| Документ.НачислениеЗарплаты.ДополнительныеНачисления КАК НачислениеЗарплатыДополнительныеНачисления";
Запрос.УстановитьПараметр("Ссылка",Ссылка);
Запрос.УстановитьПараметр("Сверхурочные",ПланыВидовРасчета.ОсновныеНачисления.Сверхурочные);
Запрос.УстановитьПараметр("НаДату",ПериодРегистрации);
ПакетРезультатов = Запрос.ВыполнитьПакет();
Результат = ПакетРезультатов[0];
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.ОсновныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(Движение, Выборка);
Если Выборка.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда
Движение.ИсходныеДанные = Выборка.Оклад ;
КонецЕсли;
Если Выборка.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Сверхурочные Тогда
Движение.ИсходныеДанные = Выборка.Сверхурочные ;
Движение.БазовыйПериодНачало = ДобавитьМесяц(ПериодРегистрации,-1) ;
Движение.БазовыйПериодКонец = ПериодРегистрации -1;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Результат = ПакетРезультатов[1];
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.ДополнительныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(Движение, Выборка);
Движение.Результат = Выборка.ГарантированныйОклад;
КонецЦикла;
КонецЕсли;
Движения.ОсновныеНачисления.Записать();
Движения.ДополнительныеНачисления.Записать();
СотрудникиОсн = ПакетРезультатов[2].Выгрузить().ВыгрузитьКолонку("Сотрудник");
СотрудникиДоп = ПакетРезультатов[3].Выгрузить().ВыгрузитьКолонку("Сотрудник");
Если ОсновныеНачисления.Найти(ПланыВидовРасчета.ОсновныеНачисления.Невыход,"ВидРасчета")<> Неопределено Тогда
Рассчет.РассчитатьНачисления(Движения.ОсновныеНачисления,ПланыВидовРасчета.ОсновныеНачисления.Невыход,СотрудникиОсн);
Движения.ОсновныеНачисления.Записать(,Истина);
КонецЕсли;
Если ОсновныеНачисления.Найти(ПланыВидовРасчета.ОсновныеНачисления.Оклад,"ВидРасчета")<> Неопределено Тогда
Рассчет.РассчитатьНачисления(Движения.ОсновныеНачисления,ПланыВидовРасчета.ОсновныеНачисления.Оклад,СотрудникиОсн);
Движения.ОсновныеНачисления.Записать(,Истина);
КонецЕсли;
Если ОсновныеНачисления.Найти(ПланыВидовРасчета.ОсновныеНачисления.Сверхурочные,"ВидРасчета")<> Неопределено Тогда
Рассчет.РассчитатьНачисления(Движения.ОсновныеНачисления,ПланыВидовРасчета.ОсновныеНачисления.Сверхурочные,СотрудникиОсн);
Движения.ОсновныеНачисления.Записать(,Истина);
КонецЕсли;
КонецПроцедуры
7) Отчет.
Из отчета исключаем невыходы.
ВЫБРАТЬ
ОсновныеНачисления.ПериодРегистрации КАК Период,
ОсновныеНачисления.ВидРасчета,
ОсновныеНачисления.Сотрудник,
ОсновныеНачисления.Подразделение,
СУММА(ОсновныеНачисления.Результат) КАК Результат
ИЗ
РегистрРасчета.ОсновныеНачисления КАК ОсновныеНачисления
ГДЕ
ОсновныеНачисления.ПериодРегистрации МЕЖДУ &ДатаНачала И &ДатаОкончания
И ЕСТЬNULL(ОсновныеНачисления.Результат, 0) <> 0
И ОсновныеНачисления.ВидРасчета <> &Невыход
СГРУППИРОВАТЬ ПО
ОсновныеНачисления.Сотрудник,
ОсновныеНачисления.ВидРасчета,
ОсновныеНачисления.Подразделение,
ОсновныеНачисления.ПериодРегистрации
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДополнительныеНачисления.ПериодРегистрации,
ДополнительныеНачисления.ВидРасчета,
ДополнительныеНачисления.Сотрудник,
ДополнительныеНачисления.Подразделение,
СУММА(ДополнительныеНачисления.Результат)
ИЗ
РегистрРасчета.ДополнительныеНачисления КАК ДополнительныеНачисления
ГДЕ
ДополнительныеНачисления.ПериодРегистрации МЕЖДУ &ДатаНачала И &ДатаОкончания
СГРУППИРОВАТЬ ПО
ДополнительныеНачисления.Подразделение,
ДополнительныеНачисления.Сотрудник,
ДополнительныеНачисления.ВидРасчета,
ДополнительныеНачисления.ПериодРегистрации
Скачать решение задачи 3.25 (1с специалист)
1) "Разбросаем" ВР по разным ВР и настроим зависимости.
"Гарантированный Оклад" - в Дополнительные начисления.
Оклад - в Основные
Невыход-в Основные( для того чтобы вытеснял оклад и сверхурочные)
Сверхурочные - в Основные
2) Доработаем обработку "Заполнение графиков" и заполним графики. (подробнее)
3) Заведем РС "Гарантированные оклады" с периодичностью квартал.
4) Создаем регистры расчета.
5)Дорабатываем документ "Начисление ЗП", в обработке проведения формируем первичные записи. Для "Гарантированного оклада" сразу же в документе и заполним значение.
остальные записи рассчитаем в общем модуле
Сверхурочные рассчитываются так:
В ТЧ "Основные начисления" для реквизитов "ДатаНачала" и "ДатаОкончания" изменяем состав на "Дата и время". Таким образом можем в запросе получить количество часов отработанных сверхурочно с помощью выражения:
ВЫБОР
КОГДА НачислениеЗарплатыОсновныеНачисления.ВидРасчета = &Сверхурочные
ТОГДА РАЗНОСТЬДАТ(НачислениеЗарплатыОсновныеНачисления.ДатаНачала, НачислениеЗарплатыОсновныеНачисления.ДатаОкончания, ЧАС)
ИНАЧЕ 0
КОНЕЦ КАК Сверхурочные
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) ;
ПериодРегистрации = НачалоМесяца(ПериодРегистрации);
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОсновныеНачисления.Записывать = Истина;
Движения.ДополнительныеНачисления.Записывать = Истина;
ПериодРегистрации = НачалоМесяца(ПериодРегистрации);
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| НачислениеЗарплатыОсновныеНачисления.Ссылка,
| НачислениеЗарплатыОсновныеНачисления.НомерСтроки,
| НачислениеЗарплатыОсновныеНачисления.Сотрудник КАК Сотрудник,
| НачислениеЗарплатыОсновныеНачисления.Подразделение,
| НачислениеЗарплатыОсновныеНачисления.ВидРасчета,
| НАЧАЛОПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаНачала, ДЕНЬ) КАК ПериодДействияНачало,
| КОНЕЦПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаОкончания, ДЕНЬ) КАК ПериодДействияКонец,
| НачислениеЗарплатыОсновныеНачисления.ИсходныеДанные,
| НачислениеЗарплатыОсновныеНачисления.График,
| НачислениеЗарплатыОсновныеНачисления.Ссылка.ПериодРегистрации,
| ЕСТЬNULL(СведенияОСотрудникахСрезПоследних.Оклад, 0) КАК Оклад,
| ВЫБОР
| КОГДА НачислениеЗарплатыОсновныеНачисления.ВидРасчета = &Сверхурочные
| ТОГДА РАЗНОСТЬДАТ(НачислениеЗарплатыОсновныеНачисления.ДатаНачала, НачислениеЗарплатыОсновныеНачисления.ДатаОкончания, ЧАС)
| ИНАЧЕ 0
| КОНЕЦ КАК Сверхурочные
|ИЗ
| Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках.СрезПоследних(&НаДату, ) КАК СведенияОСотрудникахСрезПоследних
| ПО НачислениеЗарплатыОсновныеНачисления.Подразделение = СведенияОСотрудникахСрезПоследних.Подразделение
| И НачислениеЗарплатыОсновныеНачисления.Сотрудник = СведенияОСотрудникахСрезПоследних.Сотрудник
|ГДЕ
| НачислениеЗарплатыОсновныеНачисления.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НачислениеЗарплатыДополнительныеНачисления.Ссылка,
| НачислениеЗарплатыДополнительныеНачисления.НомерСтроки,
| НачислениеЗарплатыДополнительныеНачисления.Сотрудник КАК Сотрудник,
| НачислениеЗарплатыДополнительныеНачисления.Подразделение,
| НачислениеЗарплатыДополнительныеНачисления.ВидРасчета,
| НачислениеЗарплатыДополнительныеНачисления.Ссылка.ПериодРегистрации,
| ЕСТЬNULL(ГарантированныеОкладыСрезПоследних.ГарантированныйОклад, 0) КАК ГарантированныйОклад
|ИЗ
| Документ.НачислениеЗарплаты.ДополнительныеНачисления КАК НачислениеЗарплатыДополнительныеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГарантированныеОклады.СрезПоследних(&НаДату, ) КАК ГарантированныеОкладыСрезПоследних
| ПО НачислениеЗарплатыДополнительныеНачисления.Сотрудник = ГарантированныеОкладыСрезПоследних.Сотрудник
| И НачислениеЗарплатыДополнительныеНачисления.Подразделение = ГарантированныеОкладыСрезПоследних.Подразделение
|ГДЕ
| НачислениеЗарплатыДополнительныеНачисления.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НачислениеЗарплатыОсновныеНачисления.Сотрудник КАК Сотрудник
|ИЗ
| Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НачислениеЗарплатыДополнительныеНачисления.Сотрудник КАК Сотрудник
|ИЗ
| Документ.НачислениеЗарплаты.ДополнительныеНачисления КАК НачислениеЗарплатыДополнительныеНачисления";
Запрос.УстановитьПараметр("Ссылка",Ссылка);
Запрос.УстановитьПараметр("Сверхурочные",ПланыВидовРасчета.ОсновныеНачисления.Сверхурочные);
Запрос.УстановитьПараметр("НаДату",ПериодРегистрации);
ПакетРезультатов = Запрос.ВыполнитьПакет();
Результат = ПакетРезультатов[0];
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.ОсновныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(Движение, Выборка);
Если Выборка.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда
Движение.ИсходныеДанные = Выборка.Оклад ;
КонецЕсли;
Если Выборка.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Сверхурочные Тогда
Движение.ИсходныеДанные = Выборка.Сверхурочные ;
Движение.БазовыйПериодНачало = ДобавитьМесяц(ПериодРегистрации,-1) ;
Движение.БазовыйПериодКонец = ПериодРегистрации -1;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Результат = ПакетРезультатов[1];
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.ДополнительныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(Движение, Выборка);
Движение.Результат = Выборка.ГарантированныйОклад;
КонецЦикла;
КонецЕсли;
Движения.ОсновныеНачисления.Записать();
Движения.ДополнительныеНачисления.Записать();
СотрудникиОсн = ПакетРезультатов[2].Выгрузить().ВыгрузитьКолонку("Сотрудник");
СотрудникиДоп = ПакетРезультатов[3].Выгрузить().ВыгрузитьКолонку("Сотрудник");
Если ОсновныеНачисления.Найти(ПланыВидовРасчета.ОсновныеНачисления.Невыход,"ВидРасчета")<> Неопределено Тогда
Рассчет.РассчитатьНачисления(Движения.ОсновныеНачисления,ПланыВидовРасчета.ОсновныеНачисления.Невыход,СотрудникиОсн);
Движения.ОсновныеНачисления.Записать(,Истина);
КонецЕсли;
Если ОсновныеНачисления.Найти(ПланыВидовРасчета.ОсновныеНачисления.Оклад,"ВидРасчета")<> Неопределено Тогда
Рассчет.РассчитатьНачисления(Движения.ОсновныеНачисления,ПланыВидовРасчета.ОсновныеНачисления.Оклад,СотрудникиОсн);
Движения.ОсновныеНачисления.Записать(,Истина);
КонецЕсли;
Если ОсновныеНачисления.Найти(ПланыВидовРасчета.ОсновныеНачисления.Сверхурочные,"ВидРасчета")<> Неопределено Тогда
Рассчет.РассчитатьНачисления(Движения.ОсновныеНачисления,ПланыВидовРасчета.ОсновныеНачисления.Сверхурочные,СотрудникиОсн);
Движения.ОсновныеНачисления.Записать(,Истина);
КонецЕсли;
КонецПроцедуры
Процедура общего модуля
Процедура РассчитатьНачисления(НаборЗаписей,ВидРасчета,МассивСотрудников) Экспорт
Регистратор = НаборЗаписей.Отбор.Регистратор.Значение;
Если ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Или ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Невыход Тогда
Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия, 0) КАК Норма,
| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеФактическийПериодДействия, 0) КАК Факт,
| ОсновныеНачисленияДанныеГрафика.НомерСтроки
|ИЗ
| РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
| ВидРасчета = &ВидРасчета
| И Регистратор = &Регистратор
| И Сотрудник В (&МассивСотрудников)) КАК ОсновныеНачисленияДанныеГрафика";
Запрос.УстановитьПараметр("МассивСотрудников",МассивСотрудников);
Запрос.УстановитьПараметр("Регистратор",Регистратор);
Запрос.УстановитьПараметр("ВидРасчета",ВидРасчета);
Выборка = Запрос.Выполнить().Выбрать();
Для Каждого Запись Из НаборЗаписей Цикл
Выборка.Сбросить();
Отбор = Новый Структура;
Отбор.Вставить("НомерСтроки", Запись.НомерСтроки);
Если ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда
Если Выборка.НайтиСледующий(Отбор) и Выборка.Норма<> 0 Тогда
Запись.Результат = (Выборка.Факт/Выборка.Норма) *Запись.ИсходныеДанные;
КонецЕсли;
ИначеЕсли ВидРасчета =ПланыВидовРасчета.ОсновныеНачисления.Невыход Тогда
Если Выборка.НайтиСледующий(Отбор) Тогда
Запись.Результат = (Выборка.Факт/8) *(-100);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ИначеЕсли ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Сверхурочные Тогда
Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| ЕСТЬNULL(ОсновныеНачисленияБазаДополнительныеНачисления.РезультатБаза, 0) КАК БазаДоп,
| ЕСТЬNULL(ОсновныеНачисленияБазаОсновныеНачисления.РезультатБаза, 0) КАК БазаОсн,
| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеБазовыйПериод, 0) КАК БазаЧасов,
| ОсновныеНачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки
|ИЗ
| РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
| ВидРасчета = &ВидРасчета
| И Регистратор = &Регистратор
| И Сотрудник В (&МассивСотрудников)) КАК ОсновныеНачисленияДанныеГрафика
| ПОЛНОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.БазаОсновныеНачисления(
| &ИзмерОсновного,
| &ИзмерБазового,
| ,
| ВидРасчета = &ВидРасчета
| И Регистратор = &Регистратор
| И Сотрудник В (&МассивСотрудников)) КАК ОсновныеНачисленияБазаОсновныеНачисления
| ПО ОсновныеНачисленияДанныеГрафика.НомерСтроки = ОсновныеНачисленияБазаОсновныеНачисления.НомерСтроки
| ПОЛНОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.БазаДополнительныеНачисления(
| &ИзмерОсновного,
| &ИзмерБазового,
| ,
| ВидРасчета = &ВидРасчета
| И Регистратор = &Регистратор
| И Сотрудник В (&МассивСотрудников)) КАК ОсновныеНачисленияБазаДополнительныеНачисления
| ПО ОсновныеНачисленияДанныеГрафика.НомерСтроки = ОсновныеНачисленияБазаДополнительныеНачисления.НомерСтроки";
Запрос.УстановитьПараметр("МассивСотрудников",МассивСотрудников);
Запрос.УстановитьПараметр("Регистратор",Регистратор);
Запрос.УстановитьПараметр("ВидРасчета",ВидРасчета);
Измер = Новый Массив;
Измер.Добавить("Сотрудник");
Запрос.УстановитьПараметр("ИзмерОсновного",Измер);
Запрос.УстановитьПараметр("ИзмерБазового",Измер);
Выборка = Запрос.Выполнить().Выбрать();
Для Каждого Запись Из НаборЗаписей Цикл
Выборка.Сбросить();
Отбор = Новый Структура;
Отбор.Вставить("НомерСтроки", Запись.НомерСтроки);
Если Выборка.НайтиСледующий(Отбор) И Выборка.БазаЧасов<>0 Тогда
Запись.Результат = Запись.ИсходныеДанные * (Выборка.БазаОсн+Выборка.БазаДоп)/Выборка.БазаЧасов;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
7) Отчет.
Из отчета исключаем невыходы.
ВЫБРАТЬ
ОсновныеНачисления.ПериодРегистрации КАК Период,
ОсновныеНачисления.ВидРасчета,
ОсновныеНачисления.Сотрудник,
ОсновныеНачисления.Подразделение,
СУММА(ОсновныеНачисления.Результат) КАК Результат
ИЗ
РегистрРасчета.ОсновныеНачисления КАК ОсновныеНачисления
ГДЕ
ОсновныеНачисления.ПериодРегистрации МЕЖДУ &ДатаНачала И &ДатаОкончания
И ЕСТЬNULL(ОсновныеНачисления.Результат, 0) <> 0
И ОсновныеНачисления.ВидРасчета <> &Невыход
СГРУППИРОВАТЬ ПО
ОсновныеНачисления.Сотрудник,
ОсновныеНачисления.ВидРасчета,
ОсновныеНачисления.Подразделение,
ОсновныеНачисления.ПериодРегистрации
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДополнительныеНачисления.ПериодРегистрации,
ДополнительныеНачисления.ВидРасчета,
ДополнительныеНачисления.Сотрудник,
ДополнительныеНачисления.Подразделение,
СУММА(ДополнительныеНачисления.Результат)
ИЗ
РегистрРасчета.ДополнительныеНачисления КАК ДополнительныеНачисления
ГДЕ
ДополнительныеНачисления.ПериодРегистрации МЕЖДУ &ДатаНачала И &ДатаОкончания
СГРУППИРОВАТЬ ПО
ДополнительныеНачисления.Подразделение,
ДополнительныеНачисления.Сотрудник,
ДополнительныеНачисления.ВидРасчета,
ДополнительныеНачисления.ПериодРегистрации
Скачать решение задачи 3.25 (1с специалист)
Комментариев нет:
Отправить комментарий