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