Обмен с банками / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОписаниеПеременных

//++ Локализация


//-- Локализация

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

#Область ПрограммныйИнтерфейс

#Область Выгрузка

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

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


	//-- Локализация
	
КонецПроцедуры

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

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


	//-- Локализация
КонецПроцедуры

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

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

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

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

#Область Загрузка

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

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

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

	ПараметрыЗагрузки.Вставить("СоздаватьКонтрагентов", СоздаватьКонтрагентов);
	ПараметрыЗагрузки.Вставить("ПроводитьДокументы",    ПроводитьДокументы);
	ПараметрыЗагрузки.Вставить("Кодировка",             Счет.Кодировка);
	ПараметрыЗагрузки.Вставить("РежимЗаполненияКонтрагентаПоQRПлатежу", РежимЗаполненияКонтрагентаПоQRПлатежу);
	
	Счет.Загружен = Ложь;
	
	ПараметрыОтбора = Новый Структура("БанковскийСчет", Счет.Ссылка);
	ДанныеФайлов = Файлы.НайтиСтроки(ПараметрыОтбора);
	
	Для каждого ТекущаяСтрокаФайла Из ДанныеФайлов Цикл
	
		ПараметрыЗагрузки.Вставить("СтрокиВыписки", ПолучитьИзВременногоХранилища(ТекущаяСтрокаФайла.АдресХранилищаФайла));
		ПараметрыЗагрузки.Вставить("ДокументыКЗагрузке", ДокументыКЗагрузке.ВыгрузитьКолонки());
		ПараметрыЗагрузки.Вставить("ФайлПодтвержденияЗачисления", ТекущаяСтрокаФайла.ФайлПодтвержденияЗачисления);
		
		ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ИдФормы);
		КлючЗадания = СтрШаблон("%1_%2_%3_%4_%5_%6",
			НСтр("ru='Загрузка выписки банка'"),
			Счет.Ссылка.УникальныйИдентификатор(),
			Пользователи.ТекущийПользователь().УникальныйИдентификатор(),
			Счет.ДатаНачалаЗагрузки,
			Счет.ДатаКонцаЗагрузки,
			Новый УникальныйИдентификатор);
		ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru='Загрузка выписки банка'");
		ПараметрыВыполнения.КлючФоновогоЗадания = КлючЗадания;
		ПараметрыВыполнения.ОжидатьЗавершение = 
			?(ПоследовательнаяЗагрузка, Неопределено, ПараметрыВыполнения.ОжидатьЗавершение);
	
		Результат = ДлительныеОперации.ВыполнитьВФоне(
			"Обработки.КлиентБанк.Загрузить",
			ПараметрыЗагрузки,
			ПараметрыВыполнения);
		
		ТекущаяСтрокаФайла.АдресХранилищаДокументов = Результат.АдресРезультата;
		
		Если Результат.Статус = "Ошибка" Тогда
			Обработки.КлиентБанк.ВывестиОшибкуЗагрузкиФайла(
				Счет.Ссылка, ТекущаяСтрокаФайла.ИмяФайла, Результат.ИнформацияОбОшибке);
		КонецЕсли;
		
		Если Результат.Статус <> "Ошибка" Тогда
			Счет.Загружается = Истина;
		КонецЕсли;
		
		Если Результат.Статус <> "Выполняется" Тогда
			ТекущаяСтрокаФайла.СохранитьФайл = Истина;
		Иначе
			ТекущаяСтрокаФайла.ИдентификаторЗагрузки = Результат.ИдентификаторЗадания;
		КонецЕсли;
		
		Счет.ДанныеЗагрузки = ОбщегоНазначения.ЗначениеВСтрокуXML(Результат);
	
	КонецЦикла;
	
	Отбор = Новый Структура("БанковскийСчет, СохранитьФайл", Счет.Ссылка, Ложь);
	НеЗагруженныеФайлы = Файлы.НайтиСтроки(Отбор);
	
	Если НеЗагруженныеФайлы.Количество() = 0 Тогда
		Счет.Пометка = Ложь;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

//++ Локализация


//-- Локализация

#Область ВыгрузкаПорциямиПоПравиламОбъединения

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

Процедура ИзменитьРеквизитыСчетовПотока(Счета, ИзменяемыеПараметры)
	
	Для Каждого Счет Из Счета Цикл
		ЗаполнитьЗначенияСвойств(Счет, ИзменяемыеПараметры);
	КонецЦикла;
	
КонецПроцедуры

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

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

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

