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