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