Процедура ПроверитьДокументыКВыгрузке()
	
	// Основные реквизиты
	Проверки = Новый Соответствие;
	Проверки.Вставить("Номер",   НСтр("ru='Номер документа'"));
	Проверки.Вставить("Дата",    НСтр("ru='Дата документа'"));
	Проверки.Вставить("Сумма",   НСтр("ru='Сумма документа'"));
	
	// Реквизиты организации
	ПроверкиОрганизацииПР = Новый Соответствие;
	ПроверкиОрганизацииПР.Вставить("ОрганизацияРасчСчет",          НСтр("ru='Банковский счет организации'"));
	ПроверкиОрганизацииПР.Вставить("ОрганизацияНаим",              НСтр("ru='Наименование организации'"));
	ПроверкиОрганизацииПР.Вставить("ОрганизацияИНН",               НСтр("ru='ИНН организации'"));
	
	// Реквизиты организации непрямые расчеты
	ПроверкиОрганизацииНПР = Новый Соответствие;
	ПроверкиОрганизацииНПР.Вставить("ОрганизацияРасчСчет",         НСтр("ru='Банковский счет организации'"));
	ПроверкиОрганизацииНПР.Вставить("ОрганизацияБанкДляРасчетов",  НСтр("ru='Банк для расчетов организации'"));
	ПроверкиОрганизацииНПР.Вставить("ОрганизацияГородБанка",       НСтр("ru='Город банка организации'"));
	ПроверкиОрганизацииНПР.Вставить("ОрганизацияБИКРЦБанка",       НСтр("ru='БИК РЦ банка организации'"));
	
	// Реквизиты контрагента
	ПроверкиКонтрагентаПР = Новый Соответствие;
	ПроверкиКонтрагентаПР.Вставить("КонтрагентРасчСчет",           НСтр("ru='Банковский счет контрагента'"));
	ПроверкиКонтрагентаПР.Вставить("КонтрагентНаим",               НСтр("ru='Контрагент'"));
	ПроверкиКонтрагентаПР.Вставить("КонтрагентИНН",                НСтр("ru='ИНН контрагента'"));
	
	// Реквизиты контрагента непрямые расчеты
	ПроверкиКонтрагентаНПР = Новый Соответствие;
	ПроверкиКонтрагентаНПР.Вставить("КонтрагентРасчСчет",          НСтр("ru='Банковский счет контрагента'"));
	ПроверкиКонтрагентаНПР.Вставить("КонтрагентБанкДляРасчетов",   НСтр("ru='Банк для расчетов контрагента'"));
	ПроверкиКонтрагентаНПР.Вставить("КонтрагентГородБанка",        НСтр("ru='Город банка контрагента'"));
	ПроверкиКонтрагентаНПР.Вставить("КонтрагентБИКРЦБанка",        НСтр("ru='БИК РЦ банка контрагента'"));
	
	ПроверкаISO = Новый Соответствие;
	ПроверкаISO.Вставить("ОрганизацияСВИФТБанка", НСтр("ru = 'Идентификатор банка организации'"));
	ПроверкаISO.Вставить("ОрганизацияБИКБанка", НСтр("ru = 'Идентификатор банка организации'"));
	ПроверкаISO.Вставить("КонтрагентСВИФТБанка", НСтр("ru = 'Идентификатор банка получателя'"));
	ПроверкаISO.Вставить("КонтрагентБИКБанка", НСтр("ru = 'Идентификатор банка получателя'"));
	
	Для каждого ДокументКВыгрузке Из ДокументыКВыгрузке Цикл
		
		СтрокаОшибки = "";
		
		Счет = БанковскиеСчета.Найти(ДокументКВыгрузке.БанковскийСчет, "Ссылка");
		
		Если Счет.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ClientBankExchange1c") Тогда
			
			Для каждого Проверка Из Проверки Цикл
				Если Не ЗначениеЗаполнено(ДокументКВыгрузке[Проверка.Ключ]) Тогда
					СтрокаОшибки = СтрокаОшибки + " " + Проверка.Значение + ",";
				КонецЕсли;
			КонецЦикла;
			
			Если Не ЗначениеЗаполнено(ДокументКВыгрузке.ОрганизацияБанкДляРасчетов) Тогда
				ПроверкаСчетаОрганизации = ПроверкиОрганизацииПР;
			Иначе
				ПроверкаСчетаОрганизации = ПроверкиОрганизацииНПР;
			КонецЕсли;
			Для каждого Проверка Из ПроверкаСчетаОрганизации Цикл
				Если Не ЗначениеЗаполнено(ДокументКВыгрузке[Проверка.Ключ]) Тогда
					СтрокаОшибки = СтрокаОшибки + " " + Проверка.Значение + ",";
				КонецЕсли;
			КонецЦикла;
			
			Если Не ЗначениеЗаполнено(ДокументКВыгрузке.КонтрагентБанкДляРасчетов) Тогда
				ПроверкаСчетаКонтрагента = ПроверкиКонтрагентаПР;
			Иначе
				ПроверкаСчетаКонтрагента = ПроверкиКонтрагентаНПР;
			КонецЕсли;
			Для каждого Проверка Из ПроверкаСчетаКонтрагента Цикл
				Если ДокументКВыгрузке.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицоНеРезидент
					И Проверка.Ключ = "КонтрагентИНН" Тогда
					Продолжить;
				КонецЕсли;
					
				Если Не ЗначениеЗаполнено(ДокументКВыгрузке[Проверка.Ключ]) Тогда
					СтрокаОшибки = СтрокаОшибки + " " + Проверка.Значение + ",";
				КонецЕсли;
			КонецЦикла;
			
		ИначеЕсли Счет.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ISO20022") Тогда
			
			Если Не ЗначениеЗаполнено(ДокументКВыгрузке.ОрганизацияСВИФТБанка)
				И Не ЗначениеЗаполнено(ДокументКВыгрузке.ОрганизацияБИКБанка) Тогда
				
				Текст = НСтр("ru='Идентификатор банка организации (БИК / SWIFT)'");
				СтрокаОшибки = СтрокаОшибки + " " + Текст + ",";
				
			КонецЕсли;
					
			Если Не ЗначениеЗаполнено(ДокументКВыгрузке.КонтрагентСВИФТБанка)
				И Не ЗначениеЗаполнено(ДокументКВыгрузке.КонтрагентБИКБанка) Тогда
				
				Текст = НСтр("ru='Идентификатор банка получателя (БИК / SWIFT)'");
				СтрокаОшибки = СтрокаОшибки + " " + Текст + ",";
				
			КонецЕсли;
			
		КонецЕсли;
		
		Если ЗначениеЗаполнено(СтрокаОшибки) Тогда
			СтрокаОшибки = Лев(СтрокаОшибки, СтрДлина(СтрокаОшибки) - 1);
			ДокументКВыгрузке.ЕстьОшибка = Истина;
			ДокументКВыгрузке.Выгружать = Ложь;
			ДокументКВыгрузке.ОписаниеОшибок = НСтр("ru='Не заполнены реквизиты платежа:'") + СтрокаОшибки;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

