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