Резервы отпусков (архив) / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(ЭтотОбъект) Тогда
		Возврат;
	КонецЕсли;
	
	Если РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
		ОбязательстваОтраженыВБухучете = Ложь;
	КонецЕсли;
	
	ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(ЭтотОбъект, "ОценочныеОбязательства,ОценочныеОбязательстваПоСотрудникам");
	
	// ERP Резервы отпусков 3286
	ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
	// Конец
	
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	Если Не РезервОтпусков.ДоступенВводДокументаРезервОтпусков(Организация, ПериодРегистрации) Тогда
		ТекстСообщения = СтрШаблон(НСтр("ru = 'Для организации ""%1"" за %2 г. обнаружены действующие настройки резервов по оплате труда.
		|Для исключения конфликтов при использовании архивного механизма в %3 г., удалите настройки из справочника ""Настройки расчета резервов по оплате труда"" за периоды до %4 г.
		|В противном случае воспользуйтесь документом ""Резервы по оплате труда"".'"),
			Организация,
			ЗарплатаКадрыКлиентСервер.ПолучитьПредставлениеМесяца(ПериодРегистрации),
			Формат(Год(ПериодРегистрации), "ЧГ="),
			Формат(Год(ПериодРегистрации)+1, "ЧГ="));
		ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
	КонецЕсли;
	
	ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
	
	ТребуетсяУтверждениеДокумента = Документы.НачислениеОценочныхОбязательствПоОтпускам.ТребуетсяУтверждениеДокументаБухгалтером(Организация);
	
	Если Не ТребуетсяУтверждениеДокумента Или ОбязательстваОтраженыВБухучете Тогда
		
		ДанныеДляОтражения = РезервыПоОплатеТруда.СтруктураДанныхДляОтраженияВУчете();
		Документы.НачислениеОценочныхОбязательствПоОтпускам.ПодготовитьДанныеДляОтраженияВУчете(Ссылка, ДанныеДляОтражения, КорректировкаОбязательств);
		
		РезервыРассчитываются = Истина;
		РезервОтпусковПереопределяемый.ПолучитьЗначениеРезервыРассчитываются(РезервыРассчитываются);
		Если РезервыРассчитываются Тогда
			РезервОтпусков.СформироватьДвиженияПоНачислениюОбязательств(Движения, Отказ, Организация, Дата, ПериодРегистрации, ДанныеДляОтражения);
		КонецЕсли;
		
		ОтражениеЗарплатыВБухучетеПереопределяемый.СформироватьДвижения(Движения, Отказ, Организация, ПериодРегистрации, ДанныеДляОтражения);
		
		РезервОтпусковПереопределяемый.СформироватьДвижения(ЭтотОбъект, Отказ, РежимПроведения);
		
	КонецЕсли;
	
КонецПроцедуры

// ERP Резервы отпусков 3286
Процедура ПриЗаписи(Отказ)
		
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
	
КонецПроцедуры
// Конец

Процедура ПриКопировании(ОбъектКопирования)
	
	ОбязательстваОтраженыВБухучете = Ложь;
	Бухгалтер = Справочники.Пользователи.ПустаяСсылка();
	
	ОбщегоНазначенияУТ.ОчиститьИдентификаторыДокумента(ЭтотОбъект, "ОценочныеОбязательства,ОценочныеОбязательстваПоСотрудникам");
	
КонецПроцедуры

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	
	МассивНепроверяемыхРеквизитов = Новый Массив;
	
	Если КорректировкаОбязательств Тогда
		МассивНепроверяемыхРеквизитов.Добавить("РасчетРезерваОтпусков");
		МассивНепроверяемыхРеквизитов.Добавить("РасчетРезерваОтпусков.Сотрудник");
	КонецЕсли;
	
	ПроверятьМестоВСтруктуреПредприятия = Ложь;
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ОрганизационнаяСтруктура") Тогда
		МодульОрганизационнаяСтруктура = ОбщегоНазначения.ОбщийМодуль("ОрганизационнаяСтруктура");
		ПроверятьМестоВСтруктуреПредприятия = МодульОрганизационнаяСтруктура.СтруктураПредприятияИспользуетсяДляОтраженияЗарплатыВРегламентированномУчете();
	КонецЕсли;
	
	МассивНепроверяемыхРеквизитов.Добавить("ОценочныеОбязательстваПоСотрудникам.МестоВСтруктуреПредприятия");
	Если НЕ ПроверятьМестоВСтруктуреПредприятия Тогда
		МассивНепроверяемыхРеквизитов.Добавить("ОценочныеОбязательства.МестоВСтруктуреПредприятия");
	Иначе
		Для Каждого СтрокаТаблицы Из ОценочныеОбязательстваПоСотрудникам Цикл
			Если НЕ СтрокаТаблицы.КорректировкаОбязательств
				И НЕ ЗначениеЗаполнено(СтрокаТаблицы.МестоВСтруктуреПредприятия) Тогда
				
				Префикс = "ОценочныеОбязательстваПоСотрудникам[" + Формат(СтрокаТаблицы.НомерСтроки - 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 = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли

Связанные материалы