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