Выплата бывшим сотрудникам / Модуль менеджера

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

КонецПроцедуры

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

// СтандартныеПодсистемы.УправлениеДоступом

// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ДляВсехСтрок( ЗначениеРазрешено(НачисленияУдержанияВзносы.ФизическоеЛицо, NULL КАК ИСТИНА)
	|	) И ЗначениеРазрешено(Организация)";
КонецПроцедуры

// Конец СтандартныеПодсистемы.УправлениеДоступом

#КонецОбласти

#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс

#Область ОбработчикиПравилРегистрации

// См. ЗарплатаКадрыРасширенныйСинхронизацияДанных.ШаблонОбработчика
Процедура ПриЗаполненииНастроекОбработчиковПравилРегистрации(Настройки) Экспорт
	ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОтбораПоОрганизации(Настройки);
	ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОбъектаСПрисоединеннымиФайлами(Настройки);
КонецПроцедуры

#КонецОбласти

// Возвращает описание состава документа
//
// Возвращаемое значение:
//  Структура - см. ЗарплатаКадрыСоставДокументов.НовоеОписаниеСоставаОбъекта.
Функция ОписаниеСоставаОбъекта() Экспорт
	
	МетаданныеДокумента = Метаданные.Документы.ВыплатаБывшимСотрудникам;
	Возврат ЗарплатаКадрыСоставДокументов.ОписаниеСоставаОбъектаПоМетаданнымФизическиеЛицаВТабличныхЧастях(МетаданныеДокумента);
	
КонецФункции

Функция СпособВыплатыПрочихДоходов() Экспорт
	Возврат Перечисления.СпособыВыплатыПрочихДоходов.ВыплатыБывшимСотрудникам;
КонецФункции

Процедура ПровестиПоУчетам(ДокументСсылка, РежимПроведения, Отказ, ВидыУчетов = Неопределено, Движения = Неопределено, Объект = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
		
	УчетПрочихДоходов.ПровестиПоУчетам(РежимПроведения, ДокументСсылка, ВидыУчетов, Движения, Объект, Отказ);

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область Печать

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати.
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	// Справка о списании депонированной зарплаты.
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
	КомандаПечати.МенеджерПечати = "Документ.ВыплатаБывшимСотрудникам";
	КомандаПечати.Идентификатор = "ПФ_MXL_СправкаОВыплатеБывшимСотрудникам";
	КомандаПечати.Представление = НСтр("ru = 'Справка о выплате бывшим сотрудникам'");
	КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
	
КонецПроцедуры

// Формирует печатные формы
//
// Параметры:
//	МассивОбъектов  - Массив    - ссылки на объекты, которые нужно распечатать;
//	ПараметрыПечати - Структура - дополнительные настройки печати;
//	КоллекцияПечатныхФорм - ТаблицаЗначений - сформированные табличные документы.
//	ОбъектыПечати         - СписокЗначений  - значение - ссылка на объект;
//                                             представление - имя области в которой был выведен объект;
//	ПараметрыВывода       - Структура       - дополнительные параметры сформированных табличных документов.
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	НужноПечататьСправку = УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПФ_MXL_СправкаОВыплатеБывшимСотрудникам");
	
	Если НужноПечататьСправку Тогда
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПФ_MXL_СправкаОВыплатеБывшимСотрудникам",
			НСтр("ru = 'Справка о выплате бывшим сотрудникам'"), ПечатьСправки(МассивОбъектов, ОбъектыПечати), ,
			"Документ.ВыплатаБывшимСотрудникам.ПФ_MXL_СправкаОВыплатеБывшимСотрудникам");
	КонецЕсли;
						
КонецПроцедуры								

