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