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