Расходный кассовый ордер / Форма выплата заработной платы / Модуль формы

файл

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

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

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

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

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

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

&НаКлиенте
Процедура ВыплатаЗаработнойПлатыРаботникПриИзменении(Элемент)
	
	//++ НЕ УТ
	Если ИспользоватьНачислениеЗарплаты Тогда
		ТекущиеДанные = Элементы.ВыплатаЗаработнойПлаты.ТекущиеДанные;
		ТекущиеДанные.Сумма = ПолучитьСуммуНевыплаченнойЗарплатыНаСервере(ТекущиеДанные.ФизическоеЛицо);
	КонецЕсли;
	//-- НЕ УТ
	
	Возврат // в УТ пустой
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ВыплатаЗаработнойПлатыПриИзменении(Элемент)
	ФормаМодифицирована = Истина;
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗаполнитьПоОстаткам(Команда)
	
	//++ НЕ УТ
	Если ВыплатаЗаработнойПлаты.Количество() > 0 Тогда
		
		КодОтвета = Неопределено;

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

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

КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПоОстаткамФрагмент()
    
    ФормаМодифицирована = Истина;
    ЗаполнитьПоОстаткамНаСервере();
    //-- НЕ УТ
    
    Возврат // в УТ пустой

КонецПроцедуры

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

&НаКлиенте
Процедура Отмена(Команда)
	
	Модифицированность = Ложь;
	Закрыть();
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

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

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

#Область Прочее

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

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

//++ НЕ УТ

&НаСервере
Процедура ЗаполнитьПоОстаткамНаСервере()
	
	ВыплатаЗаработнойПлаты.Загрузить(ПолучитьСуммыНевыплаченнойЗарплатыНаСервере());
	
КонецПроцедуры

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

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

//-- НЕ УТ

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

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

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