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

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем ПараметрыОбработчикаОжидания;

&НаКлиенте
Перем ФормаДлительнойОперации;

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

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

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

&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
	ПриИзмененииОсновныхПолейНаСервере();
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
	
	ПриИзмененииОсновныхПолейНаСервере();
	ОбновитьКомандыОбменаФормыСписка();
		
КонецПроцедуры

&НаКлиенте
Процедура ЗарплатныйПроектПриИзменении(Элемент)
	
	ПриИзмененииОсновныхПолейНаСервере();
	ОбновитьКомандыОбменаФормыСписка();
		
КонецПроцедуры

&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
	
	ПриИзмененииОсновныхПолейНаСервере();
	ОбновитьКомандыОбменаФормыСписка();
		
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗачислениеЗарплатыПередНачаломИзменения(Элемент, Отказ)
	Отказ = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ЗачислениеЗарплатыПередУдалением(Элемент, Отказ)
	Отказ = Истина;
КонецПроцедуры

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

&НаКлиенте
Процедура ЗачислениеЗарплатыПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ЗакрытиеЛицевыхСчетовПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	Отказ = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ЗакрытиеЛицевыхСчетовПередУдалением(Элемент, Отказ)
	Отказ = Истина;
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.ЗачислениеЗарплаты);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	// Объект.ОткрытиеЛицевыхСчетов.Состояние Равно "Заявка не заполнена"

	ЭлементОформления = УсловноеОформление.Элементы.Добавить();

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

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, 100));

	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовФизическоеЛицо");
	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовСостояние");

	// Объект.ОткрытиеЛицевыхСчетов.Состояние Равно "Выгружен в банк"

	ЭлементОформления = УсловноеОформление.Элементы.Добавить();

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

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.РезультатОжидаетсяЦвет);

	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовФизическоеЛицо");
	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовСостояние");

	// Объект.ОткрытиеЛицевыхСчетов.Состояние Равно "Отложено открытие лицевого счета"

	ЭлементОформления = УсловноеОформление.Элементы.Добавить();

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

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);

	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовФизическоеЛицо");
	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовСостояние");

	// Объект.ОткрытиеЛицевыхСчетов.Состояние Равно "Лицевой счет не открыт"

	ЭлементОформления = УсловноеОформление.Элементы.Добавить();

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

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.РезультатПроблемаЦвет);

	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовФизическоеЛицо");
	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовСостояние");

	//   (Объект.ОткрытиеЛицевыхСчетов.Состояние           "Заявка не заполнена" Или "Готов к выгрузке") 
	// И (Объект.ОткрытиеЛицевыхСчетов.ПредыдущееСостояние "Выгружен в банк"     Или "Лицевой счет не открыт")

	ЭлементОформления = УсловноеОформление.Элементы.Добавить();

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

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Отменить'"));

	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовКоманда");

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

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

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Отложить'"));

	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовКоманда");

	// Объект.ОткрытиеЛицевыхСчетов.Состояние Равно "Выгружен в банк"

	ЭлементОформления = УсловноеОформление.Элементы.Добавить();

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

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Оформить повторно'"));

	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовКоманда");

	// Объект.ОткрытиеЛицевыхСчетов.Состояние Равно "Лицевой счет не открыт"

	ЭлементОформления = УсловноеОформление.Элементы.Добавить();

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

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Оформить повторно'"));

	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовКоманда");

	// Объект.ОткрытиеЛицевыхСчетов.Состояние Равно "Отложено открытие лицевого счета"

	ЭлементОформления = УсловноеОформление.Элементы.Добавить();

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

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Возобновить'"));

	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовКоманда");

	// Объект.ОткрытиеЛицевыхСчетов.Пол Не заполнено

	ЭлементОформления = УсловноеОформление.Элементы.Добавить();

	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ОткрытиеЛицевыхСчетов.Пол");
	ЭлементОтбора.ВидСравнения  = ВидСравненияКомпоновкиДанных.НеЗаполнено;

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст);

	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ОткрытиеЛицевыхСчетовПол");

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

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

	ЭлементОформления = ЗачислениеЗарплатыНастройкаСписка.УсловноеОформление.Элементы.Добавить();

	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Состояние");
	ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = Перечисления.СостояниеЗачисленияЗарплаты.ОжидаетПодтверждения;

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.РезультатОжидаетсяЦвет);

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

	// Состояние Равно "Зачислено полностью"

	ЭлементОформления = ЗачислениеЗарплатыНастройкаСписка.УсловноеОформление.Элементы.Добавить();

	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Состояние");
	ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = Перечисления.СостояниеЗачисленияЗарплаты.ЗачисленоПолностью;

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.РезультатУспехЦвет);

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

	// Состояние Равно "Зачислено с ошибками (частично)"

	ЭлементОформления = ЗачислениеЗарплатыНастройкаСписка.УсловноеОформление.Элементы.Добавить();

	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Состояние");
	ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = Перечисления.СостояниеЗачисленияЗарплаты.ЗачисленоСОшибками;

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.РезультатПредупреждениеЦвет);

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

	// Состояние Равно "Не зачислено (все строки - ошибки)"

	ЭлементОформления = ЗачислениеЗарплатыНастройкаСписка.УсловноеОформление.Элементы.Добавить();

	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Состояние");
	ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = Перечисления.СостояниеЗачисленияЗарплаты.НеЗачислено;

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.РезультатПроблемаЦвет);

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

	// Состояние Равно "Не зачислено (все строки - ошибки)"

	ЭлементОформления = ЗачислениеЗарплатыНастройкаСписка.УсловноеОформление.Элементы.Добавить();

	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Состояние");
	ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = Перечисления.СостояниеЗачисленияЗарплаты.НеЗачислено;

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Оформить повторно'"));

	ЭлементОформления.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("Команда");

	// Состояние Равно "Зачислено с ошибками (частично)" И Тип документа Равно "Ведомость в банк"

	ЭлементОформления = ЗачислениеЗарплатыНастройкаСписка.УсловноеОформление.Элементы.Добавить();

	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Состояние");
	ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = Перечисления.СостояниеЗачисленияЗарплаты.ЗачисленоСОшибками;
	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("ТипДокумента");
	ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = Тип("ДокументСсылка.ВедомостьНаВыплатуЗарплатыВБанк");

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Оформить повторно'"));

	ЭлементОформления.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("Команда");

	// Месяц Не заполнено

	ЭлементОформления = ЗачислениеЗарплатыНастройкаСписка.УсловноеОформление.Элементы.Добавить();

	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПериодРегистрации");
	ЭлементОтбора.ВидСравнения  = ВидСравненияКомпоновкиДанных.НеЗаполнено;

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("ПериодРегистрацииПредставление"));

	ЭлементОформления.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("ПериодРегистрации");

	// Выплата Не заполнено

	ЭлементОформления = ЗачислениеЗарплатыНастройкаСписка.УсловноеОформление.Элементы.Добавить();

	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СпособВыплаты");
	ЭлементОтбора.ВидСравнения  = ВидСравненияКомпоновкиДанных.НеЗаполнено;

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("СпособВыплатыПредставление"));

	ЭлементОформления.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("СпособВыплаты");

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

