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