Отражение зарплаты в финансовом учете / Модуль объекта

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

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

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

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ОтражениеЗарплатыВФинансовомУчете") Тогда
		ИсправлениеДокументов.ЗаполнитьИсправление(ЭтотОбъект, ДанныеЗаполнения);
	КонецЕсли;
	
	ИнициализироватьДокумент(ДанныеЗаполнения);
	
	ПараметрыВыбораСтатейИАналитик = Документы.ОтражениеЗарплатыВФинансовомУчете.ПараметрыВыбораСтатейИАналитик();
	ДоходыИРасходыСервер.ОбработкаЗаполнения(ЭтотОбъект, ПараметрыВыбораСтатейИАналитик);
	
КонецПроцедуры

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

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

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

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

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция ВидыНалоговПоВидамОперацийНДФЛ()
	
	ВидыНалогов = Справочники.ВидыНалоговВзносов;
	ВидыОпераций = Перечисления.ВидыОперацийПоЗарплате;
	
	Соответствие = Новый Соответствие;
	Для Каждого ВидОперации Из ВидыОпераций.НДФЛ(Новый Структура) Цикл
		Соответствие.Вставить(ВидОперации, ВидыНалогов.НДФЛ);
	КонецЦикла;
	
	ДатаНачалаДействия176ФЗ = НалоговыйУчет.ДатаНачалаДействия176ФЗ();
	Если Дата < ДатаНачалаДействия176ФЗ И ПериодРегистрации < ДатаНачалаДействия176ФЗ Тогда
		Соответствие.Вставить(ВидыОпераций.НДФЛ,                                     ВидыНалогов.НДФЛ);
		Соответствие.Вставить(ВидыОпераций.НДФЛСПревышения,                          ВидыНалогов.НДФЛСПревышения);
		Соответствие.Вставить(ВидыОпераций.НФДЛДивидендыСотрудникам,                 ВидыНалогов.НДФЛДивидендыСотрудникам);
		Соответствие.Вставить(ВидыОпераций.НДФЛДоходыКонтрагентов,                   ВидыНалогов.НДФЛДоходыКонтрагентов);
		Соответствие.Вставить(ВидыОпераций.НФДЛДивиденды,                            ВидыНалогов.НДФЛДивиденды);
		Соответствие.Вставить(ВидыОпераций.НДФЛПрочиеРасчетыСПерсоналом,             ВидыНалогов.НДФЛПрочиеРасчетыСПерсоналом);
		Соответствие.Вставить(ВидыОпераций.НДФЛРасчетыСБывшимиСотрудниками,          ВидыНалогов.НДФЛДоходыКонтрагентов);
		Соответствие.Вставить(ВидыОпераций.НДФЛДоначисленныйПоРезультатамПроверки,   ВидыНалогов.НДФЛДоначисленныйПоРезультатамПроверки);
		Соответствие.Вставить(ВидыОпераций.НДФЛПередачаЗадолженностиВНалоговыйОрган, ВидыНалогов.НДФЛПередачаЗадолженностиВНалоговыйОрган);
	КонецЕсли;
	
	Возврат Новый ФиксированноеСоответствие(Соответствие);
	
КонецФункции

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

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

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

Процедура ПроверитьЗаполнениеВыплатЗаСчетРезервов(Отказ, НепроверяемыеРеквизиты)
	
	НепроверяемыеРеквизиты.Добавить("ВыплатаЗаСчетРезервов.Резерв");
	
	ВидыОперацийЗаСчетРезерваОтпусков = Перечисления.ВидыОперацийПоЗарплате.ЕжегодныеОтпускаОценочныеОбязательстваИРезервы();
	
	Отбор = Новый Структура("Резерв", Справочники.Резервы.ПустаяСсылка());
	Для Каждого СтрокаТаблицы Из ВыплатаЗаСчетРезервов.НайтиСтроки(Отбор) Цикл
		
		Если ВидыОперацийЗаСчетРезерваОтпусков.Найти(СтрокаТаблицы.ВидОперации) <> Неопределено Тогда
			// Архивные данные не проверяем.
			Продолжить;
		КонецЕсли;
		
		ТекстСообщения = СтрШаблон(
			НСтр("ru='Не заполнена колонка ""Резерв"" в строке %1 списка ""Выплата за счет резервов""'"),
			СтрокаТаблицы.НомерСтроки);
		ПутьКСтрокеТабличнойЧасти =
			ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("ВыплатаЗаСчетРезервов", СтрокаТаблицы.НомерСтроки, "Резерв");
		ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ПутьКСтрокеТабличнойЧасти, , Отказ);
		
	КонецЦикла;
	
КонецПроцедуры

#Область ИнициализацияИЗаполнение

Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
	
	Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация);
	Ответственный = Пользователи.ТекущийПользователь();
	
КонецПроцедуры

#КонецОбласти

#КонецОбласти

#КонецЕсли

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