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