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