&НаСервере
Функция БанкЗарплатногоПроекта(ЗарплатныйПроект)
	Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗарплатныйПроект, "Банк");
КонецФункции

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

&НаСервереБезКонтекста
Функция МассивОписанийПередаваемыхФайловНаСервере(АдресХранилища, УникальныйИдентификаторФормы)
	
	Возврат ОбменСБанкамиПоЗарплатнымПроектам.МассивОписанийПередаваемыхФайлов(АдресХранилища, УникальныйИдентификаторФормы);
	
КонецФункции

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

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

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

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

&НаСервереБезКонтекста
Функция ЗаданиеВыполнено(ИдентификаторЗадания)
	
	Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания);
	
КонецФункции

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

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

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

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

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

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

&НаСервере
Процедура ЗачислениеЗарплатыЗаполнить()
	Элементы.ЗачислениеЗарплаты.Обновить();
	УстановитьЗачислениеЗарплатыСводныеСведения();
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОбновитьТаблицы()
	
	ПриИзмененииОсновныхПолейНаСервере();
	ОбновитьКомандыОбменаФормыСписка();
		
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура УстановитьВидимостьФайловогоКаталога()
	
#Если Не ВебКлиент Тогда
	// В тонком и толстом клиентах расширение подключено всегда.
	Элементы.КаталогФайлов.Видимость = Истина;
	Возврат;
#КонецЕсли

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

&НаКлиенте
Процедура УстановитьВидимостьФайловогоКаталогаЗавершение(Подключено, ДополнительныеПараметры) Экспорт
	
	Элементы.КаталогФайлов.Видимость = Подключено;
	
КонецПроцедуры

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

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

&НаСервереБезКонтекста
Функция СотрудникиФизическогоЛица(ФизическоеЛицо, Организация)
	Возврат СотрудникиФормы.СотрудникиФизическогоЛица(ФизическоеЛицо, ,Организация);
КонецФункции

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

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

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

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

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

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

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

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