Функция ДокументыКВыгрузкеПоСчету(Счет)
	
	Отбор = Новый Структура;
	Отбор.Вставить("Выгружать", Истина);
	Отбор.Вставить("БанковскийСчет", Счет["Ссылка"]);
	
	Возврат ДокументыКВыгрузке.НайтиСтроки(Отбор);
	
КонецФункции

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

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

			Строка.Параметры.Контрагент =
				?(ПустаяСтрока(СтрокаИсточника.Получатель1), СтрокаИсточника.Получатель, СтрокаИсточника.Получатель1);
			Строка.Параметры.Счет = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (%2)'"),
				СтрокаИсточника.ПолучательСчет,
				Валюта);
				
			Строка.Параметры.СуммаСписание    = СтрокаИсточника.СуммаСписано;
			Строка.Параметры.СуммаПоступление = "";
			Строка.Параметры.Дата             =
				?(ПустаяСтрока(СтрокаИсточника.Дата), Формат(СтрокаИсточника.ДатаДок, "ДЛФ=Д"), СтрокаИсточника.Дата);
			ИтогоСуммаР                       = ИтогоСуммаР + СтрокаИсточника.СуммаСписано;

		Иначе
			Продолжить;
		КонецЕсли;
		
		Если Загружен Тогда
			Док = СтрокаИсточника.Документ;
			Если ЗначениеЗаполнено(Док) Тогда
				Строка.Параметры.Документ     = Док;
				ОбластьСтрока = Строка.Области["Строка"]; // ОбластьЯчеекТабличногоДокумента 
				ОбластьСтрока.ЦветТекста = ЦветаСтиля.ЦветТекстаФормы;
			Иначе
				Строка.Параметры.Документ     = НСтр("ru='НЕ ЗАГРУЖЕН'");
				Если ЗначениеЗаполнено(СтрокаИсточника.ОшибкиЗагрузки) Тогда
					Строка.Параметры.Документ = Строка.Параметры.Документ + ": " + СтрокаИсточника.ОшибкиЗагрузки;
				КонецЕсли;
				ОбластьСтрока = Строка.Области["Строка"]; // ОбластьЯчеекТабличногоДокумента
				ОбластьСтрока.ЦветТекста = ЦветаСтиля.ЦветОтрицательногоЧисла;
			КонецЕсли;
		КонецЕсли;
		
		Строка.Параметры.Номер             = СтрокаИсточника.Номер;
		Строка.Параметры.НазначениеПлатежа = СтрокаИсточника.НазначениеПлатежа;
		
		Инд = Инд + 1;
		Строка.Параметры["Индекс"] = Инд;
		
		ПолеОтчета.Вывести(Строка);
		
	КонецЦикла;
	
	Подвал.Параметры.ИтогоСуммаП = ИтогоСуммаП;
	Подвал.Параметры.ИтогоСуммаР = ИтогоСуммаР;
	
	ПолеОтчета.Вывести(Подвал);
	ПолеОтчета.ОтображатьГруппировки = Ложь;
	ПолеОтчета.ОтображатьЗаголовки   = Ложь;
	ПолеОтчета.ОтображатьСетку       = Ложь;
	ПолеОтчета.ТолькоПросмотр        = Истина;
	
