#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Процедура ПровестиПоУчетам(ДокументСсылка, РежимПроведения, Отказ, ВидыУчетов = Неопределено, Движения = Неопределено, Объект = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
СтруктураВидовУчета = ПроведениеСервер.СтруктураВидовУчета();
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвиженийПоВидамУчета(РежимПроведения, ДокументСсылка, СтруктураВидовУчета, ВидыУчетов, Движения, Объект, Отказ);
РеквизитыДляПроведения = РеквизитыДляПроведения(ДокументСсылка);
ДанныеДляПроведения = ДанныеДляПроведения(РеквизитыДляПроведения, СтруктураВидовУчета);
ИсправлениеДокументовЗарплатаКадры.ПриПроведенииИсправления(ДокументСсылка, Движения, РежимПроведения, Отказ, РеквизитыДляПроведения, СтруктураВидовУчета, Объект);
Если РеквизитыДляПроведения.ДокументРассчитан Тогда
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
РасчетЗарплатыРасширенный.СформироватьДвиженияНачислений(
Движения, Отказ, РеквизитыДляПроведения.Организация, КонецМесяца(РеквизитыДляПроведения.ПериодРегистрации), ДанныеДляПроведения.Начисления, ДанныеДляПроведения.ПоказателиНачислений, Истина);
РасчетЗарплатыРасширенный.СформироватьДвиженияРаспределенияПоТерриториямУсловиямТруда(Движения, Отказ, РеквизитыДляПроведения.Ссылка, РеквизитыДляПроведения.РаспределениеПоТерриториямУсловиямТруда);
РасчетЗарплатыРасширенный.СформироватьДвиженияРаспределенияРезультатовНачислений(Движения, Отказ, РеквизитыДляПроведения.Ссылка, РеквизитыДляПроведения.РаспределениеРезультатовНачислений);
ПерерасчетЗарплаты.СформироватьДвиженияИсходныеДанныхПерерасчетов(Движения, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.Начисления);
РасчетЗарплатыРасширенный.СформироватьДвиженияУдержаний(
Движения, Отказ, РеквизитыДляПроведения.Организация, КонецМесяца(РеквизитыДляПроведения.ПериодРегистрации), ДанныеДляПроведения.Удержания, ДанныеДляПроведения.ПоказателиУдержаний);
ИсполнительныеЛисты.СформироватьУдержанияПоИсполнительнымДокументам(Движения, ДанныеДляПроведения.УдержанияПоИсполнительнымДокументам);
РасчетЗарплатыРасширенный.СформироватьДвиженияУдержанийДоПределаПоСотрудникам(Движения, Отказ, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.УдержанияДоПределаПоСотрудникам);
РасчетЗарплатыРасширенный.СформироватьЗадолженностьПоУдержаниямФизическихЛиц(Движения, ДанныеДляПроведения.ЗадолженностьПоУдержаниям);
ПроверитьПересечениеФактическогоПериодаДействия(ДокументСсылка, Отказ);
УдержатьНалогПриВыплатеЗарплаты = РеквизитыДляПроведения.УдержатьНалогПриВыплатеЗарплаты Или УчетНДФЛРасширенный.ОтложитьУдержаниеНалогаПоМежрасчетуВыплаченномуСАвансомДоВыплатыЗарплаты(РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации);
ДанныеДляПроведенияУчетЗарплаты = ОтражениеЗарплатыВУчете.ОписаниеДанныеДляПроведения();
ДанныеДляПроведенияУчетЗарплаты.Движения = Движения;
ДанныеДляПроведенияУчетЗарплаты.Организация = РеквизитыДляПроведения.Организация;
ДанныеДляПроведенияУчетЗарплаты.ПериодРегистрации = РеквизитыДляПроведения.ПериодРегистрации;
ДанныеДляПроведенияУчетЗарплаты.ПланируемаяДатаВыплаты = РеквизитыДляПроведения.ПланируемаяДатаВыплаты;
ДанныеДляПроведенияУчетЗарплаты.ПорядокВыплаты = РеквизитыДляПроведения.ПорядокВыплаты;
ДанныеДляПроведенияУчетЗарплаты.МенеджерВременныхТаблиц = ДанныеДляПроведения.МенеджерВременныхТаблиц;
ДанныеДляПроведенияУчетЗарплаты.ВыплатитьКакАванс = УчетНДФЛРасширенный.РегистрироватьДокументКакАвансБезНДФЛ(РеквизитыДляПроведения.ПорядокВыплаты, УдержатьНалогПриВыплатеЗарплаты);
УчетНачисленнойЗарплаты.ЗарегистрироватьНачисления(ДанныеДляПроведенияУчетЗарплаты, Отказ, ДанныеДляПроведения.НачисленияПоСотрудникам, Неопределено);
УчетНачисленнойЗарплаты.ЗарегистрироватьОтработанноеВремя(ДанныеДляПроведенияУчетЗарплаты, Отказ, ДанныеДляПроведения.ОтработанноеВремяПоСотрудникам, Истина);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
Модуль.ЗарегистрироватьКорректировкиДляРасчетаСохраняемогоДенежногоСодержания(ДанныеДляПроведения.КорректировкиДляРегистрацииДенежногоСодержания, РеквизитыДляПроведения.ПериодРасчетаСреднегоЗаработкаНачало, РеквизитыДляПроведения.ПериодРасчетаСреднегоЗаработкаОкончание);
Модуль.ЗарегистрироватьНачисленияСоставМесячногоДенежногоСодержания(Движения, Отказ, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.СоставМесячногоДенежногоСодержания);
КонецЕсли;
ОтражениеЗарплатыВБухучетеРасширенный.ЗарегистрироватьНачисленияУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ,
ДанныеДляПроведения.НачисленияПоСотрудникам, ДанныеДляПроведения.УдержанияПоСотрудникам, Неопределено);
УчетНачисленнойЗарплаты.СоздатьВТРаспределениеНачисленийТекущегоДокумента(ДанныеДляПроведенияУчетЗарплаты);
УчетНачисленнойЗарплатыРасширенный.ЗарегистрироватьУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ, ДанныеДляПроведения.УдержанияПоСотрудникам);
РегистрироватьСуммыНалога = УчетНДФЛРасширенный.МежрасчетныйДокументИсчисляетНДФЛ(РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ИсчислятьНалогПриОкончательномРасчете, РеквизитыДляПроведения.ПорядокВыплаты, РеквизитыДляПроведения.ВидРасчета, РеквизитыДляПроведения.ПланируемаяДатаВыплаты);
УчетНДФЛРасширенный.ЗарегистрироватьДоходыИСуммыНДФЛПоВременнойТаблицеНачислений(
РеквизитыДляПроведения.Ссылка, Движения, Отказ, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.Дата, РеквизитыДляПроведения.ПериодРегистрации, РеквизитыДляПроведения.ПорядокВыплаты,
РеквизитыДляПроведения.ПланируемаяДатаВыплаты, ДанныеДляПроведения, Истина,РегистрироватьСуммыНалога, ,
УдержатьНалогПриВыплатеЗарплаты, , "ВТНачисленияДляУчетаДоходовНДФЛ");
ОтражатьКорректировкуВУчете = РасчетЗарплатыРасширенный.ЭтоМежрасчетнаяВыплата(РеквизитыДляПроведения.ПорядокВыплаты)
Или УчетНДФЛ.ДоходыУчитываютсяТолькоПоДатеВыплаты(РеквизитыДляПроведения.ПланируемаяДатаВыплаты)
Или УчетНДФЛРасширенный.ДоходыВУчетеНДФЛРегистрируютсяПоДатеВыплаты(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(РеквизитыДляПроведения.ВидРасчета));
РасчетЗарплатыРасширенный.СформироватьДвиженияКорректировкиВыплатыПоВременнойТаблицеНачислений(Движения, Отказ, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, РеквизитыДляПроведения.ПорядокВыплаты, ДанныеДляПроведения, Истина, ОтражатьКорректировкуВУчете);
ОтражениеЗарплатыВБухучетеРасширенный.ЗарегистрироватьНачисленияУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ,
Неопределено, Неопределено, ДанныеДляПроведения.НДФЛПоСотрудникам);
УчетСтраховыхВзносов.СформироватьПособия(Движения, Отказ,РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.Пособия, Неопределено);
КонецЕсли;
Если СтруктураВидовУчета.СтраховыеВзносы Тогда
УчетСтраховыхВзносов.СформироватьСведенияОДоходахСтраховыеВзносы(Движения, Отказ, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.МенеджерВременныхТаблиц, Ложь, Истина, РеквизитыДляПроведения.Ссылка);
КонецЕсли;
Если СтруктураВидовУчета.ДанныеДляРасчетаСреднего Тогда
УчетСреднегоЗаработка.ЗарегистрироватьДанныеСреднегоЗаработка(Движения, Отказ, ДанныеДляПроведения.НачисленияДляСреднегоЗаработка);
ПараметрыКорректировок = УчетСреднегоЗаработка.ДополнительныеПараметрыЗаписиКорректировокОбщегоСреднегоЗаработка();
ПараметрыКорректировок.Организация = РеквизитыДляПроведения.Организация;
ПараметрыКорректировок.ФизическоеЛицо = РеквизитыДляПроведения.ФизическоеЛицо;
ПараметрыКорректировок.Сотрудник = РеквизитыДляПроведения.Сотрудник;
УчетСреднегоЗаработка.ЗаписатьКорректировкиОбщегоСреднегоЗаработка(
УчетСреднегоЗаработка.КорректировкиОбщегоСреднегоЗаработкаДокумента(РеквизитыДляПроведения.Ссылка),
РеквизитыДляПроведения.ПериодРасчетаСреднегоЗаработкаНачало,
РеквизитыДляПроведения.ПериодРасчетаСреднегоЗаработкаОкончание,
ПараметрыКорректировок);
КонецЕсли;
КонецЕсли;
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
ПараметрыДвиженийОтпусков = ОстаткиОтпусков.ПараметрыДляСформироватьДвиженияФактическихОтпусков();
ПараметрыДвиженийОтпусков.ДатаРегистрации = РеквизитыДляПроведения.Дата;
ПараметрыДвиженийОтпусков.Начисления = ДанныеДляПроведения.Начисления;
ПараметрыДвиженийОтпусков.ПериодНачисления = РеквизитыДляПроведения.ПериодРегистрации;
ОстаткиОтпусков.СформироватьДвиженияФактическихОтпусков(Движения, Отказ, ПараметрыДвиженийОтпусков);
СостоянияСотрудников.ЗарегистрироватьСостоянияСотрудников(Движения, РеквизитыДляПроведения.Ссылка, ДанныеСостоянийСотрудника(РеквизитыДляПроведения));
УчетСтажаПФР.ЗарегистрироватьПериодыВУчетеСтажаПФР(Движения, ДанныеДляРегистрацииВУчетаСтажаПФР(РеквизитыДляПроведения.Ссылка)[РеквизитыДляПроведения.Ссылка]);
ОграничениеВзысканий.ЗарегистрироватьДанныеСохраняемогоЗаработка(Движения, Отказ, РеквизитыДляПроведения.ПериодРегистрации, РеквизитыДляПроведения.ПорядокВыплаты);
УчетСреднегоЗаработка.УдалитьПричиныПерерасчетов(РеквизитыДляПроведения.Ссылка, ДополнительныеПараметры);
ПерерасчетЗарплаты.УдалитьПерерасчетыПоДополнительнымПараметрам(РеквизитыДляПроведения.Ссылка, ДополнительныеПараметры);
КонецЕсли;
ПроведениеСервер.ЗаписьДвиженийПоУчетам(Движения, СтруктураВидовУчета);
КонецПроцедуры
Функция СторнироватьПоУчетам(Движения, Регистратор, ИсправленныйДокумент, СтруктураВидовУчета, ДополнительныеПараметры) Экспорт
РеквизитыДляПроведения = ДополнительныеПараметры.РеквизитыДляПроведения;
Если ДополнительныеПараметры.ОтменаДокумента Тогда
РеквизитыИсправленногоДокумента = РеквизитыДляПроведения(ИсправленныйДокумент);
РеквизитыДляПроведения.Вставить("Сотрудник", РеквизитыИсправленногоДокумента.Сотрудник);
КонецЕсли;
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
Сотрудники = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(РеквизитыДляПроведения.Сотрудник);
УчетРабочегоВремениРасширенный.ЗарегистрироватьСторноЗаписиПоДокументу(Движения, РеквизитыДляПроведения.ПериодРегистрации, ИсправленныйДокумент, Сотрудники);
КонецЕсли;
Если (ДополнительныеПараметры.ОтменаДокумента Или ДополнительныеПараметры.ИсправлениеВТекущемПериоде)
И Не ДополнительныеПараметры.ИсправлениеДоначислением Тогда
СторнироватьРасчеты = ДополнительныеПараметры.ОтменаДокумента Или РеквизитыДляПроведения.ДокументРассчитан;
Если СтруктураВидовУчета.ДанныеДляРасчетаСреднего И СторнироватьРасчеты Тогда
УчетСреднегоЗаработка.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент);
КонецЕсли;
Если СтруктураВидовУчета.СтраховыеВзносы И СторнироватьРасчеты Тогда
УчетСтраховыхВзносовРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, ДополнительныеПараметры);
КонецЕсли;
Если СтруктураВидовУчета.ОстальныеВидыУчета И СторнироватьРасчеты Тогда
Если ДополнительныеПараметры.ИсправлениеВТекущемПериоде Тогда
Если Не ДополнительныеПараметры.ОтменаДокумента
И РеквизитыДляПроведения.ПорядокВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Аванс Тогда
РеквизитыИсправленного = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ИсправленныйДокумент, "ПорядокВыплаты");
Если РеквизитыДляПроведения.ПорядокВыплаты <> РеквизитыИсправленного.ПорядокВыплаты Тогда
УчетНачисленнойЗарплатыРасширенный.ЗапланироватьКопированиеСторноВАванс(Движения);
КонецЕсли;
КонецЕсли;
КонецЕсли;
РасчетЗарплатыРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, ДополнительныеПараметры);
ОтражениеЗарплатыВБухучетеРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент);
УчетНДФЛРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, ДополнительныеПараметры);
УчетНачисленнойЗарплатыРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, ДополнительныеПараметры);
ИсправлениеДокументовЗарплатаКадры.СторнироватьДвиженияБезСпецификиУчетов(
Движения, ИсправленныйДокумент, ДополнительныеПараметры);
КонецЕсли;
КонецЕсли;
Возврат Истина;
КонецФункции
#Область ДляВызоваИзДругихПодсистем
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
ДатаФорм2023 = ДатаВступленияВСилуФорм2023();
Макеты = Метаданные.Документы.ОплатаДнейУходаЗаДетьмиИнвалидами.Макеты;
МакетПриказа = Макеты.ПФ_MXL_ПриказОПредоставленииДнейУхода;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = МакетПриказа.Имя;
КомандаПечати.Представление = МакетПриказа.Представление();
КомандаПечати.Порядок = 10;
Макет2014 = Макеты.ПФ_MXL_ЗаявлениеОПредоставленииДополнительныхВыходныхДней;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = Макет2014.Имя;
КомандаПечати.Представление = Макет2014.Представление();
КомандаПечати.Порядок = 20;
УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "ДатаНачалаСобытия", '00010101', ВидСравнения.Больше);
УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "ДатаНачалаСобытия", ДатаФорм2023, ВидСравнения.Меньше);
Макет2023 = Макеты.ПФ_MXL_Заявление2023;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = Макет2023.Имя;
КомандаПечати.Представление = НСтр("ru = 'Заявление сотрудника о предоставлении дней ухода'");
КомандаПечати.Порядок = 20;
УчетСреднегоЗаработка.ДобавитьКомандуПечатиРасчетаСреднегоЗаработка(КомандыПечати, "Документ.ОплатаДнейУходаЗаДетьмиИнвалидами");
УчетСреднегоЗаработка.ДобавитьКомандуПечатиРасчетаСреднегоЗаработка0504425(КомандыПечати, "Документ.ОплатаДнейУходаЗаДетьмиИнвалидами");
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
МодульГосударственнаяСлужба = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
МодульГосударственнаяСлужба.ДобавитьКомандыПечатиСохраняемогоДенежногоСодержания(КомандыПечати);
КонецЕсли;
РасчетЗарплатыРасширенный.ДобавитьКомандуПечатиПодробногоРасчетаНачислений(КомандыПечати);
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Менеджер = Документы.ОплатаДнейУходаЗаДетьмиИнвалидами;
УправлениеПечатьюБЗК.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, Менеджер);
Обработки.ПечатьРасчетаСреднегоЗаработка.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецПроцедуры
Процедура ПриФормированииПечатнойФормы(КонтекстПечати) Экспорт
Макеты = Метаданные.Документы.ОплатаДнейУходаЗаДетьмиИнвалидами.Макеты;
Если КонтекстПечати.МетаданныеМакета = Макеты.ПФ_MXL_ПриказОПредоставленииДнейУхода Тогда
КонтекстПечати.ТабличныйДокумент = ПечатнаяФормаПриказаОПредоставленииДнейУхода(
КонтекстПечати.МассивОбъектов,
КонтекстПечати.ОбъектыПечати);
ИначеЕсли КонтекстПечати.МетаданныеМакета = Макеты.ПФ_MXL_ЗаявлениеОПредоставленииДополнительныхВыходныхДней Тогда
КонтекстПечати.ТабличныйДокумент = ПечатнаяФормаЗаявленияОПредоставленииДнейУхода(
КонтекстПечати.МассивОбъектов,
КонтекстПечати.ОбъектыПечати);
ИначеЕсли КонтекстПечати.МетаданныеМакета = Макеты.ПФ_MXL_Заявление2023 Тогда
ПриПечатиЗаявления2023(КонтекстПечати);
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)
| И ЗначениеРазрешено(ФизическоеЛицо)";
КонецПроцедуры
Функция ОписаниеРазделовДанных() Экспорт
ВсеРазделы = МногофункциональныеДокументыБЗККлиентСервер.РазделыДанных();
ОписаниеРазделовДанных = Новый Соответствие();
ОписаниеРаздела = МногофункциональныеДокументыБЗККлиентСервер.НовыйОписаниеРазделаДанных();
ОписаниеРазделовДанных.Вставить(ВсеРазделы.КадровыеДанные, ОписаниеРаздела);
ОписаниеРаздела.РеквизитСостояние = "Проведен";
ОписаниеРаздела.РеквизитОтветсвенный = "Ответственный";
ОписаниеРаздела = МногофункциональныеДокументыБЗККлиентСервер.НовыйОписаниеРазделаДанных();
ОписаниеРазделовДанных.Вставить(ВсеРазделы.НачисленнаяЗарплата, ОписаниеРаздела);
ОписаниеРаздела.РеквизитСостояние = "ДокументРассчитан";
ОписаниеРаздела.РеквизитОтветсвенный = "Рассчитал";
ОписаниеРаздела.ТребуетсяУтверждениеПриПроведении = Истина;
ОписаниеРаздела.СообщениеДокументНеУтвержден = НСтр("ru = '%1 - документ не рассчитан.'");
Возврат ОписаниеРазделовДанных;
КонецФункции
Функция ЗначенияДоступа(ДокументОбъект) Экспорт
Возврат МногофункциональныеДокументыБЗК.ЗначенияДоступаПоСоставуДокумента(
ДокументОбъект,
ДокументОбъект.Организация);
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
#Область ОбработчикиПравилРегистрации
Процедура ПриЗаполненииНастроекОбработчиковПравилРегистрации(Настройки) Экспорт
ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОтбораПоОрганизации(Настройки);
ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОбъектаСПрисоединеннымиФайлами(Настройки);
КонецПроцедуры
#КонецОбласти
Функция ОписаниеСоставаОбъекта() Экспорт
Возврат ЗарплатаКадрыСоставДокументов.ОписаниеСоставаОбъектаФизическоеЛицоВШапке();
КонецФункции
Функция СвойстваИсправляемогоДокумента(ДокументСсылка) Экспорт
Реквизиты = ИсправлениеДокументовЗарплатаКадры.РеквизитыИсправляемогоРасчетногоДокумента();
Реквизиты.Вставить("ДокументРассчитан");
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументСсылка, Реквизиты);
КонецФункции
Функция ПараметрыИсправляемогоДокумента(ДокументСсылка) Экспорт
Возврат ИсправлениеДокументовЗарплатаКадры.ПараметрыИсправляемогоДокумента(ДокументСсылка,
СвойстваИсправляемогоДокумента(ДокументСсылка));
КонецФункции
Функция ПараметрыСторнируемогоДокумента(ДокументСсылка) Экспорт
Свойства = ПараметрыИсправляемогоДокумента(ДокументСсылка);
Реквизиты = Новый Структура;
Реквизиты.Вставить("ДатаВыплаты", "ПланируемаяДатаВыплаты");
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Свойства, ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументСсылка, Реквизиты));
Параметры = ИсправлениеДокументовЗарплатаКадры.ПараметрыСторнируемогоДокумента(ДокументСсылка, Свойства);
ОписаниеТаблицы = ИсправлениеДокументовЗарплатаКадры.НовыйОписаниеТаблицыНачислений();
ОписаниеТаблицы.ИмяТаблицы = "Начисления";
ОписаниеТаблицы.ИмяПоляВидРасчета = "Начисление";
Параметры.ТаблицыНачислений.Добавить(ОписаниеТаблицы);
Возврат Параметры;
КонецФункции
Процедура ЗаполнитьСведенияОПерсональныхДанных(ТаблицаСведений) Экспорт
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.ОплатаДнейУходаЗаДетьмиИнвалидами";
НовыеСведения.ПоляРегистрации = "НДФЛ.ФизическоеЛицо";
НовыеСведения.ПоляДоступа = "НДФЛ.Налог,НДФЛ.ЗачтеноАвансовыхПлатежей,НДФЛ.ПримененныйВычетЛичный,НДФЛ.ПримененныйВычетЛичныйКЗачетуВозврату";
НовыеСведения.ОбластьДанных = "Доходы";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.ОплатаДнейУходаЗаДетьмиИнвалидами";
НовыеСведения.ПоляРегистрации = "Начисления.Сотрудник";
НовыеСведения.ПоляДоступа = "Начисления.Результат,Начисления.РасчетнаяБазаЗаЕдиницуНормыВремени,Начисления.СуммаВычета";
НовыеСведения.ОбластьДанных = "Доходы";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.ОплатаДнейУходаЗаДетьмиИнвалидами";
НовыеСведения.ПоляРегистрации = "НачисленияПерерасчет.Сотрудник";
НовыеСведения.ПоляДоступа = "НачисленияПерерасчет.Результат,НачисленияПерерасчет.РасчетнаяБазаЗаЕдиницуНормыВремени,НачисленияПерерасчет.СуммаВычета,НачисленияПерерасчет.РезультатВТомЧислеЗаСчетФБ";
НовыеСведения.ОбластьДанных = "Доходы";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.ОплатаДнейУходаЗаДетьмиИнвалидами";
НовыеСведения.ПоляРегистрации = "СреднийЗаработокОбщий.Сотрудник,Удержания.ФизическоеЛицо,РаспределениеРезультатовУдержаний.Сотрудник";
НовыеСведения.ПоляДоступа = "СреднийЗаработокОбщий.Сумма,Удержания.Результат,РаспределениеРезультатовНачислений.Результат,РаспределениеРезультатовУдержаний.Результат";
НовыеСведения.ОбластьДанных = "Доходы";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.ОплатаДнейУходаЗаДетьмиИнвалидами";
НовыеСведения.ПоляРегистрации = "Сотрудник,ФизическоеЛицо,ДанныеОбИндексации.Сотрудник";
НовыеСведения.ПоляДоступа = "СреднийЗаработок,Начислено,Удержано,ДанныеОбИндексации.КоэффициентИндексации,Показатели.Значение,ПримененныеВычетыНаДетейИИмущественные.РазмерВычета";
НовыеСведения.ОбластьДанных = "Доходы";
КонецПроцедуры
Функция ОбъектЗаблокирован(СсылкаНаОбъект) Экспорт
Возврат Ложь;
КонецФункции
Процедура ПеренестиВидВремени(ПараметрыОбновления = Неопределено) Экспорт
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 500
| ТаблицаДокумента.Ссылка КАК Ссылка
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами КАК ТаблицаДокумента
|ГДЕ
| НЕ ТаблицаДокумента.ПометкаУдаления
| И ТаблицаДокумента.УдалитьВидВремени <> ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.ПустаяСсылка)");
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбработчик(ПараметрыОбновления);
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПродолжитьОбработчик(ПараметрыОбновления);
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если Не ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПодготовитьОбновлениеДанных(ПараметрыОбновления, "Документ.ОплатаДнейУходаЗаДетьмиИнвалидами", "Ссылка", Выборка.Ссылка) Тогда
Продолжить;
КонецЕсли;
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокументОбъект.ВидВремени = ДокументОбъект.УдалитьВидВремени;
ДокументОбъект.УдалитьВидВремени = Неопределено;
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ДокументОбъект);
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбновлениеДанных(ПараметрыОбновления);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ДатаНачалаПримененияОстаткаДнейЗаГод() Экспорт
Возврат '20230901';
КонецФункции
Функция ИзбыточноВключенФлажокИспользоватьОстатокДнейЗаГод(Документ) Экспорт
УстановитьПривилегированныйРежим(Истина);
Если Не ЗначениеЗаполнено(Документ.Сотрудник) Тогда
Возврат Ложь;
КонецЕсли;
КоличествоДней = Документ.ДниУхода.Количество();
Если КоличествоДней < 1 Или КоличествоДней > 4 Тогда
Возврат Ложь;
КонецЕсли;
КонецМесяца = КонецМесяца(Документ.ДниУхода[0].Дата);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТаблицаДней.Дата) КАК КоличествоДней
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами КАК Шапка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОплатаДнейУходаЗаДетьмиИнвалидами.ДниУхода КАК ТаблицаДней
| ПО Шапка.Ссылка = ТаблицаДней.Ссылка
| И (ТаблицаДней.Дата МЕЖДУ &НачалоМесяца И &КонецМесяца)
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОплатаДнейУходаЗаДетьмиИнвалидами КАК Шапка2
| ПО Шапка.Ссылка = Шапка2.ИсправленныйДокумент
| И (Шапка2.Проведен
| ИЛИ Шапка2.Ссылка = &Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СторнированиеНачислений КАК Сторнирование
| ПО Шапка.Ссылка = Сторнирование.СторнируемыйДокумент
| И (Сторнирование.Проведен)
|ГДЕ
| Шапка.Сотрудник = &Сотрудник
| И Шапка.Проведен
| И НЕ Шапка.ИспользоватьОстатокДнейЗаГод
| И Шапка.Ссылка <> &Ссылка
| И Шапка.Ссылка <> &ИсправленныйДокумент
| И Шапка2.Ссылка ЕСТЬ NULL
| И Сторнирование.Ссылка ЕСТЬ NULL";
Запрос.УстановитьПараметр("Сотрудник", Документ.Сотрудник);
Запрос.УстановитьПараметр("НачалоМесяца", НачалоМесяца(КонецМесяца));
Запрос.УстановитьПараметр("КонецМесяца", КонецМесяца);
Запрос.УстановитьПараметр("Ссылка", Документ.Ссылка);
Запрос.УстановитьПараметр("ИсправленныйДокумент", Документ.ИсправленныйДокумент);
Таблица = Запрос.Выполнить().Выгрузить();
ИспользованоВМесяц = Таблица.Итог("КоличествоДней");
Если КоличествоДней + ИспользованоВМесяц <= 4 Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
Функция ДобавитьКомандыСозданияДокументов(КомандыСозданияДокументов, ДополнительныеПараметры) Экспорт
ЗарплатаКадрыРасширенный.ДобавитьВКоллекциюКомандуСозданияДокументаПоМетаданнымДокумента(
КомандыСозданияДокументов, Метаданные.Документы.ОплатаДнейУходаЗаДетьмиИнвалидами);
КонецФункции
Функция ТекстСообщенияНеЗаполненВидРасчета() Экспорт
Возврат НСтр("ru = 'Не найдено ни одного начисления для регистрации оплаты дней ухода за детьми-инвалидами'");
КонецФункции
Функция ТаблицаИнтерваловОтсутствия(ДниУхода) Экспорт
ТаблицаИнтервалов = Новый ТаблицаЗначений;
ТаблицаИнтервалов.Колонки.Добавить("ДатаНачала");
ТаблицаИнтервалов.Колонки.Добавить("ДатаОкончания");
НоваяСтрока = Неопределено;
Для Каждого ТекСтрока Из ДниУхода Цикл
Если НоваяСтрока = Неопределено Тогда
НоваяСтрока = ТаблицаИнтервалов.Добавить();
НоваяСтрока.ДатаНачала = ТекСтрока.Дата;
НоваяСтрока.ДатаОкончания = ТекСтрока.Дата;
Иначе
Если НоваяСтрока.ДатаОкончания + 86400 = ТекСтрока.Дата Тогда
НоваяСтрока.ДатаОкончания = ТекСтрока.Дата;
Иначе
НоваяСтрока = ТаблицаИнтервалов.Добавить();
НоваяСтрока.ДатаНачала = ТекСтрока.Дата;
НоваяСтрока.ДатаОкончания = ТекСтрока.Дата;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ТаблицаИнтервалов;
КонецФункции
Функция МесяцыУхода(ДниУхода) Экспорт
ТаблицаРезультат = Новый ТаблицаЗначений;
ТаблицаРезультат.Колонки.Добавить("НачалоМесяца", Новый ОписаниеТипов("Дата"));
ТаблицаРезультат.Колонки.Добавить("ПредставлениеПериодов", ОбщегоНазначения.ОписаниеТипаСтрока(1000));
ТаблицаРезультат.Колонки.Добавить("КоличествоДней", ОбщегоНазначения.ОписаниеТипаЧисло(10));
ТаблицаРезультат.Колонки.Добавить("КоличествоПериодов", ОбщегоНазначения.ОписаниеТипаЧисло(10));
Если ТипЗнч(ДниУхода) = Тип("ТаблицаЗначений") Тогда
ТаблицаДат = ДниУхода;
Иначе
ТаблицаДат = ДниУхода.Выгрузить();
КонецЕсли;
Если ТаблицаДат.Колонки.Найти("НачалоМесяца") = Неопределено Тогда
ТаблицаДат.Колонки.Добавить("НачалоМесяца", Новый ОписаниеТипов("Дата"));
ТаблицаДат.Колонки.Добавить("КоличествоДней", ОбщегоНазначения.ОписаниеТипаЧисло(10));
Для Каждого СтрокаТаблицыДат Из ТаблицаДат Цикл
СтрокаТаблицыДат.НачалоМесяца = НачалоМесяца(СтрокаТаблицыДат.Дата);
СтрокаТаблицыДат.КоличествоДней = 1;
КонецЦикла;
КонецЕсли;
ТаблицаПериодов = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(ТаблицаДат, "НачалоМесяца", "КоличествоДней");
Массив = КоллекцииБЗК.УникальныеЗначенияКолонки(ТаблицаПериодов, "НачалоМесяца");
Для Каждого НачалоМесяца Из Массив Цикл
СтрокаРезультат = ТаблицаРезультат.Добавить();
СтрокаРезультат.НачалоМесяца = НачалоМесяца;
ТаблицаПериодовПоМесяцу = ТаблицаПериодов.Скопировать(Новый Структура("НачалоМесяца", НачалоМесяца));
ТаблицаПериодовПоМесяцу.Сортировать("ДатаНачала");
Количество = ТаблицаПериодовПоМесяцу.Количество();
Номер = 0;
Представления = Новый Массив;
Для Каждого Период Из ТаблицаПериодовПоМесяцу Цикл
Номер = Номер + 1;
ФорматДатыОкончания = ?(Номер = Количество, "ДФ=""д ММММ""", "ДФ=""д""");
Если Период.ДатаНачала = Период.ДатаОкончания Тогда
Представление = Формат(Период.ДатаОкончания, ФорматДатыОкончания);
Иначе
Представление = Формат(Период.ДатаНачала, "ДФ=""д""") + "-" + Формат(Период.ДатаОкончания, ФорматДатыОкончания);
КонецЕсли;
Представления.Добавить(Представление);
СтрокаРезультат.КоличествоДней = СтрокаРезультат.КоличествоДней + Период.КоличествоДней;
СтрокаРезультат.КоличествоПериодов = СтрокаРезультат.КоличествоПериодов + 1;
КонецЦикла;
СтрокаРезультат.ПредставлениеПериодов = СтрСоединить(Представления, ", ");
КонецЦикла;
Возврат ТаблицаРезультат;
КонецФункции
Функция ПредставлениеПериодовУхода(МесяцыУхода) Экспорт
Возврат СтрСоединить(МесяцыУхода.ВыгрузитьКолонку("ПредставлениеПериодов"), "; ");
КонецФункции
Функция ДанныеДляРегистрацииВУчетаСтажаПФР(МассивСсылок) Экспорт
ДанныеДляРегистрацииВУчете = Новый Соответствие;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.Текст =
"ВЫБРАТЬ
| ОплатаДнейУходаЗаДетьмиИнвалидамиДниУхода.Ссылка КАК Ссылка,
| ОплатаДнейУходаЗаДетьмиИнвалидамиДниУхода.Дата,
| ОплатаДнейУходаЗаДетьмиИнвалидамиДниУхода.Ссылка.Сотрудник,
| ОплатаДнейУходаЗаДетьмиИнвалидамиДниУхода.Ссылка.ВидРасчета.ВидСтажаПФР2014 КАК ВидСтажаПФР
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами.ДниУхода КАК ОплатаДнейУходаЗаДетьмиИнвалидамиДниУхода
|ГДЕ
| ОплатаДнейУходаЗаДетьмиИнвалидамиДниУхода.Ссылка В(&МассивСсылок)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.СледующийПоЗначениюПоля("Ссылка") Цикл
ДанныеДляРегистрацииВУчетеПоДокументу = УчетСтажаПФР.ДанныеДляРегистрацииВУчетеСтажаПФР();
ДанныеДляРегистрацииВУчете.Вставить(Выборка.Ссылка, ДанныеДляРегистрацииВУчетеПоДокументу);
Если ЗначениеЗаполнено(Выборка.ВидСтажаПФР) Тогда
Пока Выборка.Следующий() Цикл
ОписаниеПериода = УчетСтажаПФР.ОписаниеРегистрируемогоПериода();
ОписаниеПериода.Сотрудник = Выборка.Сотрудник;
ОписаниеПериода.ДатаНачалаПериода = Выборка.Дата;
ОписаниеПериода.ДатаОкончанияПериода = Выборка.Дата;
ОписаниеПериода.Состояние = Перечисления.СостоянияСотрудника.ДополнительныеВыходныеДниОплачиваемые;
РегистрируемыйПериод = УчетСтажаПФР.ДобавитьЗаписьВДанныеДляРегистрацииВУчета(ДанныеДляРегистрацииВУчетеПоДокументу, ОписаниеПериода);
УчетСтажаПФР.УстановитьЗначениеРегистрируемогоРесурса(РегистрируемыйПериод, "ВидСтажаПФР", Выборка.ВидСтажаПФР);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат ДанныеДляРегистрацииВУчете;
КонецФункции
Функция ДанныеДляПроведения(РеквизитыДляПроведения, СтруктураВидовУчета)
ДанныеДляПроведения = РасчетЗарплаты.СоздатьДанныеДляПроведенияНачисленияЗарплаты();
Если СтруктураВидовУчета.ОстальныеВидыУчета Или СтруктураВидовУчета.СтраховыеВзносы Тогда
РасчетЗарплатыРасширенный.ЗаполнитьНачисления(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка, "Начисления,НачисленияПерерасчет,НачисленияПерерасчетНулевыеСторно", "Ссылка.ПериодРегистрации");
ОтражениеЗарплатыВБухучете.СоздатьВТНачисленияСДаннымиЕНВД(РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.МенеджерВременныхТаблиц, ДанныеДляПроведения.НачисленияПоСотрудникам);
КонецЕсли;
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
Если РеквизитыДляПроведения.ДокументРассчитан Тогда
РасчетЗарплатыРасширенный.ЗаполнитьУдержания(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка);
РасчетЗарплаты.ЗаполнитьСписокФизическихЛиц(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка, РеквизитыДляПроведения.ИсправленныйДокумент);
РасчетЗарплаты.ЗаполнитьДанныеНДФЛ(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка);
РасчетЗарплатыРасширенный.ЗаполнитьДанныеКорректировкиВыплаты(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка);
РасчетЗарплатыРасширенный.ЗаполнитьПогашениеЗадолженностиПоУдержаниям(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка, РеквизитыДляПроведения.ПериодРегистрации);
ЗаполнитьСведенияОПособиях(РеквизитыДляПроведения, ДанныеДляПроведения);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
КорректировкиДляРегистрацииДенежногоСодержания = Модуль.СведенияОКорректировкахДляРегистрацииДенежногоСодержанияДокумента(РеквизитыДляПроведения.Ссылка);
ДанныеДляПроведения.Вставить("КорректировкиДляРегистрацииДенежногоСодержания", КорректировкиДляРегистрацииДенежногоСодержания);
СоставМесячногоДенежногоСодержания = Модуль.СведенияОСоставеМесячногоДенежногоСодержания(РеквизитыДляПроведения.Ссылка, "ДенежноеСодержание,ДенежноеСодержаниеФактическиеНачисления");
ДанныеДляПроведения.Вставить("СоставМесячногоДенежногоСодержания", СоставМесячногоДенежногоСодержания);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если РеквизитыДляПроведения.ДокументРассчитан И СтруктураВидовУчета.ДанныеДляРасчетаСреднего Тогда
ДополнительныеПараметры = УчетСреднегоЗаработка.ДополнительныеПараметрыРегистрацииДанныхСреднегоЗаработка();
ДополнительныеПараметры.МесяцНачисления = "Ссылка.ПериодРегистрации";
УчетСреднегоЗаработка.ЗаполнитьТаблицыДляРегистрацииДанныхСреднегоЗаработка(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка, ДополнительныеПараметры);
КонецЕсли;
Возврат ДанныеДляПроведения;
КонецФункции
Функция РеквизитыДляПроведения(ДокументСсылка)
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ОплатаДнейУходаЗаДетьмиИнвалидами.Ссылка КАК Ссылка,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ДокументРассчитан КАК ДокументРассчитан,
| ОплатаДнейУходаЗаДетьмиИнвалидами.Организация КАК Организация,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ПериодРегистрации КАК ПериодРегистрации,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ПорядокВыплаты КАК ПорядокВыплаты,
| ОплатаДнейУходаЗаДетьмиИнвалидами.Дата КАК Дата,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ПланируемаяДатаВыплаты КАК ПланируемаяДатаВыплаты,
| ОплатаДнейУходаЗаДетьмиИнвалидами.Сотрудник КАК Сотрудник,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ФизическоеЛицо КАК ФизическоеЛицо,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ПериодРасчетаСреднегоЗаработкаНачало КАК ПериодРасчетаСреднегоЗаработкаНачало,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ПериодРасчетаСреднегоЗаработкаОкончание КАК ПериодРасчетаСреднегоЗаработкаОкончание,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ИсправленныйДокумент КАК ИсправленныйДокумент,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ВидРасчета КАК ВидРасчета,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ИсчислятьНалогПриОкончательномРасчете КАК ИсчислятьНалогПриОкончательномРасчете,
| ОплатаДнейУходаЗаДетьмиИнвалидами.УдержатьНалогПриВыплатеЗарплаты КАК УдержатьНалогПриВыплатеЗарплаты,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ВидВремени КАК ВидВремени
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами КАК ОплатаДнейУходаЗаДетьмиИнвалидами
|ГДЕ
| ОплатаДнейУходаЗаДетьмиИнвалидами.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеПоТерриториямУсловиямТруда.НомерСтроки КАК НомерСтроки,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеПоТерриториямУсловиямТруда.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеПоТерриториямУсловиямТруда.Территория КАК Территория,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеПоТерриториямУсловиямТруда.УсловияТруда КАК УсловияТруда,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеПоТерриториямУсловиямТруда.ДоляРаспределения КАК ДоляРаспределения,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеПоТерриториямУсловиямТруда.Результат КАК Результат,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеПоТерриториямУсловиямТруда.ИдентификаторСтрокиПоказателей КАК ИдентификаторСтрокиПоказателей,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеПоТерриториямУсловиямТруда.СуммаВычета КАК СуммаВычета,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеПоТерриториямУсловиямТруда.СкидкаПоВзносам КАК СкидкаПоВзносам,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеПоТерриториямУсловиямТруда.РанееНачислено КАК РанееНачислено
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами.РаспределениеПоТерриториямУсловиямТруда КАК ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеПоТерриториямУсловиямТруда
|ГДЕ
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеПоТерриториямУсловиямТруда.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.Территория КАК Территория,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.СтатьяФинансирования КАК СтатьяФинансирования,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.СтатьяРасходов КАК СтатьяРасходов,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.ОблагаетсяЕНВД КАК ОблагаетсяЕНВД,
| СУММА(ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.Результат) КАК Результат,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.ПодразделениеУчетаЗатрат КАК ПодразделениеУчетаЗатрат
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами.РаспределениеРезультатовНачислений КАК ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений
|ГДЕ
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.Территория,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.ОблагаетсяЕНВД,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.СтатьяРасходов,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.СтатьяФинансирования,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.СпособОтраженияЗарплатыВБухучете,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.ПодразделениеУчетаЗатрат,
| ОплатаДнейУходаЗаДетьмиИнвалидамиРаспределениеРезультатовНачислений.ИдентификаторСтроки
|;
|
|
|ВЫБРАТЬ
| ОплатаДнейУходаЗаДетьмиИнвалидамиДниУхода.НомерСтроки КАК НомерСтроки,
| ОплатаДнейУходаЗаДетьмиИнвалидамиДниУхода.Дата КАК Дата
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами.ДниУхода КАК ОплатаДнейУходаЗаДетьмиИнвалидамиДниУхода
|ГДЕ
| ОплатаДнейУходаЗаДетьмиИнвалидамиДниУхода.Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Результаты = Запрос.ВыполнитьПакет();
РеквизитыДляПроведения = РеквизитыДляПроведенияПустаяСтруктура();
ВыборкаРеквизиты = Результаты[0].Выбрать();
Пока ВыборкаРеквизиты.Следующий() Цикл
ЗаполнитьЗначенияСвойств(РеквизитыДляПроведения, ВыборкаРеквизиты);
КонецЦикла;
РеквизитыДляПроведения.РаспределениеПоТерриториямУсловиямТруда = Результаты[1].Выгрузить();
РеквизитыДляПроведения.РаспределениеРезультатовНачислений = Результаты[2].Выгрузить();
РеквизитыДляПроведения.ДниУхода = Результаты[3].Выгрузить();
Возврат РеквизитыДляПроведения;
КонецФункции
Функция РеквизитыДляПроведенияПустаяСтруктура() Экспорт
РеквизитыДляПроведенияПустаяСтруктура = Новый Структура(
"Ссылка, ДокументРассчитан, Организация, ПериодРегистрации, ПорядокВыплаты, Дата, ПланируемаяДатаВыплаты, Сотрудник,
|ФизическоеЛицо, ПериодРасчетаСреднегоЗаработкаНачало, ПериодРасчетаСреднегоЗаработкаОкончание,
|ИсправленныйДокумент, РаспределениеПоТерриториямУсловиямТруда, ДниУхода, ВидРасчета,
|РаспределениеРезультатовНачислений, ИсчислятьНалогПриОкончательномРасчете, УдержатьНалогПриВыплатеЗарплаты,
|ВидВремени");
Возврат РеквизитыДляПроведенияПустаяСтруктура;
КонецФункции
Процедура ЗаполнитьИсходныеДанныеПерерасчетов(ПараметрыОбновления) Экспорт
ПараметрыЗаполнения = ПерерасчетЗарплаты.ПараметрыЗаполненияИсходныхДанныхПерерасчетов();
ПерерасчетЗарплаты.ЗаполнитьИсходныеДанныеПерерасчетов(ПараметрыОбновления, Метаданные.Документы.ОплатаДнейУходаЗаДетьмиИнвалидами, ПараметрыЗаполнения);
КонецПроцедуры
Функция КатегорииСпециализированногоНачисления() Экспорт
КатегорииСпециализированногоНачисления = Новый Массив;
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДнейУходаЗаДетьмиИнвалидами);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДенежноеСодержаниеОплатаДнейУходаЗаДетьмиИнвалидами);
Возврат КатегорииСпециализированногоНачисления;
КонецФункции
#Область Печать
Функция ДатаВступленияВСилуФорм2023()
Возврат '20230901';
КонецФункции
Функция ПечатнаяФормаПриказаОПредоставленииДнейУхода(МассивОбъектов, ОбъектыПечати)
НастройкиПечатныхФорм = ЗарплатаКадры.НастройкиПечатныхФорм();
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ОплатаДнейУходаЗаДетьмиИнвалидами.ПФ_MXL_ПриказОПредоставленииДнейУхода");
ОбластьПриказ = Макет.ПолучитьОбласть("Приказ");
ДанныеДляПечати = ДанныеДляПечатиПриказаОПредоставленииДнейУхода(МассивОбъектов).Выбрать();
Пока ДанныеДляПечати.Следующий() Цикл
НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;
ЗаполнитьЗначенияСвойств(ОбластьПриказ.Параметры, ДанныеДляПечати);
ОбластьПриказ.Параметры.Должность = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Строка(ОбластьПриказ.Параметры.Должность), 3);
ФИОВПадеже = ОбластьПриказ.Параметры.ФИО;
ФизическиеЛицаЗарплатаКадры.Просклонять(Строка(ОбластьПриказ.Параметры.ФИО), 3, ФИОВПадеже, ДанныеДляПечати.Пол, ДанныеДляПечати.ФизическоеЛицо);
ОбластьПриказ.Параметры.ФИО = ФИОВПадеже;
Если НастройкиПечатныхФорм.УдалятьПрефиксыОрганизацииИИБИзНомеровКадровыхПриказов Тогда
ОбластьПриказ.Параметры.НомерДок = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ОбластьПриказ.Параметры.НомерДок, Истина, Истина);
КонецЕсли;
ОбластьПриказ.Параметры.ДатаДок = Формат(ДанныеДляПечати.ДатаДок, "ДЛФ=D");
ТабДокумент.Вывести(ОбластьПриказ);
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеДляПечати.Документ);
КонецЦикла;
Возврат ТабДокумент;
КонецФункции
Функция ДанныеДляПечатиПриказаОПредоставленииДнейУхода(МассивОбъектов)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ОплатаДнейУходаЗаДетьмиИнвалидами.Ссылка КАК Ссылка,
| ОплатаДнейУходаЗаДетьмиИнвалидами.Номер КАК Номер,
| ОплатаДнейУходаЗаДетьмиИнвалидами.Дата КАК Дата,
| ОплатаДнейУходаЗаДетьмиИнвалидами.Сотрудник КАК Сотрудник,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ФизическоеЛицо КАК ФизическоеЛицо,
| ОплатаДнейУходаЗаДетьмиИнвалидами.Организация КАК Организация,
| ВЫБОР
| КОГДА ПОДСТРОКА(ОплатаДнейУходаЗаДетьмиИнвалидами.Организация.НаименованиеПолное, 1, 10) = """"
| ТОГДА ОплатаДнейУходаЗаДетьмиИнвалидами.Организация.Наименование
| ИНАЧЕ ОплатаДнейУходаЗаДетьмиИнвалидами.Организация.НаименованиеПолное
| КОНЕЦ КАК НазваниеОрганизации,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ПредставлениеПериода КАК ДниУхода,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ДатаНачалаСобытия КАК Период,
| ОплатаДнейУходаЗаДетьмиИнвалидами.Руководитель КАК Руководитель,
| ОплатаДнейУходаЗаДетьмиИнвалидами.ДолжностьРуководителя КАК ДолжностьРуководителя
|ПОМЕСТИТЬ ВТДанныеДокументов
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами КАК ОплатаДнейУходаЗаДетьмиИнвалидами
|ГДЕ
| ОплатаДнейУходаЗаДетьмиИнвалидами.Ссылка В(&МассивОбъектов)";
Запрос.Выполнить();
ОписательВременныхТаблиц = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТДанныеДокументов");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВременныхТаблиц, Истина, "ФИОПолные, Должность, Пол");
ИменаПолейОтветственныхЛиц = Новый Массив;
ИменаПолейОтветственныхЛиц.Добавить("Руководитель");
ЗарплатаКадры.СоздатьВТФИООтветственныхЛиц(Запрос.МенеджерВременныхТаблиц, Ложь, ИменаПолейОтветственныхЛиц, "ВТДанныеДокументов");
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДанныеДокументов.Ссылка КАК Документ,
| ДанныеДокументов.Номер КАК НомерДок,
| ДанныеДокументов.Дата КАК ДатаДок,
| ДанныеДокументов.Сотрудник КАК Сотрудник,
| ДанныеДокументов.ФизическоеЛицо КАК ФизическоеЛицо,
| ДанныеДокументов.Организация КАК Организация,
| ДанныеДокументов.НазваниеОрганизации КАК НазваниеОрганизации,
| ДанныеДокументов.ДниУхода КАК ДниУхода,
| ДанныеДокументов.ДолжностьРуководителя.Наименование КАК ДолжностьРуководителя,
| ФИООтветственныхЛиц.РасшифровкаПодписи КАК РуководительРасшифровкаПодписи,
| КадровыеДанныеСотрудников.Должность.Наименование КАК Должность,
| КадровыеДанныеСотрудников.Пол КАК Пол,
| КадровыеДанныеСотрудников.ФИОПолные КАК ФИО
|ИЗ
| ВТДанныеДокументов КАК ДанныеДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ПО ДанныеДокументов.Сотрудник = КадровыеДанныеСотрудников.Сотрудник
| И ДанныеДокументов.Период = КадровыеДанныеСотрудников.Период
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИООтветственныхЛиц
| ПО ДанныеДокументов.Руководитель = ФИООтветственныхЛиц.ФизическоеЛицо
| И ДанныеДокументов.Ссылка = ФИООтветственныхЛиц.Ссылка";
РезультатЗапроса = Запрос.Выполнить();
Возврат РезультатЗапроса;
КонецФункции
Функция ПечатнаяФормаЗаявленияОПредоставленииДнейУхода(МассивСсылок, ОбъектыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ОплатаДнейУходаЗаДетьмиИнвалидами.ПФ_MXL_ЗаявлениеОПредоставленииДополнительныхВыходныхДней");
Запрос = ЗапросДляПечатиЗаявленияОПредоставленииДнейУхода(МассивСсылок);
РезультатыЗапроса = Запрос.ВыполнитьПакет();
Выборка = РезультатыЗапроса[0].Выбрать();
ДниУходаПоВсемДокументам = РезультатыЗапроса[1].Выгрузить();
Пока Выборка.Следующий() Цикл
МесяцыУхода = МесяцыУходаДляПечати(Выборка, ДниУходаПоВсемДокументам);
Для Каждого МесяцУхода Из МесяцыУхода Цикл
Если ТабличныйДокумент.ВысотаТаблицы > 0 Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ВывестиШапкуЗаявленияОПредоставленииДнейУхода(ТабличныйДокумент, Макет, Выборка, МесяцУхода);
ВывестиДанныеОВторомРодителеЗаявленияОПредоставленииДнейУхода(ТабличныйДокумент, Макет, Выборка);
ВывестиПодвалЗаявленияОПредоставленииДнейУхода(ТабличныйДокумент, Макет, Выборка);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Выборка.Ссылка);
КонецЦикла;
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
Процедура ВывестиШапкуЗаявленияОПредоставленииДнейУхода(ТабличныйДокумент, Макет, Выборка, МесяцУхода)
ОбластьШапкаВерх = Макет.ПолучитьОбласть("ШапкаВерх");
ОбластьШапкаСередина = Макет.ПолучитьОбласть("ШапкаСередина");
ОбластьШапкаНиз = Макет.ПолучитьОбласть("ШапкаНиз");
ТабличныйДокумент.Вывести(ОбластьШапкаВерх);
ВывестиДанныеОРуководителеЗаявленияОПредоставленииДнейУхода(ТабличныйДокумент, Макет, Выборка);
ТабличныйДокумент.Вывести(ОбластьШапкаСередина);
ВывестиДанныеОСотрудникеЗаявленияОПредоставленииДнейУхода(ТабличныйДокумент, Макет, Выборка);
ОбластьШапкаНиз.Параметры.ДниУхода = МесяцУхода.ПредставлениеПериодов;
ОбластьШапкаНиз.Параметры.КоличествоДнейУхода = МесяцУхода.КоличествоДней;
ТабличныйДокумент.Вывести(ОбластьШапкаНиз);
КонецПроцедуры
Процедура ВывестиДанныеОРуководителеЗаявленияОПредоставленииДнейУхода(ТабличныйДокумент, Макет, ДанныеДляПечати)
ОбластьДиректор = Макет.ПолучитьОбласть("Директор");
ДлинаСтрокиСведенийОДиректоре = 45;
Если ЗначениеЗаполнено(ДанныеДляПечати.ФИОРуководителя) Тогда
ФИОРуководителя = "";
ФизическиеЛицаЗарплатаКадры.Просклонять(Строка(ДанныеДляПечати.ФИОРуководителя), 3, ФИОРуководителя, , ДанныеДляПечати.Руководитель);
ШаблонДиректор = "%1 (%2, %3)";
СтрокаДиректор = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДиректор, ФИОРуководителя, ДанныеДляПечати.ДолжностьРуководителя, ДанныеДляПечати.НазваниеОрганизации);
МинимальноеКоличествоСтрокСведенийОДиректоре = 0;
МассивСтрок = МассивСтрокЗаданнойДлины(СтрокаДиректор, ДлинаСтрокиСведенийОДиректоре);
Иначе
МинимальноеКоличествоСтрокСведенийОДиректоре = 4;
МассивСтрок = Новый Массив;
КонецЕсли;
ВывестиМассивСтрокВТабличныйДокумент(ТабличныйДокумент, ОбластьДиректор, "Директор", МассивСтрок, МинимальноеКоличествоСтрокСведенийОДиректоре);
КонецПроцедуры
Процедура ВывестиДанныеОСотрудникеЗаявленияОПредоставленииДнейУхода(ТабличныйДокумент, Макет, ДанныеДляПечати)
ОбластьСотрудник = Макет.ПолучитьОбласть("Сотрудник");
ДлинаСтрокиСведенийОСотруднике = 45;
Если ЗначениеЗаполнено(ДанныеДляПечати.ФИОСотрудника) Тогда
ФИОСотрудника = "";
ФизическиеЛицаЗарплатаКадры.Просклонять(Строка(ДанныеДляПечати.ФИОСотрудника), 2, ФИОСотрудника, ДанныеДляПечати.ПолСотрудника, ДанныеДляПечати.ФизическоеЛицо);
ШаблонСотрудник = НСтр("ru = 'От %1 (%2, %3)'");
СтрокаСотрудник = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСотрудник, ФИОСотрудника, ДанныеДляПечати.ДолжностьСотрудника, ДанныеДляПечати.ПодразделениеСотрудника);
МинимальноеКоличествоСтрокСведенийОСотруднике = 0;
МассивСтрок = МассивСтрокЗаданнойДлины(СтрокаСотрудник, ДлинаСтрокиСведенийОСотруднике);
Иначе
МинимальноеКоличествоСтрокСведенийОСотруднике = 4;
МассивСтрок = Новый Массив;
КонецЕсли;
ВывестиМассивСтрокВТабличныйДокумент(ТабличныйДокумент, ОбластьСотрудник, "Сотрудник", МассивСтрок, МинимальноеКоличествоСтрокСведенийОСотруднике);
КонецПроцедуры
Процедура ВывестиДанныеОВторомРодителеЗаявленияОПредоставленииДнейУхода(ТабличныйДокумент, Макет, ДанныеДляПечати)
ОбластьСведенияОВторомРодителеВерх = Макет.ПолучитьОбласть("СведенияОВторомРодителеВерх");
ОбластьСведенияОВторомРодителе = Макет.ПолучитьОбласть("СведенияОВторомРодителе");
СтруктураЗаполнения = Новый Структура;
СведенияОВторомРодителе = ДанныеДляПечати.СведенияОВторомРодителе;
ДлинаКороткойСтрокиСведенийОВторомРодителе = 75;
МассивСтрок = МассивСтрокЗаданнойДлины(СведенияОВторомРодителе, ДлинаКороткойСтрокиСведенийОВторомРодителе);
СтрокаСведенияОВторомРодителеКороткая = "";
Если МассивСтрок.Количество() > 0 Тогда
СтрокаСведенияОВторомРодителеКороткая = МассивСтрок[0];
КонецЕсли;
СтруктураЗаполнения.Вставить("СведенияОВторомРодителеКороткая", СтрокаСведенияОВторомРодителеКороткая);
ЗаполнитьЗначенияСвойств(ОбластьСведенияОВторомРодителеВерх.Параметры, СтруктураЗаполнения);
ТабличныйДокумент.Вывести(ОбластьСведенияОВторомРодителеВерх);
СведенияОВторомРодителе = Прав(СведенияОВторомРодителе, СтрДлина(СведенияОВторомРодителе) - СтрДлина(СтрокаСведенияОВторомРодителеКороткая));
ДлинаСтрокиСведенийОВторомРодителе = 105;
МинимальноеКоличествоСтрокСведенийОВторомРодителе = 9;
МассивСтрок = МассивСтрокЗаданнойДлины(СведенияОВторомРодителе, ДлинаСтрокиСведенийОВторомРодителе);
ВывестиМассивСтрокВТабличныйДокумент(ТабличныйДокумент, ОбластьСведенияОВторомРодителе, "СведенияОВторомРодителе", МассивСтрок, МинимальноеКоличествоСтрокСведенийОВторомРодителе);
КонецПроцедуры
Процедура ВывестиПодвалЗаявленияОПредоставленииДнейУхода(ТабличныйДокумент, Макет, ДанныеДляПечати)
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ЗаполнитьЗначенияСвойств(ОбластьПодвал.Параметры, ДанныеДляПечати, "КоличествоЛистовПриложенныхДокументов,Дата");
Если НЕ ЗначениеЗаполнено(ОбластьПодвал.Параметры.КоличествоЛистовПриложенныхДокументов) Тогда
ОбластьПодвал.Параметры.КоличествоЛистовПриложенныхДокументов = "__________";
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьПодвал);
КонецПроцедуры
Функция ЗапросДляПечатиЗаявленияОПредоставленииДнейУхода(МассивСсылок)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаДниУхода.Ссылка КАК Ссылка,
| ТаблицаДниУхода.Дата КАК ДатаУхода,
| НАЧАЛОПЕРИОДА(ТаблицаДниУхода.Дата, МЕСЯЦ) КАК НачалоМесяца
|ПОМЕСТИТЬ ДниУхода
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами.ДниУхода КАК ТаблицаДниУхода
|ГДЕ
| ТаблицаДниУхода.Ссылка В(&МассивСсылок)
|;
|
|
|ВЫБРАТЬ
| ДниУхода.Ссылка КАК Ссылка,
| ДниУхода.НачалоМесяца КАК НачалоМесяца,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДниУхода.ДатаУхода) КАК ДатаНачалаСобытия,
| МИНИМУМ(ДниУхода.ДатаУхода) КАК КоличествоДней
|ПОМЕСТИТЬ МесяцыУхода
|ИЗ
| ДниУхода КАК ДниУхода
|
|СГРУППИРОВАТЬ ПО
| ДниУхода.Ссылка,
| ДниУхода.НачалоМесяца
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Шапка.Ссылка КАК Ссылка,
| Шапка.Дата КАК Дата,
| Шапка.Сотрудник КАК Сотрудник,
| Шапка.ФизическоеЛицо КАК ФизическоеЛицо,
| Шапка.Организация КАК Организация,
| Шапка.ПредставлениеПериода КАК ДниУхода,
| Шапка.ДатаНачалаСобытия КАК Период,
| Шапка.Руководитель КАК Руководитель,
| Шапка.ДолжностьРуководителя КАК ДолжностьРуководителя,
| Шапка.КоличествоЛистовПриложенныхДокументов КАК КоличествоЛистовПриложенныхДокументов,
| ВЫРАЗИТЬ(Шапка.СведенияОВторомРодителе КАК СТРОКА(1000)) КАК СведенияОВторомРодителе,
| Шапка.ИспользоватьОстатокДнейЗаГод КАК ИспользоватьОстатокДнейЗаГод
|ПОМЕСТИТЬ ДанныеДокументов
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами КАК Шапка
|ГДЕ
| Шапка.Ссылка В(&МассивСсылок)";
Запрос.Выполнить();
ОписательВременныхТаблиц = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, "ДанныеДокументов");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВременныхТаблиц, Истина, "ФИОПолные, Должность, Подразделение, Пол");
ИменаПолейОтветственныхЛиц = Новый Массив;
ИменаПолейОтветственныхЛиц.Добавить("Руководитель");
ЗарплатаКадры.СоздатьВТФИООтветственныхЛиц(Запрос.МенеджерВременныхТаблиц, Ложь, ИменаПолейОтветственныхЛиц, "ДанныеДокументов");
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДанныеДокументов.Ссылка КАК Ссылка,
| ДанныеДокументов.Дата КАК Дата,
| ДанныеДокументов.Период КАК ДатаНачалаСобытия,
| ДанныеДокументов.Сотрудник КАК Сотрудник,
| ДанныеДокументов.ФизическоеЛицо КАК ФизическоеЛицо,
| ДанныеДокументов.Организация КАК Организация,
| ДанныеДокументов.КоличествоЛистовПриложенныхДокументов КАК КоличествоЛистовПриложенныхДокументов,
| ДанныеДокументов.СведенияОВторомРодителе КАК СведенияОВторомРодителе,
| ДанныеДокументов.Руководитель КАК Руководитель,
| ДанныеДокументов.ДолжностьРуководителя.Наименование КАК ДолжностьРуководителя,
| ДанныеДокументов.ИспользоватьОстатокДнейЗаГод КАК ИспользоватьОстатокДнейЗаГод,
| ФИООтветственныхЛиц.ФИОПолные КАК ФИОРуководителя,
| ФИООтветственныхЛиц.Пол КАК ПолРуководителя,
| КадровыеДанныеСотрудников.Должность.Наименование КАК ДолжностьСотрудника,
| КадровыеДанныеСотрудников.Подразделение КАК ПодразделениеСотрудника,
| КадровыеДанныеСотрудников.ФИОПолные КАК ФИОСотрудника,
| КадровыеДанныеСотрудников.Пол КАК ПолСотрудника,
| ВЫБОР
| КОГДА ПОДСТРОКА(ДанныеДокументов.Организация.НаименованиеПолное, 1, 10) = """"
| ТОГДА ДанныеДокументов.Организация.Наименование
| ИНАЧЕ ДанныеДокументов.Организация.НаименованиеПолное
| КОНЕЦ КАК НазваниеОрганизации
|ИЗ
| ДанныеДокументов КАК ДанныеДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ПО ДанныеДокументов.Сотрудник = КадровыеДанныеСотрудников.Сотрудник
| И ДанныеДокументов.Период = КадровыеДанныеСотрудников.Период
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИООтветственныхЛиц
| ПО ДанныеДокументов.Руководитель = ФИООтветственныхЛиц.ФизическоеЛицо
| И ДанныеДокументов.Ссылка = ФИООтветственныхЛиц.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДниУхода.Ссылка КАК Ссылка,
| ДниУхода.НачалоМесяца КАК НачалоМесяца,
| 1 КАК КоличествоДней,
| ДниУхода.ДатаУхода КАК Дата
|ИЗ
| ДниУхода КАК ДниУхода
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| ДатаУхода";
Возврат Запрос;
КонецФункции
Функция МесяцыУходаДляПечати(Выборка, ДниУходаПоВсемДокументам)
ДниУхода = ДниУходаПоВсемДокументам.Скопировать(Новый Структура("Ссылка", Выборка.Ссылка));
МесяцыУхода = МесяцыУхода(ДниУхода);
Если МесяцыУхода.Количество() = 0 Тогда
МесяцУхода = МесяцыУхода.Добавить();
МесяцУхода.НачалоМесяца = Выборка.ДатаНачалаСобытия;
МесяцУхода.ПредставлениеПериодов = "";
МесяцУхода.КоличествоДней = 0;
МесяцУхода.КоличествоПериодов = 0;
Иначе
Для Каждого МесяцУхода Из МесяцыУхода Цикл
МесяцУхода.ПредставлениеПериодов = СтрШаблон(НСтр("ru = '%1 %2 г.'"),
МесяцУхода.ПредставлениеПериодов,
Формат(МесяцУхода.НачалоМесяца, "ДФ=yyyy"));
КонецЦикла;
КонецЕсли;
Возврат МесяцыУхода;
КонецФункции
Функция МассивСтрокЗаданнойДлины(ИсходнаяСтрока, Длина, ОтступСНовойСтроки = "", СокращатьПробелы = Истина)
Результат = Новый Массив;
МодифицированныйИсходник = ?(СокращатьПробелы, СокрЛП(ИсходнаяСтрока), Строка(ИсходнаяСтрока));
ДлинаОтступаСНовойСтроки = СтрДлина(ОтступСНовойСтроки);
ПробелыИПереносыСтрок = СЭДОФСС.ПробелыИПереносыСтрок();
Если ТипЗнч(Длина) = Тип("Число") Тогда
БратьДлинуИзМассива = Ложь;
МаксимальнаяДлина = Длина;
Иначе
БратьДлинуИзМассива = Истина;
МассивДлин = СтрРазделить(Длина, ", ", Ложь);
МаксимальнаяДлинаИндекс = 0;
МассивДлинВГраница = МассивДлин.ВГраница();
МаксимальнаяДлина = Число(МассивДлин[МаксимальнаяДлинаИндекс]);
КонецЕсли;
Для НомерСтроки = 1 По СтрЧислоСтрок(МодифицированныйИсходник) Цикл
Строка = СтрПолучитьСтроку(МодифицированныйИсходник, НомерСтроки);
Если СтрДлина(Строка) > МаксимальнаяДлина Тогда
МассивПодстрок = СтрокаВМассивСРазделителями(Строка, ПробелыИПереносыСтрок);
Буфер = "";
ДлинаБуфера = 0;
Для Каждого Подстрока Из МассивПодстрок Цикл
ДлинаПодстроки = СтрДлина(Подстрока);
ДлинаБуфера = ДлинаБуфера + ДлинаПодстроки;
Если ДлинаБуфера > МаксимальнаяДлина Тогда
Результат.Добавить(?(СокращатьПробелы, СокрЛП(Буфер), Буфер));
Если ПустаяСтрока(Подстрока) Тогда
Буфер = ОтступСНовойСтроки;
ДлинаБуфера = ДлинаОтступаСНовойСтроки;
Иначе
Буфер = ОтступСНовойСтроки + Подстрока;
ДлинаБуфера = ДлинаОтступаСНовойСтроки + ДлинаПодстроки;
КонецЕсли;
Если БратьДлинуИзМассива Тогда
МаксимальнаяДлинаИндекс = МаксимальнаяДлинаИндекс + 1;
Если МаксимальнаяДлинаИндекс > МассивДлинВГраница Тогда
МаксимальнаяДлинаИндекс = 0;
КонецЕсли;
Если МаксимальнаяДлинаИндекс <= МассивДлинВГраница Тогда
МаксимальнаяДлина = Число(МассивДлин[МаксимальнаяДлинаИндекс]);
КонецЕсли;
КонецЕсли;
Иначе
Буфер = Буфер + Подстрока;
КонецЕсли;
КонецЦикла;
Если ДлинаБуфера > ДлинаОтступаСНовойСтроки И Не ПустаяСтрока(Буфер) Тогда
Результат.Добавить(?(СокращатьПробелы, СокрЛП(Буфер), Буфер));
КонецЕсли;
Иначе
Результат.Добавить(?(СокращатьПробелы, СокрЛП(Строка), Строка));
Если БратьДлинуИзМассива Тогда
МаксимальнаяДлинаИндекс = МаксимальнаяДлинаИндекс + 1;
Если МаксимальнаяДлинаИндекс > МассивДлинВГраница Тогда
МаксимальнаяДлинаИндекс = 0;
КонецЕсли;
Если МаксимальнаяДлинаИндекс <= МассивДлинВГраница Тогда
МаксимальнаяДлина = Число(МассивДлин[МаксимальнаяДлинаИндекс]);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция СтрокаВМассивСРазделителями(Знач Строка, Знач Разделители)
Если ПустаяСтрока(Строка) Тогда
Возврат Строка;
КонецЕсли;
ПоследовательностьСлов = СтрРазделить(Строка, Разделители, Ложь);
ПоследовательностьРазделителей = СтрРазделить(Строка, СтрСоединить(ПоследовательностьСлов, ""), Ложь);
МассивРезультат = ПоследовательностьСлов;
ВГраница = ПоследовательностьРазделителей.ВГраница();
Если ВГраница >= 0 Тогда
Если СтрНачинаетсяС(Строка, ПоследовательностьРазделителей[0]) Тогда
Сдвиг = 0;
Иначе
Сдвиг = 1;
КонецЕсли;
Для Индекс = 0 По ПоследовательностьРазделителей.ВГраница() Цикл
МассивРезультат.Вставить(Индекс*2 + Сдвиг, ПоследовательностьРазделителей[Индекс]);
КонецЦикла;
КонецЕсли;
Возврат МассивРезультат;
КонецФункции
Процедура ВывестиМассивСтрокВТабличныйДокумент(ТабличныйДокумент, ОбластьМакета, ИмяПараметра, МассивСтрок, МинимальноеКоличествоСтрок = 0)
СтруктураЗаполнения = Новый Структура;
Для каждого ЧастьСтроки Из МассивСтрок Цикл
СтруктураЗаполнения.Вставить(ИмяПараметра, ЧастьСтроки);
ЗаполнитьЗначенияСвойств(ОбластьМакета.Параметры, СтруктураЗаполнения);
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЦикла;
СтрокВыведено = МассивСтрок.Количество();
Пока МинимальноеКоличествоСтрок > СтрокВыведено Цикл
СтруктураЗаполнения.Вставить(ИмяПараметра, "");
ЗаполнитьЗначенияСвойств(ОбластьМакета.Параметры, СтруктураЗаполнения);
ТабличныйДокумент.Вывести(ОбластьМакета);
СтрокВыведено = СтрокВыведено + 1;
КонецЦикла;
КонецПроцедуры
Процедура ПриПечатиЗаявления2023(КонтекстПечати)
СЭДОФСС.УстановитьСтандартныйОтступПечати(КонтекстПечати);
Запрос = ЗапросДляПечатиЗаявленияОПредоставленииДнейУхода(КонтекстПечати.МассивОбъектов);
РезультатыЗапроса = Запрос.ВыполнитьПакет();
Выборка = РезультатыЗапроса[0].Выбрать();
ДниУходаПоВсемДокументам = РезультатыЗапроса[1].Выгрузить();
Пока Выборка.Следующий() Цикл
МесяцыУхода = МесяцыУходаДляПечати(Выборка, ДниУходаПоВсемДокументам);
Для Каждого МесяцУхода Из МесяцыУхода Цикл
УправлениеПечатьюБЗК.ПередПечатьюОчередногоОбъекта(КонтекстПечати);
ВывестиШапкуЗаявления2023(КонтекстПечати, Выборка, МесяцУхода);
УправлениеПечатьюБЗК.ПослеПечатиОчередногоОбъекта(КонтекстПечати, Выборка.Ссылка);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ВывестиШапкуЗаявления2023(КонтекстПечати, Выборка, МесяцУхода)
Параметры = Новый Структура(КонтекстПечати.ИменаПараметровОбластей.Шапка);
Секция = УправлениеПечатьюБЗК.СекцияПечатнойФормы(КонтекстПечати, "Шапка");
ВывестиФИОРуководителяВШапкеЗаявления2023(Выборка, Секция, Параметры);
ВывестиФИОСотрудникаВШапкеЗаявления2023(Выборка, Секция, Параметры);
ВывестиСведенияОВторомРодителеВШапкеЗаявления2023(Выборка, Секция, Параметры);
УправлениеПечатьюБЗК.ВывестиДатуПоБуквам(Секция, Выборка.Дата, "Дата");
Параметры.КоличествоЛистовПриложенныхДокументов = Выборка.КоличествоЛистовПриложенныхДокументов;
Параметры.ДниУхода = МесяцУхода.ПредставлениеПериодов;
Параметры.КоличествоДнейУхода = МесяцУхода.КоличествоДней;
Если Выборка.ИспользоватьОстатокДнейЗаГод Тогда
Параметры.ФлажокДниЗаГод = "V";
Иначе
Параметры.ФлажокДниЗаМесяц = "V";
КонецЕсли;
Секция.ТабличныйДокумент.Параметры.Заполнить(Параметры);
КонтекстПечати.ТабличныйДокумент.Вывести(Секция.ТабличныйДокумент);
КонецПроцедуры
Процедура ВывестиФИОРуководителяВШапкеЗаявления2023(Выборка, Секция, Параметры) Экспорт
ФИОВПадеже = "";
Если ЗначениеЗаполнено(Выборка.ФИОРуководителя) Тогда
ФизическиеЛицаЗарплатаКадры.Просклонять(
Строка(Выборка.ФИОРуководителя),
3,
ФИОВПадеже,
Выборка.ПолРуководителя,
Выборка.Руководитель);
ФИОВПадеже = СокрЛП(ФИОВПадеже);
КонецЕсли;
Если ЗначениеЗаполнено(ФИОВПадеже) Тогда
Уточнения = Новый Массив;
Если ЗначениеЗаполнено(Выборка.ДолжностьРуководителя) Тогда
Уточнения.Добавить(СокрЛП(Выборка.ДолжностьРуководителя));
КонецЕсли;
Если ЗначениеЗаполнено(Выборка.НазваниеОрганизации) Тогда
Уточнения.Добавить(СокрЛП(Выборка.НазваниеОрганизации));
КонецЕсли;
Уточнение = ?(Уточнения.Количество() = 0, "", "(" + СтрСоединить(Уточнения, ", ") + ")");
Если Уточнение = "" Тогда
ФИОСУточнением = ФИОВПадеже;
ИначеЕсли СтрДлина(ФИОВПадеже) > 70 Тогда
ФИОСУточнением = ФИОВПадеже + " " + Уточнение;
Иначе
ФИОСУточнением = ФИОВПадеже + Символы.ПС + Уточнение;
КонецЕсли;
МассивСтрок = МассивСтрокЗаданнойДлины(ФИОСУточнением, 70);
Иначе
МассивСтрок = Новый Массив(4);
КонецЕсли;
Количество = МассивСтрок.Количество();
Если Количество > 0 Тогда
Параметры.Директор1 = МассивСтрок[0];
Иначе
Параметры.Директор1 = "";
КонецЕсли;
Если Количество > 1 Тогда
Параметры.Директор2 = МассивСтрок[1];
УстановитьВидимостьОбласти(Секция, "Директор2", Истина);
Иначе
УстановитьВидимостьОбласти(Секция, "Директор2", Ложь);
КонецЕсли;
Если Количество > 2 Тогда
Параметры.Директор3 = МассивСтрок[2];
УстановитьВидимостьОбласти(Секция, "Директор3", Истина);
Иначе
УстановитьВидимостьОбласти(Секция, "Директор3", Ложь);
КонецЕсли;
Если Количество > 3 Тогда
МассивСтрок.Удалить(0);
МассивСтрок.Удалить(0);
МассивСтрок.Удалить(0);
Параметры.Директор4 = СтрСоединить(МассивСтрок, " ");
УстановитьВидимостьОбласти(Секция, "Директор4", Истина);
Иначе
УстановитьВидимостьОбласти(Секция, "Директор4", Ложь);
КонецЕсли;
КонецПроцедуры
Процедура ВывестиФИОСотрудникаВШапкеЗаявления2023(Выборка, Секция, Параметры) Экспорт
ФИОВПадеже = "";
Если ЗначениеЗаполнено(Выборка.ФИОСотрудника) Тогда
ФизическиеЛицаЗарплатаКадры.Просклонять(
Строка(Выборка.ФИОСотрудника),
2,
ФИОВПадеже,
Выборка.ПолСотрудника,
Выборка.ФизическоеЛицо);
ФИОВПадеже = СокрЛП(ФИОВПадеже);
КонецЕсли;
Если ЗначениеЗаполнено(ФИОВПадеже) Тогда
Уточнения = Новый Массив;
Если ЗначениеЗаполнено(Выборка.ДолжностьСотрудника) Тогда
Уточнения.Добавить(СокрЛП(Выборка.ДолжностьСотрудника));
КонецЕсли;
Если ЗначениеЗаполнено(Выборка.ПодразделениеСотрудника) Тогда
Уточнения.Добавить(СокрЛП(Выборка.ПодразделениеСотрудника));
КонецЕсли;
Уточнение = ?(Уточнения.Количество() = 0, "", "(" + СтрСоединить(Уточнения, ", ") + ")");
Если Уточнение = "" Тогда
ФИОСУточнением = ФИОВПадеже;
ИначеЕсли СтрДлина(ФИОВПадеже) > 65 Тогда
ФИОСУточнением = ФИОВПадеже + " " + Уточнение;
Иначе
ФИОСУточнением = ФИОВПадеже + Символы.ПС + Уточнение;
КонецЕсли;
МассивСтрок = МассивСтрокЗаданнойДлины(ФИОСУточнением, "65,70,70,70");
Иначе
МассивСтрок = Новый Массив(4);
КонецЕсли;
Количество = МассивСтрок.Количество();
Если Количество > 0 Тогда
Параметры.Сотрудник1 = МассивСтрок[0];
Иначе
Параметры.Сотрудник1 = "";
КонецЕсли;
Если Количество > 1 Тогда
Параметры.Сотрудник2 = МассивСтрок[1];
УстановитьВидимостьОбласти(Секция, "Сотрудник2", Истина);
Иначе
УстановитьВидимостьОбласти(Секция, "Сотрудник2", Ложь);
КонецЕсли;
Если Количество > 2 Тогда
Параметры.Сотрудник3 = МассивСтрок[2];
УстановитьВидимостьОбласти(Секция, "Сотрудник3", Истина);
Иначе
УстановитьВидимостьОбласти(Секция, "Сотрудник3", Ложь);
КонецЕсли;
Если Количество > 3 Тогда
МассивСтрок.Удалить(0);
МассивСтрок.Удалить(0);
МассивСтрок.Удалить(0);
Параметры.Сотрудник4 = СтрСоединить(МассивСтрок, " ");
УстановитьВидимостьОбласти(Секция, "Сотрудник4", Истина);
Иначе
УстановитьВидимостьОбласти(Секция, "Сотрудник4", Ложь);
КонецЕсли;
КонецПроцедуры
Процедура ВывестиСведенияОВторомРодителеВШапкеЗаявления2023(Выборка, Секция, Параметры) Экспорт
Если ЗначениеЗаполнено(Выборка.СведенияОВторомРодителе) Тогда
МассивСтрок = МассивСтрокЗаданнойДлины(Выборка.СведенияОВторомРодителе, "90,105,105,105");
Иначе
МассивСтрок = Новый Массив(5);
КонецЕсли;
Количество = МассивСтрок.Количество();
Если Количество > 0 Тогда
Параметры.СведенияОВторомРодителеЗаголовок = МассивСтрок[0];
МассивСтрок.Удалить(0);
Иначе
Параметры.СведенияОВторомРодителеЗаголовок = "";
КонецЕсли;
Если Количество > 1 Тогда
Параметры.СведенияОВторомРодителе1 = МассивСтрок[0];
МассивСтрок.Удалить(0);
УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе1", Истина);
Иначе
УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе1", Ложь);
КонецЕсли;
Если Количество > 2 Тогда
Параметры.СведенияОВторомРодителе2 = МассивСтрок[0];
МассивСтрок.Удалить(0);
УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе2", Истина);
Иначе
УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе2", Ложь);
КонецЕсли;
Если Количество > 3 Тогда
Параметры.СведенияОВторомРодителе3 = МассивСтрок[0];
МассивСтрок.Удалить(0);
УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе3", Истина);
Иначе
УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе3", Ложь);
КонецЕсли;
Если Количество > 4 Тогда
Параметры.СведенияОВторомРодителе4 = СтрСоединить(МассивСтрок, " ");;
УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе4", Истина);
Иначе
УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе4", Ложь);
КонецЕсли;
КонецПроцедуры
Процедура УстановитьВидимостьОбласти(Секция, ИмяОбласти, Видимость)
Область = Секция.ТабличныйДокумент.Области.Найти(ИмяОбласти);
Если Область <> Неопределено Тогда
Область.Видимость = Видимость;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
Функция ДанныеСостоянийСотрудника(РеквизитыДляПроведения) Экспорт
ДанныеСостояний = СостоянияСотрудников.ПустаяТаблицаДанныхСостоянийСотрудника();
Для Каждого Строка Из РеквизитыДляПроведения.ДниУхода Цикл
НоваяСтрока = ДанныеСостояний.Добавить();
НоваяСтрока.Сотрудник = РеквизитыДляПроведения.Сотрудник;
НоваяСтрока.Состояние = Перечисления.СостоянияСотрудника.ДополнительныеВыходныеДниОплачиваемые;
НоваяСтрока.Начало = Строка.Дата;
НоваяСтрока.Окончание = Строка.Дата;
НоваяСтрока.ВидВремени = РеквизитыДляПроведения.ВидВремени;
КонецЦикла;
Возврат ДанныеСостояний;
КонецФункции
Процедура ЗаполнитьСведенияОПособиях(РеквизитыДляПроведения, ДанныеДляПроведения)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = ДанныеДляПроведения.МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаНачислений.Ссылка,
| ТаблицаНачислений.Начисление,
| ТаблицаНачислений.Сотрудник,
| ТаблицаНачислений.ВидЗанятости КАК ВидЗанятости,
| ЛОЖЬ КАК Сторно,
| ТаблицаНачислений.ОплаченоДней,
| ТаблицаНачислений.Результат,
| 0 КАК РезультатВТомЧислеЗаСчетФБ
|ПОМЕСТИТЬ ВТНачисленияДляУчетаПособий
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами.Начисления КАК ТаблицаНачислений
|ГДЕ
| ТаблицаНачислений.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ТаблицаНачислений.Сторно
| ТОГДА ТаблицаНачислений.СторнируемыйДокумент
| ИНАЧЕ ТаблицаНачислений.Ссылка
| КОНЕЦ,
| ТаблицаНачислений.Начисление,
| ТаблицаНачислений.Сотрудник,
| ТаблицаНачислений.ВидЗанятости,
| ТаблицаНачислений.Сторно,
| ТаблицаНачислений.ОплаченоДней,
| ТаблицаНачислений.Результат,
| ТаблицаНачислений.РезультатВТомЧислеЗаСчетФБ
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами.НачисленияПерерасчет КАК ТаблицаНачислений
|ГДЕ
| ТаблицаНачислений.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ТаблицаНачислений.Сторно
| ТОГДА ТаблицаНачислений.СторнируемыйДокумент
| ИНАЧЕ ТаблицаНачислений.Ссылка
| КОНЕЦ,
| ТаблицаНачислений.Начисление,
| ТаблицаНачислений.Сотрудник,
| ТаблицаНачислений.ВидЗанятости,
| ТаблицаНачислений.Сторно,
| 0,
| 0,
| 0
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами.НачисленияПерерасчетНулевыеСторно КАК ТаблицаНачислений
|ГДЕ
| ТаблицаНачислений.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", РеквизитыДляПроведения.Ссылка);
Запрос.Выполнить();
ПособиеПлатитУчастникПилотногоПроекта = ПрямыеВыплатыПособийСоциальногоСтрахования.ПособиеПлатитУчастникПилотногоПроекта(РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации);
УчетПособийСоциальногоСтрахованияРасширенный.ЗаполнитьСведенияОПособиях(ДанныеДляПроведения, ПособиеПлатитУчастникПилотногоПроекта);
КонецПроцедуры
Процедура ПроверитьПересечениеФактическогоПериодаДействия(ДокументСсылка, Отказ)
Если Отказ Тогда
Возврат;
КонецЕсли;
ИменаРеквизитов =
"ПериодРегистрации,
|Организация,
|ИсправленныйДокумент,
|ВидРасчета";
РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументСсылка, ИменаРеквизитов);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст = "ВЫБРАТЬ
| Начисления.*
|ИЗ
| Документ.БольничныйЛист.Начисления КАК Начисления
|ГДЕ
| Начисления.Ссылка = &Ссылка";
Начисления = Запрос.Выполнить().Выгрузить();
ПараметрыПроверки = РасчетЗарплатыРасширенный.ПараметрыПроверкиПересеченияФактическогоПериодаДействия();
ПараметрыПроверки.Организация = РеквизитыДокумента.Организация;
ПараметрыПроверки.ПериодРегистрации = РеквизитыДокумента.ПериодРегистрации;
ПараметрыПроверки.Документ = ДокументСсылка;
ПараметрыПроверки.Начисления = Начисления;
ПараметрыПроверки.ИсправленныйДокумент = РеквизитыДокумента.ИсправленныйДокумент;
ПараметрыПроверки.ОсновныеНачисления = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(РеквизитыДокумента.ВидРасчета);
РасчетЗарплатыРасширенный.ПроверитьПересечениеФактическогоПериодаДействия(ПараметрыПроверки, Отказ);
КонецПроцедуры
#Область ПараметрыВыбораНачислений
Функция ДополнительныеПараметрыВыбораНачислений(Документ, ПутьКРеквизиту) Экспорт
Результат = Новый Соответствие;
Если ПутьКРеквизиту = "ВидРасчета" Тогда
Если Документ.РасчетДенежногоСодержания Тогда
Категория = Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДенежноеСодержаниеОплатаДнейУходаЗаДетьмиИнвалидами;
Иначе
Категория = Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДнейУходаЗаДетьмиИнвалидами;
КонецЕсли;
КонецЕсли;
Результат.Вставить("Отбор.КатегорияНачисленияИлиНеоплаченногоВремени", Категория);
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ПечатьРасчетаСреднегоЗаработка
Функция ДанныеДокументовДляПечатиРасчетаСреднегоЗаработка(МассивСсылок, ПоСтатьямФинансирования = Ложь, ИмяМакета = "") Экспорт
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
СоздатьВТКадровыеДанныеСотрудниковДокумента(Запрос);
Запрос.Текст =
"ВЫБРАТЬ
| Документ.Сотрудник КАК Сотрудник,
| Документ.ДатаНачала КАК ДатаНачалаСобытия,
| Документ.Ссылка КАК Ссылка,
| Документ.Организация КАК Организация,
| ВЫБОР
| КОГДА Документ.ДатаПервичногоДокумента <> ДАТАВРЕМЯ(1,1,1)
| ТОГДА Документ.ДатаПервичногоДокумента
| ИНАЧЕ Документ.Дата
| КОНЕЦ КАК ДатаДокумента,
| ВЫБОР
| КОГДА Документ.НомерПервичногоДокумента <> """"
| ТОГДА Документ.НомерПервичногоДокумента
| ИНАЧЕ Документ.Номер
| КОНЕЦ КАК НомерДокумента,
| Документ.НаименованиеПервичногоДокумента КАК НаименованиеПервичногоДокумента,
| Документ.ДатаНачала КАК ДатаНачалаОтсутствия,
| Документ.ДатаОкончания КАК ДатаОкончанияОтсутствия,
| Документ.ПериодРасчетаСреднегоЗаработкаНачало КАК НачалоРасчетногоПериода,
| Документ.ПериодРасчетаСреднегоЗаработкаОкончание КАК ОкончаниеРасчетногоПериода,
| Документ.ВидРасчета КАК Начисление,
| ВТКадровыеДанныеСотрудников.СуммированныйУчетРабочегоВремени КАК УчетВремениВЧасах,
| ВТКадровыеДанныеСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
| ВТКадровыеДанныеСотрудников.ФИОПолные КАК ФИОПолные,
| ВТКадровыеДанныеСотрудников.ТабельныйНомер КАК ТабельныйНомер,
| ВТКадровыеДанныеСотрудников.Подразделение КАК Подразделение,
| ВТКадровыеДанныеСотрудников.Должность КАК Должность,
| ВТКадровыеДанныеСотрудников.ВидЗанятости КАК ВидЗанятости,
| Организации.НаименованиеСокращенное КАК ОрганизацияНаименованиеСокращенное,
| Организации.КодПоОКПО КАК КодПоОКПО,
| Организации.НаименованиеПолное КАК ОрганизацияНаименованиеПолное
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами КАК Документ
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК ВТКадровыеДанныеСотрудников
| ПО Документ.Сотрудник = ВТКадровыеДанныеСотрудников.Сотрудник
| И Документ.ДатаНачалаСобытия = ВТКадровыеДанныеСотрудников.Период
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации
| ПО Документ.Организация = Организации.Ссылка
|ГДЕ
| Документ.Ссылка В(&МассивСсылок)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка";
Результат = Запрос.Выполнить();
ДанныеДокументов = Новый Массив;
Если НЕ Результат.Пустой() Тогда
ТаблицыДанныхОСреднем = УчетСреднегоЗаработка.ТаблицыДанныхОСреднемЗаработке("ОплатаДнейУходаЗаДетьмиИнвалидами", МассивСсылок);
Выборка = Результат.Выбрать();
Пока Выборка.СледующийПоЗначениюПоля("Ссылка") Цикл
ДанныеДокумента = Обработки.ПечатьРасчетаСреднегоЗаработка.ПустаяСтруктураДанныхДляПечатиСреднегоЗаработка();
ЗаполнитьЗначенияСвойств(ДанныеДокумента.РеквизитыДокумента, Выборка);
ЗаполнитьЗначенияСвойств(ДанныеДокумента.КадровыеДанныеСотрудника, Выборка);
ДанныеОНачислениях = УчетСреднегоЗаработка.ТаблицаОтобраннаяПоПолю(ТаблицыДанныхОСреднем["ДанныеОНачислениях"], "Ссылка", Выборка.Ссылка);
ДанныеОВремени = УчетСреднегоЗаработка.ТаблицаОтобраннаяПоПолю(ТаблицыДанныхОСреднем["ДанныеОВремени"], "Ссылка", Выборка.Ссылка);
ДанныеОбИндексации = УчетСреднегоЗаработка.ТаблицаОтобраннаяПоПолю(ТаблицыДанныхОСреднем["ДанныеОбИндексации"], "Ссылка", Выборка.Ссылка);
ИспользоватьСреднеЧасовойЗаработок = Выборка.УчетВремениВЧасах;
ДополнительныеПараметры = УчетСреднегоЗаработкаКлиентСервер.ДополнительныеПараметрыРасчетаСреднегоЗаработка();
ДополнительныеПараметры.Индексации = ДанныеОбИндексации;
ДополнительныеПараметры.ДатаНачалаСобытия = Выборка.ДатаНачалаСобытия;
ДополнительныеПараметры.НачалоПериода = Выборка.НачалоРасчетногоПериода;
ДополнительныеПараметры.ОкончаниеПериода = Выборка.ОкончаниеРасчетногоПериода;
ДополнительныеПараметры.ПоЧасам = ИспользоватьСреднеЧасовойЗаработок;
ДополнительныеПараметры.ПоСтатьямФинансирования = ПоСтатьямФинансирования;
ДанныеДокумента.ДанныеРасчетаСреднего = УчетСреднегоЗаработкаКлиентСервер.ДанныеДляРасчетаСреднегоЗаработка(ДанныеОНачислениях, ДанныеОВремени, ДополнительныеПараметры);
ДанныеДокумента.ПараметрыРасчета.ИспользоватьСреднеЧасовойЗаработок = ИспользоватьСреднеЧасовойЗаработок;
ДанныеДокумента.ПараметрыРасчета.НачалоРасчетногоПериода = Выборка.НачалоРасчетногоПериода;
ДанныеДокумента.ПараметрыРасчета.ОкончаниеРасчетногоПериода = Выборка.ОкончаниеРасчетногоПериода;
ДанныеДокументов.Добавить(ДанныеДокумента);
КонецЦикла;
КонецЕсли;
Возврат ДанныеДокументов;
КонецФункции
Процедура СоздатьВТКадровыеДанныеСотрудниковДокумента(Запрос)
Запрос.Текст =
"ВЫБРАТЬ
| Документ.Сотрудник,
| Документ.ДатаНачалаСобытия КАК Период
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами КАК Документ
|ГДЕ
| Документ.Ссылка В(&МассивСсылок)";
Запрос.Выполнить();
Описатель = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудники");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(Описатель, Истина, "ФизическоеЛицо,ФИОПолные,ТабельныйНомер,Подразделение,Должность,ВидЗанятости,СуммированныйУчетРабочегоВремени");
Запрос.Текст = "УНИЧТОЖИТЬ ВТСотрудники";
Запрос.Выполнить();
КонецПроцедуры
Функция ДанныеДокументовДляПечатиРасчетаСреднегоЗаработка0504425(МассивСсылок) Экспорт
ЗапросПоОрганизациям = Новый Запрос;
ЗапросПоОрганизациям.УстановитьПараметр("МассивСсылок", МассивСсылок);
ЗапросПоОрганизациям.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Документ.Организация КАК Организация,
| Документ.ДатаНачалаСобытия
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами КАК Документ
|ГДЕ
| Документ.Ссылка В(&МассивСсылок)";
ТаблицаРезультатовПоОрганизациям = ЗапросПоОрганизациям.Выполнить().Выгрузить();
ОрганизацииИСведенияОНих = ЗарплатаКадрыРасширенный.ПолучитьИННиКППОрганизаций(ТаблицаРезультатовПоОрганизациям);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.Текст =
"ВЫБРАТЬ
| Документ.Ссылка,
| Документ.ДатаНачалаСобытия КАК Дата,
| Документ.ГлавныйБухгалтер,
| Документ.Бухгалтер,
| Документ.Исполнитель,
| Документ.ОтветственныйИсполнитель
|ПОМЕСТИТЬ ВТСотрудникиИПериод
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами КАК Документ
|ГДЕ
| Документ.Ссылка В(&МассивСсылок)";
Запрос.Выполнить();
ЗарплатаКадры.СоздатьВТФИООтветственныхЛиц(Запрос.МенеджерВременныхТаблиц, Истина, "ГлавныйБухгалтер,Бухгалтер,Исполнитель,ОтветственныйИсполнитель", "ВТСотрудникиИПериод");
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДниУхода.Дата) КАК КоличествоДней,
| ДниУхода.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТКоличествоДнейУхода
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами.ДниУхода КАК ДниУхода
|ГДЕ
| ДниУхода.Ссылка В(&МассивСсылок)
|
|СГРУППИРОВАТЬ ПО
| ДниУхода.Ссылка
|;
|
|
|ВЫБРАТЬ
| Документ.Ссылка КАК Ссылка,
| Документ.ВидРасчета КАК Начисление,
| Документ.ДатаНачала КАК ДатаНачалаОтсутствия,
| Документ.ДатаОкончания КАК ДатаОкончанияОтсутствия,
| ЕСТЬNULL(ВТКоличествоДнейУхода.КоличествоДней, 0) КАК ДнейДополнительногоОтпуска,
| ЕСТЬNULL(ВТКоличествоДнейУхода.КоличествоДней, 0) КАК ДнейОтпускаВсего,
| ФИОГлавногоБухгалтера.РасшифровкаПодписи КАК ГлавныйБухгалтерРасшифровкаПодписи,
| ФИОБухгалтера.РасшифровкаПодписи КАК БухгалтерРасшифровкаПодписи,
| ФИОИсполнителя.РасшифровкаПодписи КАК ИсполнительРасшифровкаПодписи,
| ФИООтветственногоИсполнителя.РасшифровкаПодписи КАК ОтветственныйИсполнительРасшифровкаПодписи,
| Документ.ДолжностьИсполнителя КАК ДолжностьИсполнителя,
| Документ.ДолжностьОтветственногоИсполнителя
|ИЗ
| Документ.ОплатаДнейУходаЗаДетьмиИнвалидами КАК Документ
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИОГлавногоБухгалтера
| ПО Документ.Ссылка = ФИОГлавногоБухгалтера.Ссылка
| И Документ.ГлавныйБухгалтер = ФИОГлавногоБухгалтера.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИОБухгалтера
| ПО Документ.Ссылка = ФИОБухгалтера.Ссылка
| И Документ.Бухгалтер = ФИОБухгалтера.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИОИсполнителя
| ПО Документ.Ссылка = ФИОИсполнителя.Ссылка
| И Документ.Исполнитель = ФИОИсполнителя.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКоличествоДнейУхода КАК ВТКоличествоДнейУхода
| ПО Документ.Ссылка = ВТКоличествоДнейУхода.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИООтветственногоИсполнителя
| ПО Документ.Ссылка = ФИООтветственногоИсполнителя.Ссылка
| И Документ.ОтветственныйИсполнитель = ФИООтветственногоИсполнителя.ФизическоеЛицо
|ГДЕ
| Документ.Ссылка В(&МассивСсылок)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
ДанныеДокументов = Новый Массив;
БазовыеДанныеДокументов = ДанныеДокументовДляПечатиРасчетаСреднегоЗаработка(МассивСсылок, Истина);
Отбор = Новый Структура("Ссылка");
Для каждого БазовыеДанныеДокумента Из БазовыеДанныеДокументов Цикл
Выборка.Сбросить();
ДанныеДокумента = Обработки.ПечатьРасчетаСреднегоЗаработка.ПустаяСтруктураДанныхДляПечатиСреднегоЗаработка0504425();
ЗаполнитьЗначенияСвойств(ДанныеДокумента, БазовыеДанныеДокумента, , "РеквизитыДокумента");
ЗаполнитьЗначенияСвойств(ДанныеДокумента.РеквизитыДокумента, БазовыеДанныеДокумента.РеквизитыДокумента);
Отбор.Ссылка = БазовыеДанныеДокумента.РеквизитыДокумента.Ссылка;
Если Выборка.НайтиСледующий(Отбор) Тогда
ЗаполнитьЗначенияСвойств(ДанныеДокумента.РеквизитыДокумента, Выборка);
КонецЕсли;
ЗаполнитьЗначенияСвойств(ДанныеДокумента.РеквизитыДокумента,
ОрганизацииИСведенияОНих.Получить(БазовыеДанныеДокумента.РеквизитыДокумента.Организация),
"ИНН, КПП");
ДанныеДокумента.РеквизитыДокумента.НаименованиеСобытия = НСтр("ru = 'Дополнительные выходные дни по уходу за детьми-инвалидами'");
ДанныеДокументов.Добавить(ДанныеДокумента);
КонецЦикла;
Возврат ДанныеДокументов;
КонецФункции
#КонецОбласти
#Область ПечатьПодробногоРасчетаНачислений
Процедура ЗаполнитьОписаниеДокументаРасчетаНачислений(ОписаниеДокумента) Экспорт
КатегорииСпециализированногоНачисления = КатегорииСпециализированногоНачисления();
МетаданныеДокумента = ПустаяСсылка().Метаданные();
ОписаниеДокумента.Вставить("ИмяДокумента", МетаданныеДокумента.Имя);
ОписаниеДокумента.Вставить("СинонимДокумента", МетаданныеДокумента.Синоним);
ОписаниеДокумента.Вставить("ЕстьРасчетСреднегоЗаработка", Истина);
ОписаниеДокумента.Вставить("ЕстьРасчетСпециализированныхНачислений", Истина);
ОписаниеДокумента.Вставить("ЕстьРасчетЗарплаты", Ложь);
ОписаниеДокумента.Вставить("КатегорииСпециализированногоНачисления", КатегорииСпециализированногоНачисления);
ОписаниеДокумента.Вставить("НазваниеСпециализированногоНачисления", НСтр("ru = 'Оплата дополнительных выходных дней по уходу за детьми-инвалидами'"));
КонецПроцедуры
Процедура ЗаполнитьДанныеДокументовДляПодробногоРасчетаНачислений(МассивСсылок, ДанныеДокументов) Экспорт
РасчетЗарплатыРасширенный.ЗаполнитьДанныеДокументовДляПодробногоРасчетаНачислений(МассивСсылок, ПустаяСсылка().Метаданные().Имя, ДанныеДокументов);
КонецПроцедуры
Функция НачисленияПоказателиДокументов(МассивСсылок) Экспорт
Возврат РасчетЗарплатыРасширенный.НачисленияПоказателиДокументов(МассивСсылок, ПустаяСсылка().Метаданные().Имя);
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли