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

файл

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

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ЛицевыеСчетаПриАктивизацииСтроки(Элемент)
	
	ТекущиеДанные = Элементы.ЛицевыеСчета.ТекущиеДанные;
	
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПриИзмененииСтрокиЛицевогоСчета(ТекущиеДанные);
	
КонецПроцедуры

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

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

#Область РедактированиеМесяцаСтрокой

&НаКлиенте
Процедура МесяцОткрытияПриИзменении(Элемент)
	ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(ЭтотОбъект, "МесяцОткрытия", "МесяцОткрытияСтрокой", Модифицированность);
КонецПроцедуры

&НаКлиенте
Процедура МесяцОткрытияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтотОбъект, ЭтотОбъект, "МесяцОткрытия", "МесяцОткрытияСтрокой");
	
КонецПроцедуры

&НаКлиенте
Процедура МесяцОткрытияРегулирование(Элемент, Направление, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(ЭтотОбъект, "МесяцОткрытия", "МесяцОткрытияСтрокой", Направление, Модифицированность);
КонецПроцедуры

&НаКлиенте
Процедура МесяцОткрытияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	
	ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура МесяцОткрытияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	
	ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура СохранитьЛицевыеСчета(Команда)
	
	Если ПроверитьЗаполнение() Тогда
		ЗарегистрироватьЛицевыеСчета();
		Закрыть();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция СтруктураПоясненияКНомеруЛицевогоСчета(ФизическоеЛицо, ЗарплатныйПроект, НомерЛицевогоСчета, Знач ЛицевыеСчета, ЛицевыеСчетаПрежняя)
	
	СтруктураПояснения = ОбменСБанкамиПоЗарплатнымПроектамФормы.СтруктураПоясненияКНомеруЛицевогоСчета(
			ФизическоеЛицо,
			ЗарплатныйПроект,
			НомерЛицевогоСчета,
			ЛицевыеСчета,
			ЛицевыеСчетаПрежняя);
	
	Возврат СтруктураПояснения;
	
КонецФункции

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

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