КонецПроцедуры

Процедура ЗаполнитьИнформациюОПолучателяхПлательщиках(ТаблицаПлатежей)

	МассивДокументов = ТаблицаПлатежей.ВыгрузитьКолонку("Ссылка");
	ДанныеКонтрагентов = ДенежныеСредстваСервер.СведенияОПолучателеПлательщикеПоДокументам(МассивДокументов);
	
	Для Каждого СтрокаТаблицы Из ТаблицаПлатежей Цикл
		
		Если ТипЗнч(СтрокаТаблицы.БанковскийСчетКонтрагента) = Тип("СправочникСсылка.БанковскиеСчетаОрганизаций") Тогда
			
			Если СтрокаТаблицы.Операция = Перечисления.ХозяйственныеОперации.КонвертацияВалюты Тогда
				Обработки.КлиентБанк.ЗаполнитьЗначениеРеквизитаПоДокументу(
					ДанныеКонтрагентов,
					СтрокаТаблицы.КонтрагентНаим,
					СтрокаТаблицы.Ссылка,
					4);
			Иначе
				Обработки.КлиентБанк.ЗаполнитьЗначениеРеквизитаПоДокументу(
					ДанныеКонтрагентов,
					СтрокаТаблицы.КонтрагентНаим,
					СтрокаТаблицы.Ссылка,
					2);
			КонецЕсли;
			
		Иначе
			Обработки.КлиентБанк.ЗаполнитьЗначениеРеквизитаПоДокументу(
				ДанныеКонтрагентов,
				СтрокаТаблицы.КонтрагентНаим,
				СтрокаТаблицы.Ссылка,
				0);
		КонецЕсли;
		
		Если СтрокаТаблицы.Операция = Перечисления.ХозяйственныеОперации.КонвертацияВалюты Тогда
			
			Обработки.КлиентБанк.ЗаполнитьЗначениеРеквизитаПоДокументу(
				ДанныеКонтрагентов,
				СтрокаТаблицы.КонтрагентНаименованиеМеждународное,
				СтрокаТаблицы.Ссылка,
				6);
			Обработки.КлиентБанк.ЗаполнитьЗначениеРеквизитаПоДокументу(
				ДанныеКонтрагентов,
				СтрокаТаблицы.КПППолучателя,
				СтрокаТаблицы.Ссылка,
				7);
			
		Иначе
			
			Обработки.КлиентБанк.ЗаполнитьЗначениеРеквизитаПоДокументу(
				ДанныеКонтрагентов,
				СтрокаТаблицы.КонтрагентНаименованиеМеждународное,
				СтрокаТаблицы.Ссылка,
				3);
				
			Обработки.КлиентБанк.ЗаполнитьЗначениеРеквизитаПоДокументу(
				ДанныеКонтрагентов,
				СтрокаТаблицы.КПППолучателя,
				СтрокаТаблицы.Ссылка,
				1);
			
		КонецЕсли;
		
		Обработки.КлиентБанк.ЗаполнитьЗначениеРеквизитаПоДокументу(
			ДанныеКонтрагентов,
			СтрокаТаблицы.ОрганизацияНаим,
			СтрокаТаблицы.Ссылка,
			4);
		Обработки.КлиентБанк.ЗаполнитьЗначениеРеквизитаПоДокументу(
			ДанныеКонтрагентов,
			СтрокаТаблицы.ОрганизацияНаименованиеМеждународное,
			СтрокаТаблицы.Ссылка,
			6);
		Обработки.КлиентБанк.ЗаполнитьЗначениеРеквизитаПоДокументу(
			ДанныеКонтрагентов,
			СтрокаТаблицы.КПППлательщика,
			СтрокаТаблицы.Ссылка,
			7);
		
	КонецЦикла;

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

//++ Локализация


//-- Локализация

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

#КонецЕсли

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