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