Функция ПечатьСправки(МассивОбъектов, ОбъектыПечати)
	
	ДокументРезультат = Новый ТабличныйДокумент;
	ДокументРезультат.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ВыплатаБывшимСотрудникам_СправкаОВыплатеБывшимСотрудникам";
	ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
	ДокументРезультат.АвтоМасштаб = Истина;
	
	ДанныеПечатиОбъектов = ДанныеПечатиДокументов(МассивОбъектов);
	
	Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ВыплатаБывшимСотрудникам.ПФ_MXL_СправкаОВыплатеБывшимСотрудникам");
	
	ОбластьМакетаШапка = Макет.ПолучитьОбласть("Шапка");
	ОбластьМакетаШапкаПовторятьПриПечати = Макет.ПолучитьОбласть("ШапкаПовторятьПриПечати");
	ОбластьМакетаСтрока = Макет.ПолучитьОбласть("Строка");
	ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал");
	
	ПервыйДокумент = Истина;
	
	Для Каждого ДанныеПечати Из ДанныеПечатиОбъектов Цикл
		
		ДанныеДокумента = ДанныеПечати.Значение;
		
		// Документы нужно выводить на разных страницах.
		Если Не ПервыйДокумент Тогда
			ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
		Иначе
			ПервыйДокумент = Ложь;
		КонецЕсли;
		
		// Запомним номер строки, с которой начали выводить текущий документ.
		НомерСтрокиНачало = ДокументРезультат.ВысотаТаблицы + 1;
		
		ОбластьМакетаШапка.Параметры.Заполнить(ДанныеДокумента);
		ДокументРезультат.Вывести(ОбластьМакетаШапка);
		
		Для каждого ДанныеСотрудника Из ДанныеДокумента.ТабличнаяЧастьДокумента Цикл
			
			МассивВыводимыхОбластей = Новый Массив;
			МассивВыводимыхОбластей.Добавить(ОбластьМакетаСтрока);
			МассивВыводимыхОбластей.Добавить(ОбластьМакетаПодвал);
			Если НЕ ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ДокументРезультат, МассивВыводимыхОбластей) Тогда
				ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
				ДокументРезультат.Вывести(ОбластьМакетаШапкаПовторятьПриПечати);
			КонецЕсли;
			
			ОбластьМакетаСтрока.Параметры.Заполнить(ДанныеСотрудника);
			
			ДокументРезультат.Вывести(ОбластьМакетаСтрока);
			
		КонецЦикла;
		
		ПодписиДокументовКлиентСервер.ДополнитьТекстОснованиемПодписи(
			ДанныеДокумента.ИсполнительРасшифровкаПодписи, ДанныеДокумента.ОснованиеПодписиИсполнителя);
		
		ОбластьМакетаПодвал.Параметры.Заполнить(ДанныеДокумента);
		ДокументРезультат.Вывести(ОбластьМакетаПодвал);
		
		// В табличном документе необходимо задать имя области, в которую был 
		// выведен объект. Нужно для возможности печати покомплектно.
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ДокументРезультат, НомерСтрокиНачало, ОбъектыПечати, ДанныеДокумента.Ссылка);
		
	КонецЦикла;
	
	Возврат ДокументРезультат;
	
КонецФункции

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

			Если Не ПустаяСтрока(ГруппировкаПоСотрудникам.НомерСчета) Тогда
				СтрокаПодстановки = НСтр("ru = '%1 (счет %2 в %3)'");
				СтрокаДанныхПечати.СотрудникИРеквизиты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаПодстановки,
					СтрокаДанныхПечати.СотрудникИРеквизиты, ГруппировкаПоСотрудникам.НомерСчета, ГруппировкаПоСотрудникам.Банк);
			КонецЕсли;
			
			ДанныеПечати.ТабличнаяЧастьДокумента.Добавить(СтрокаДанныхПечати);
			
		КонецЦикла;
		
		ДанныеПечатиОбъектов.Вставить(ГруппировкаПоДокументу.Ссылка, ДанныеПечати);
		
	КонецЦикла;
	
	Возврат ДанныеПечатиОбъектов;
	
КонецФункции

#КонецОбласти

Функция ДанныеДляБухучетаЗарплатыПервичныхДокументов(Объект) Экспорт
	
	Возврат УчетПрочихДоходов.ДанныеДляБухучетаЗарплатыПервичныхДокументов(Объект);
	
КонецФункции

#КонецОбласти

#КонецЕсли

Связанные материалы