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