Исполнительный лист / Модуль объекта

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

#Область ОбработчикиСобытий

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Сотрудники") Тогда
		ЗарплатаКадры.ЗаполнитьПоОснованиюСотрудником(ЭтотОбъект, ДанныеЗаполнения);
	ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
		Если ДанныеЗаполнения.Свойство("Сотрудник") Тогда
			ЗарплатаКадры.ЗаполнитьПоОснованиюСотрудником(ЭтотОбъект, ДанныеЗаполнения.Сотрудник);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(ЭтотОбъект) Тогда
		Возврат;
	КонецЕсли;		
	
	Если СпособРасчета <> Перечисления.СпособыРасчетаУдержанияПоИсполнительномуДокументу.ФиксированнойСуммой Тогда
		Сумма = Неопределено;
	КонецЕсли;
	
	Если СпособРасчета = Перечисления.СпособыРасчетаУдержанияПоИсполнительномуДокументу.ФиксированнойСуммой Тогда
		ВидБазы = Неопределено;
	КонецЕсли;
	
	Если СпособРасчета <> Перечисления.СпособыРасчетаУдержанияПоИсполнительномуДокументу.Процентом Тогда
		Процент = Неопределено;
	КонецЕсли;
	
	Если СпособРасчета <> Перечисления.СпособыРасчетаУдержанияПоИсполнительномуДокументу.Долей Тогда
		Числитель = Неопределено;
		Знаменатель = Неопределено;
	КонецЕсли;
	
	Если ВидБазы <> Перечисления.ВидыБазыУдержанияПоИсполнительномуДокументу.Заработок Тогда
		УчитыватьБольничныеЛисты = Неопределено;
	КонецЕсли;
	
	Если ВидБазы <> Перечисления.ВидыБазыУдержанияПоИсполнительномуДокументу.ПрожиточныйМинимум Тогда
		ПрожиточныйМинимум = Неопределено;
	КонецЕсли;
	
КонецПроцедуры

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

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

Процедура ПриЗаписи(Отказ)
	
	Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(ЭтотОбъект) Тогда
		Возврат;
	КонецЕсли;
	
	ПолучателиУдержаний = РасчетЗарплатыРасширенный.НоваяТаблицаПолучателиУдержаний();
	
	НоваяСтрока = ПолучателиУдержаний.Добавить();
	НоваяСтрока.ФизическоеЛицо = ФизическоеЛицо;
	НоваяСтрока.Удержание = Удержание;
	НоваяСтрока.Контрагент = Получатель;
	
	НоваяСтрока = ПолучателиУдержаний.Добавить();
	НоваяСтрока.ФизическоеЛицо = ФизическоеЛицо;
	НоваяСтрока.Удержание = УдержаниеВознагражденияПлатежногоАгента;
	НоваяСтрока.Контрагент = ПлатежныйАгент;
	
	РасчетЗарплатыРасширенный.ЗарегистрироватьПолучателяУдержания(ПолучателиУдержаний, Организация, Ссылка);

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

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

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

#Область ОбменДанными

Функция СовместноРегистрируемыеОбъекты() Экспорт
	Возврат ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ФизическоеЛицо);
КонецФункции

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

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

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

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

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

#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли

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