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