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

файл

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

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

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

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

&НаКлиенте
Процедура ПередЗакрытиемЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
		ЗавершитьРедактирование();
	ИначеЕсли РезультатВопроса = КодВозвратаДиалога.Нет Тогда
		Модифицированность = Ложь;
		Закрыть();
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисленнаяЗарплатаИВзносы

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

&НаКлиенте
Процедура НачисленнаяЗарплатаИВзносыПриИзменении(Элемент)
	
	ЗаполнитьДополнительныеРеквизиты();
	
КонецПроцедуры

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

&НаКлиенте
Процедура НачисленнаяЗарплатаИВзносыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	Если ОтменаРедактирования Тогда
		Возврат;
	КонецЕсли;
	
	РассчитатьВзносыВсего();
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ПоказатьВзносыПодробно(Команда)
	
	ПоказатьВзносыПодробно = Не ПоказатьВзносыПодробно;
	Элементы.ПоказатьВзносыПодробно.Пометка = ПоказатьВзносыПодробно;
	УстановитьОтображениеВзносов();
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаОК(Команда)
	
	Если Модифицированность Тогда
		
		ЗавершитьРедактирование();
		
	Иначе
		
		Закрыть();
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаОтмена(Команда)
	
	Закрыть();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗаполнитьПодразделениеЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	ВыделенныеСтроки = ДополнительныеПараметры.ВыделенныеСтроки;
	
	ВыбранноеЗначение = Результат;
	
	Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
		
		Для Каждого Строка Из ВыделенныеСтроки Цикл
			
			СтрокаТаблицы = НачисленнаяЗарплатаИВзносы.НайтиПоИдентификатору(Строка);
			Если СтрокаТаблицы <> Неопределено Тогда
				СтрокаТаблицы.ПодразделениеПредприятия = ВыбранноеЗначение;
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьДополнительныеРеквизиты()
	
	НомерСтроки = 1;
	Для Каждого СтрокаТаблицы Из НачисленнаяЗарплатаИВзносы Цикл
		СтрокаТаблицы.Номер = НомерСтроки;
		НомерСтроки = НомерСтроки + 1;
	КонецЦикла;
	
КонецПроцедуры

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

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

&НаСервере
Процедура РезультатРедактированияНаСервере(СтруктураВыбора)
	
	ДетализацияНачислений = Новый Структура("НачисленнаяЗарплатаИВзносыПоФизлицам",
		НачисленнаяЗарплатаИВзносы.Выгрузить());
	
	СтруктураВыбора.АдресВХранилище = ПоместитьВоВременноеХранилище(ДетализацияНачислений);
	
КонецПроцедуры

&НаКлиенте
Процедура РассчитатьВзносыВсего()
	
	ТекущиеДанные = Элементы.НачисленнаяЗарплатаИВзносы.ТекущиеДанные;
	
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Взносы = Новый Структура(КолонкиВзносовСтрокой);
	ЗаполнитьЗначенияСвойств(Взносы, ТекущиеДанные);
	
	ТекущиеДанные.ВзносыВсего = 0;
	Для Каждого Колонка Из Взносы Цикл
		ТекущиеДанные.ВзносыВсего = ТекущиеДанные.ВзносыВсего + Колонка.Значение;
	КонецЦикла;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция СпособОтраженияТребуется(ВидОперации)
	
	Если ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийПоЗарплате.ЕжегодныйОтпускОценочныеОбязательстваИРезервы")
		Или ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийПоЗарплате.ПособиеНаПогребение")
		Или ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийПоЗарплате.РасходыПоСтрахованиюФСС")
		Или ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийПоЗарплате.РасходыПоСтрахованиюФССНС") Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Возврат Истина;
	
КонецФункции

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

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