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

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

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

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

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

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

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

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

// Заполняет значение поля из таблицы данных контрагента.
// 
// Параметры:
//  ТаблицаДанных - ТаблицаЗначений - данные, содержащие Наименование и КПП контрагента.
//  ТекущееЗначение - Строка - значение поля, которое следует заполнить.
//  Документ - ДокументСсылка - документ, по которому выполняется заполнение.
//  Признак - Число - признак, определяющий выбор реквизита из таблицы данных контрагента ТаблицаДанных: 0 - Наименование,
//                    1 - КПП.
//
Процедура ЗаполнитьЗначениеРеквизитаПоДокументу(ТаблицаДанных, ТекущееЗначение, Документ, Признак) Экспорт

	Отбор = Новый Структура("Документ, Признак", Документ, Признак);
	СписокДанных = ТаблицаДанных.НайтиСтроки(Отбор);
	ТекущееЗначение = ?(ТекущееЗначение <> "", ТекущееЗначение,
						?(СписокДанных.Количество() > 0, СписокДанных[0].ЗначениеРеквизита, ""));

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

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

	ШаблонТекста = НСтр("ru = 'Ошибка загрузки файла ""%1"" по счету %2:
								|%3'");
	ТекстОшибкиПодробно = СтрШаблон(
		ШаблонТекста, ИмяФайла, Счет, ?(ИнформацияОбОшибке <> Неопределено, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), ""));
	Событие = СтрШаблон("%1 %2", НСтр("ru = 'Загрузка платежей из банка.'", ОбщегоНазначения.КодОсновногоЯзыка()),
						НСтр("ru = 'Ошибка выполнения'", ОбщегоНазначения.КодОсновногоЯзыка()));
	ЗаписьЖурналаРегистрации(
		Событие,
		УровеньЖурналаРегистрации.Ошибка, ,
		НСтр("ru = 'Загрузка выписки банка'"),
		ТекстОшибкиПодробно);
	
	ТекстОшибкиКратко = СтрШаблон(
		ШаблонТекста, ИмяФайла, Счет, ?(ИнформацияОбОшибке <> Неопределено, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ""));
	ОбщегоНазначения.СообщитьПользователю(ТекстОшибкиКратко);

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

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

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

#Область ТекстыЗапросов

Функция ТекстЗапросаНастройкиСчетов()
	
	ТекстЗапроса = "
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	БанковскиеСчета.Ссылка                            КАК Ссылка,
	|	БанковскиеСчета.Владелец                          КАК Организация,
	|	БанковскиеСчета.Наименование                      КАК Наименование,
	|	БанковскиеСчета.НомерСчета                        КАК НомерСчета,
	//++ Локализация
	|	БанковскиеСчета.РазделЛицевогоСчета               КАК РазделЛицевогоСчета,
	|	БанковскиеСчета.НомерЛицевогоСчета                КАК НомерЛицевогоСчета,
	|
	|	БанковскиеСчета.ИспользоватьПрямойОбменСБанком    КАК ПрямойОбмен,
	//-- Локализация
	|	БанковскиеСчета.ИспользоватьОбменСБанком          КАК ОбменЧерезФайл,
	|	
	|	ВЫБОР
	//++ Локализация
	|		КОГДА БанковскиеСчета.ИспользоватьПрямойОбменСБанком ТОГДА
	|			ЕСТЬNULL(СоглашениеЭД.Ссылка, ЗНАЧЕНИЕ(Справочник.НастройкиОбменСБанками.ПустаяСсылка))
	//-- Локализация
	|		КОГДА БанковскиеСчета.ИспользоватьОбменСБанком ТОГДА
	|			ВЫБОР КОГДА &Загрузка ТОГДА
	|				БанковскиеСчета.ФайлЗагрузки
	|			ИНАЧЕ
	|				БанковскиеСчета.ФайлВыгрузки
	|			КОНЕЦ
	|	КОНЕЦ КАК НастройкаОбмена,
	|	ВЫРАЗИТЬ("""" КАК Строка(255)) КАК ПредставлениеНастройкиОбмена,
	|
	|	ВЫБОР
	|		КОГДА БанковскиеСчета.ИспользоватьОбменСБанком ТОГДА
	|			ВЫБОР КОГДА &Загрузка ТОГДА
	|				БанковскиеСчета.ФайлЗагрузки
	|			ИНАЧЕ
	|				БанковскиеСчета.ФайлВыгрузки
	|			КОНЕЦ
	|		ИНАЧЕ ВЫРАЗИТЬ("""" КАК Строка(255))
	|	КОНЕЦ КАК ПравилоФайловогоОбменаСБанками,
		//++ Локализация
	|	ВЫБОР
	|		КОГДА БанковскиеСчета.ФорматОбмена = ЗНАЧЕНИЕ(Перечисление.ФорматОбменаСБанком.ПустаяСсылка) ТОГДА
	|			ЗНАЧЕНИЕ(Перечисление.ФорматОбменаСБанком.ClientBankExchange1c)
	|		ИНАЧЕ
		//-- Локализация
	|			БанковскиеСчета.ФорматОбмена
		//++ Локализация
	|	КОНЕЦ
		//-- Локализация
	|		КАК ФорматОбмена,
	|	БанковскиеСчета.ВерсияФорматаВыгрузки             КАК ВерсияФорматаВыгрузки,
	|	БанковскиеСчета.Кодировка                         КАК Кодировка,
	|	БанковскиеСчета.Программа                         КАК Программа,
	|	
	|	0                                                 КАК КВыгрузке,
	|	
	|	ПоследнийОбменСБанками.ДатаВыгрузки               КАК ДатаПоследнейВыгрузки,
	|	ПоследнийОбменСБанками.ДатаНачалаЗагрузки         КАК ДатаНачалаПоследнейЗагрузки,
	|	ПоследнийОбменСБанками.ДатаКонцаЗагрузки          КАК ДатаКонцаПоследнейЗагрузки,
	|	НЕОПРЕДЕЛЕНО                                      КАК ДатаНачалаЗагрузки,
	|	НЕОПРЕДЕЛЕНО                                      КАК ДатаКонцаЗагрузки,
	|	ВЫРАЗИТЬ("""" КАК Строка(30))                     КАК ПоследняяВыписка,
	|	
	|	ВЫБОР КОГДА БанковскиеСчета.РучноеИзменениеРеквизитовБанка ТОГДА
	|		БанковскиеСчета.БИКБанка
	|	ИНАЧЕ
	|		БанковскиеСчета.Банк.Код
	|	КОНЕЦ КАК БИКБанка,
	|	ВЫБОР КОГДА БанковскиеСчета.РучноеИзменениеРеквизитовБанка ТОГДА
	|		БанковскиеСчета.НаименованиеБанка
	|	ИНАЧЕ
	|		БанковскиеСчета.Банк
	|	КОНЕЦ КАК Банк,
	//++ Локализация
	|	ЛОЖЬ                                              КАК ЕстьВозможностьПрямогоОбмена,
	//-- Локализация
	|	БанковскиеСчета.Закрыт                            КАК Закрыт,
	|	ВЫБОР
	|		КОГДА &Загрузка 
	|			ТОГДА БанковскиеСчета.ИспользоватьКаталогЗагрузки
	|		ИНАЧЕ БанковскиеСчета.ИспользоватьКаталогВыгрузки
	|	КОНЕЦ КАК ЗагружатьКаталог
	|	
	|ИЗ
	|	Справочник.БанковскиеСчетаОрганизаций КАК БанковскиеСчета
	|	
	//++ Локализация
	|	ЛЕВОЕ СОЕДИНЕНИЕ
	|		Справочник.НастройкиОбменСБанками КАК СоглашениеЭД
	|	ПО
	|		БанковскиеСчета.ИспользоватьПрямойОбменСБанком
	|		И БанковскиеСчета.Владелец = СоглашениеЭД.Организация
	|		И БанковскиеСчета.Банк = СоглашениеЭД.Банк
	|		И НЕ СоглашениеЭД.Недействительна 
	//-- Локализация
	|	
	|	ЛЕВОЕ СОЕДИНЕНИЕ
	|		РегистрСведений.ПоследнийОбменСБанками КАК ПоследнийОбменСБанками
	|	ПО
	|		ПоследнийОбменСБанками.БанковскийСчет = БанковскиеСчета.Ссылка
	|	
	|ГДЕ
	|	БанковскиеСчета.ОбменСБанкомВключен
	|	И НЕ БанковскиеСчета.ПометкаУдаления
	|	И НЕ БанковскиеСчета.Закрыт
	|	И НЕ ИспользоватьОбменСБанкомBankFeeds
	|	И &ДополнительныйОтбор
	|	
	|УПОРЯДОЧИТЬ ПО
	|	БанковскиеСчета.Наименование
	|";
	
	Возврат ТекстЗапроса;
	
КонецФункции

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

Функция ТекстЗапросаПлатежныеПорученияТретьиЛица() Экспорт
	
	ТекстЗапроса = "
	|
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ДанныеДокумента.ДатаВыгрузки                          КАК ДатаВыгрузки,
	|	ДанныеДокумента.Номер                                 КАК Номер,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ДатаВходящегоДокумента = ДАТАВРЕМЯ(1, 1, 1)
	|			ТОГДА ДанныеДокумента.Дата
	|		ИНАЧЕ ДанныеДокумента.ДатаВходящегоДокумента
	|	КОНЕЦ                                                 КАК Дата,
	|	ДанныеДокумента.СуммаДокумента                        КАК Сумма,
	|	ДанныеДокумента.Валюта                                КАК Валюта,
	|	ДанныеДокумента.Валюта.Наименование                   КАК ISOКодВалюты,
	|	ДанныеДокумента.Валюта.Код                            КАК КодВалюты,
	|	ДанныеДокумента.НазначениеПлатежа                     КАК НазначениеПлатежа,
	|	ДанныеДокумента.ХозяйственнаяОперация                 КАК Операция,
	|	ДанныеДокумента.Организация                           КАК Организация,
	|	ДанныеДокумента.БанковскийСчет                        КАК БанковскийСчет,
	|	ДанныеДокумента.БанковскийСчетКонтрагента             КАК БанковскийСчетКонтрагента,
	|	ДанныеДокумента.Комментарий                           КАК Комментарий,
	|	ДанныеДокумента.ТипПлатежногоДокумента                КАК ВидДокумента,
	|	ДанныеДокумента.ВидПлатежа                            КАК ВидПлатежа,
	|	ДанныеДокумента.Ссылка                                КАК Ссылка,
	|	ДанныеДокумента.ИдентификаторПлатежа                  КАК Код,
	|	ДанныеДокумента.КодВалютнойОперации                   КАК КодВалютнойОперации,
	//++ Локализация
	|	ДанныеДокумента.КодВалютнойОперации.Код               КАК КодВидаВалютнойОперации,
	//-- Локализация
	|	ДанныеДокумента.Ответственный                         КАК Ответственный,
	|	ДанныеДокумента.Ответственный.ФизическоеЛицо          КАК ФизическоеЛицо,
	|	ДанныеДокумента.ТипКомиссииЗаПеревод                  КАК ТипКомиссииЗаПеревод,
	|	ПРЕДСТАВЛЕНИЕ(ДанныеДокумента.ТипКомиссииЗаПеревод)   КАК ТипКомиссииЗаПереводНаименование,
	|	ДанныеДокумента.ИнформацияДляРегулирующихОрганов      КАК ИнформацияДляРегулирующихОрганов,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеПоручение)
	|			ТОГДА ""01""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.Аккредитив)
	|			ТОГДА ""08""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ИнкассовоеПоручение)
	|			ТОГДА ""06""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеТребование)
	|			ТОГДА ""02""
	|		ИНАЧЕ ""00""
	|	КОНЕЦ КАК ВидОплаты,
	|	
	//++ Локализация
	|	ЕСТЬNULL(СостоянияЭД.СостояниеЭДО, ЗНАЧЕНИЕ(Перечисление.СостоянияДокументовЭДО.ПустаяСсылка)) КАК СостояниеЭД,
	//-- Локализация
	|	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ДатаВыгрузки = ДАТАВРЕМЯ(1,1,1)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК Выгружать,
	|	
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств                КАК ВалютаСписания,
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств.Наименование   КАК ВалютаСписанияИСОКод,
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств.Код            КАК ВалютаСписанияКод,
	|	ДанныеДокумента.СуммаДокумента                                 КАК ВалютаСписанияСумма,
	|	
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств              КАК ВалютаПеревода,
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств.Наименование КАК ВалютаПереводаИСОКод,
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств.Код          КАК ВалютаПереводаКод,
	|	ДанныеДокумента.СуммаДокумента                                 КАК ВалютаПереводаСумма,
	
	// Организация и счет организации
	
	|	БанковскийСчетОрганизации.НомерСчета КАК ОрганизацияРасчСчет,
	|	БанковскийСчетОрганизации.ЭтоIBAN КАК ОрганизацияРасчСчетЭтоIBAN,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(ДанныеДокумента.ТекстПлательщика КАК СТРОКА(255)) <> """" ТОГДА
	|			ДанныеДокумента.ТекстПлательщика
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """" ТОГДА
	|			БанковскийСчетОрганизации.ТекстКорреспондента
	|		ИНАЧЕ ДанныеДокумента.Организация.Наименование
	|	КОНЕЦ КАК ОрганизацияНаименование,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(ДанныеДокумента.ТекстПлательщика КАК СТРОКА(255)) <> """" ТОГДА
	|			ДанныеДокумента.ТекстПлательщика
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """" ТОГДА
	|			БанковскийСчетОрганизации.ТекстКорреспондента
	// Наименование сокращенное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияНаименованиеСокращенное,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """" ТОГДА
	|			БанковскийСчетОрганизации.ТекстКорреспондента
	// Наименование международное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияНаименованиеМеждународное,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ИННПлательщика = """" ТОГДА
	|			ДанныеДокумента.Организация.ИНН
	|		ИНАЧЕ
	|			ДанныеДокумента.ИННПлательщика
	|	КОНЕЦ КАК ОрганизацияИНН,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.КПППлательщика <> """" ТОГДА
	|			ДанныеДокумента.КПППлательщика
	// КПП организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияКПП,
	
	|	КонтактнаяИнформацияОрганизации.Представление КАК ОрганизацияАдресМеждународный,
	|	КонтактнаяИнформацияОрганизации.ЗначенияПолей КАК ОрганизацияАдресМеждународныйЗначенияПолей,
	|	КонтактнаяИнформацияОрганизации.Значение КАК ОрганизацияАдресМеждународныйЗначение,
	|	КонтактнаяИнформацияОрганизации.Страна КАК ОрганизацияСтранаНаименование,
	|	КонтактнаяИнформацияОрганизации.Регион КАК ОрганизацияРегион,
	|	КонтактнаяИнформацияОрганизации.Город КАК ОрганизацияГород,
	
	|	&ДанныеБанковскогоСчетаОрганизации,
	
	// Контрагент и счет контрагента
	
	|	БанковскиеСчетаКонтрагентов.НомерСчета КАК КонтрагентРасчСчет,
	|	БанковскиеСчетаКонтрагентов.ЭтоIBAN КАК КонтрагентРасчСчетЭтоIBAN,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаЗаймаСотруднику) ТОГДА
	|			ДанныеДокумента.ПодотчетноеЛицо
	|		КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику),
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыплатаЗарплатыНаЛицевыеСчета)) ТОГДА
	|			БанковскиеСчетаКонтрагентов.Владелец
	|		ИНАЧЕ
	|			ДанныеДокумента.Контрагент
	|	КОНЕЦ КАК Контрагент,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику),
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаЗаймаСотруднику),
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыплатаЗарплатыНаЛицевыеСчета))
	|		ТОГДА
	|			ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ФизЛицо)
	|		ИНАЧЕ
	|			ДанныеДокумента.Контрагент.ЮрФизЛицо
	|	КОНЕЦ КАК ЮрФизЛицо,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаЗаймаСотруднику) ТОГДА
	|			ДанныеДокумента.ПодотчетноеЛицо.Наименование
	|		КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику),
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыплатаЗарплатыНаЛицевыеСчета)) ТОГДА
	|			БанковскиеСчетаКонтрагентов.Владелец.Наименование
	|		ИНАЧЕ
	|			ДанныеДокумента.Контрагент.Наименование
	|	КОНЕЦ КАК КонтрагентНаименование,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскиеСчетаКонтрагентов.ТекстКорреспондента КАК Строка(255)) = """" ТОГДА
	|		ВЫБОР
	|			КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|				ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику),
	|				ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаЗаймаСотруднику),
	|				ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыплатаЗарплатыНаЛицевыеСчета))
	|				И ТИПЗНАЧЕНИЯ(БанковскиеСчетаКонтрагентов.Владелец) = ТИП(Справочник.ФизическиеЛица)
	|			ТОГДА
	|				ДанныеДокумента.ПодотчетноеЛицо.Наименование
	|			КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|				ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику),
	|				ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыплатаЗарплатыНаЛицевыеСчета)) ТОГДА
	|				ВЫРАЗИТЬ(БанковскиеСчетаКонтрагентов.Владелец КАК Справочник.Контрагенты).НаименованиеПолное
	// Наименование полное контрагента
	|			ИНАЧЕ """"
	|			КОНЕЦ
	|		ИНАЧЕ
	|			БанковскиеСчетаКонтрагентов.ТекстКорреспондента
	|	КОНЕЦ КАК КонтрагентНаименованиеСокращенное,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику),
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаЗаймаСотруднику),
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыплатаЗарплатыНаЛицевыеСчета))
	|			И ТИПЗНАЧЕНИЯ(БанковскиеСчетаКонтрагентов.Владелец) = ТИП(Справочник.ФизическиеЛица) 
	|		ТОГДА
	|			ДанныеДокумента.ПодотчетноеЛицо.Наименование
	|		КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику),
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыплатаЗарплатыНаЛицевыеСчета)) ТОГДА
	|			ВЫРАЗИТЬ(БанковскиеСчетаКонтрагентов.Владелец КАК Справочник.Контрагенты).НаименованиеМеждународное
	|		ИНАЧЕ
	|			ДанныеДокумента.Контрагент.НаименованиеМеждународное
	|	КОНЕЦ КАК КонтрагентНаименованиеМеждународное,
	|	ВЫБОР
	|		КОГДА БанковскиеСчетаКонтрагентов.ИННКорреспондента = """" ТОГДА
	|			ВЫБОР
	|				КОГДА ДанныеДокумента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаЗаймаСотруднику) ТОГДА
	|					ДанныеДокумента.ПодотчетноеЛицо.ИНН
	|				КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|					ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику),
	|					ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыплатаЗарплатыНаЛицевыеСчета)) ТОГДА
	|					БанковскиеСчетаКонтрагентов.Владелец.ИНН
	|				ИНАЧЕ
	|					ДанныеДокумента.Контрагент.ИНН
	|			КОНЕЦ
	|		ИНАЧЕ
	|			БанковскиеСчетаКонтрагентов.ИННКорреспондента
	|	КОНЕЦ КАК КонтрагентИНН,
	// КПП контрагента
	|	ЕСТЬNULL(БанковскиеСчетаКонтрагентов.КППКорреспондента, """") КАК КонтрагентКПП,
	|	КонтактнаяИнформацияКонтрагента.Представление КАК КонтрагентАдресМеждународный,
	|	КонтактнаяИнформацияКонтрагента.ЗначенияПолей КАК КонтрагентАдресМеждународныйЗначенияПолей,
	|	КонтактнаяИнформацияКонтрагента.Значение КАК КонтрагентАдресМеждународныйЗначение,
	|	КонтактнаяИнформацияКонтрагента.Страна КАК КонтрагентСтрана,
	|	КонтактнаяИнформацияКонтрагента.Регион КАК КонтрагентРегион,
	|	КонтактнаяИнформацияКонтрагента.Город КАК КонтрагентГород,
	
	|	&ДанныеБанковскогоСчетаКонтрагента,

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

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

Функция ТекстЗапросаПлатежныеПорученияВнутренние() Экспорт
	
	ТекстЗапроса = "
	|
	|ВЫБРАТЬ
	|	ДанныеДокумента.ДатаВыгрузки                          КАК ДатаВыгрузки,
	|	ДанныеДокумента.Номер                                 КАК Номер,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ДатаВходящегоДокумента = ДАТАВРЕМЯ(1, 1, 1)
	|			ТОГДА ДанныеДокумента.Дата
	|		ИНАЧЕ ДанныеДокумента.ДатаВходящегоДокумента
	|	КОНЕЦ                                                 КАК Дата,
	|	ДанныеДокумента.СуммаДокумента                        КАК Сумма,
	|	ДанныеДокумента.Валюта                                КАК Валюта,
	|	ДанныеДокумента.Валюта.Наименование                   КАК ISOКодВалюты,
	|	ДанныеДокумента.Валюта.Код                            КАК КодВалюты,
	|	ДанныеДокумента.НазначениеПлатежа                     КАК НазначениеПлатежа,
	|	ДанныеДокумента.ХозяйственнаяОперация                 КАК Операция,
	|	ДанныеДокумента.Организация                           КАК Организация,
	|	ДанныеДокумента.БанковскийСчет                        КАК БанковскийСчет,
	|	ДанныеДокумента.БанковскийСчетПолучатель              КАК БанковскийСчетКонтрагента,
	|	ДанныеДокумента.Комментарий                           КАК Комментарий,
	|	ДанныеДокумента.ТипПлатежногоДокумента                КАК ВидДокумента,
	|	ДанныеДокумента.ВидПлатежа                            КАК ВидПлатежа,
	|	ДанныеДокумента.Ссылка                                КАК Ссылка,
	|	ДанныеДокумента.ИдентификаторПлатежа                  КАК Код,
	|	ДанныеДокумента.КодВалютнойОперации                   КАК КодВалютнойОперации,
	//++ Локализация
	|	ДанныеДокумента.КодВалютнойОперации.Код               КАК КодВидаВалютнойОперации,
	//-- Локализация
	|	ДанныеДокумента.Ответственный                         КАК Ответственный,
	|	ДанныеДокумента.Ответственный.ФизическоеЛицо          КАК ФизическоеЛицо,
	|	ДанныеДокумента.ТипКомиссииЗаПеревод                  КАК ТипКомиссииЗаПеревод,
	|	ПРЕДСТАВЛЕНИЕ(ДанныеДокумента.ТипКомиссииЗаПеревод)   КАК ТипКомиссииЗаПереводНаименование,
	|	ДанныеДокумента.ИнформацияДляРегулирующихОрганов      КАК ИнформацияДляРегулирующихОрганов,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеПоручение)
	|			ТОГДА ""01""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.Аккредитив)
	|			ТОГДА ""08""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ИнкассовоеПоручение)
	|			ТОГДА ""06""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеТребование)
	|			ТОГДА ""02""
	|		ИНАЧЕ ""00""
	|	КОНЕЦ КАК ВидОплаты,
	|	
	//++ Локализация
	|	ЕСТЬNULL(СостоянияЭД.СостояниеЭДО, ЗНАЧЕНИЕ(Перечисление.СостоянияДокументовЭДО.ПустаяСсылка)) КАК СостояниеЭД,
	//-- Локализация
	|	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ДатаВыгрузки = ДАТАВРЕМЯ(1,1,1)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК Выгружать,
	|	
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств                КАК ВалютаСписания,
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств.Наименование   КАК ВалютаСписанияИСОКод,
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств.Код            КАК ВалютаСписанияКод,
	|	ДанныеДокумента.СуммаДокумента                                 КАК ВалютаСписанияСумма,
	|	
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств              КАК ВалютаПеревода,
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств.Наименование КАК ВалютаПереводаИСОКод,
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств.Код          КАК ВалютаПереводаКод,
	|	ДанныеДокумента.СуммаДокумента                                 КАК ВалютаПереводаСумма,
	
	// Организация и счет организации
	
	|	БанковскийСчетОрганизации.НомерСчета КАК ОрганизацияРасчСчет,
	|	БанковскийСчетОрганизации.ЭтоIBAN КАК ОрганизацияРасчСчетЭтоIBAN,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(ДанныеДокумента.ТекстПлательщика КАК СТРОКА(255)) <> """" ТОГДА
	|			ДанныеДокумента.ТекстПлательщика
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """" ТОГДА
	|			БанковскийСчетОрганизации.ТекстКорреспондента
	|		ИНАЧЕ ДанныеДокумента.Организация.Наименование
	|	КОНЕЦ КАК ОрганизацияНаименование,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(ДанныеДокумента.ТекстПлательщика КАК СТРОКА(255)) <> """" ТОГДА
	|			ДанныеДокумента.ТекстПлательщика
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """" ТОГДА
	|			БанковскийСчетОрганизации.ТекстКорреспондента
	// Наименование сокращенное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияНаименованиеСокращенное,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """" ТОГДА
	|			БанковскийСчетОрганизации.ТекстКорреспондента
	// Наименование международное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияНаименованиеМеждународное,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ИННПлательщика = """" ТОГДА
	|			ДанныеДокумента.Организация.ИНН
	|		ИНАЧЕ
	|			ДанныеДокумента.ИННПлательщика
	|	КОНЕЦ КАК ОрганизацияИНН,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.КПППлательщика <> """" ТОГДА
	|			ДанныеДокумента.КПППлательщика
	// КПП организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияКПП,
	
	|	КонтактнаяИнформацияОрганизации.Представление КАК ОрганизацияАдресМеждународный,
	|	КонтактнаяИнформацияОрганизации.ЗначенияПолей КАК ОрганизацияАдресМеждународныйЗначенияПолей,
	|	КонтактнаяИнформацияОрганизации.Значение КАК ОрганизацияАдресМеждународныйЗначение,
	|	КонтактнаяИнформацияОрганизации.Страна КАК ОрганизацияСтранаНаименование,
	|	КонтактнаяИнформацияОрганизации.Регион КАК ОрганизацияРегион,
	|	КонтактнаяИнформацияОрганизации.Город КАК ОрганизацияГород,
	
	|	&ДанныеБанковскогоСчетаОрганизации,

	// Контрагент и счет контрагента
	
	|	БанковскиеСчетаКонтрагентов.НомерСчета КАК КонтрагентРасчСчет,
	|	БанковскиеСчетаКонтрагентов.ЭтоIBAN КАК КонтрагентРасчСчетЭтоIBAN,
	|
	|	БанковскиеСчетаКонтрагентов.Владелец КАК Контрагент,
	|	ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ЮрЛицо) КАК ЮрФизЛицо,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскиеСчетаКонтрагентов.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскиеСчетаКонтрагентов.ТекстКорреспондента
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Владелец.Наименование
	|	КОНЕЦ КАК КонтрагентНаименование,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскиеСчетаКонтрагентов.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскиеСчетаКонтрагентов.ТекстКорреспондента
	// Наименование сокращенное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК КонтрагентНаименованиеСокращенное,
	
	// Наименование международное организации
	|	"""" КАК КонтрагентНаименованиеМеждународное,
	|	БанковскиеСчетаКонтрагентов.Владелец.ИНН КАК КонтрагентИНН,
	// КПП организации
	|	"""" КАК КонтрагентКПП,
	|	КонтактнаяИнформацияКонтрагента.Представление КАК КонтрагентАдресМеждународный,
	|	КонтактнаяИнформацияКонтрагента.ЗначенияПолей КАК КонтрагентАдресМеждународныйЗначенияПолей,
	|	КонтактнаяИнформацияКонтрагента.Значение КАК КонтрагентАдресМеждународныйЗначение,
	|	КонтактнаяИнформацияКонтрагента.Страна КАК КонтрагентСтрана,
	|	КонтактнаяИнформацияКонтрагента.Регион КАК КонтрагентРегион,
	|	КонтактнаяИнформацияКонтрагента.Город КАК КонтрагентГород,
	
	|	&ДанныеБанковскогоСчетаКонтрагента,

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

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

Функция ТекстЗапросаПлатежныеПорученияПереводы() Экспорт
	
	ТекстЗапроса = "
	|
	|ВЫБРАТЬ
	|	ДанныеДокумента.ДатаВыгрузки                          КАК ДатаВыгрузки,
	|	ДанныеДокумента.Номер                                 КАК Номер,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ДатаВходящегоДокумента = ДАТАВРЕМЯ(1, 1, 1)
	|			ТОГДА ДанныеДокумента.Дата
	|		ИНАЧЕ ДанныеДокумента.ДатаВходящегоДокумента
	|	КОНЕЦ                                                 КАК Дата,
	|	ДанныеДокумента.СуммаДокумента                        КАК Сумма,
	|	ДанныеДокумента.Валюта                                КАК Валюта,
	|	ДанныеДокумента.Валюта.Наименование                   КАК ISOКодВалюты,
	|	ДанныеДокумента.Валюта.Код                            КАК КодВалюты,
	|	ДанныеДокумента.НазначениеПлатежа                     КАК НазначениеПлатежа,
	|	ДанныеДокумента.ХозяйственнаяОперация                 КАК Операция,
	|	ДанныеДокумента.Организация                           КАК Организация,
	|	ДанныеДокумента.БанковскийСчет                        КАК БанковскийСчет,
	|	ДанныеДокумента.БанковскийСчетПолучатель              КАК БанковскийСчетКонтрагента,
	|	ДанныеДокумента.Комментарий                           КАК Комментарий,
	|	ДанныеДокумента.ТипПлатежногоДокумента                КАК ВидДокумента,
	|	ДанныеДокумента.ВидПлатежа                            КАК ВидПлатежа,
	|	ДанныеДокумента.Ссылка                                КАК Ссылка,
	|	ДанныеДокумента.ИдентификаторПлатежа                  КАК Код,
	|	ДанныеДокумента.КодВалютнойОперации                   КАК КодВалютнойОперации,
	//++ Локализация
	|	ДанныеДокумента.КодВалютнойОперации.Код               КАК КодВидаВалютнойОперации,
	//-- Локализация
	|	ДанныеДокумента.Ответственный                         КАК Ответственный,
	|	ДанныеДокумента.Ответственный.ФизическоеЛицо          КАК ФизическоеЛицо,
	|	ДанныеДокумента.ТипКомиссииЗаПеревод                  КАК ТипКомиссииЗаПеревод,
	|	ПРЕДСТАВЛЕНИЕ(ДанныеДокумента.ТипКомиссииЗаПеревод)   КАК ТипКомиссииЗаПереводНаименование,
	|	ДанныеДокумента.ИнформацияДляРегулирующихОрганов      КАК ИнформацияДляРегулирующихОрганов,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеПоручение)
	|			ТОГДА ""01""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.Аккредитив)
	|			ТОГДА ""08""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ИнкассовоеПоручение)
	|			ТОГДА ""06""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеТребование)
	|			ТОГДА ""02""
	|		ИНАЧЕ ""00""
	|	КОНЕЦ КАК ВидОплаты,
	|	
	//++ Локализация
	|	ЕСТЬNULL(СостоянияЭД.СостояниеЭДО, ЗНАЧЕНИЕ(Перечисление.СостоянияДокументовЭДО.ПустаяСсылка)) КАК СостояниеЭД,
	//-- Локализация
	|	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ДатаВыгрузки = ДАТАВРЕМЯ(1,1,1)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК Выгружать,
	|	
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств                КАК ВалютаСписания,
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств.Наименование   КАК ВалютаСписанияИСОКод,
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств.Код            КАК ВалютаСписанияКод,
	|	ДанныеДокумента.СуммаДокумента                                 КАК ВалютаСписанияСумма,
	|	
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств              КАК ВалютаПеревода,
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств.Наименование КАК ВалютаПереводаИСОКод,
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств.Код          КАК ВалютаПереводаКод,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.КонвертацияВалюты) ТОГДА
	|			ДанныеДокумента.СуммаКонвертации
	|		ИНАЧЕ
	|			ДанныеДокумента.СуммаДокумента
	|	КОНЕЦ КАК ВалютаПереводаСумма,
	
	// Организация и счет организации
	
	|	БанковскийСчетОрганизации.НомерСчета КАК ОрганизацияРасчСчет,
	|	БанковскийСчетОрганизации.ЭтоIBAN КАК ОрганизацияРасчСчетЭтоIBAN,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскийСчетОрганизации.ТекстКорреспондента
	|		ИНАЧЕ ДанныеДокумента.Организация.Наименование
	|	КОНЕЦ КАК ОрганизацияНаименование,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскийСчетОрганизации.ТекстКорреспондента
	// Наименование сокращенное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияНаименованиеСокращенное,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскийСчетОрганизации.ТекстКорреспондента
	// Наименование международное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияНаименованиеМеждународное,
	
	|	ДанныеДокумента.Организация.ИНН КАК ОрганизацияИНН,
	// КПП организации
	|	"""" КАК ОрганизацияКПП,
	|	КонтактнаяИнформацияОрганизации.Представление КАК ОрганизацияАдресМеждународный,
	|	КонтактнаяИнформацияОрганизации.ЗначенияПолей КАК ОрганизацияАдресМеждународныйЗначенияПолей,
	|	КонтактнаяИнформацияОрганизации.Значение КАК ОрганизацияАдресМеждународныйЗначение,
	|	КонтактнаяИнформацияОрганизации.Страна КАК ОрганизацияСтранаНаименование,
	|	КонтактнаяИнформацияОрганизации.Регион КАК ОрганизацияРегион,
	|	КонтактнаяИнформацияОрганизации.Город КАК ОрганизацияГород,
	
	|	&ДанныеБанковскогоСчетаОрганизации,

	// Контрагент и счет контрагента
	
	|	БанковскиеСчетаКонтрагентов.НомерСчета КАК КонтрагентРасчСчет,
	|	БанковскиеСчетаКонтрагентов.ЭтоIBAN КАК КонтрагентРасчСчетЭтоIBAN,
	|	БанковскиеСчетаКонтрагентов.Владелец КАК Контрагент,
	|	ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ЮрЛицо) КАК ЮрФизЛицо,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскиеСчетаКонтрагентов.ТекстКорреспондента КАК Строка(255)) <> """"
	|			ТОГДА БанковскиеСчетаКонтрагентов.ТекстКорреспондента
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Владелец.Наименование
	|	КОНЕЦ КАК КонтрагентНаименование,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскиеСчетаКонтрагентов.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскиеСчетаКонтрагентов.ТекстКорреспондента
	// Наименование сокращенное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК КонтрагентНаименованиеСокращенное,
	
	// Наименование международное организации
	|	"""" КАК КонтрагентНаименованиеМеждународное,
	|	БанковскиеСчетаКонтрагентов.Владелец.ИНН КАК КонтрагентИНН,
	// КПП организации
	|	"""" КАК КонтрагентКПП,
	|	КонтактнаяИнформацияОрганизации.Представление КАК КонтрагентАдресМеждународный,
	|	КонтактнаяИнформацияОрганизации.ЗначенияПолей КАК КонтрагентАдресМеждународныйЗначенияПолей,
	|	КонтактнаяИнформацияОрганизации.Значение КАК КонтрагентАдресМеждународныйЗначение,
	|	КонтактнаяИнформацияОрганизации.Страна КАК КонтрагентСтрана,
	|	КонтактнаяИнформацияОрганизации.Регион КАК КонтрагентРегион,
	|	КонтактнаяИнформацияОрганизации.Город КАК КонтрагентГород,
	
	|	&ДанныеБанковскогоСчетаКонтрагента,

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

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

Функция ТекстЗапросаПлатежныеТребованияТретьиЛица() Экспорт
	
	ТекстЗапроса = "
	|
	|ВЫБРАТЬ
	|	ДанныеДокумента.ДатаВыгрузки                          КАК ДатаВыгрузки,
	|	ДанныеДокумента.Номер                                 КАК Номер,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ДатаВходящегоДокумента = ДАТАВРЕМЯ(1, 1, 1)
	|			ТОГДА ДанныеДокумента.Дата
	|		ИНАЧЕ ДанныеДокумента.ДатаВходящегоДокумента
	|	КОНЕЦ                                                 КАК Дата,
	|	ДанныеДокумента.СуммаДокумента                        КАК Сумма,
	|	ДанныеДокумента.Валюта                                КАК Валюта,
	|	ДанныеДокумента.Валюта.Наименование                   КАК ISOКодВалюты,
	|	ДанныеДокумента.Валюта.Код                            КАК КодВалюты,
	|	ДанныеДокумента.НазначениеПлатежа                     КАК НазначениеПлатежа,
	|	ДанныеДокумента.ХозяйственнаяОперация                 КАК Операция,
	|	ДанныеДокумента.Организация                           КАК Организация,
	|	ДанныеДокумента.БанковскийСчет                        КАК БанковскийСчет,
	|	ДанныеДокумента.БанковскийСчетКонтрагента             КАК БанковскийСчетКонтрагента,
	|	ДанныеДокумента.Комментарий                           КАК Комментарий,
	|	ДанныеДокумента.ТипПлатежногоДокумента                КАК ВидДокумента,
	|	""""                                                  КАК ВидПлатежа,
	|	ДанныеДокумента.Ссылка                                КАК Ссылка,
	|	ДанныеДокумента.ИдентификаторПлатежа                  КАК Код,
	|	ДанныеДокумента.КодВалютнойОперации                   КАК КодВалютнойОперации,
	//++ Локализация
	|	ДанныеДокумента.КодВалютнойОперации.Код               КАК КодВидаВалютнойОперации,
	//-- Локализация
	|	ДанныеДокумента.Ответственный                         КАК Ответственный,
	|	ДанныеДокумента.Ответственный.ФизическоеЛицо          КАК ФизическоеЛицо,
	|	НЕОПРЕДЕЛЕНО                                          КАК ТипКомиссииЗаПеревод,
	|	""""                                                  КАК ТипКомиссииЗаПереводНаименование,
	|	""""                                                  КАК ИнформацияДляРегулирующихОрганов,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеПоручение)
	|			ТОГДА ""01""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.Аккредитив)
	|			ТОГДА ""08""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ИнкассовоеПоручение)
	|			ТОГДА ""06""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеТребование)
	|			ТОГДА ""02""
	|		ИНАЧЕ ""00""
	|	КОНЕЦ КАК ВидОплаты,
	|	
	//++ Локализация
	|	ЕСТЬNULL(СостоянияЭД.СостояниеЭДО, ЗНАЧЕНИЕ(Перечисление.СостоянияДокументовЭДО.ПустаяСсылка)) КАК СостояниеЭД,
	//-- Локализация
	|	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ДатаВыгрузки = ДАТАВРЕМЯ(1,1,1)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК Выгружать,
	|	
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств                КАК ВалютаСписания,
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств.Наименование   КАК ВалютаСписанияИСОКод,
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств.Код            КАК ВалютаСписанияКод,
	|	ДанныеДокумента.СуммаДокумента                                 КАК ВалютаСписанияСумма,
	|	
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств              КАК ВалютаПеревода,
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств.Наименование КАК ВалютаПереводаИСОКод,
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств.Код          КАК ВалютаПереводаКод,
	|	ДанныеДокумента.СуммаДокумента                                 КАК ВалютаПереводаСумма,
	
	// Организация и счет организации
	
	|	БанковскийСчетОрганизации.НомерСчета КАК ОрганизацияРасчСчет,
	|	БанковскийСчетОрганизации.ЭтоIBAN КАК ОрганизацияРасчСчетЭтоIBAN,
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) = """"
	|			ТОГДА БанковскийСчетОрганизации.ТекстКорреспондента
	|		ИНАЧЕ ДанныеДокумента.Организация.Наименование
	|	КОНЕЦ КАК ОрганизацияНаименование,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскийСчетОрганизации.ТекстКорреспондента
	// Наименование сокращенное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияНаименованиеСокращенное,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскийСчетОрганизации.ТекстКорреспондента
	// Наименование международное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияНаименованиеМеждународное,
	
	|	ДанныеДокумента.Организация.ИНН КАК ОрганизацияИНН,
	// КПП организации
	|	"""" КАК ОрганизацияКПП,
	
	|	КонтактнаяИнформацияОрганизации.Представление КАК ОрганизацияАдресМеждународный,
	|	КонтактнаяИнформацияОрганизации.ЗначенияПолей КАК ОрганизацияАдресМеждународныйЗначенияПолей,
	|	КонтактнаяИнформацияОрганизации.Значение КАК ОрганизацияАдресМеждународныйЗначение,
	|	КонтактнаяИнформацияОрганизации.Страна КАК ОрганизацияСтранаНаименование,
	|	КонтактнаяИнформацияОрганизации.Регион КАК ОрганизацияРегион,
	|	КонтактнаяИнформацияОрганизации.Город КАК ОрганизацияГород,
	|	
	|	&ДанныеБанковскогоСчетаОрганизации,
	
	// Контрагент и счет контрагента
	
	|	БанковскиеСчетаКонтрагентов.НомерСчета КАК КонтрагентРасчСчет,
	|	БанковскиеСчетаКонтрагентов.ЭтоIBAN КАК КонтрагентРасчСчетЭтоIBAN,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтПодотчетника))
	|		ТОГДА
	|			ДанныеДокумента.ПодотчетноеЛицо
	|		ИНАЧЕ
	|			ДанныеДокумента.Контрагент
	|	КОНЕЦ КАК Контрагент,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтПодотчетника))
	|		ТОГДА
	|			ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ФизЛицо)
	|		ИНАЧЕ
	|			ДанныеДокумента.Контрагент.ЮрФизЛицо
	|	КОНЕЦ КАК ЮрФизЛицо,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтПодотчетника))
	|		ТОГДА
	|			ДанныеДокумента.ПодотчетноеЛицо.Наименование
	|		ИНАЧЕ
	|			ДанныеДокумента.Контрагент.Наименование
	|	КОНЕЦ КАК КонтрагентНаименование,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскиеСчетаКонтрагентов.ТекстКорреспондента КАК Строка(255)) = """" ТОГДА
	|		ВЫБОР
	|			КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|				ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтПодотчетника))
	|			ТОГДА
	|				ДанныеДокумента.ПодотчетноеЛицо.Наименование
	// Наименование полное контрагента
	|			ИНАЧЕ """"
	|			КОНЕЦ
	|		ИНАЧЕ
	|			БанковскиеСчетаКонтрагентов.ТекстКорреспондента
	|	КОНЕЦ КАК КонтрагентНаименованиеСокращенное,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|			ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтПодотчетника))
	|		ТОГДА
	|			ДанныеДокумента.ПодотчетноеЛицо.Наименование
	|		ИНАЧЕ
	|			ДанныеДокумента.Контрагент.НаименованиеМеждународное
	|	КОНЕЦ КАК КонтрагентНаименованиеМеждународное,
	
	|	ВЫБОР
	|		КОГДА БанковскиеСчетаКонтрагентов.ИННКорреспондента = """" ТОГДА
	|			ВЫБОР
	|				КОГДА ДанныеДокумента.ХозяйственнаяОперация В (
	|					ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствОтПодотчетника))
	|				ТОГДА
	|					ДанныеДокумента.ПодотчетноеЛицо.ИНН
	|				ИНАЧЕ
	|					ДанныеДокумента.Контрагент.ИНН
	|			КОНЕЦ
	|		ИНАЧЕ
	|			БанковскиеСчетаКонтрагентов.ИННКорреспондента
	|	КОНЕЦ КАК КонтрагентИНН,
	
	|	ВЫБОР
	|		КОГДА БанковскиеСчетаКонтрагентов.КППКорреспондента <> """" ТОГДА
	|			БанковскиеСчетаКонтрагентов.КППКорреспондента
	// КПП контрагента
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК КонтрагентКПП,
	
	|	КонтактнаяИнформацияКонтрагента.Представление КАК КонтрагентАдресМеждународный,
	|	КонтактнаяИнформацияКонтрагента.ЗначенияПолей КАК КонтрагентАдресМеждународныйЗначенияПолей,
	|	КонтактнаяИнформацияКонтрагента.Значение КАК КонтрагентАдресМеждународныйЗначение,
	|	КонтактнаяИнформацияКонтрагента.Страна КАК КонтрагентСтрана,
	|	КонтактнаяИнформацияКонтрагента.Регион КАК КонтрагентРегион,
	|	КонтактнаяИнформацияКонтрагента.Город КАК КонтрагентГород,
	
	|	&ДанныеБанковскогоСчетаКонтрагента,

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

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

Функция ТекстЗапросаПлатежныеТребованияВнутренние() Экспорт
	
	ТекстЗапроса = "
	|
	|ВЫБРАТЬ
	|	ДанныеДокумента.ДатаВыгрузки                          КАК ДатаВыгрузки,
	|	ДанныеДокумента.Номер                                 КАК Номер,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ДатаВходящегоДокумента = ДАТАВРЕМЯ(1, 1, 1)
	|			ТОГДА ДанныеДокумента.Дата
	|		ИНАЧЕ ДанныеДокумента.ДатаВходящегоДокумента
	|	КОНЕЦ                                                 КАК Дата,
	|	ДанныеДокумента.СуммаДокумента                        КАК Сумма,
	|	ДанныеДокумента.Валюта                                КАК Валюта,
	|	ДанныеДокумента.Валюта.Наименование                   КАК ISOКодВалюты,
	|	ДанныеДокумента.Валюта.Код                            КАК КодВалюты,
	|	ДанныеДокумента.НазначениеПлатежа                     КАК НазначениеПлатежа,
	|	ДанныеДокумента.ХозяйственнаяОперация                 КАК Операция,
	|	ДанныеДокумента.Организация                           КАК Организация,
	|	ДанныеДокумента.БанковскийСчет                        КАК БанковскийСчет,
	|	ДанныеДокумента.БанковскийСчетОтправитель             КАК БанковскийСчетКонтрагента,
	|	ДанныеДокумента.Комментарий                           КАК Комментарий,
	|	ДанныеДокумента.ТипПлатежногоДокумента                КАК ВидДокумента,
	|	""""                                                  КАК ВидПлатежа,
	|	ДанныеДокумента.Ссылка                                КАК Ссылка,
	|	ДанныеДокумента.ИдентификаторПлатежа                  КАК Код,
	|	ДанныеДокумента.КодВалютнойОперации                   КАК КодВалютнойОперации,
	//++ Локализация
	|	ДанныеДокумента.КодВалютнойОперации.Код               КАК КодВидаВалютнойОперации,
	//-- Локализация
	|	ДанныеДокумента.Ответственный                         КАК Ответственный,
	|	ДанныеДокумента.Ответственный.ФизическоеЛицо          КАК ФизическоеЛицо,
	|	НЕОПРЕДЕЛЕНО                                          КАК ТипКомиссииЗаПеревод,
	|	""""                                                  КАК ТипКомиссииЗаПереводНаименование,
	|	""""                                                  КАК ИнформацияДляРегулирующихОрганов,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеПоручение)
	|			ТОГДА ""01""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.Аккредитив)
	|			ТОГДА ""08""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ИнкассовоеПоручение)
	|			ТОГДА ""06""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеТребование)
	|			ТОГДА ""02""
	|		ИНАЧЕ ""00""
	|	КОНЕЦ КАК ВидОплаты,
	|	
	//++ Локализация
	|	ЕСТЬNULL(СостоянияЭД.СостояниеЭДО, ЗНАЧЕНИЕ(Перечисление.СостоянияДокументовЭДО.ПустаяСсылка)) КАК СостояниеЭД,
	//-- Локализация
	|	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ДатаВыгрузки = ДАТАВРЕМЯ(1,1,1)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК Выгружать,
	|	
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств                КАК ВалютаСписания,
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств.Наименование   КАК ВалютаСписанияИСОКод,
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств.Код            КАК ВалютаСписанияКод,
	|	ДанныеДокумента.СуммаДокумента                                 КАК ВалютаСписанияСумма,
	|	
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств              КАК ВалютаПеревода,
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств.Наименование КАК ВалютаПереводаИСОКод,
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств.Код          КАК ВалютаПереводаКод,
	|	ДанныеДокумента.СуммаДокумента                                 КАК ВалютаПереводаСумма,
	
	// Организация и счет организации
	
	|	БанковскийСчетОрганизации.НомерСчета КАК ОрганизацияРасчСчет,
	|	БанковскийСчетОрганизации.ЭтоIBAN КАК ОрганизацияРасчСчетЭтоIBAN,
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскийСчетОрганизации.ТекстКорреспондента
	|		ИНАЧЕ ДанныеДокумента.Организация.Наименование
	|	КОНЕЦ КАК ОрганизацияНаименование,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскийСчетОрганизации.ТекстКорреспондента
	// Наименование сокращенное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияНаименованиеСокращенное,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскийСчетОрганизации.ТекстКорреспондента
	// Наименование международное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияНаименованиеМеждународное,
	
	|	ДанныеДокумента.Организация.ИНН КАК ОрганизацияИНН,
	// КПП организации
	|	"""" КАК ОрганизацияКПП,
	
	|	КонтактнаяИнформацияОрганизации.Представление КАК ОрганизацияАдресМеждународный,
	|	КонтактнаяИнформацияОрганизации.ЗначенияПолей КАК ОрганизацияАдресМеждународныйЗначенияПолей,
	|	КонтактнаяИнформацияОрганизации.Значение КАК ОрганизацияАдресМеждународныйЗначение,
	|	КонтактнаяИнформацияОрганизации.Страна КАК ОрганизацияСтранаНаименование,
	|	КонтактнаяИнформацияОрганизации.Регион КАК ОрганизацияРегион,
	|	КонтактнаяИнформацияОрганизации.Город КАК ОрганизацияГород,
	
	|	&ДанныеБанковскогоСчетаОрганизации,
	
	// Контрагент и счет контрагента
	
	|	БанковскиеСчетаКонтрагентов.НомерСчета КАК КонтрагентРасчСчет,
	|	БанковскиеСчетаКонтрагентов.ЭтоIBAN КАК КонтрагентРасчСчетЭтоIBAN,	
	|	БанковскиеСчетаКонтрагентов.Владелец КАК Контрагент,
	|	ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ЮрЛицо) КАК ЮрФизЛицо,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскиеСчетаКонтрагентов.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскиеСчетаКонтрагентов.ТекстКорреспондента
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Владелец.Наименование
	|	КОНЕЦ КАК КонтрагентНаименование,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскиеСчетаКонтрагентов.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскиеСчетаКонтрагентов.ТекстКорреспондента
	// Наименование сокращенное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК КонтрагентНаименованиеСокращенное,
	
	// Наименование международное организации
	|	"""" КАК КонтрагентНаименованиеМеждународное,

	|	БанковскиеСчетаКонтрагентов.Владелец.ИНН КАК КонтрагентИНН,
	// КПП организации
	|	"""" КАК КонтрагентКПП,
	
	|	КонтактнаяИнформацияКонтрагента.Представление КАК КонтрагентАдресМеждународный,
	|	КонтактнаяИнформацияКонтрагента.ЗначенияПолей КАК КонтрагентАдресМеждународныйЗначенияПолей,
	|	КонтактнаяИнформацияКонтрагента.Значение КАК КонтрагентАдресМеждународныйЗначение,
	|	КонтактнаяИнформацияКонтрагента.Страна КАК КонтрагентСтрана,
	|	КонтактнаяИнформацияКонтрагента.Регион КАК КонтрагентРегион,
	|	КонтактнаяИнформацияКонтрагента.Город КАК КонтрагентГород,
	
	|	&ДанныеБанковскогоСчетаКонтрагента,

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

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

Функция ТекстЗапросаКонвертацияВалюты() Экспорт
	
	ТекстЗапроса = "
	|
	|ВЫБРАТЬ
	|	ДанныеДокумента.ДатаВыгрузки                          КАК ДатаВыгрузки,
	|	ДанныеДокумента.Номер                                 КАК Номер,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ДатаВходящегоДокумента = ДАТАВРЕМЯ(1, 1, 1)
	|			ТОГДА ДанныеДокумента.Дата
	|		ИНАЧЕ ДанныеДокумента.ДатаВходящегоДокумента
	|	КОНЕЦ                                                 КАК Дата,
	|	ДанныеДокумента.СуммаДокумента                        КАК Сумма,
	|	ДанныеДокумента.Валюта                                КАК Валюта,
	|	ДанныеДокумента.Валюта.Наименование                   КАК ISOКодВалюты,
	|	ДанныеДокумента.Валюта.Код                            КАК КодВалюты,
	|	ДанныеДокумента.НазначениеПлатежа                     КАК НазначениеПлатежа,
	|	ДанныеДокумента.ХозяйственнаяОперация                 КАК Операция,
	|	ДанныеДокумента.Организация                           КАК Организация,
	|	ДанныеДокумента.БанковскийСчет                        КАК БанковскийСчет,
	|	ДанныеДокумента.БанковскийСчетПолучатель              КАК БанковскийСчетКонтрагента,
	|	ДанныеДокумента.Комментарий                           КАК Комментарий,
	|	ДанныеДокумента.ТипПлатежногоДокумента                КАК ВидДокумента,
	|	ДанныеДокумента.ВидПлатежа                            КАК ВидПлатежа,
	|	ДанныеДокумента.Ссылка                                КАК Ссылка,
	|	ДанныеДокумента.ИдентификаторПлатежа                  КАК Код,
	|	ДанныеДокумента.КодВалютнойОперации                   КАК КодВалютнойОперации,
	//++ Локализация
	|	ДанныеДокумента.КодВалютнойОперации.Код               КАК КодВидаВалютнойОперации,
	//-- Локализация
	|	ДанныеДокумента.Ответственный                         КАК Ответственный,
	|	ДанныеДокумента.Ответственный.ФизическоеЛицо          КАК ФизическоеЛицо,
	|	ДанныеДокумента.ТипКомиссииЗаПеревод                  КАК ТипКомиссииЗаПеревод,
	|	ПРЕДСТАВЛЕНИЕ(ДанныеДокумента.ТипКомиссииЗаПеревод)   КАК ТипКомиссииЗаПереводНаименование,
	|	ДанныеДокумента.ИнформацияДляРегулирующихОрганов      КАК ИнформацияДляРегулирующихОрганов,
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеПоручение)
	|			ТОГДА ""01""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.Аккредитив)
	|			ТОГДА ""08""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ИнкассовоеПоручение)
	|			ТОГДА ""06""
	|		КОГДА ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеТребование)
	|			ТОГДА ""02""
	|		ИНАЧЕ ""00""
	|	КОНЕЦ КАК ВидОплаты,
	|	
	//++ Локализация
	|	ЕСТЬNULL(СостоянияЭД.СостояниеЭДО, ЗНАЧЕНИЕ(Перечисление.СостоянияДокументовЭДО.ПустаяСсылка)) КАК СостояниеЭД,
	//-- Локализация
	|	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ДатаВыгрузки = ДАТАВРЕМЯ(1,1,1)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК Выгружать,
	|	
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств                КАК ВалютаСписания,
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств.Наименование   КАК ВалютаСписанияИСОКод,
	|	БанковскийСчетОрганизации.ВалютаДенежныхСредств.Код            КАК ВалютаСписанияКод,
	|	ДанныеДокумента.СуммаДокумента                                 КАК ВалютаСписанияСумма,
	|	
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств              КАК ВалютаПеревода,
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств.Наименование КАК ВалютаПереводаИСОКод,
	|	БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств.Код          КАК ВалютаПереводаКод,
	|	ДанныеДокумента.СуммаКонвертации                               КАК ВалютаПереводаСумма,
	
	// Организация и счет организации
	
	|	БанковскийСчетОрганизации.НомерСчета КАК ОрганизацияРасчСчет,
	|	БанковскийСчетОрганизации.ЭтоIBAN КАК ОрганизацияРасчСчетЭтоIBAN,
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(ДанныеДокумента.ТекстПлательщика КАК СТРОКА(255)) <> """" ТОГДА
	|			ДанныеДокумента.ТекстПлательщика
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """" ТОГДА
	|			БанковскийСчетОрганизации.ТекстКорреспондента
	|		ИНАЧЕ ДанныеДокумента.Организация.Наименование
	|	КОНЕЦ КАК ОрганизацияНаименование,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(ДанныеДокумента.ТекстПлательщика КАК СТРОКА(255)) <> """" ТОГДА
	|			ДанныеДокумента.ТекстПлательщика
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """" ТОГДА
	|			БанковскийСчетОрганизации.ТекстКорреспондента
	// Наименование сокращенное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияНаименованиеСокращенное,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскийСчетОрганизации.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскийСчетОрганизации.ТекстКорреспондента
	// Наименование международное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияНаименованиеМеждународное,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.ИННПлательщика = """" ТОГДА
	|			ДанныеДокумента.Организация.ИНН
	|		ИНАЧЕ
	|			ДанныеДокумента.ИННПлательщика
	|	КОНЕЦ КАК ОрганизацияИНН,
	
	|	ВЫБОР
	|		КОГДА ДанныеДокумента.КПППлательщика <> """" ТОГДА
	|			ДанныеДокумента.КПППлательщика
	// КПП организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК ОрганизацияКПП,
	
	|	КонтактнаяИнформацияОрганизации.Представление КАК ОрганизацияАдресМеждународный,
	|	КонтактнаяИнформацияОрганизации.ЗначенияПолей КАК ОрганизацияАдресМеждународныйЗначенияПолей,
	|	КонтактнаяИнформацияОрганизации.Значение КАК ОрганизацияАдресМеждународныйЗначение,
	|	КонтактнаяИнформацияОрганизации.Страна КАК ОрганизацияСтранаНаименование,
	|	КонтактнаяИнформацияОрганизации.Регион КАК ОрганизацияРегион,
	|	КонтактнаяИнформацияОрганизации.Город КАК ОрганизацияГород,
	
	|	&ДанныеБанковскогоСчетаОрганизации,

	// Контрагент и счет контрагента
	
	|	БанковскиеСчетаКонтрагентов.НомерСчета КАК КонтрагентРасчСчет,
	|	БанковскиеСчетаКонтрагентов.ЭтоIBAN КАК КонтрагентРасчСчетЭтоIBAN,
	|	БанковскиеСчетаКонтрагентов.Владелец КАК Контрагент,
	|	ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ЮрЛицо) КАК ЮрФизЛицо,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскиеСчетаКонтрагентов.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскиеСчетаКонтрагентов.ТекстКорреспондента
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Владелец.Наименование
	|	КОНЕЦ КАК КонтрагентНаименование,
	
	|	ВЫБОР
	|		КОГДА ВЫРАЗИТЬ(БанковскиеСчетаКонтрагентов.ТекстКорреспондента КАК СТРОКА(255)) <> """"
	|			ТОГДА БанковскиеСчетаКонтрагентов.ТекстКорреспондента
	// Наименование сокращенное организации
	|		ИНАЧЕ """"
	|	КОНЕЦ КАК КонтрагентНаименованиеСокращенное,
	
	// Наименование международное организации
	|	"""" КАК КонтрагентНаименованиеМеждународное,

	|	БанковскиеСчетаКонтрагентов.Владелец.ИНН КАК КонтрагентИНН,
	// КПП организации
	|	"""" КАК КонтрагентКПП,

	|	КонтактнаяИнформацияКонтрагента.Представление КАК КонтрагентАдресМеждународный,
	|	КонтактнаяИнформацияКонтрагента.ЗначенияПолей КАК КонтрагентАдресМеждународныйЗначенияПолей,
	|	КонтактнаяИнформацияКонтрагента.Значение КАК КонтрагентАдресМеждународныйЗначение,
	|	КонтактнаяИнформацияКонтрагента.Страна КАК КонтрагентСтрана,
	|	КонтактнаяИнформацияКонтрагента.Регион КАК КонтрагентРегион,
	|	КонтактнаяИнформацияКонтрагента.Город КАК КонтрагентГород,
	
	|	&ДанныеБанковскогоСчетаКонтрагента,

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

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

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

	Поля.Вставить("ОрганизацияГородРЦБанка",        "ОрганизацияГородБанкаДляРасчетов");
	Поля.Вставить("ОрганизацияБИКРЦБанка",          "ОрганизацияБИКБанкаДляРасчетов");
	Поля.Вставить("ОрганизацияКоррСчет",            "ОрганизацияКоррСчетБанка");
	Поля.Вставить("ОрганизацияКоррСчетРЦБанка",     "ОрганизацияКоррСчетБанкаДляРасчетов");
	
	Поля.Вставить("КПППолучателя",                  "КонтрагентКПП");

	Поля.Вставить("КонтрагентГородРЦБанка",         "КонтрагентГородБанкаДляРасчетов");
	Поля.Вставить("КонтрагентБИКРЦБанка",           "КонтрагентБИКБанкаДляРасчетов");
	Поля.Вставить("КонтрагентКоррСчет",             "КонтрагентКоррСчетБанка");
	Поля.Вставить("КонтрагентКоррСчетРЦБанка",      "КонтрагентКоррСчетБанкаДляРасчетов");
	
	Возврат Поля;
	
КонецФункции

Функция ТекстДанныеБанковскогоСчетаОрганизации()
	
	Возврат "
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанка ТОГДА БанковскийСчетОрганизации.НаименованиеБанка
	|		ИНАЧЕ БанковскийСчетОрганизации.Банк.Наименование КОНЕЦ КАК ОрганизацияБанк,
	|	ЕСТЬNULL(БанковскийСчетОрганизации.Банк.БИКРКЦ.Наименование, """") КАК ОрганизацияБанкНаименованиеРКЦ,
	|	БанковскийСчетОрганизации.НаименованиеБанкаМеждународное КАК ОрганизацияБанкМеждународный,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанка ТОГДА БанковскийСчетОрганизации.ГородБанка
	|		ИНАЧЕ БанковскийСчетОрганизации.Банк.Город КОНЕЦ КАК ОрганизацияГородБанка,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанка ТОГДА БанковскийСчетОрганизации.ГородБанкаМеждународный
	|		ИНАЧЕ БанковскийСчетОрганизации.Банк.ГородМеждународный КОНЕЦ КАК ОрганизацияГородБанкаМеждународный,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанка ТОГДА БанковскийСчетОрганизации.БИКБанка
	|		ИНАЧЕ БанковскийСчетОрганизации.Банк.Код КОНЕЦ КАК ОрганизацияБИКБанка,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанка ТОГДА БанковскийСчетОрганизации.СВИФТБанка
	|		ИНАЧЕ БанковскийСчетОрганизации.Банк.СВИФТБИК КОНЕЦ КАК ОрганизацияСВИФТБанка,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанка ТОГДА БанковскийСчетОрганизации.КоррСчетБанка
	|		ИНАЧЕ БанковскийСчетОрганизации.Банк.КоррСчет КОНЕЦ КАК ОрганизацияКоррСчетБанка,
	|	БанковскийСчетОрганизации.СчетВБанкеДляРасчетов КАК ОрганизацияСчетВБанкеДляРасчетов,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанка ТОГДА БанковскийСчетОрганизации.АдресБанка
	|		ИНАЧЕ БанковскийСчетОрганизации.Банк.Адрес КОНЕЦ КАК ОрганизацияАдресБанка,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанка ТОГДА БанковскийСчетОрганизации.АдресБанкаМеждународный
	|		ИНАЧЕ БанковскийСчетОрганизации.Банк.АдресМеждународный КОНЕЦ КАК ОрганизацияАдресБанкаМеждународный,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанка ТОГДА БанковскийСчетОрганизации.СтранаБанка.Наименование
	|		ИНАЧЕ СтраныБанковОрганизаций.Наименование КОНЕЦ КАК ОрганизацияСтранаБанка,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанка ТОГДА БанковскийСчетОрганизации.СтранаБанка.Код
	|		ИНАЧЕ БанкиОрганизаций.КодСтраны КОНЕЦ КАК ОрганизацияСтранаБанкаКод,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанка ТОГДА БанковскийСчетОрганизации.СтранаБанка.КодАльфа2
	|		ИНАЧЕ СтраныБанковОрганизаций.КодАльфа2 КОНЕЦ КАК ОрганизацияСтранаБанкаИСОКод,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанка ТОГДА БанковскийСчетОрганизации.ТелефоныБанка
	|		ИНАЧЕ БанковскийСчетОрганизации.Банк.Телефоны КОНЕЦ КАК ОрганизацияТелефоныБанка,
	|	БанковскийСчетОрганизации.ЭтоIBAN КАК БанковскийСчетОрганизацииIBAN,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскийСчетОрганизации.НаименованиеБанкаДляРасчетов
	|		ИНАЧЕ БанковскийСчетОрганизации.БанкДляРасчетов.Наименование КОНЕЦ КАК ОрганизацияБанкДляРасчетов,
	|	ЕСТЬNULL(БанковскийСчетОрганизации.БанкДляРасчетов.БИКРКЦ.Наименование, """") КАК ОрганизацияБанкДляРасчетовНаименованиеРКЦ,
	|	БанковскийСчетОрганизации.НаименованиеБанкаДляРасчетовМеждународное КАК ОрганизацияБанкДляРасчетовМеждународный,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскийСчетОрганизации.ГородБанкаДляРасчетов
	|		ИНАЧЕ БанковскийСчетОрганизации.БанкДляРасчетов.Город КОНЕЦ КАК ОрганизацияГородБанкаДляРасчетов,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскийСчетОрганизации.ГородБанкаДляРасчетовМеждународный
	|		ИНАЧЕ БанковскийСчетОрганизации.БанкДляРасчетов.ГородМеждународный КОНЕЦ КАК ОрганизацияГородБанкаДляРасчетовМеждународный,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскийСчетОрганизации.БИКБанкаДляРасчетов
	|		ИНАЧЕ БанковскийСчетОрганизации.БанкДляРасчетов.Код КОНЕЦ КАК ОрганизацияБИКБанкаДляРасчетов,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскийСчетОрганизации.СВИФТБанкаДляРасчетов
	|		ИНАЧЕ БанковскийСчетОрганизации.БанкДляРасчетов.СВИФТБИК КОНЕЦ КАК ОрганизацияСВИФТБанкаДляРасчетов,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскийСчетОрганизации.КоррСчетБанкаДляРасчетов
	|		ИНАЧЕ БанковскийСчетОрганизации.БанкДляРасчетов.КоррСчет КОНЕЦ КАК ОрганизацияКоррСчетБанкаДляРасчетов,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскийСчетОрганизации.АдресБанкаДляРасчетов
	|		ИНАЧЕ БанковскийСчетОрганизации.БанкДляРасчетов.Адрес КОНЕЦ КАК ОрганизацияАдресБанкаДляРасчетов,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскийСчетОрганизации.АдресБанкаДляРасчетовМеждународный
	|		ИНАЧЕ БанковскийСчетОрганизации.БанкДляРасчетов.АдресМеждународный КОНЕЦ КАК ОрганизацияАдресБанкаДляРасчетовМеждународный,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскийСчетОрганизации.СтранаБанкаДляРасчетов.Наименование
	|		ИНАЧЕ СтраныБанковДляРасчетовОрганизаций.Наименование КОНЕЦ КАК ОрганизацияСтранаБанкаДляРасчетов,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскийСчетОрганизации.СтранаБанкаДляРасчетов.Код
	|		ИНАЧЕ БанкиДляРасчетовОрганизаций.КодСтраны КОНЕЦ КАК ОрганизацияСтранаБанкаДляРасчетовКод,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскийСчетОрганизации.СтранаБанкаДляРасчетов.КодАльфа2
	|		ИНАЧЕ СтраныБанковДляРасчетовОрганизаций.КодАльфа2 КОНЕЦ КАК ОрганизацияСтранаБанкаДляРасчетовИСОКод,
	|	ВЫБОР КОГДА БанковскийСчетОрганизации.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскийСчетОрганизации.ТелефоныБанкаДляРасчетов
	|		ИНАЧЕ БанковскийСчетОрганизации.БанкДляРасчетов.Телефоны КОНЕЦ КАК ОрганизацияТелефоныБанкаДляРасчетов";
	
КонецФункции

Функция ТекстДанныеБанковскогоСчетаКонтрагента()
	
	Возврат "
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанка ТОГДА БанковскиеСчетаКонтрагентов.НаименованиеБанка
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Банк.Наименование КОНЕЦ КАК КонтрагентБанк,
	|	ЕСТЬNULL(БанковскиеСчетаКонтрагентов.Банк.БИКРКЦ.Наименование, """") КАК КонтрагентБанкНаименованиеРКЦ,
	|	БанковскиеСчетаКонтрагентов.НаименованиеБанкаМеждународное КАК КонтрагентБанкМеждународный,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанка ТОГДА БанковскиеСчетаКонтрагентов.ГородБанка
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Банк.Город КОНЕЦ КАК КонтрагентГородБанка,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанка ТОГДА БанковскиеСчетаКонтрагентов.ГородБанкаМеждународный
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Банк.ГородМеждународный КОНЕЦ КАК КонтрагентГородБанкаМеждународный,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанка ТОГДА БанковскиеСчетаКонтрагентов.БИКБанка
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Банк.Код КОНЕЦ КАК КонтрагентБИКБанка,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанка ТОГДА БанковскиеСчетаКонтрагентов.СВИФТБанка
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Банк.СВИФТБИК КОНЕЦ КАК КонтрагентСВИФТБанка,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанка ТОГДА БанковскиеСчетаКонтрагентов.КоррСчетБанка
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Банк.КоррСчет КОНЕЦ КАК КонтрагентКоррСчетБанка,
	|	БанковскиеСчетаКонтрагентов.СчетВБанкеДляРасчетов КАК КонтрагентСчетВБанкеДляРасчетов,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанка ТОГДА БанковскиеСчетаКонтрагентов.АдресБанка
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Банк.Адрес КОНЕЦ КАК КонтрагентАдресБанка,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанка ТОГДА БанковскиеСчетаКонтрагентов.АдресБанкаМеждународный
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Банк.АдресМеждународный КОНЕЦ КАК КонтрагентАдресБанкаМеждународный,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанка ТОГДА БанковскиеСчетаКонтрагентов.СтранаБанка.Наименование
	|		ИНАЧЕ СтраныБанковКонтрагентов.Наименование КОНЕЦ КАК КонтрагентСтранаБанка,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанка ТОГДА БанковскиеСчетаКонтрагентов.СтранаБанка.Код
	|		ИНАЧЕ БанкиКонтрагентов.КодСтраны КОНЕЦ КАК КонтрагентСтранаБанкаКод,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанка ТОГДА БанковскиеСчетаКонтрагентов.СтранаБанка.КодАльфа2
	|		ИНАЧЕ СтраныБанковКонтрагентов.КодАльфа2 КОНЕЦ КАК КонтрагентСтранаБанкаИСОКод,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанка ТОГДА БанковскиеСчетаКонтрагентов.ТелефоныБанка
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.Банк.Телефоны КОНЕЦ КАК КонтрагентТелефоныБанка,
	|	БанковскиеСчетаКонтрагентов.ЭтоIBAN КАК БанковскийСчетКонтрагентаIBAN,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскиеСчетаКонтрагентов.НаименованиеБанкаДляРасчетов
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.БанкДляРасчетов.Наименование КОНЕЦ КАК КонтрагентБанкДляРасчетов,
	|	ЕСТЬNULL(БанковскиеСчетаКонтрагентов.БанкДляРасчетов.БИКРКЦ.Наименование, """") КАК КонтрагентБанкДляРасчетовНаименованиеРКЦ,
	|	БанковскиеСчетаКонтрагентов.НаименованиеБанкаДляРасчетовМеждународное КАК КонтрагентБанкДляРасчетовМеждународный,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскиеСчетаКонтрагентов.ГородБанкаДляРасчетов
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.БанкДляРасчетов.Город КОНЕЦ КАК КонтрагентГородБанкаДляРасчетов,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскиеСчетаКонтрагентов.ГородБанкаДляРасчетовМеждународный
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.БанкДляРасчетов.ГородМеждународный КОНЕЦ КАК КонтрагентГородБанкаДляРасчетовМеждународный,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскиеСчетаКонтрагентов.БИКБанкаДляРасчетов
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.БанкДляРасчетов.Код КОНЕЦ КАК КонтрагентБИКБанкаДляРасчетов,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскиеСчетаКонтрагентов.СВИФТБанкаДляРасчетов
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.БанкДляРасчетов.СВИФТБИК КОНЕЦ КАК КонтрагентСВИФТБанкаДляРасчетов,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскиеСчетаКонтрагентов.КоррСчетБанкаДляРасчетов
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.БанкДляРасчетов.КоррСчет КОНЕЦ КАК КонтрагентКоррСчетБанкаДляРасчетов,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскиеСчетаКонтрагентов.АдресБанкаДляРасчетов
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.БанкДляРасчетов.Адрес КОНЕЦ КАК КонтрагентАдресБанкаДляРасчетов,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскиеСчетаКонтрагентов.АдресБанкаДляРасчетовМеждународный
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.БанкДляРасчетов.АдресМеждународный КОНЕЦ КАК КонтрагентАдресБанкаДляРасчетовМеждународный,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскиеСчетаКонтрагентов.СтранаБанкаДляРасчетов.Наименование
	|		ИНАЧЕ СтраныБанковДляРасчетовКонтрагентов.Наименование КОНЕЦ КАК КонтрагентСтранаБанкаДляРасчетов,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскиеСчетаКонтрагентов.СтранаБанкаДляРасчетов.Код
	|		ИНАЧЕ БанкиДляРасчетовКонтрагентов.КодСтраны КОНЕЦ КАК КонтрагентСтранаБанкаДляРасчетовКод,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскиеСчетаКонтрагентов.СтранаБанкаДляРасчетов.КодАльфа2
	|		ИНАЧЕ СтраныБанковДляРасчетовКонтрагентов.КодАльфа2 КОНЕЦ КАК КонтрагентСтранаБанкаДляРасчетовИСОКод,
	|	ВЫБОР КОГДА БанковскиеСчетаКонтрагентов.РучноеИзменениеРеквизитовБанкаДляРасчетов ТОГДА БанковскиеСчетаКонтрагентов.ТелефоныБанкаДляРасчетов
	|		ИНАЧЕ БанковскиеСчетаКонтрагентов.БанкДляРасчетов.Телефоны КОНЕЦ КАК КонтрагентТелефоныБанкаДляРасчетов";
	
КонецФункции

//++ Локализация
Функция ТекстДанныеНалогов()
	
	Возврат "
	|	ДанныеДокумента.ПеречислениеВБюджет       КАК ПеречислениеВБюджет,
	|	ДанныеДокумента.СтатусСоставителя         КАК СтатусСоставителя,
	|	
	|	ДанныеДокумента.КодБК                     КАК КодБК,
	|	ДанныеДокумента.КодОКАТО                  КАК КодОКАТО,
	|	ДанныеДокумента.ПоказательОснования       КАК ПоказательОснования,
	|	ДанныеДокумента.ПоказательПериода         КАК ПоказательПериода,
	|	ДанныеДокумента.ПоказательНомера          КАК ПоказательНомера,
	|	ДанныеДокумента.ПоказательДаты            КАК ПоказательДаты,
	|	ДанныеДокумента.КодВыплат                 КАК ПоказательТипа,
	|	ДанныеДокумента.ОчередностьПлатежа        КАК ОчередностьПлатежа,
	|	
	|	ДанныеДокумента.КодВидаДохода             КАК КодВидаДохода,
	|	ДанныеДокумента.КодВыплат                 КАК КодВыплат
	|";
	
КонецФункции
//-- Локализация

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

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

Процедура ВыгрузитьПлатежиВ1CClientBankExchange(ПараметрыВыгрузки, АдресХранилища)
	
	ТаблицаДокументов = ПараметрыВыгрузки.ТаблицаДокументов;
	
	КоличествоДокументов = ТаблицаДокументов.Количество();
	
	Если Не КоличествоДокументов Тогда
		Возврат;
	КонецЕсли;
	
	ТаблицаДокументов.Сортировать("Дата");
	НачПериода = ТаблицаДокументов[0].Дата;
	КонПериода = ТаблицаДокументов[КоличествоДокументов-1].Дата;
	
	БанковскиеСчетаВыгрузки = ПараметрыВыгрузки.БанковскийСчет;
	
	ПотокВыгрузки = Новый ТекстовыйДокумент();
	
	// Формируем заголовок
	ПотокВыгрузки.ДобавитьСтроку("1CClientBankExchange");
	
	ТекущаяДатаСеанса = ТекущаяДатаСеанса();
	Если ТекущаяДатаСеанса >= '20200601' Тогда
		ВерсияФормата = "1.03";
	ИначеЕсли ТекущаяДатаСеанса>= '20140101' Тогда
		ВерсияФормата = "1.02";
	Иначе
		ВерсияФормата = "1.01";
	КонецЕсли;
	
	ПотокВыгрузки.ДобавитьСтроку("ВерсияФормата=" + ВерсияФормата);
	ПотокВыгрузки.ДобавитьСтроку("Кодировка="     + ?(ЗначениеЗаполнено(ПараметрыВыгрузки.Кодировка), ПараметрыВыгрузки.Кодировка, "Windows"));
	ПотокВыгрузки.ДобавитьСтроку("Отправитель="   + Метаданные.Синоним);
	ПотокВыгрузки.ДобавитьСтроку("Получатель="    + СокрЛП(ПараметрыВыгрузки.Программа));
	ПотокВыгрузки.ДобавитьСтроку("ДатаСоздания="  + Формат(ТекущаяДатаСеанса(), "ДФ=дд.ММ.гггг"));
	ПотокВыгрузки.ДобавитьСтроку("ВремяСоздания=" + Формат(ТекущаяДатаСеанса(), "ДФ=ЧЧ:мм:сс"));
	ПотокВыгрузки.ДобавитьСтроку("ДатаНачала="    + Формат(НачПериода, "ДФ=дд.ММ.гггг"));
	ПотокВыгрузки.ДобавитьСтроку("ДатаКонца="     + Формат(КонПериода, "ДФ=дд.ММ.гггг"));
	
	Если ТипЗнч(БанковскиеСчетаВыгрузки) = Тип("ТаблицаЗначений") Тогда
		Для Каждого ОчереднойБанковскийСчет Из БанковскиеСчетаВыгрузки Цикл 
			ПотокВыгрузки.ДобавитьСтроку("РасчСчет=" + ОчереднойБанковскийСчет.НомерСчета);
		КонецЦикла;
	Иначе
		ПотокВыгрузки.ДобавитьСтроку("РасчСчет=" + БанковскиеСчетаВыгрузки.НомерСчета);
	КонецЕсли;
	
	ВидыДокументов = Новый Соответствие;
	ВидыДокументов.Вставить(Перечисления.ТипыПлатежныхДокументов.ПлатежноеПоручение, "Платежное поручение");
	ВидыДокументов.Вставить(Перечисления.ТипыПлатежныхДокументов.ПлатежноеТребование, "Платежное требование");
	
	Для каждого ВидДокумента Из ВидыДокументов Цикл
		Если ТаблицаДокументов.Найти(ВидДокумента.Ключ, "ВидДокумента") <> Неопределено Тогда
			ПотокВыгрузки.ДобавитьСтроку("Документ=" + ВидДокумента.Значение);
		КонецЕсли;
	КонецЦикла;
	
	// Выводим отмеченные секции документов
	Для каждого СтрокаСекции Из ТаблицаДокументов Цикл
		Буфер = СекцияДокумент(СтрокаСекции);
		КоличествоСрокСекции = СтрЧислоСтрок(Буфер);
		Для Сч = 1 По КоличествоСрокСекции Цикл
			ПотокВыгрузки.ДобавитьСтроку(СтрПолучитьСтроку(Буфер, Сч));
		КонецЦикла;
	КонецЦикла;
	
	ПотокВыгрузки.ДобавитьСтроку("КонецФайла");
	
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt");
	
	// Кодировку задаем текстом, иначе бывают проблемы на сервере в Linux и в связке англоязычная Windows + англоязычный SQL.
	Если ПараметрыВыгрузки.Кодировка = "DOS" Тогда
		Кодировка = "cp866";        // КодировкаТекста.OEM;
	Иначе
		Кодировка = "windows-1251"; // КодировкаТекста.ANSI;
	КонецЕсли;
	
	ПотокВыгрузки.Записать(ИмяВременногоФайла, Кодировка);
	
	ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла), АдресХранилища);
	
	Попытка
		УдалитьФайлы(ИмяВременногоФайла);
	Исключение
		ЗаписьЖурналаРегистрации(
			СтрШаблон("%1 %2", НСтр("ru = 'Выгрузка платежей в банк.'", ОбщегоНазначения.КодОсновногоЯзыка()),
				НСтр("ru = 'Удаление временного файла'", ОбщегоНазначения.КодОсновногоЯзыка())),
			УровеньЖурналаРегистрации.Ошибка,,,
			ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
	КонецПопытки;

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

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

Функция ПривестиЗначение(Значение)
	
	Если ТипЗнч(Значение) = Тип("Строка") Тогда
		Возврат СокрЛП(Значение);
		
	ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда
		Возврат Формат(Значение, "ЧРД=.; ЧРГ=' '; ЧГ=0");
		
	ИначеЕсли ТипЗнч(Значение) = Тип("Дата") Тогда
		Возврат Формат(Значение, "ДФ=дд.ММ.гггг");
		
	Иначе
		Возврат "";
	КонецЕсли;
	
КонецФункции

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

Процедура ЗаполнитьЗначениеЭкспорта(СтрокаЭкспорта, ВыборкаДляЭкспорта)
	
	Если ВыборкаДляЭкспорта.ВидДокумента = Перечисления.ТипыПлатежныхДокументов.ПлатежноеТребование Тогда
		Плательщик = "Контрагент";
		Получатель = "Организация";
	Иначе
		Плательщик = "Организация";
		Получатель = "Контрагент";
	КонецЕсли;
	
	СтрокаЭкспорта.Номер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ВыборкаДляЭкспорта.Номер, Истина, Истина);
	СтрокаЭкспорта.Дата           = Формат(ВыборкаДляЭкспорта.Дата, "ДФ=дд.ММ.гггг");
	СтрокаЭкспорта.Сумма          = Формат(ВыборкаДляЭкспорта.Сумма, "ЧДЦ=2; ЧРД=.; ЧРГ=' '; ЧГ=0");
	СтрокаЭкспорта.ПлательщикСчет = ВыборкаДляЭкспорта[Плательщик + "РасчСчет"];
	СтрокаЭкспорта.ПолучательСчет = ВыборкаДляЭкспорта[Получатель + "РасчСчет"];
	СтрокаЭкспорта.ВидПлатежа     = ВыборкаДляЭкспорта.ВидПлатежа;
	
	НепрямыеРасчетыУПлательщика   = ЗначениеЗаполнено(ВыборкаДляЭкспорта[Плательщик + "БанкДляРасчетов"]);
	НепрямыеРасчетыУПолучателя    = ЗначениеЗаполнено(ВыборкаДляЭкспорта[Получатель + "БанкДляРасчетов"]);
	
	// ВидОплаты
	Если ВыборкаДляЭкспорта.ВидДокумента = Перечисления.ТипыПлатежныхДокументов.ПлатежноеПоручение Тогда
		СтрокаЭкспорта.ВидОплаты  = "01";
	ИначеЕсли ВыборкаДляЭкспорта.ВидДокумента = Перечисления.ТипыПлатежныхДокументов.Аккредитив Тогда
		СтрокаЭкспорта.ВидОплаты  = "08";
	ИначеЕсли ВыборкаДляЭкспорта.ВидДокумента = Перечисления.ТипыПлатежныхДокументов.ИнкассовоеПоручение Тогда
		СтрокаЭкспорта.ВидОплаты  = "06";
	ИначеЕсли ВыборкаДляЭкспорта.ВидДокумента = Перечисления.ТипыПлатежныхДокументов.ПлатежноеТребование Тогда
		СтрокаЭкспорта.ВидОплаты  = "02";
	Иначе
		СтрокаЭкспорта.ВидОплаты  = "00";
	КонецЕсли;
	
	// Код - идентификатор платежа
	СтрокаЭкспорта.Код = ВыборкаДляЭкспорта.Код;
	
	// Плательщик1
	СтрокаЭкспорта.Плательщик1 = ВыборкаДляЭкспорта[Плательщик + "Наим"];
	
	// Плательщик, ПлательщикИНН
	Значение = ВыборкаДляЭкспорта[Плательщик + "ИНН"];
	СтрокаЭкспорта.ПлательщикИНН = Значение;
	СтрокаЭкспорта.Плательщик = "ИНН " + ВыборкаДляЭкспорта[Плательщик + "ИНН"] + " " + СтрокаЭкспорта.Плательщик1;
	
	// ПлательщикРасчСчет, ПлательщикБанк1, ПлательщикБанк2, ПлательщикБИК, ПлательщикКорсчет,Плательщик2, Плательщик3, Плательщик4.
	Если НепрямыеРасчетыУПлательщика Тогда
		СтрокаЭкспорта.Плательщик2        = ВыборкаДляЭкспорта[Плательщик + "РасчСчет"];
		СтрокаЭкспорта.Плательщик3        = ВыборкаДляЭкспорта[Плательщик + "Банк"];
		СтрокаЭкспорта.Плательщик4        = ВыборкаДляЭкспорта[Плательщик + "ГородБанка"];
		СтрокаЭкспорта.Плательщик         = СтрокаЭкспорта.Плательщик
			+ " р/с " + СтрокаЭкспорта.Плательщик2
			+ " в " + СтрокаЭкспорта.Плательщик3
			+ " " + СтрокаЭкспорта.Плательщик4;
		СтрокаЭкспорта.ПлательщикРасчСчет = ВыборкаДляЭкспорта[Плательщик + "КоррСчет"];
		СтрокаЭкспорта.ПлательщикБанк1    = ВыборкаДляЭкспорта[Плательщик + "БанкДляРасчетов"];
		СтрокаЭкспорта.ПлательщикБанк2    = ВыборкаДляЭкспорта[Плательщик + "ГородРЦБанка"];
		СтрокаЭкспорта.ПлательщикБИК      = ВыборкаДляЭкспорта[Плательщик + "БИКРЦБанка"];
		СтрокаЭкспорта.ПлательщикКорсчет  = ВыборкаДляЭкспорта[Плательщик + "КоррСчетРЦБанка"];
	Иначе
		СтрокаЭкспорта.ПлательщикРасчСчет = ВыборкаДляЭкспорта[Плательщик + "РасчСчет"];
		СтрокаЭкспорта.ПлательщикБанк1    = ВыборкаДляЭкспорта[Плательщик + "Банк"];
		СтрокаЭкспорта.ПлательщикБанк2    = ВыборкаДляЭкспорта[Плательщик + "ГородБанка"];
		СтрокаЭкспорта.ПлательщикБИК      = ВыборкаДляЭкспорта[Плательщик + "БИКБанка"];
		СтрокаЭкспорта.ПлательщикКорсчет  = ВыборкаДляЭкспорта[Плательщик + "КоррСчет"];
	КонецЕсли;
	
	// Получатель1
	ПолучательПозицияСимволВК = СтрНайти(ВыборкаДляЭкспорта[Получатель + "Наим"], Символы.ВК);
	Если ПолучательПозицияСимволВК = 0 Тогда
		СтрокаЭкспорта.Получатель1 = ВыборкаДляЭкспорта[Получатель + "Наим"];
	КонецЕсли;
	
	// Получатель, ПолучательИНН
	СтрокаЭкспорта.ПолучательИНН = ВыборкаДляЭкспорта[Получатель + "ИНН"];
	СтрокаЭкспорта.Получатель = "ИНН " + ВыборкаДляЭкспорта[Получатель + "ИНН"] + " " + СтрокаЭкспорта.Получатель1;
	
	// ПолучательРасчСчет, ПолучательБанк1, ПолучательБанк2, ПолучательБИК, ПолучательКорсчет, Получатель2, Получатель3, Получатель4.
	Если НепрямыеРасчетыУПолучателя Тогда
		СтрокаЭкспорта.Получатель2        = ВыборкаДляЭкспорта[Получатель + "РасчСчет"];
		СтрокаЭкспорта.Получатель3        = ВыборкаДляЭкспорта[Получатель + "Банк"];
		СтрокаЭкспорта.Получатель4        = ВыборкаДляЭкспорта[Получатель + "ГородБанка"];
		СтрокаЭкспорта.Получатель         = СтрокаЭкспорта.Получатель
			+ " р/с " + СтрокаЭкспорта.Получатель2
			+ " в " + СтрокаЭкспорта.Получатель3
			+ " " + СтрокаЭкспорта.Получатель4;
		СтрокаЭкспорта.ПолучательРасчСчет = ВыборкаДляЭкспорта[Получатель + "КоррСчет"];
		Если ЗначениеЗаполнено(ВыборкаДляЭкспорта[Получатель + "БанкДляРасчетовНаименованиеРКЦ"]) Тогда
			СтрокаЭкспорта.ПолучательБанк1 = ВыборкаДляЭкспорта[Получатель + "БанкДляРасчетовНаименованиеРКЦ"]
				+ "//" + ВыборкаДляЭкспорта[Получатель + "БанкДляРасчетов"];
		Иначе
			СтрокаЭкспорта.ПолучательБанк1 = ВыборкаДляЭкспорта[Получатель + "БанкДляРасчетов"];
		КонецЕсли;
		СтрокаЭкспорта.ПолучательБанк2    = ВыборкаДляЭкспорта[Получатель + "ГородРЦБанка"];
		СтрокаЭкспорта.ПолучательБИК      = ВыборкаДляЭкспорта[Получатель + "БИКРЦБанка"];
		СтрокаЭкспорта.ПолучательКорсчет  = ВыборкаДляЭкспорта[Получатель + "КоррСчетРЦБанка"];
	Иначе
		СтрокаЭкспорта.ПолучательРасчСчет = ВыборкаДляЭкспорта[Получатель + "РасчСчет"];
		Если ЗначениеЗаполнено(ВыборкаДляЭкспорта[Получатель + "БанкНаименованиеРКЦ"]) Тогда
			СтрокаЭкспорта.ПолучательБанк1 = ВыборкаДляЭкспорта[Получатель + "БанкНаименованиеРКЦ"]
				+ "//" + ВыборкаДляЭкспорта[Получатель + "Банк"];
		Иначе
			СтрокаЭкспорта.ПолучательБанк1 = ВыборкаДляЭкспорта[Получатель + "Банк"];
		КонецЕсли;
		СтрокаЭкспорта.ПолучательБанк2    = ВыборкаДляЭкспорта[Получатель + "ГородБанка"];
		СтрокаЭкспорта.ПолучательБИК      = ВыборкаДляЭкспорта[Получатель + "БИКБанка"];
		СтрокаЭкспорта.ПолучательКорсчет  = ВыборкаДляЭкспорта[Получатель + "КоррСчет"];
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПлательщикКПП) Тогда
		СтрокаЭкспорта.ПлательщикКПП = ВыборкаДляЭкспорта.КПППлательщика;
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПолучательКПП) Тогда
		СтрокаЭкспорта.ПолучательКПП = ВыборкаДляЭкспорта.КПППолучателя;
	КонецЕсли;
	
	// СтатусСоставителя, ПлательщикКПП ПолучательКПП ПоказательКБК ОКАТО/ОКТМО ПоказательОснования ПоказательПериода
	// ПоказательНомера ПоказательДаты ПоказательТипа Код.
	Если ВыборкаДляЭкспорта.ПеречислениеВБюджет Тогда
		СтрокаЭкспорта.СтатусСоставителя = ВыборкаДляЭкспорта.СтатусСоставителя;
		
		Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПлательщикКПП) Тогда
			СтрокаЭкспорта.ПлательщикКПП = "0";
		КонецЕсли;
		
		Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПолучательКПП) Тогда
			СтрокаЭкспорта.ПолучательКПП = "0";
		КонецЕсли;
		
		Если ПустаяСтрока(ВыборкаДляЭкспорта.КодБК) Тогда
			СтрокаЭкспорта.ПоказательКБК = "0";
		Иначе
			СтрокаЭкспорта.ПоказательКБК = ВыборкаДляЭкспорта.КодБК;
		КонецЕсли;
		
		Если ПустаяСтрока(ВыборкаДляЭкспорта.КодОКАТО) Тогда
			СтрокаЭкспорта.ОКАТО = "0";
		Иначе
			СтрокаЭкспорта.ОКАТО = СокрЛП(ВыборкаДляЭкспорта.КодОКАТО);
		КонецЕсли;
		
		Если ПустаяСтрока(ВыборкаДляЭкспорта.ПоказательОснования) Тогда
			СтрокаЭкспорта.ПоказательОснования = "0";
		Иначе
			СтрокаЭкспорта.ПоказательОснования = ВыборкаДляЭкспорта.ПоказательОснования;
		КонецЕсли;
		
		Если ПустаяСтрока(ВыборкаДляЭкспорта.ПоказательПериода) ИЛИ (ВыборкаДляЭкспорта.ПоказательПериода = "  .  .    ") Тогда
			СтрокаЭкспорта.ПоказательПериода = "0";
		Иначе
			СтрокаЭкспорта.ПоказательПериода = ВыборкаДляЭкспорта.ПоказательПериода;
		КонецЕсли;
		
		Если ПустаяСтрока(ВыборкаДляЭкспорта.ПоказательНомера) Тогда
			СтрокаЭкспорта.ПоказательНомера = "0";
		Иначе
			СтрокаЭкспорта.ПоказательНомера = ВыборкаДляЭкспорта.ПоказательНомера;
		КонецЕсли;
		
		Если НЕ ЗначениеЗаполнено(ВыборкаДляЭкспорта.ПоказательДаты) Тогда
			СтрокаЭкспорта.ПоказательДаты = "0";
		Иначе
			СтрокаЭкспорта.ПоказательДаты = ВыборкаДляЭкспорта.ПоказательДаты;
		КонецЕсли;
	КонецЕсли;
	
	// Код выплат
	СтрокаЭкспорта.ПоказательТипа = "" + ВыборкаДляЭкспорта.КодВыплат;
	
	// Код вида дохода
	СтрокаЭкспорта.КодНазПлатежа = "" + ВыборкаДляЭкспорта.КодВидаДохода;
	
	// Очередность
	СтрокаЭкспорта.Очередность = "" + ВыборкаДляЭкспорта.ОчередностьПлатежа;
	
	// НазначениеПлатежа, НазначениеПлатежа1 НазначениеПлатежа2 НазначениеПлатежа3 НазначениеПлатежа4 НазначениеПлатежа5 НазначениеПлатежа6.
	СтрокаЭкспорта.НазначениеПлатежа = СтрЗаменить(ВыборкаДляЭкспорта.НазначениеПлатежа, Символы.ПС + Символы.ВК, " ");
	СтрокаЭкспорта.НазначениеПлатежа = СтрЗаменить(
		СтрЗаменить(СтрЗаменить(СтрокаЭкспорта.НазначениеПлатежа, Символы.ПС, " "), Символы.ВК, " "), Символы.ПФ, " ");
	КоличествоСтрокНП = СтрЧислоСтрок(ВыборкаДляЭкспорта.НазначениеПлатежа);
	
	Если КоличествоСтрокНП > 6 Тогда
		КоличествоСтрокНП = 6;
	КонецЕсли;
	
	Для Сч = 1 По КоличествоСтрокНП Цикл
		СтрокаЭкспорта["НазначениеПлатежа" + Сч] = СтрПолучитьСтроку(ВыборкаДляЭкспорта.НазначениеПлатежа, Сч);
	КонецЦикла;
	
	Для Сч = (КоличествоСтрокНП + 1) По 6 Цикл
		СтрокаЭкспорта["НазначениеПлатежа" + Сч] = "";
	КонецЦикла;
	
КонецПроцедуры

Функция СтруктураЭкспорта()
	
	СтруктураЭкспорта = Новый Структура;
	
	СтруктураЭкспорта.Вставить("Выгружать",              ""); // "_"
	СтруктураЭкспорта.Вставить("Готовность",             ""); // "Готовность"
	
	СтруктураЭкспорта.Вставить("НомерДок",               ""); // "№ Документа"
	СтруктураЭкспорта.Вставить("Номер",                  ""); // "Номер"
	СтруктураЭкспорта.Вставить("Дата",                   ""); // "Дата"
	СтруктураЭкспорта.Вставить("Операция",               ""); // "Операция"
	СтруктураЭкспорта.Вставить("СчетОрганизации",        ""); // "Эл. Р/с организации"
	СтруктураЭкспорта.Вставить("НомерСчетаОрганизации",  ""); // "Р/с организации"
	СтруктураЭкспорта.Вставить("Сумма",                  ""); // "Сумма"
	
	СтруктураЭкспорта.Вставить("Контрагент",             ""); // "Контрагент"
	СтруктураЭкспорта.Вставить("СчетКонтрагента",        ""); // "Р/с контрагента"
	СтруктураЭкспорта.Вставить("НомерСчетаКонтрагента",  ""); // "Эл. Р/с контрагента"
	
	СтруктураЭкспорта.Вставить("КвитанцияДата",          ""); // "Дата форм. квитанции"
	СтруктураЭкспорта.Вставить("КвитанцияВремя",         ""); // "Время форм. квитанции"
	СтруктураЭкспорта.Вставить("КвитанцияСодержание",    ""); // "Содержание квитанции"
	
	СтруктураЭкспорта.Вставить("ПлательщикСчет",         ""); // "Расчетный счет плательщика"
	СтруктураЭкспорта.Вставить("Плательщик",             ""); // "Плательщик"
	СтруктураЭкспорта.Вставить("ПлательщикИНН",          ""); // "ИНН плательщика"
	СтруктураЭкспорта.Вставить("Плательщик1",            ""); // "Наименование плательщика"
	СтруктураЭкспорта.Вставить("Плательщик2",            ""); // "Расчетный счет плательщика"
	СтруктураЭкспорта.Вставить("Плательщик3",            ""); // "Банк плательщика"
	СтруктураЭкспорта.Вставить("Плательщик4",            ""); // "Город банка плательщика"
	СтруктураЭкспорта.Вставить("ПлательщикРасчСчет",     ""); // "Корсчет банка плательщика"
	СтруктураЭкспорта.Вставить("ПлательщикБанк1",        ""); // "РЦ банка плательщика"
	СтруктураЭкспорта.Вставить("ПлательщикБанк2",        ""); // "Город РЦ банка плательщика"
	СтруктураЭкспорта.Вставить("ПлательщикБИК",          ""); // "БИК РЦ банка плательщика"
	СтруктураЭкспорта.Вставить("ПлательщикКорсчет",      ""); // "Корсчет РЦ банка плат."
	
	СтруктураЭкспорта.Вставить("ПолучательСчет",         ""); // "Расчетный счет получателя"
	СтруктураЭкспорта.Вставить("Получатель",             ""); // "Получатель"
	СтруктураЭкспорта.Вставить("ПолучательИНН",          ""); // "ИНН получателя"
	СтруктураЭкспорта.Вставить("Получатель1",            ""); // "Наименование получателя"
	СтруктураЭкспорта.Вставить("Получатель2",            ""); // "Расчетный счет получателя"
	СтруктураЭкспорта.Вставить("Получатель3",            ""); // "Банк получателя"
	СтруктураЭкспорта.Вставить("Получатель4",            ""); // "Город банка получателя"
	СтруктураЭкспорта.Вставить("ПолучательРасчСчет",     ""); // "Корсчет банка получателя"
	СтруктураЭкспорта.Вставить("ПолучательБанк1",        ""); // "РЦ банка получателя"
	СтруктураЭкспорта.Вставить("ПолучательБанк2",        ""); // "Город РЦ банка получателя"
	СтруктураЭкспорта.Вставить("ПолучательБИК",          ""); // "БИК РЦ банка получателя"
	СтруктураЭкспорта.Вставить("ПолучательКорсчет",      ""); // "Корсчет РЦ банка пол."
	
	СтруктураЭкспорта.Вставить("ВидПлатежа",             ""); // "Вид платежа"
	СтруктураЭкспорта.Вставить("КодНазПлатежа",          ""); // "Код вида дохода"
	СтруктураЭкспорта.Вставить("ВидОплаты",              ""); // "Вид оплаты"
	СтруктураЭкспорта.Вставить("ПеречислениеВБюджет",    ""); // "Перечисление в бюджет",
	СтруктураЭкспорта.Вставить("ВидПеречисленияВБюджет", ""); // "Вид перечисления в бюджет",
	
	СтруктураЭкспорта.Вставить("СтатусСоставителя",      ""); // "Статус составителя"
	СтруктураЭкспорта.Вставить("ПлательщикКПП",          ""); // "КПП плательщика"
	СтруктураЭкспорта.Вставить("ПолучательКПП",          ""); // "КПП получателя"
	СтруктураЭкспорта.Вставить("ПоказательКБК",          ""); // "Показатель КБК"
	СтруктураЭкспорта.Вставить("ОКАТО",                  ""); // "ОКАТО/ОКТМО"
	СтруктураЭкспорта.Вставить("ПоказательОснования",    ""); // "Показатель основания"
	СтруктураЭкспорта.Вставить("ПоказательПериода",      ""); // "Показатель периода"
	СтруктураЭкспорта.Вставить("ПоказательНомера",       ""); // "Показатель номера документа"
	СтруктураЭкспорта.Вставить("ПоказательДаты",         ""); // "Показатель даты документа"
	СтруктураЭкспорта.Вставить("ПоказательТипа",         ""); // "Показатель типа платежа"
	
	СтруктураЭкспорта.Вставить("СрокПлатежа",            ""); // "Срок действия аккредитива"
	СтруктураЭкспорта.Вставить("Очередность",            ""); // "Очередность платежа"
	
	СтруктураЭкспорта.Вставить("НазначениеПлатежа",      ""); // "Назначение платежа"
	СтруктураЭкспорта.Вставить("НазначениеПлатежа1",     ""); // "Назначение платежа, стр. 1"
	СтруктураЭкспорта.Вставить("НазначениеПлатежа2",     ""); // "Назначение платежа, стр. 2"
	СтруктураЭкспорта.Вставить("НазначениеПлатежа3",     ""); // "Назначение платежа, стр. 3"
	СтруктураЭкспорта.Вставить("НазначениеПлатежа4",     ""); // "Назначение платежа, стр. 4"
	СтруктураЭкспорта.Вставить("НазначениеПлатежа5",     ""); // "Назначение платежа, стр. 5"
	СтруктураЭкспорта.Вставить("НазначениеПлатежа6",     ""); // "Назначение платежа, стр. 6"
	
	СтруктураЭкспорта.Вставить("СрокАкцепта",            ""); // "Срок акцепта"
	СтруктураЭкспорта.Вставить("ВидАккредитива",         ""); // "Вид аккредитива"
	СтруктураЭкспорта.Вставить("УсловиеОплаты1",         ""); // "Условие оплаты, стр. 1"
	СтруктураЭкспорта.Вставить("УсловиеОплаты2",         ""); // "Условие оплаты, стр. 2"
	СтруктураЭкспорта.Вставить("УсловиеОплаты3",         ""); // "Условие оплаты, стр. 3"
	СтруктураЭкспорта.Вставить("ПлатежПоПредст",         ""); // "Платеж по представлению"
	СтруктураЭкспорта.Вставить("ДополнУсловия",          ""); // "Дополнительные условия"
	СтруктураЭкспорта.Вставить("НомерСчетаПоставщика",   ""); // "№ счета поставщика"
	СтруктураЭкспорта.Вставить("ДатаОтсылкиДок",         ""); // "Дата отсылки документов"
	
	СтруктураЭкспорта.Вставить("Документ",               ""); // "Источник"
	СтруктураЭкспорта.Вставить("СекцияДокумент",         ""); // "Выгрузка"
	
	СтруктураЭкспорта.Вставить("ОписаниеОшибок",         ""); // "Замечания"
	СтруктураЭкспорта.Вставить("ТипДокумента",           ""); // "Тип пл. документа"
	
	СтруктураЭкспорта.Вставить("Код",                    ""); // "Уникальный идентификатор платежа"
	
	Возврат СтруктураЭкспорта;
	
КонецФункции

Процедура ВыгрузитьПлатежиВISO20022(ПараметрыВыгрузки, АдресХранилища)
	
	ТаблицаДокументов = ПараметрыВыгрузки.ТаблицаДокументов;
	
	КоличествоДокументов = ТаблицаДокументов.Количество();
	
	Если Не КоличествоДокументов Тогда
		Возврат;
	КонецЕсли;
	
	ТаблицаДокументов.Сортировать("Дата");
	ТекстОшибки = "";
	
	НазванияТипов = НазванияТиповISO20022(ПараметрыВыгрузки.ВерсияФорматаВыгрузки);
	Фабрика = ДенежныеСредстваПовтИсп.ФабрикаISO20022(ПараметрыВыгрузки.ВерсияФорматаВыгрузки);
	ПространствоИмен = "urn:iso:std:iso:20022:tech:xsd:" + ПараметрыВыгрузки.ВерсияФорматаВыгрузки;

	СообщениеPain001 = ОбъектТипаCML(Фабрика, "Document", ПространствоИмен);
	СообщениеЗаголовок = ОбъектТипаCML(Фабрика, НазванияТипов.CustomerCreditTransferInitiation, ПространствоИмен);
	СекцияЗаголовокГруппы = ОбъектТипаCML(Фабрика, НазванияТипов.GroupHeader, ПространствоИмен);
	ИдДокумента = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокГруппы, "MsgId", ИдДокумента, Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокГруппы, "CreDtTm", ТекущаяДатаСеанса(), Истина, ТекстОшибки);
	КоличествоДокументов = Строка(ТаблицаДокументов.Количество());
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокГруппы, "NbOfTxs", КоличествоДокументов, Истина, ТекстОшибки);
	ОбщаяСумма = ТаблицаДокументов.Итог("Сумма");
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокГруппы, "CtrlSum", ОбщаяСумма, Истина, ТекстОшибки);
	ИдентификацияИнициатора = ОбъектТипаCML(Фабрика, НазванияТипов.PartyIdentification, ПространствоИмен);
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокГруппы, "InitgPty", ИдентификацияИнициатора, Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СообщениеЗаголовок, "GrpHdr", СекцияЗаголовокГруппы, Истина, ТекстОшибки);
	Для Каждого Документ Из ТаблицаДокументов Цикл
		ВыгрузитьДокументВISO20022(Фабрика, НазванияТипов, ПространствоИмен, СообщениеЗаголовок, Документ, ТекстОшибки);
	КонецЦикла;
	
	ЗаполнитьСвойствоXDTO(СообщениеPain001, "CstmrCdtTrfInitn", СообщениеЗаголовок, Истина, ТекстОшибки);

	СообщениеPain001.Проверить();
	
	Если ЗначениеЗаполнено(ТекстОшибки) Тогда
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;
		
	ДвоичныеДанные = ДвоичныеДанныеИзXDTO(Фабрика, СообщениеPain001);
	ПоместитьВоВременноеХранилище(ДвоичныеДанные, АдресХранилища);
	
КонецПроцедуры

Функция НазванияТиповISO20022(ВерсияФорматаВыгрузки)
	
	ВозвращаемоеЗначение = Новый Структура;
	Если ВерсияФорматаВыгрузки = "pain.001.001.03" Тогда
		ВозвращаемоеЗначение.Вставить("CustomerCreditTransferInitiation", "CustomerCreditTransferInitiationV03");
		ВозвращаемоеЗначение.Вставить("GroupHeader", "GroupHeader32");
		ВозвращаемоеЗначение.Вставить("PartyIdentification", "PartyIdentification32");
		ВозвращаемоеЗначение.Вставить("PaymentInstruction", "PaymentInstructionInformation3");
		ВозвращаемоеЗначение.Вставить("Party", "Party6Choice");
		ВозвращаемоеЗначение.Вставить("OrganisationIdentification", "OrganisationIdentification4");
		ВозвращаемоеЗначение.Вставить("CashAccount", "CashAccount16");
		ВозвращаемоеЗначение.Вставить("BranchAndFinancialInstitutionIdentification", "BranchAndFinancialInstitutionIdentification4");
		ВозвращаемоеЗначение.Вставить("FinancialInstitutionIdentification", "FinancialInstitutionIdentification7");
		ВозвращаемоеЗначение.Вставить("BIC", "BIC");
		ВозвращаемоеЗначение.Вставить("CreditTransferTransaction", "CreditTransferTransactionInformation10");
		ВозвращаемоеЗначение.Вставить("RemittanceInformation", "RemittanceInformation5");
	ИначеЕсли ВерсияФорматаВыгрузки = "pain.001.001.04" Тогда
		ВозвращаемоеЗначение.Вставить("CustomerCreditTransferInitiation", "CustomerCreditTransferInitiationV04");
		ВозвращаемоеЗначение.Вставить("GroupHeader", "GroupHeader48");
		ВозвращаемоеЗначение.Вставить("PartyIdentification", "PartyIdentification43");
		ВозвращаемоеЗначение.Вставить("PaymentInstruction", "PaymentInstruction6");
		ВозвращаемоеЗначение.Вставить("Party", "Party11Choice");
		ВозвращаемоеЗначение.Вставить("OrganisationIdentification", "OrganisationIdentification8");
		ВозвращаемоеЗначение.Вставить("CashAccount", "CashAccount24");
		ВозвращаемоеЗначение.Вставить("BranchAndFinancialInstitutionIdentification", "BranchAndFinancialInstitutionIdentification5");
		ВозвращаемоеЗначение.Вставить("FinancialInstitutionIdentification", "FinancialInstitutionIdentification8");
		ВозвращаемоеЗначение.Вставить("BIC", "BICFI");
		ВозвращаемоеЗначение.Вставить("CreditTransferTransaction", "CreditTransferTransaction1");
		ВозвращаемоеЗначение.Вставить("RemittanceInformation", "RemittanceInformation7");
	ИначеЕсли ВерсияФорматаВыгрузки = "pain.001.001.05" Тогда
		ВозвращаемоеЗначение.Вставить("CustomerCreditTransferInitiation", "CustomerCreditTransferInitiationV05");
		ВозвращаемоеЗначение.Вставить("GroupHeader", "GroupHeader48");
		ВозвращаемоеЗначение.Вставить("PartyIdentification", "PartyIdentification43");
		ВозвращаемоеЗначение.Вставить("PaymentInstruction", "PaymentInstruction9");
		ВозвращаемоеЗначение.Вставить("Party", "Party11Choice");
		ВозвращаемоеЗначение.Вставить("OrganisationIdentification", "OrganisationIdentification8");
		ВозвращаемоеЗначение.Вставить("CashAccount", "CashAccount24");
		ВозвращаемоеЗначение.Вставить("BranchAndFinancialInstitutionIdentification", "BranchAndFinancialInstitutionIdentification5");
		ВозвращаемоеЗначение.Вставить("FinancialInstitutionIdentification", "FinancialInstitutionIdentification8");
		ВозвращаемоеЗначение.Вставить("BIC", "BICFI");
		ВозвращаемоеЗначение.Вставить("CreditTransferTransaction", "CreditTransferTransaction6");
		ВозвращаемоеЗначение.Вставить("RemittanceInformation", "RemittanceInformation7");
	Иначе
		ВызватьИсключение НСтр("ru = 'Неподдерживаемая версия формата выгрузки'")
	КонецЕсли;
	
	Возврат ВозвращаемоеЗначение;
	
КонецФункции

Процедура ВыгрузитьДокументВISO20022(
	Фабрика,
	НазванияТипов,
	ПространствоИмен,
	СообщениеЗаголовок,
	Документ,
	ТекстОшибки)
	
	ИдентификаторОперации = СтрЗаменить(Строка(Документ.Ссылка.УникальныйИдентификатор()), "-", "");
	СекцияЗаголовокПлатежа = ОбъектТипаCML(Фабрика, НазванияТипов.PaymentInstruction, ПространствоИмен);
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокПлатежа, "PmtInfId", ИдентификаторОперации, Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокПлатежа, "PmtMtd", "TRF", Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокПлатежа, "NbOfTxs", "1", Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокПлатежа, "CtrlSum", Документ.Сумма, Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокПлатежа, "ReqdExctnDt", Документ.Дата, Истина, ТекстОшибки);
	
	СекцияТранзакция = ОбъектТипаCML(Фабрика, НазванияТипов.CreditTransferTransaction, ПространствоИмен);
	ВыгрузитьДебитораВISO20022(Фабрика, НазванияТипов, ПространствоИмен, СекцияЗаголовокПлатежа, Документ, ТекстОшибки);
	ВыгрузитьИнформациюОКомиссииВISO20022(СекцияЗаголовокПлатежа, Документ, ТекстОшибки);
	ВыгрузитьИдентификаторыДокумента(Фабрика, НазванияТипов, ПространствоИмен, СекцияТранзакция, Документ, ТекстОшибки);

	СекцияСумма = ОбъектТипаCML(Фабрика, "AmountType3Choice", ПространствоИмен);
	СекцияСуммаЗначение = ОбъектТипаCML(Фабрика, "ActiveOrHistoricCurrencyAndAmount", ПространствоИмен);
	ЗаполнитьСвойствоXDTO(СекцияСуммаЗначение, "__content", Документ.Сумма, Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияСуммаЗначение, "Ccy", Документ.ISOКодВалюты, Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияСумма, "InstdAmt", СекцияСуммаЗначение, Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияТранзакция, "Amt", СекцияСумма, Истина, ТекстОшибки);
	
	ВыгрузитьКредитораISO20022(Фабрика, НазванияТипов, ПространствоИмен, СекцияТранзакция, Документ, ТекстОшибки);
	Если ЗначениеЗаполнено(Документ.ОчередностьПлатежа) Тогда
		СекцияОчередность = ОбъектТипаCML(Фабрика, "Purpose2Choice", ПространствоИмен);
		ЗаполнитьСвойствоXDTO(СекцияОчередность, "Cd", Строка(Документ.ОчередностьПлатежа), Истина, ТекстОшибки);
		ЗаполнитьСвойствоXDTO(СекцияТранзакция, "Purp", СекцияОчередность, , ТекстОшибки);
	КонецЕсли;
	
	ВыгрузитьКодДокументаISO20022(Фабрика, ПространствоИмен, СекцияТранзакция, Документ, ТекстОшибки);
	ВыгрузитьКодВидаДоходаISO20022(Фабрика, ПространствоИмен, СекцияТранзакция, Документ, ТекстОшибки);
	ВыгрузитьНалоговыеРеквизитыISO20022(Фабрика, ПространствоИмен, СекцияТранзакция, Документ, ТекстОшибки);
	
	СекцияИнформацияОПлатеже = ОбъектТипаCML(Фабрика, НазванияТипов.RemittanceInformation, ПространствоИмен);
	МассивСтрокНазначенияПлатежа = МассивСтрокНазначенияПлатежаДляISO(Документ.НазначениеПлатежа);
	Для Каждого Строка Из МассивСтрокНазначенияПлатежа Цикл
		Если НЕ ПустаяСтрока(Строка) Тогда
			СекцияИнформацияОПлатеже.Ustrd.Добавить(Строка);
		КонецЕсли;
	КонецЦикла;
	ЗаполнитьСвойствоXDTO(СекцияТранзакция, "RmtInf", СекцияИнформацияОПлатеже, , ТекстОшибки);
	
	СекцияЗаголовокПлатежа.CdtTrfTxInf.Добавить(СекцияТранзакция);
	СообщениеЗаголовок.PmtInf.Добавить(СекцияЗаголовокПлатежа);
	
КонецПроцедуры

Процедура ВыгрузитьИдентификаторыДокумента(
	Фабрика,
	НазванияТипов,
	ПространствоИмен,
	СекцияТранзакция,
	Документ,
	ТекстОшибки)

	СекцияИДПлатежа = ОбъектТипаCML(Фабрика, "PaymentIdentification1", ПространствоИмен);
	ИдентификаторДокумента = СтрЗаменить(Строка(Документ.Ссылка.УникальныйИдентификатор()), "-", "");
	ЗаполнитьСвойствоXDTO(СекцияИДПлатежа, "InstrId", ИдентификаторДокумента, Истина, ТекстОшибки);
	НомерДокумента = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Документ.Номер, Истина, Истина);
	ЗаполнитьСвойствоXDTO(СекцияИДПлатежа, "EndToEndId", НомерДокумента, Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияТранзакция, "PmtId", СекцияИДПлатежа, Истина, ТекстОшибки);
	
КонецПроцедуры

Процедура ВыгрузитьКодДокументаISO20022(Фабрика, ПространствоИмен, СекцияТранзакция, Документ, ТекстОшибки)
	
	Если ЗначениеЗаполнено(Документ.Код) Тогда
		СекцияРегулятора = ОбъектТипаCML(Фабрика, "RegulatoryReporting3", ПространствоИмен);
		СекцияДеталиРегулятора = ОбъектТипаCML(Фабрика, "StructuredRegulatoryReporting3", ПространствоИмен);
		ЗаполнитьСвойствоXDTO(СекцияДеталиРегулятора, "Cd", Документ.Код, , ТекстОшибки);
		СекцияРегулятора.Dtls.Добавить(СекцияДеталиРегулятора);
		СекцияТранзакция.RgltryRptg.Добавить(СекцияРегулятора);
	КонецЕсли;
	
КонецПроцедуры

Процедура ВыгрузитьНалоговыеРеквизитыISO20022(Фабрика, ПространствоИмен, СекцияТранзакция, Документ, ТекстОшибки)
	
	Если Документ.ПеречислениеВБюджет Тогда
		СекцияНалог = ОбъектТипаCML(Фабрика, "TaxInformation3", ПространствоИмен);
		КПППолучателя = ?(ЗначениеЗаполнено(Документ.КПППолучателя), Документ.КПППолучателя, "0");
		СекцияКредитор = ОбъектТипаCML(Фабрика, "TaxParty1", ПространствоИмен);
		ЗаполнитьСвойствоXDTO(СекцияКредитор, "TaxTp", КПППолучателя, , ТекстОшибки);
		ЗаполнитьСвойствоXDTO(СекцияНалог, "Cdtr", СекцияКредитор, , ТекстОшибки);
		КПППлательщика = ?(ЗначениеЗаполнено(Документ.КПППлательщика), Документ.КПППлательщика, "0");
		СекцияДебитор = ОбъектТипаCML(Фабрика, "TaxParty2", ПространствоИмен);
		ЗаполнитьСвойствоXDTO(СекцияДебитор, "TaxTp", КПППлательщика, , ТекстОшибки);
		ЗаполнитьСвойствоXDTO(СекцияНалог, "Dbtr", СекцияДебитор, , ТекстОшибки);
		ЗаполнитьСвойствоXDTO(СекцияНалог, "AdmstnZn", Документ.КодОКАТО, , ТекстОшибки);
		ЗаполнитьСвойствоXDTO(СекцияНалог, "RefNb", Документ.ПоказательНомера, , ТекстОшибки);
		Если ЗначениеЗаполнено(Документ.ПоказательДаты) И Документ.ПоказательДаты <> "0" Тогда
			ЗаполнитьСвойствоXDTO(СекцияНалог, "Dt", ДатаИзСтрокиРФ(Документ.ПоказательДаты), , ТекстОшибки);
		КонецЕсли;
		ВыгрузитьРасшифровкуНалогаISO20022(СекцияНалог, Документ, Фабрика, ПространствоИмен, ТекстОшибки);
		ЗаполнитьСвойствоXDTO(СекцияТранзакция, "Tax", СекцияНалог, , ТекстОшибки);
	КонецЕсли;
	
КонецПроцедуры

Процедура ВыгрузитьРасшифровкуНалогаISO20022(СекцияНалог, Документ, Фабрика, ПространствоИмен, ТекстОшибки)
	
	СекцияРасшифровкаНалога = ОбъектТипаCML(Фабрика, "TaxRecord1", ПространствоИмен);
	ЗаполнитьСвойствоXDTO(СекцияРасшифровкаНалога, "Tp", Документ.КодВыплат, , ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияРасшифровкаНалога, "Ctgy", Документ.ПоказательОснования, , ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияРасшифровкаНалога, "DbtrSts", Документ.СтатусСоставителя, , ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияРасшифровкаНалога, "CtgyDtls", Документ.КодБК, , ТекстОшибки);

	Если ЗначениеЗаполнено(Документ.ПоказательПериода) Тогда
		Если СтрНайти(Документ.ПоказательПериода, ".") > 0 Тогда
			СекцияПериод = ОбъектТипаCML(Фабрика, "TaxPeriod1", ПространствоИмен);
			Год = Число(Сред(Документ.ПоказательПериода, 7));
			НачалоГода = Дата(Год, 1, 1);
			ЗаполнитьСвойствоXDTO(СекцияПериод, "Yr", НачалоГода, , ТекстОшибки);
			Период = Сред(Документ.ПоказательПериода, 1, 2);
			Если Период = "МС" Тогда
				Месяц = Сред(Документ.ПоказательПериода, 4, 2);
				ЗаполнитьСвойствоXDTO(СекцияПериод, "Tp", "MM" + Месяц, , ТекстОшибки);
			ИначеЕсли Период = "КВ" Тогда
				Квартал = Сред(Документ.ПоказательПериода, 5, 1);
				ЗаполнитьСвойствоXDTO(СекцияПериод, "Tp", "QTR" + Квартал, , ТекстОшибки);
			ИначеЕсли Период = "ПЛ" Тогда
				Полугодие = Сред(Документ.ПоказательПериода, 5, 1);
				ЗаполнитьСвойствоXDTO(СекцияПериод, "Tp", "HLF" + Полугодие, , ТекстОшибки);
			ИначеЕсли Период = "ГД" Тогда
				// при годовом не указывается
			Иначе // указана точная дата
				СекцияДата = ОбъектТипаCML(Фабрика, "DatePeriodDetails", ПространствоИмен);
				Дата = ДатаИзСтрокиРФ(Документ.ПоказательПериода);
				ЗаполнитьСвойствоXDTO(СекцияДата, "FrDt", Дата, , ТекстОшибки);
				ЗаполнитьСвойствоXDTO(СекцияДата, "ToDt", Дата, , ТекстОшибки);
				ЗаполнитьСвойствоXDTO(СекцияПериод, "FrToDt", СекцияДата, , ТекстОшибки);
			КонецЕсли;
			ЗаполнитьСвойствоXDTO(СекцияРасшифровкаНалога, "Prd", СекцияПериод, , ТекстОшибки);
		ИначеЕсли Документ.ПоказательПериода <> "0" Тогда // для таможенных платежей
			СекцияПолучатель = ОбъектТипаCML(Фабрика, "TaxParty1", ПространствоИмен);
			ЗаполнитьСвойствоXDTO(СекцияПолучатель, "RegnId", Документ.ПоказательПериода, , ТекстОшибки);
			ЗаполнитьСвойствоXDTO(СекцияНалог, "Cdtr", СекцияПолучатель, , ТекстОшибки);
		КонецЕсли;
	КонецЕсли;
	
	СекцияНалог.Rcrd.Добавить(СекцияРасшифровкаНалога);
		
КонецПроцедуры

Функция ДатаИзСтрокиРФ(ДатаСтрокой)
	
	Возврат Дата(Число(Сред(ДатаСтрокой, 7)), Число(Сред(ДатаСтрокой, 4, 2)), Число(Сред(ДатаСтрокой, 1, 2)));
	
КонецФункции

Процедура ВыгрузитьКодВидаДоходаISO20022(Фабрика, ПространствоИмен, СекцияТранзакция, Документ, ТекстОшибки)
	
	Если ЗначениеЗаполнено(Документ.КодВидаДохода) Тогда
		СекцияКодаВидаДохода = ОбъектТипаCML(Фабрика, "RegulatoryReporting3", ПространствоИмен);
		СекцияДетали = ОбъектТипаCML(Фабрика, "StructuredRegulatoryReporting3", ПространствоИмен);
		ЗаполнитьСвойствоXDTO(СекцияДетали, "Dt", "PTCD", , ТекстОшибки);
		ЗаполнитьСвойствоXDTO(СекцияДетали, "Cd", Документ.КодВидаДохода, , ТекстОшибки);
		СекцияКодаВидаДохода.Dtls.Добавить(СекцияДетали);
		СекцияТранзакция.RgltryRptg.Добавить(СекцияКодаВидаДохода);
	КонецЕсли;
	
КонецПроцедуры

Процедура ВыгрузитьИнформациюОКомиссииВISO20022(СекцияЗаголовокПлатежа, Документ, ТекстОшибки)
	
	ТипКомиссии = Неопределено;
	Если ЗначениеЗаполнено(Документ.ТипКомиссииЗаПеревод) Тогда
		Если Документ.ТипКомиссииЗаПеревод = Перечисления.ТипыКомиссииЗаБанковскиеПереводы.BEN Тогда
			ТипКомиссии = "CRED";
		ИначеЕсли Документ.ТипКомиссииЗаПеревод = Перечисления.ТипыКомиссииЗаБанковскиеПереводы.OUR Тогда
			ТипКомиссии = "DEBT";
		ИначеЕсли Документ.ТипКомиссииЗаПеревод = Перечисления.ТипыКомиссииЗаБанковскиеПереводы.SHA Тогда
			ТипКомиссии = "SHAR";
		КонецЕсли;
		Если ЗначениеЗаполнено(ТипКомиссии) Тогда
			ЗаполнитьСвойствоXDTO(СекцияЗаголовокПлатежа, "ChrgBr", ТипКомиссии, , ТекстОшибки);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Процедура ВыгрузитьДебитораВISO20022(
	Фабрика,
	НазванияТипов,
	ПространствоИмен,
	СекцияЗаголовокПлатежа,
	Документ,
	ТекстОшибки)
	
	НаименованиеОрганизации = ?(ЗначениеЗаполнено(Документ.ОрганизацияНаименованиеМеждународное),
		Документ.ОрганизацияНаименованиеМеждународное, Документ.ОрганизацияНаим);
	СекцияЗаголовокДебитор = ОбъектТипаCML(Фабрика, НазванияТипов.PartyIdentification, ПространствоИмен);
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокДебитор, "Nm", НаименованиеОрганизации, Истина, ТекстОшибки);
	Если ЗначениеЗаполнено(Документ.ОрганизацияИНН) Тогда
		ИдентификаторУчастникаISO = ИдентификаторУчастникаISO(
			Фабрика, НазванияТипов, ПространствоИмен, Документ.ОрганизацияИНН, ТекстОшибки);
		ЗаполнитьСвойствоXDTO(СекцияЗаголовокДебитор, "Id", ИдентификаторУчастникаISO, , ТекстОшибки);
	КонецЕсли;
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокПлатежа, "Dbtr", СекцияЗаголовокДебитор, Истина, ТекстОшибки);
	
	СекцияСчетПлательщика = СчетISO(Фабрика, НазванияТипов, ПространствоИмен, Документ.ОрганизацияРасчСчет,
									Документ.БанковскийСчетОрганизацииIBAN, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокПлатежа, "DbtrAcct", СекцияСчетПлательщика, Истина, ТекстОшибки);

	БанкПлательщик = ОбъектТипаCML(
		Фабрика, НазванияТипов.BranchAndFinancialInstitutionIdentification, ПространствоИмен);
	БанкПлательщикИД = ОбъектТипаCML(Фабрика, НазванияТипов.FinancialInstitutionIdentification, ПространствоИмен);
	Если ЗначениеЗаполнено(Документ.ОрганизацияСВИФТБанка) Тогда
		ЗаполнитьСвойствоXDTO(
			БанкПлательщикИД, НазванияТипов.BIC, Документ.ОрганизацияСВИФТБанка, Истина, ТекстОшибки);
	Иначе
		
		Если ЗначениеЗаполнено(Документ.ОрганизацияБИКБанка) Тогда
			НациональныйКодБанка = ОбъектТипаCML(Фабрика, "GenericFinancialIdentification1", ПространствоИмен);
			ЗаполнитьСвойствоXDTO(НациональныйКодБанка, "Id", Документ.ОрганизацияБИКБанка, Истина, ТекстОшибки);
			ЗаполнитьСвойствоXDTO(БанкПлательщикИД, "Othr", НациональныйКодБанка, Истина, ТекстОшибки);
		Иначе
			ВызватьИсключение НСтр("ru = 'Не заполнен идентификатор банка организации (БИК / SWIFT)'");
		КонецЕсли;
		
	КонецЕсли;
	НаименованиеБанка = ?(ЗначениеЗаполнено(Документ.ОрганизацияБанкМеждународный),
						Документ.ОрганизацияБанкМеждународный, Документ.ОрганизацияБанк);
	ЗаполнитьСвойствоXDTO(БанкПлательщикИД, "Nm", НаименованиеБанка, Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(БанкПлательщик, "FinInstnId", БанкПлательщикИД, Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокПлатежа, "DbtrAgt", БанкПлательщик, Истина, ТекстОшибки);

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

Процедура ВыгрузитьКредитораISO20022(Фабрика, НазванияТипов, ПространствоИмен, СекцияТранзакция, Документ, ТекстОшибки)
	
	ВыгрузитьБанкПолучателяВISO20022(Фабрика, НазванияТипов, ПространствоИмен, СекцияТранзакция, Документ, ТекстОшибки);
	
	Получатель = ОбъектТипаCML(Фабрика, НазванияТипов.PartyIdentification, ПространствоИмен);
	НаименованиеПолучателя = ?(ЗначениеЗаполнено(Документ.КонтрагентНаименованиеМеждународное),
								Документ.КонтрагентНаименованиеМеждународное, Документ.КонтрагентНаим);
	// Банки Европы применяют версию формата pain.001.001.03 и в наименование получателя добавляют ИНН/КПП
	Если СтрЗаканчиваетсяНа(ПространствоИмен, "pain.001.001.03") И Документ.ISOКодВалюты = "RUB" Тогда
		НаименованиеПолучателя = Документ.КонтрагентИНН
			+ ?(ЗначениеЗаполнено(Документ.КПППолучателя), "/" + Документ.КПППолучателя, "") + " "
			+ НаименованиеПолучателя;
		Остаток = Сред(НаименованиеПолучателя, 71);
		// RUB payment - the taxpayer identification number or INN (and KPP) is inserted in the tag
		// Creditor/Name before the name. If the Creditor's name is too long, the remainder of the name
		// must be written in the PstlAdr/AdrLine tag without any spaces (without a hyphen).
		Если ЗначениеЗаполнено(Остаток) Тогда
			СекцияПочтовыйАдрес = ОбъектТипаCML(Фабрика, "PostalAddress6", ПространствоИмен);
			ДобавитьАдресВСекциюСРазбивкой(СекцияПочтовыйАдрес, Остаток);
			ЗаполнитьСвойствоXDTO(Получатель, "PstlAdr", СекцияПочтовыйАдрес, , ТекстОшибки);
		КонецЕсли;
	КонецЕсли;
	ЗаполнитьСвойствоXDTO(Получатель, "Nm", НаименованиеПолучателя, , ТекстОшибки);
	Если ЗначениеЗаполнено(Документ.КонтрагентИНН) Тогда
		СекцияИдентификаторПолучателя = ИдентификаторУчастникаISO(
			Фабрика, НазванияТипов, ПространствоИмен, Документ.КонтрагентИНН, ТекстОшибки);
		ЗаполнитьСвойствоXDTO(Получатель, "Id", СекцияИдентификаторПолучателя, , ТекстОшибки);
	КонецЕсли;
	ЗаполнитьСвойствоXDTO(СекцияТранзакция, "Cdtr", Получатель, , ТекстОшибки);
	
	СчетПолучатель = СчетISO(Фабрика, НазванияТипов, ПространствоИмен, Документ.КонтрагентРасчСчет,
								Документ.БанковскийСчетКонтрагентаIBAN, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияТранзакция, "CdtrAcct", СчетПолучатель, , ТекстОшибки);
	
КонецПроцедуры

Процедура ВыгрузитьБанкПолучателяВISO20022(
	Фабрика,
	НазванияТипов,
	ПространствоИмен,
	СекцияТранзакция,
	Документ,
	ТекстОшибки)
	
	БанкПолучатель = ОбъектТипаCML(
		Фабрика, НазванияТипов.BranchAndFinancialInstitutionIdentification, ПространствоИмен);
	БанкПолучательИД = ОбъектТипаCML(Фабрика, НазванияТипов.FinancialInstitutionIdentification, ПространствоИмен);
	Если ЗначениеЗаполнено(Документ.КонтрагентСВИФТБанка) Тогда
		ЗаполнитьСвойствоXDTO(БанкПолучательИД, НазванияТипов.BIC, Документ.КонтрагентСВИФТБанка, Истина, ТекстОшибки);
	Иначе
		
		Если ЗначениеЗаполнено(Документ.КонтрагентБИКБанка) Тогда
			НациональныйКодБанка = ОбъектТипаCML(Фабрика, "GenericFinancialIdentification1", ПространствоИмен);
			ЗаполнитьСвойствоXDTO(НациональныйКодБанка, "Id", Документ.КонтрагентБИКБанка, Истина, ТекстОшибки);
			ЗаполнитьСвойствоXDTO(БанкПолучательИД, "Othr", НациональныйКодБанка, Истина, ТекстОшибки);
		Иначе
			ВызватьИсключение НСтр("ru = 'Не заполнен идентификатор банка получателя (БИК / SWIFT)'");
		КонецЕсли;
		
	КонецЕсли;
	НаименованиеБанка = ?(ЗначениеЗаполнено(Документ.КонтрагентБанкМеждународный),
						Документ.КонтрагентБанкМеждународный, Документ.КонтрагентБанк);
	Если Документ.ISOКодВалюты = "RUB" Тогда
		// RUB payment - full name of the Creditor's Agent + city + BIC of the Creditor Agent (9 digits)
		// + correspondent account of the Creditor's Agent in the Central Bank of the Russian Federation
		// (20 digits, starts with 301). The last three digits of the BIC and the correspondent account
		// must coincide.
		ГородБанка = ?(ЗначениеЗаполнено(Документ.КонтрагентГородБанкаМеждународный),
						Документ.КонтрагентГородБанкаМеждународный, Документ.КонтрагентГородБанка);
		НаименованиеБанка = НаименованиеБанка + " " + ГородБанка + " " + Документ.КонтрагентБИКБанка + " "
							+ Документ.КонтрагентКоррСчет;
	КонецЕсли;
	ЗаполнитьСвойствоXDTO(БанкПолучательИД, "Nm", НаименованиеБанка, , ТекстОшибки);
	ЗаполнитьСвойствоXDTO(БанкПолучатель, "FinInstnId", БанкПолучательИД, Истина, ТекстОшибки);
	ЗаполнитьСвойствоXDTO(СекцияТранзакция, "CdtrAgt", БанкПолучатель, Истина, ТекстОшибки);
	
	Если ЗначениеЗаполнено(Документ.КонтрагентКоррСчет) Тогда
		СчетБанкаПосредника = СчетISO(Фабрика, НазванияТипов, ПространствоИмен, Документ.КонтрагентКоррСчет,
										Документ.БанковскийСчетКонтрагентаIBAN, ТекстОшибки);
		ЗаполнитьСвойствоXDTO(СекцияТранзакция, "CdtrAgtAcct", СчетБанкаПосредника, Истина, ТекстОшибки);
	КонецЕсли;
	
КонецПроцедуры

Функция ДвоичныеДанныеИзXDTO(Фабрика, ЭД)

	НоваяЗаписьXML = Новый ЗаписьXML;
	ПотокВПамяти = Новый ПотокВПамяти();
	НоваяЗаписьXML.ОткрытьПоток(ПотокВПамяти, "UTF-8");
	НоваяЗаписьXML.ЗаписатьОбъявлениеXML();
	НазначениеТипа = НазначениеТипаXML.Явное;
	Фабрика.ЗаписатьXML(НоваяЗаписьXML, ЭД, , , , НазначениеТипа);
	НоваяЗаписьXML.Закрыть();
	Возврат ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();

КонецФункции

Функция МассивСтрокНазначенияПлатежаДляISO(НазначениеПлатежа)

	МассивВозврата = Новый Массив;
	ОграничениеСтрокиФорматаISO = 140;

	Для Счетчик = 1 По СтрЧислоСтрок(НазначениеПлатежа) Цикл
		ТекСтрока = СтрПолучитьСтроку(НазначениеПлатежа, Счетчик);
		Если СтрДлина(ТекСтрока) > ОграничениеСтрокиФорматаISO Тогда
			Пока СтрДлина(ТекСтрока) > 0 Цикл
				КоличествоКСрезу = Мин(ОграничениеСтрокиФорматаISO, СтрДлина(ТекСтрока));
				КусокСтроки = Сред(ТекСтрока, 1, КоличествоКСрезу);
				МассивВозврата.Добавить(КусокСтроки);
				Если СтрДлина(ТекСтрока) <= ОграничениеСтрокиФорматаISO Тогда
					Прервать;
				КонецЕсли;
				ТекСтрока = Сред(ТекСтрока, КоличествоКСрезу + 1);
			КонецЦикла;
		Иначе
			МассивВозврата.Добавить(ТекСтрока);
		КонецЕсли;
	КонецЦикла;

	Возврат МассивВозврата;

КонецФункции

Процедура ДобавитьАдресВСекциюСРазбивкой(СекцияПочтовыйАдрес, Адрес)

	Для Счетчик = 1 По СтрЧислоСтрок(Адрес) Цикл
		ТекСтрока = СтрПолучитьСтроку(Адрес, Счетчик);
		Пока СтрДлина(ТекСтрока) > 70 Цикл
			СрезСтроки = Сред(ТекСтрока, 1, 70);
			СекцияПочтовыйАдрес.AdrLine.Добавить(СрезСтроки);
			ТекСтрока = Сред(ТекСтрока, 71);
		КонецЦикла;
		СекцияПочтовыйАдрес.AdrLine.Добавить(ТекСтрока);
	КонецЦикла;

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

Функция ИдентификаторУчастникаISO(Фабрика, НазванияТипов, ПространствоИмен, ИНН, ТекстОшибки)

	СекцияЗаголовокИд = ОбъектТипаCML(Фабрика, НазванияТипов.Party, ПространствоИмен);
	СекцияЗаголовокОрг = ОбъектТипаCML(Фабрика, НазванияТипов.OrganisationIdentification, ПространствоИмен);
	СекцияЗаголовокОргИд = ОбъектТипаCML(Фабрика, "GenericOrganisationIdentification1", ПространствоИмен);
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокОргИд, "Id", ИНН, Истина, ТекстОшибки);
	СекцияЗаголовокОрг.Othr.Добавить(СекцияЗаголовокОргИд);
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокИд, "OrgId", СекцияЗаголовокОрг, Ложь, ТекстОшибки);
	Возврат СекцияЗаголовокИд;

КонецФункции

Функция СчетISO(Фабрика, НазванияТипов, ПространствоИмен, НомерСчета, ЭтоIBAN, ТекстОшибки)

	СекцияЗаголовокСчет = ОбъектТипаCML(Фабрика, НазванияТипов.CashAccount, ПространствоИмен);
	СекцияЗаголовокСчетИд = ОбъектТипаCML(Фабрика, "AccountIdentification4Choice", ПространствоИмен);
	Если ЭтоIBAN Тогда
		ЗаполнитьСвойствоXDTO(СекцияЗаголовокСчетИд, "IBAN", НомерСчета, Истина, ТекстОшибки);
	Иначе
		СекцияЗаголовокСчетТип = ОбъектТипаCML(Фабрика, "GenericAccountIdentification1", ПространствоИмен);
		ЗаполнитьСвойствоXDTO(СекцияЗаголовокСчетТип, "Id", НомерСчета, Истина, ТекстОшибки);
		СекцияЗаголовокСчетТипИмя = ОбъектТипаCML(Фабрика, "AccountSchemeName1Choice", ПространствоИмен);
		ЗаполнитьСвойствоXDTO(СекцияЗаголовокСчетТипИмя, "Cd", "BBAN", Истина, ТекстОшибки);
		ЗаполнитьСвойствоXDTO(СекцияЗаголовокСчетТип, "SchmeNm", СекцияЗаголовокСчетТипИмя, Истина, ТекстОшибки);
		ЗаполнитьСвойствоXDTO(СекцияЗаголовокСчетИд, "Othr", СекцияЗаголовокСчетТип, Истина, ТекстОшибки);
	КонецЕсли;
	ЗаполнитьСвойствоXDTO(СекцияЗаголовокСчет, "Id", СекцияЗаголовокСчетИд, Истина, ТекстОшибки);
	
	Возврат СекцияЗаголовокСчет;

КонецФункции

Процедура УстановитьЗначениеXDTO(ОбъектXDTO, ИмяСвойства, Значение, ТекстОшибки)

	// Проверка на соответствие длины фасету для строк
	Если ТипЗнч(Значение) = Тип("Строка") Тогда
		Свойства = ОбъектXDTO.Свойства(); // КоллекцияСвойствXDTO
		УстанавливаемоеСвойство = Свойства.Получить(ИмяСвойства);
		Фасеты = УстанавливаемоеСвойство.Тип.Фасеты;
		Если Фасеты <> Неопределено Тогда
			ФасетМаксимальнаяДлина = Фасеты.Получить(ВидФасетаXDTO.МаксДлина);
			Если ФасетМаксимальнаяДлина <> Неопределено Тогда
				МаксимальнаяДлина = Число(ФасетМаксимальнаяДлина.Значение);
				Если СтрДлина(Значение) > МаксимальнаяДлина Тогда
					ШаблонОшибки = НСтр("ru = 'Ошибка установки свойства %1
						|Устанавливаемое значение: %2
						|Текущая длина строки: %3 
						|Допустимая длина строки: %4'");
					ТекстОшибки = СтрШаблон(ШаблонОшибки, ОбъектXDTO.Тип().Имя + "."
						+ ИмяСвойства, Значение, СтрДлина(Значение), МаксимальнаяДлина);
					Возврат;
				КонецЕсли;
			КонецЕсли;
			ФасетМинимальнаяДлина = Фасеты.Получить(ВидФасетаXDTO.МинДлина);
			Если ФасетМинимальнаяДлина <> Неопределено Тогда
				МинимальнаяДлина = Число(ФасетМинимальнаяДлина.Значение);
				Если СтрДлина(Значение) < МинимальнаяДлина Тогда
					ШаблонОшибки = НСтр("ru = 'Ошибка установки свойства %1
						|Устанавливаемое значение: %2
						|Текущая длина строки: %3 
						|Минимальная длина строки: %4'");
					ТекстОшибки = СтрШаблон(ШаблонОшибки, ОбъектXDTO.Тип().Имя + "."
						+ ИмяСвойства, Значение, СтрДлина(Значение), МинимальнаяДлина);
					Возврат;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;

	Попытка
		ОбъектXDTO.Установить(ИмяСвойства, Значение);
	Исключение
		ШаблонСообщения = НСтр("ru = 'Выполнение операции: Заполнение XDTO.
			|Ошибка установки значения свойства ""%1"".'");
		ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИмяСвойства);
		ТекстОшибки = ?(ЗначениеЗаполнено(ТекстОшибки), ТекстОшибки + Символы.ПС
			+ ТекстСообщения, ТекстСообщения);

		ЗаписатьВЖурналРегистрации(ТекстСообщения + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
	КонецПопытки

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

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

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

Процедура ЗаполнитьСвойствоXDTO(
	ОбъектXDTO,
	ИмяСвойства,
	Значение,
	Обязательное = Ложь,
	ТекстОшибки = "",
	УстанавливатьПустыеЗначения = Ложь) Экспорт

	Если ТипЗнч(Значение) = Тип("ЗначениеXDTO")
			ИЛИ ТипЗнч(Значение) = Тип("ОбъектXDTO") Тогда
		УстановитьЗначениеXDTO(ОбъектXDTO, ИмяСвойства, Значение, ТекстОшибки);
	Иначе
		Если Обязательное ИЛИ ЗначениеЗаполнено(Значение)
				ИЛИ УстанавливатьПустыеЗначения Тогда
			УстановитьЗначениеXDTO(ОбъектXDTO, ИмяСвойства, Значение, ТекстОшибки);
		КонецЕсли;
	КонецЕсли;

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

Функция ОбъектТипаCML(Фабрика, Путь, URIПространстваИмен)

	Если ТипЗнч(Путь) = Тип("Строка") Тогда
		ТипОбъекта = ТипОбъектаCML(Фабрика, URIПространстваИмен, Путь);
	Иначе
		ТипОбъекта = Путь;
	КонецЕсли;

	Если ТипОбъекта = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли;

	НовыйОбъект = Фабрика.Создать(ТипОбъекта);

	Возврат НовыйОбъект;

КонецФункции

Функция ТипОбъектаCML(Фабрика, URIПространстваИмен, Путь)

	МассивПути = ЭлементыПутиТипаXDTO(Путь, ".");

	ПервыйЭлемент = МассивПути[0];
	Если Лев(ПервыйЭлемент, 1) = "{" И Прав(ПервыйЭлемент, 1) = "}" Тогда
		ИмяПакета = Сред(ПервыйЭлемент, 2, СтрДлина(ПервыйЭлемент) - 2);
		Коллекция = Фабрика.Пакеты.Получить(ИмяПакета).КорневыеСвойства;
	Иначе
		ТипОбъекта = Фабрика.Тип(URIПространстваИмен, ПервыйЭлемент);
		Коллекция = ТипОбъекта.Свойства;
	КонецЕсли;

	МассивПути.Удалить(0);
	Пока МассивПути.Количество() > 0 Цикл

		Если Коллекция = Неопределено Тогда
			Возврат Неопределено;
		КонецЕсли;

		Свойство = Коллекция.Получить(МассивПути[0]);
		Если Свойство = Неопределено Тогда
			Возврат Неопределено;
		КонецЕсли;

		ТипОбъекта = Свойство.Тип;
		МассивПути.Удалить(0);
		Попытка
			Коллекция = ТипОбъекта.Свойства;
		Исключение
			Коллекция = Неопределено;
		КонецПопытки;

	КонецЦикла;

	Возврат ТипОбъекта;

КонецФункции

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

Процедура ВыгрузитьПлатежиВMT940(ПараметрыВыгрузки, АдресХранилища)

	ТаблицаДокументов = ПараметрыВыгрузки.ТаблицаДокументов;
	
	КоличествоДокументов = ТаблицаДокументов.Количество();
	
	Если Не КоличествоДокументов Тогда
		Возврат;
	КонецЕсли;
	
	ТаблицаДокументов.Сортировать("Дата");
	НачПериода = ТаблицаДокументов[0].Дата;
	КонПериода = ТаблицаДокументов[КоличествоДокументов - 1].Дата;
	
	БанковскиеСчетаВыгрузки = ПараметрыВыгрузки.БанковскийСчет;
	
	ПотокВыгрузки = Новый ТекстовыйДокумент();
	
	НомерСчета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(БанковскиеСчетаВыгрузки, "НомерСчета");
	
	// Формируем заголовок
	ПотокВыгрузки.ДобавитьСтроку(":20:" + Формат(ТекущаяДатаСеанса(), "ДФ=ггММдд"));
	ПотокВыгрузки.ДобавитьСтроку(":25:" + НомерСчета);
	
	Для каждого СтрокаСекции Из ТаблицаДокументов Цикл
		ВыгрузитьДокументВMT940(ПотокВыгрузки, СтрокаСекции, НомерСчета);
	КонецЦикла;
	
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt");
	
	// Кодировку задаем текстом, иначе бывают проблемы на сервере в Linux и в связке англоязычная Windows + англоязычный SQL.
	Если ПараметрыВыгрузки.Кодировка = "DOS" Тогда
		Кодировка = "cp866";		// КодировкаТекста.OEM;
	Иначе
		Кодировка = "windows-1251";	// КодировкаТекста.ANSI;
	КонецЕсли;
	
	ПотокВыгрузки.Записать(ИмяВременногоФайла, Кодировка);
	
	ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла), АдресХранилища);
	
	Попытка
		УдалитьФайлы(ИмяВременногоФайла);
	Исключение
		ЗаписьЖурналаРегистрации(
			НСтр("ru = 'Выгрузка платежей в банк. Удаление временного файла'", ОбщегоНазначения.КодОсновногоЯзыка()),
			УровеньЖурналаРегистрации.Ошибка, , ,
			ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
	КонецПопытки;

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

Процедура ВыгрузитьДокументВMT940(ПотокВыгрузки, СтрокаСекции ,НомерСчета) 

	ПотокВыгрузки.ДобавитьСтроку(":28С:" 
				+ ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СтрокаСекции.Номер, Истина, Истина));					// Номер выписки/номер страницы
	
	НаименованиеВалюты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаСекции.Валюта, "Наименование");
	ПотокВыгрузки.ДобавитьСтроку(":61:" 
				+ Формат(ТекущаяДатаСеанса(), "ДФ=ггММдд")																// YYMMDD
				+ Формат(ТекущаяДатаСеанса(), "ДФ=ММдд")																// MMDD
				+ ?(ТипЗнч(СтрокаСекции.Ссылка) = Тип("ДокументСсылка.СписаниеБезналичныхДенежныхСредств"), "C", "D")	// C–Кредит, D-Дебет
				+ Прав(НаименованиеВалюты, 1)																			// Третья буква ISO кода валюты
				+ Формат(СтрокаСекции.Сумма, "ЧДЦ=2; ЧРД=.; ЧРГ=' '; ЧГ=0")												// Сумма проводки
				+ "FTRF"																								// Код типа транзакции
				+ "NONREF");																							// Клиентская ссылка
									
	ПотокВыгрузки.ДобавитьСтроку(":86:"
				+ ?(СтрокаСекции.НазначениеПлатежа = "", "", "?20" + СтрокаСекции.НазначениеПлатежа)					// Дополнительные детали платежа
				+ ?(СтрокаСекции.КонтрагентСВИФТБанка = "",
							"?30" + СтрокаСекции.КонтрагентБИКБанка, "?30" + СтрокаСекции.КонтрагентСВИФТБанка)			// Идентификационный код банка контрагента
				+ "?31" + СтрокаСекции.КонтрагентРасчСчет																// Счет контрагента платежа
				+ "?32" + СтрокаСекции.КонтрагентНаим);																	// Наименование контрагента

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

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

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

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

// Формирует файл формата TSE_0401060_D07 для ТОФК и записывает его во временное хранилище.
// 
// Параметры:
//  Организация - СправочникСсылка.Организации - организация, по которой формируется файл.
//  ТаблицаДокументов - ТаблицаЗначений - описание см. Обработка.КлиентБанк.ДокументыКВыгрузке.
//  КаталогФайлов - Строка - Каталог временных файлов.
//
Процедура ЗаписатьФайлыПлатежныхПорученийТОФК(Организация, ТаблицаДокументов, КаталогФайлов)
	
	Индекс = 1;
	ТаблицаРасшифровки = Неопределено;
	
	
	КодУБП = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Организация, "КодУБП");
	
	Для Каждого СтрокаДанных Из ТаблицаДокументов Цикл
		
		Если ТипЗнч(СтрокаДанных.Ссылка) = Тип("ДокументСсылка.СписаниеБезналичныхДенежныхСредств") Тогда
			Исходящий = Истина;
		Иначе
			Исходящий = Ложь;
		КонецЕсли;
		
		СтруктураФайла = ОписаниеПлатежногоПорученияТОФК(Исходящий);
		
		ДанныеДокумента = ДанныеДокументаДляВыгрузкиТОФК(ТаблицаДокументов, ТаблицаРасшифровки, СтрокаДанных, СтруктураФайла, Исходящий);
		
		ЗаписьXML = Новый ЗаписьXML;
		ЗаписьXML.УстановитьСтроку("UTF-8");
		ЗаписьXML.ЗаписатьОбъявлениеXML();
		
		Фабрика = ФабрикаXDTO;
		ПакетXDTO = Фабрика.Пакеты.Получить(Метаданные.ПакетыXDTO.TSE_0401060_D07.ПространствоИмен);
		
		Для Каждого КорневоеСвойство Из ПакетXDTO.КорневыеСвойства Цикл
			
			ОбъектXDTO = ЗаполнитьОбъектXDTO(Фабрика, КорневоеСвойство.Тип, ДанныеДокумента, СтруктураФайла);
			ДесятичныеСвойстваПакетаXDTO = Новый Соответствие;
			ОбменСБанкамиУТ.СформироватьСписокДесятичныхСвойствПакетаXDTO(
				Фабрика, ДесятичныеСвойстваПакетаXDTO, КорневоеСвойство.Тип, СтруктураФайла);
			Фабрика.ЗаписатьXML(ЗаписьXML,
								ОбъектXDTO,
								КорневоеСвойство.ЛокальноеИмя,
								КорневоеСвойство.URIПространстваИмен,
								ФормаXML.Элемент,
								НазначениеТипаXML.Явное);
			
		КонецЦикла;
		
		ТекстXML = ЗаписьXML.Закрыть();
		ТекстXML = ИзменитьФорматОтображенияДесятичныхСвойствXML(ТекстXML, ДесятичныеСвойстваПакетаXDTO);
		ТекстXML = ОбщегоНазначенияКлиентСервер.УдалитьНедопустимыеСимволыXML(ТекстXML);
		
		ДеньФормирования = Формат(ТекущаяДатаСеанса(), "ДФ=dd");
		МесяцФормирования = Формат(ТекущаяДатаСеанса(), "ДФ=ММ");
		
		ДатаФормирования = ЦелоеЧислоВТридцатишестиричнойСистемеСчисления(Число(ДеньФормирования))
			+ ЦелоеЧислоВТридцатишестиричнойСистемеСчисления(Число(МесяцФормирования));
		ПорядковыйНомер = ЦелоеЧислоВТридцатишестиричнойСистемеСчисления(Индекс);
		
		Пока СтрДлина(ПорядковыйНомер) < 6 Цикл
			ПорядковыйНомер = "0" + ПорядковыйНомер;
		КонецЦикла;
		
		ИмяФайла = СтрШаблон("TSE_0401060_D07_%1%2%3.xml",
			?(ПустаяСтрока(КодУБП), "00000000", ВРег(КодУБП)),
			ДатаФормирования,
			ПорядковыйНомер);
		ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла);
		ТекстовыйДокумент = Новый ТекстовыйДокумент;
		ТекстовыйДокумент.УстановитьТекст(ТекстXML);
		ТекстовыйДокумент.КодЯзыкаМакета = ОбщегоНазначения.КодОсновногоЯзыка();
		ТекстовыйДокумент.Записать(КаталогФайлов + ИмяФайла, КодировкаТекста.UTF8);
		
		Индекс = Индекс + 1;
	
	КонецЦикла;
	
КонецПроцедуры

Функция ДанныеДокументаДляВыгрузкиТОФК(ТаблицаДокументов, ТаблицаРасшифровки, СтрокаДанных, СтруктураФайла, Исходящий)
	
	ДанныеДокумента = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтрокаДанных);
		
	ДанныеДокумента.Номер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ДанныеДокумента.Номер);
	ДобавитьКлючиКДаннымДокумента(ДанныеДокумента, СтруктураФайла);
	
	Если Исходящий Тогда
		
		ДанныеДокумента.BasicRequisites_PayView = "Платежное поручение";
		ДанныеДокумента.BasicRequisites_PayView_code = ?(ДанныеДокумента.ВидПлатежа = "Срочно", "4", "0");
		
		Если Не ЗначениеЗаполнено(ДанныеДокумента.AdditionalInfo_OperType) Тогда
			ДанныеДокумента.AdditionalInfo_OperType = "01";
		КонецЕсли;
		
		Если Не ЗначениеЗаполнено(ДанныеДокумента.PayerAndRecipient_Payer_KPP) Тогда
			ДанныеДокумента.PayerAndRecipient_Payer_KPP = "0";
		КонецЕсли;
		
		
	КонецЕсли;
	
	Возврат ДанныеДокумента;
	
КонецФункции

Функция ОписаниеПлатежногоПорученияТОФК(Исходящее)
	
	ОсновныеРеквизиты = Новый Структура;
	ОсновныеРеквизиты.Вставить("Version", "Версия");
	
	// Реквизиты платежного поручения
	ОсновныеРеквизиты.Вставить("BasicRequisites_DocNum", "Номер");
	ОсновныеРеквизиты.Вставить("BasicRequisites_DocDate", "Дата");
	ОсновныеРеквизиты.Вставить("BasicRequisites_PaySum", "Сумма");
	ОсновныеРеквизиты.Вставить("BasicRequisites_PayView", "ВидПлатежа");
	
	// Дополнительная информация
	ОсновныеРеквизиты.Вставить("AdditionalInfo_PayDate", "СрокПлатежа");
	ОсновныеРеквизиты.Вставить("AdditionalInfo_PayOrder", "ОчередностьПлатежа");
	ОсновныеРеквизиты.Вставить("AdditionalInfo_OperType", "ВидОперации");
	
	// Реквизиты плательщика 
	ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_KPP", "КПППлательщика");
	
	// Реквизиты получателя
	ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_KPP", "КПППолучателя");
	
	// Общие данные платежного поручения
	ОсновныеРеквизиты.Вставить("TranscriptPP_PayPurpose", "НазначениеПлатежа");
	
	Если Исходящее Тогда
		
		// Реквизиты плательщика
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_INN", "ОрганизацияИНН");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_PersonalAcc", "ЛицевойСчет");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_Name", "ОрганизацияНаим");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_CheckAcc", "ОрганизацияРасчСчет");
		
		// Реквизиты банка плательщика
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_BIK", "ОрганизацияБИКБанка");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_BankName", "ОрганизацияБанк");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_CorrAcc", "ОрганизацияКоррСчет");
		
		// Реквизиты получателя
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_INN", "КонтрагентИНН");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_Name", "КонтрагентНаим");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_CheckAcc", "КонтрагентРасчСчет");
		
		// Реквизиты банка получателя
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_BIK", "КонтрагентБИКБанка");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_BankName", "КонтрагентБанк");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_CorrAcc", "КонтрагентКоррСчет");
		
		// Налоговые платежи
		ОсновныеРеквизиты.Вставить("TAX_UIN", "Код");
		ОсновныеРеквизиты.Вставить("TAX_DrawStat", "СтатусСоставителя");
		ОсновныеРеквизиты.Вставить("TAX_KBK", "КодБК");
		ОсновныеРеквизиты.Вставить("TAX_OKTMO", "КодОКАТО");
		ОсновныеРеквизиты.Вставить("TAX_PayReason", "ПоказательОснования");
		ОсновныеРеквизиты.Вставить("TAX_Period", "ПоказательПериода");
		ОсновныеРеквизиты.Вставить("TAX_DocNo", "ПоказательНомера");
		ОсновныеРеквизиты.Вставить("TAX_DocDate", "ПоказательДаты");
		ОсновныеРеквизиты.Вставить("TAX_TypeNP", "ПоказательТипа");
		
	Иначе
		
		// Реквизиты плательщика
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_INN", "КонтрагентИНН");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_Name", "КонтрагентНаим");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_CheckAcc", "КонтрагентРасчСчет");
		
		// Реквизиты банка плательщика
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_BIK", "КонтрагентБИКБанка");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_BankName", "КонтрагентБанк");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Payer_CorrAcc", "КонтрагентКоррСчет");
		
		// Реквизиты получателя
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_INN", "ОрганизацияИНН");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_PersonalAcc", "ЛицевойСчет");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_Name", "ОрганизацияНаим");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_CheckAcc", "ОрганизацияРасчСчет");
		
		// Реквизиты банка получателя
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_BIK", "ОрганизацияБИКБанка");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_BankName", "ОрганизацияБанк");
		ОсновныеРеквизиты.Вставить("PayerAndRecipient_Recip_CorrAcc", "ОрганизацияКоррСчет");
		
	КонецЕсли;
	
	ВидПлатежа = Новый Структура;
	ВидПлатежа.Вставить("code", "code");
	ОсновныеРеквизиты.Вставить("BasicRequisites_PayView", ВидПлатежа);
	
	
	Возврат ОсновныеРеквизиты;
	
КонецФункции

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

Процедура ДобавитьКлючиКДаннымДокумента(ДанныеДокумента, СтруктураФайла, ВерхнийКлюч = "")
	
	Для Каждого ЭлементСтруктуры Из СтруктураФайла Цикл
		
		ТекущийКлюч = ВерхнийКлюч + ?(ВерхнийКлюч <> "", "_" + ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Ключ);
		
		Если ЭлементСтруктуры.Значение <> Неопределено
			И ДанныеДокумента.Свойство(ЭлементСтруктуры.Значение) Тогда
			ДанныеДокумента.Вставить(ТекущийКлюч, ДанныеДокумента[ЭлементСтруктуры.Значение]);
		Иначе
			ДанныеДокумента.Вставить(ТекущийКлюч);
		КонецЕсли;
		
		Если ЭлементСтруктуры.Значение <> Неопределено
			И ТипЗнч(ЭлементСтруктуры.Значение) = Тип("Структура") Тогда
			ДобавитьКлючиКДаннымДокумента(ДанныеДокумента, ЭлементСтруктуры.Значение, ЭлементСтруктуры.Ключ)
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры


Функция ИзменитьФорматОтображенияДесятичныхСвойствXML(ТекстXML, ДесятичныеСвойства)
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку("UTF-8");
	ЗаписьXML.ЗаписатьОбъявлениеXML();
	ЗаписьXML.ЗаписатьНачалоЭлемента("TSE_0401060_D07", "http://www.roskazna.ru/eb/domain/TSE_0401060_D07/formular");
	ЗаписьXML.ЗаписатьАтрибут("Version", "6.0");
	ЗаписьXML.ЗаписатьАтрибут("xsi:schemaLocation", "http://www.roskazna.ru/eb/domain/TSE_0401060_D07/formular formulars.xsd");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("self", "http://www.roskazna.ru/eb/domain/TSE_0401060_D07/formular");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ТекстXML);
	
	НачальныйТег = Истина;
	
	Пока ЧтениеXML.Прочитать() Цикл
		
		Если НачальныйТег Тогда
			НачальныйТег = Ложь;
		Иначе
			ОбменСБанкамиУТ.ЗаписатьУзелXML(ЧтениеXML, ЗаписьXML, ДесятичныеСвойства);
		КонецЕсли;
		
	КонецЦикла;
	
	ЧтениеXML.Закрыть();
	
	Возврат ЗаписьXML.Закрыть();
	
КонецФункции

Функция ЦелоеЧислоВТридцатишестиричнойСистемеСчисления(Число)
	
	ЦелаяЧасть = Цел(Число / 36);
	Остаток = Число - 36 * ЦелаяЧасть;
	
	Если ЦелаяЧасть > 0 Тогда
		Результат = ЦелоеЧислоВТридцатишестиричнойСистемеСчисления(ЦелаяЧасть);
	Иначе
		Результат = "";
	КонецЕсли;
	
	Возврат Результат + ДесятичноеЧислоВТрицатишестиричнойСистемыСчисления().Получить(Остаток);
	
КонецФункции

Функция ДесятичноеЧислоВТрицатишестиричнойСистемыСчисления()
	
	Равнозначность = Новый Соответствие;
	Равнозначность.Вставить(0, "0");
	Равнозначность.Вставить(1, "1");
	Равнозначность.Вставить(2, "2");
	Равнозначность.Вставить(3, "3");
	Равнозначность.Вставить(4, "4");
	Равнозначность.Вставить(5, "5");
	Равнозначность.Вставить(6, "6");
	Равнозначность.Вставить(7, "7");
	Равнозначность.Вставить(8, "8");
	Равнозначность.Вставить(9, "9");
	Равнозначность.Вставить(10, "A");
	Равнозначность.Вставить(11, "B");
	Равнозначность.Вставить(12, "C");
	Равнозначность.Вставить(13, "D");
	Равнозначность.Вставить(14, "E");
	Равнозначность.Вставить(15, "F");
	Равнозначность.Вставить(16, "G");
	Равнозначность.Вставить(17, "H");
	Равнозначность.Вставить(18, "I");
	Равнозначность.Вставить(19, "J");
	Равнозначность.Вставить(20, "K");
	Равнозначность.Вставить(21, "L");
	Равнозначность.Вставить(22, "M");
	Равнозначность.Вставить(23, "N");
	Равнозначность.Вставить(24, "O");
	Равнозначность.Вставить(25, "P");
	Равнозначность.Вставить(26, "Q");
	Равнозначность.Вставить(27, "R");
	Равнозначность.Вставить(28, "S");
	Равнозначность.Вставить(29, "T");
	Равнозначность.Вставить(30, "U");
	Равнозначность.Вставить(31, "V");
	Равнозначность.Вставить(32, "W");
	Равнозначность.Вставить(33, "X");
	Равнозначность.Вставить(34, "Y");
	Равнозначность.Вставить(35, "Z");
	
	Возврат Равнозначность;
	
КонецФункции

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

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

//++ Локализация
#Область РазборВыпискиПрямойОбмен

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

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

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

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

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

Функция ПоляДокументовКЗагрузке()
	
	Поля = Новый Структура;
	
	Поля.Вставить("ДатаОперации", "ДатаПроведения");
	Поля.Вставить("ДатаДокумента", "Дата");
	Поля.Вставить("НомерДокумента", "Номер");
	Поля.Вставить("СуммаДокумента", "Сумма");
	Поля.Вставить("ВидДокумента", "Операция");
	Поля.Вставить("НазначениеПлатежа", "НазначениеПлатежа");
	Поля.Вставить("УникальныйИдентификаторПлатежа", "Код");
	Поля.Вставить("КодВидаДохода", "КодНазПлатежа");
	
	Поля.Вставить("Плательщик_Наименование", "Плательщик");
	Поля.Вставить("Плательщик_НаименованиеМеждународное", "ПлательщикНаименованиеМеждународное");
	Поля.Вставить("Плательщик_АдресСтруктурированный_Страна_ISOКод", "ПлательщикСтрана");
	Поля.Вставить("Плательщик_ИНН", "ПлательщикИНН");
	Поля.Вставить("Плательщик_РасчСчет", "ПлательщикСчет");
	
	Поля.Вставить("Плательщик_Банк",               "ПлательщикБанк1");
	Поля.Вставить("Плательщик_Банк_Город",         "ПлательщикБанк2");
	Поля.Вставить("Плательщик_Банк_БИК",           "ПлательщикБИК");
	Поля.Вставить("Плательщик_Банк_SWIFT",         "ПлательщикСВИФТ");
	Поля.Вставить("Плательщик_Банк_КоррСчет",      "ПлательщикКорсчет");
	Поля.Вставить("Плательщик_Банк_НаименованиеМеждународное", "ПлательщикБанк3");
	Поля.Вставить("Плательщик_Банк_Адрес",         "ПлательщикБанк4");
	Поля.Вставить("Плательщик_Банк_Страна_ISOКод", "ПлательщикБанк5");
	
	
	Поля.Вставить("Получатель_Наименование", "Получатель");
	Поля.Вставить("Получатель_НаименованиеМеждународное", "ПолучательНаименованиеМеждународное");
	Поля.Вставить("Получатель_АдресСтруктурированный_Страна_ISOКод", "ПолучательСтрана");
	Поля.Вставить("Получатель_ИНН", "ПолучательИНН");
	Поля.Вставить("Получатель_КПП", "ПолучательКПП");
	Поля.Вставить("Получатель_РасчСчет", "ПолучательСчет");
	
	Поля.Вставить("Получатель_Банк",               "ПолучательБанк1");
	Поля.Вставить("Получатель_Банк_Город",         "ПолучательБанк2");
	Поля.Вставить("Получатель_Банк_БИК",           "ПолучательБИК");
	Поля.Вставить("Получатель_Банк_SWIFT",         "ПолучательСВИФТ");
	Поля.Вставить("Получатель_Банк_КоррСчет",      "ПолучательКорсчет");
	Поля.Вставить("Получатель_Банк_НаименованиеМеждународное", "ПолучательБанк3");
	Поля.Вставить("Получатель_Банк_Адрес",         "ПолучательБанк4");
	Поля.Вставить("Получатель_Банк_Страна_ISOКод", "ПолучательБанк5");
	
	
	Поля.Вставить("ПлатежВБюджет_СтатусСоставителя",     "СтатусСоставителя");
	Поля.Вставить("ПлатежВБюджет_ПоказательКБК",         "ПоказательКБК");
	Поля.Вставить("ПлатежВБюджет_ОКТМО",                 "ОКАТО");
	Поля.Вставить("ПлатежВБюджет_ПоказательОснования",   "ПоказательОснования");
	Поля.Вставить("ПлатежВБюджет_ПоказательПериода",     "ПоказательПериода");
	Поля.Вставить("ПлатежВБюджет_ПоказательНомера",      "ПоказательНомера");
	Поля.Вставить("ПлатежВБюджет_ПоказательДаты",        "ПоказательДаты");
	Поля.Вставить("ПлатежВБюджет_КодВыплат",             "ПоказательТипа");
	
	Возврат Поля;
	
КонецФункции

#КонецОбласти
//-- Локализация

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

Процедура ПрочитатьДанныеВыпискиISO20022(ДвоичныеДанныеФайла, Результат)
	
	Попытка
		ОбъектXML = Новый ЧтениеXML;
		ПотокВПамяти = ДвоичныеДанныеФайла.ОткрытьПотокДляЧтения();
		ОбъектXML.ОткрытьПоток(ПотокВПамяти);
		ОбъектXML.Прочитать();
		ЭД = ФабрикаXDTO.ПрочитатьXML(ОбъектXML);
		
		//++ Локализация
		СвойстваОбъекта = ЭД.Свойства(); // КоллекцияСвойствXDTO
		
		Если СвойстваОбъекта.Получить("BkToCstmrStmt") = Неопределено Тогда
			ДенежныеСредстваКлиентСерверЛокализация.ПрочитатьФайлРеестраОбменаСБанком(ДвоичныеДанныеФайла, , Результат);
			Возврат;
		КонецЕсли;
		//-- Локализация
		
		Если ТипЗнч(ЭД.BkToCstmrStmt.Stmt) = Тип("ОбъектXDTO") Тогда
			Выписки = Новый Массив;
			Выписки.Добавить(ЭД.BkToCstmrStmt.Stmt);
		Иначе
			Выписки = ЭД.BkToCstmrStmt.Stmt;
		КонецЕсли;
		ДатаСозданияСтрокой = ЗначениеСвойстваXDTO(ЭД, "BkToCstmrStmt.GrpHdr.CreDtTm");
		Результат.Заголовок.ДатаСоздания = XMLЗначение(Тип("Дата"), ДатаСозданияСтрокой);
		
		Для Каждого Выписка Из Выписки Цикл
			ДанныеПоРасчетномуСчету = ДенежныеСредстваКлиентСервер.ДанныеРасчетногоСчета();
			ДанныеПоРасчетномуСчету.ДатаНачала = XMLЗначение(Тип("Дата"), Выписка.FrToDt.FrDtTm);
			ДанныеПоРасчетномуСчету.ДатаКонца = XMLЗначение(Тип("Дата"), Выписка.FrToDt.ToDtTm);
			РеквизитыВладельцаСчета = РеквизитыВладельцаСчета(Выписка.Acct);
			ДанныеПоРасчетномуСчету.РасчСчет = РеквизитыВладельцаСчета.НомерСчета;
			Результат.Заголовок.Отправитель = ЗначениеСвойстваXDTO(РеквизитыВладельцаСчета, "Svcr.FinInstnId.Nm");
			Результат.Заголовок.ДатаНачала = ДанныеПоРасчетномуСчету.ДатаНачала;
			Результат.Заголовок.ДатаКонца = ДанныеПоРасчетномуСчету.ДатаКонца;
			
			ПрочитатьОстаткиИОборотыISO20022(Выписка, ДанныеПоРасчетномуСчету);
			
			Результат.РасчетныеСчета.Добавить(ДанныеПоРасчетномуСчету);
			НаборСвойствВыписки = Выписка.Свойства(); // КоллекцияСвойствXDTO
			Если НаборСвойствВыписки.Получить("Ntry") <> Неопределено Тогда
				Если ТипЗнч(Выписка.Ntry) = Тип("ОбъектXDTO") Тогда
					Операции = Новый Массив;
					Операции.Добавить(Выписка.Ntry);
				Иначе
					Операции = Выписка.Ntry;
				КонецЕсли;
				Для Каждого Операция Из Операции Цикл
					ПрочитатьОперациюISO20022(Операция, Результат.ДокументыВыписки, РеквизитыВладельцаСчета);
				КонецЦикла;
			КонецЕсли;
		КонецЦикла
	Исключение
		Результат.ОшибкиРазбора.Добавить(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
	КонецПопытки;
	
КонецПроцедуры

Функция РеквизитыВладельцаСчета(Acct)
			
	ВладелецСчета = Новый Структура;
	КодIBAN = ЗначениеСвойстваXDTO(Acct, "Id.IBAN");
	КодId = ЗначениеСвойстваXDTO(Acct, "Id.Othr.Id");
	ВладелецСчета.Вставить("НомерСчета", ?(ЗначениеЗаполнено(КодIBAN), КодIBAN, КодId));
	ВладелецСчета.Вставить("Наименование", ЗначениеСвойстваXDTO(Acct, "Ownr.Nm"));
	ПлательщикOrgId = ЗначениеСвойстваXDTO(Acct, "Ownr.Id.OrgId.Othr.Id");
	ПлательщикPrvtId = ЗначениеСвойстваXDTO(Acct, "Ownr.Id.PrvtId.Othr.Id");
	ВладелецСчета.Вставить("ИНН", ?(ЗначениеЗаполнено(ПлательщикOrgId), ПлательщикOrgId, ПлательщикPrvtId));
	ВладелецСчета.Вставить("Страна", ЗначениеСвойстваXDTO(Acct, "Ownr.PstlAdr.Ctry"));
	ВладелецСчета.Вставить("БанкSWIFT", ЗначениеСвойстваXDTO(Acct, "Svcr.FinInstnId.BIC"));
	ВладелецСчета.Вставить("Банк", ЗначениеСвойстваXDTO(Acct, "Svcr.FinInstnId.Nm"));
	
	Возврат ВладелецСчета
			
КонецФункции

Процедура ПрочитатьОстаткиИОборотыISO20022(Выписка, ДанныеПоРасчетномуСчету)
	
	// Остатки
	Если ТипЗнч(Выписка.Bal) = Тип("ОбъектXDTO") Тогда
		Балансы = Новый Массив;
		Балансы.Добавить(Выписка.Bal);
	Иначе
		Балансы = Выписка.Bal;
	КонецЕсли;
	Для Каждого Баланс Из Балансы Цикл
		
		НаборСвойствCdOrPrtry = Баланс.Tp.CdOrPrtry.Свойства(); // КоллекцияСвойствXDTO
		Если НаборСвойствCdOrPrtry.Получить("Cd") <> Неопределено Тогда
			СуммаСтрокой = Баланс.Amt.Последовательность().ПолучитьТекст(0);
			Если Баланс.Tp.CdOrPrtry.Cd = "OPBD" Тогда
				ДанныеПоРасчетномуСчету.НачальныйОстаток = XMLЗначение(Тип("Число"), СуммаСтрокой);
			ИначеЕсли Баланс.Tp.CdOrPrtry.Cd = "CLBD" Тогда
				ДанныеПоРасчетномуСчету.КонечныйОстаток = XMLЗначение(Тип("Число"), СуммаСтрокой);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	// Обороты
	НаборСвойствВыписки = Выписка.Свойства(); // КоллекцияСвойствXDTO
	Если НаборСвойствВыписки.Получить("TxsSummry") <> Неопределено Тогда
		
		НаборСвойствTxsSummry = Выписка.TxsSummry.Свойства(); // КоллекцияСвойствXDTO
		Если НаборСвойствTxsSummry.Получить("TtlCdtNtries") <> Неопределено Тогда
			
			НаборСвойствTtlCdtNtries = Выписка.TxsSummry.TtlCdtNtries.Свойства(); // КоллекцияСвойствXDTO
			Если НаборСвойствTtlCdtNtries.Получить("Sum") <> Неопределено Тогда
				ДанныеПоРасчетномуСчету.ВсегоПоступило = XMLЗначение(Тип("Число"), Выписка.TxsSummry.TtlCdtNtries.Sum);
			КонецЕсли;
			
		КонецЕсли;
		
		Если НаборСвойствTxsSummry.Получить("TtlDbtNtries") <> Неопределено Тогда
			
			НаборСвойствTtlDbtNtries = Выписка.TxsSummry.TtlDbtNtries.Свойства(); // КоллекцияСвойствXDTO
			Если НаборСвойствTtlDbtNtries.Получить("Sum") <> Неопределено Тогда
				ДанныеПоРасчетномуСчету.ВсегоСписано = XMLЗначение(Тип("Число"), Выписка.TxsSummry.TtlDbtNtries.Sum);
			КонецЕсли;
			
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Процедура ПрочитатьОперациюISO20022(Операция, ДокументыВыписки, РеквизитыВладельцаСчета)
			
	// Если платеж не исполнен, то он пропускается
	Если Операция.Sts <> "BOOK" Тогда
		Возврат;
	КонецЕсли;
	ДанныеОперации = ДенежныеСредстваСервер.ДанныеЗагружаемойОперации();
	СуммаСтрокой = Операция.Amt.Последовательность().ПолучитьТекст(0);
	ДанныеОперации.Сумма = XMLЗначение(Тип("Число"), СуммаСтрокой);
	ДанныеОперации.НаправлениеПлатежа = ?(Операция.CdtDbtInd = "DBIT", "1", "2");
	ДатаОперации = ЗначениеСвойстваXDTO(Операция, "BookgDt.Dt");
	Если ДатаОперации <> Неопределено Тогда
		ДанныеОперации.ДатаОперации = XMLЗначение(Тип("Дата"), ДатаОперации);
	КонецЕсли;
	ДатаДокумента = ЗначениеСвойстваXDTO(Операция, "ValDt.Dt");
	Если ДатаДокумента <> Неопределено Тогда
		ДанныеОперации.Дата = XMLЗначение(Тип("Дата"), ДатаДокумента);
	Иначе
		ДанныеОперации.Дата = ДанныеОперации.ДатаОперации;
	КонецЕсли;
	ДанныеОперации.Идентификатор = ЗначениеСвойстваXDTO(Операция, "AcctSvcrRef");
	ДанныеОперации.Вставить("ВидОплаты", ЗначениеСвойстваXDTO(Операция, "BkTxCd.Prtry.Cd"));
	НаборСвойствОперации = Операция.Свойства(); // КоллекцияСвойствXDTO
	Если НаборСвойствОперации.Получить("NtryDtls") <> Неопределено Тогда
		
		Если ТипЗнч(Операция.NtryDtls) = Тип("ОбъектXDTO") Тогда
			Транзакция = Операция.NtryDtls;
		Иначе
			Транзакция = Операция.NtryDtls[0];
		КонецЕсли;
		НаборСвойствТранзакции = Транзакция.Свойства(); // КоллекцияСвойствXDTO
		Если НаборСвойствТранзакции.Получить("TxDtls") <> Неопределено Тогда
			Если ТипЗнч(Транзакция.TxDtls) = Тип("ОбъектXDTO") Тогда
				ДетальТранзакции = Транзакция.TxDtls;
			Иначе
				ДетальТранзакции = Транзакция.TxDtls[0];
			КонецЕсли;
			ДанныеОперации.Номер = ЗначениеСвойстваXDTO(ДетальТранзакции, "Refs.EndToEndId");
			ОчередностьПлатежа = ЗначениеСвойстваXDTO(ДетальТранзакции, "Purp.Prtry");
			Если ЗначениеЗаполнено(ОчередностьПлатежа) Тогда
				ДанныеОперации.Вставить("ОчередностьПлатежа", Число(ОчередностьПлатежа));
			КонецЕсли;
			
			ПрочитатьДанныеПлательщикаISO20022(ДетальТранзакции, ДанныеОперации, РеквизитыВладельцаСчета);
			ПрочитатьДанныеПолучателяISO20022(ДетальТранзакции, ДанныеОперации, РеквизитыВладельцаСчета);
		
			ПрочитатьКодИНазначениеПлатежаISO20022(ДетальТранзакции, ДанныеОперации);
			
			ПрочитатьНалоговыеРеквизитыРФ(ДанныеОперации, ДетальТранзакции);
			
		КонецЕсли;
	КонецЕсли;
	
	ДокументыВыписки.Добавить(ДанныеОперации);
		
КонецПроцедуры

Процедура ПрочитатьНалоговыеРеквизитыРФ(ДанныеОперации, ДетальТранзакции)
	
	// Код таможенного органа для таможенных платежей
	ДанныеОперации.Вставить("ПоказательПериода", ЗначениеСвойстваXDTO(ДетальТранзакции, "Tax.Cdtr.RegnId"));
	ДанныеОперации.Вставить("ПолучательКПП", ЗначениеСвойстваXDTO(ДетальТранзакции, "Tax.Cdtr.TaxTp"));
	ДанныеОперации.Вставить("ПлательщикКПП", ЗначениеСвойстваXDTO(ДетальТранзакции, "Tax.Dbtr.TaxTp"));
	ДанныеОперации.Вставить("ОКАТО", ЗначениеСвойстваXDTO(ДетальТранзакции, "Tax.AdmstnZn"));
	ДанныеОперации.Вставить("ПоказательНомера", ЗначениеСвойстваXDTO(ДетальТранзакции, "Tax.RefNb"));
	ПоказательДатыСтрокой = ЗначениеСвойстваXDTO(ДетальТранзакции, "Tax.Dt");
	Если ЗначениеЗаполнено(ПоказательДатыСтрокой) Тогда
		ДанныеОперации.Вставить("ПоказательДатыДок", XMLЗначение(Тип("Дата"), ПоказательДатыСтрокой));
		ДанныеОперации.Вставить("ПоказательДаты", ПоказательДатыСтрокой);
	КонецЕсли;
	СвойстваТранзакции = ДетальТранзакции.Свойства(); // КоллекцияСвойствXDTO
	Если СвойстваТранзакции.Получить("Rcrd") <> Неопределено Тогда
		Если ТипЗнч(ДетальТранзакции.Rcrd) = Тип("ОбъектXDTO") Тогда
			ДополнительныеДетали = ДетальТранзакции.Rcrd;
		Иначе
			ДополнительныеДетали = ДетальТранзакции.Rcrd[0];
		КонецЕсли;
		ДанныеОперации.Вставить("ПоказательТипа", ЗначениеСвойстваXDTO(ДополнительныеДетали, "Tp"));
		ДанныеОперации.Вставить("ПоказательОснования", ЗначениеСвойстваXDTO(ДополнительныеДетали, "Ctgy"));
		ДанныеОперации.Вставить("ПоказательКБК", ЗначениеСвойстваXDTO(ДополнительныеДетали, "CtgyDtls"));
		ДанныеОперации.Вставить("СтатусСоставителя", ЗначениеСвойстваXDTO(ДополнительныеДетали, "DbtrSts"));
		ГодНалоговогоПериодаСтрокой = ЗначениеСвойстваXDTO(ДополнительныеДетали, "Prd.Yr");
		Если ЗначениеЗаполнено(ГодНалоговогоПериодаСтрокой) Тогда
			ДатаНалоговогоПериода = XMLЗначение(Тип("Дата"), ГодНалоговогоПериодаСтрокой);
			ТипНалоговогоПериода = ЗначениеСвойстваXDTO(ДополнительныеДетали, "Prd.Tp");
			Если ЗначениеЗаполнено(ТипНалоговогоПериода) Тогда
				Если СтрНачинаетсяС(ТипНалоговогоПериода, "MM") Тогда
					ПоказательПериода = "МС." + Сред(ТипНалоговогоПериода, 3) + Год(ДатаНалоговогоПериода);
				ИначеЕсли СтрНачинаетсяС(ТипНалоговогоПериода, "HLF") Тогда
					ПоказательПериода = "ПЛ.0" + Сред(ТипНалоговогоПериода, 4) + Год(ДатаНалоговогоПериода);
				ИначеЕсли СтрНачинаетсяС(ТипНалоговогоПериода, "QTR") Тогда
					ПоказательПериода = "КВ.0" + Сред(ТипНалоговогоПериода, 4) + Год(ДатаНалоговогоПериода);
				КонецЕсли;
			Иначе
				ПоказательПериода = Формат(ДатаНалоговогоПериода, "ДФ=dd.MM.yyyy;");
			КонецЕсли;
			ДанныеОперации.Вставить("ПоказательПериода", ПоказательПериода);
		КонецЕсли;
		ТочнаяДата = ЗначениеСвойстваXDTO(ДополнительныеДетали, "Prd.FrToDt.FrDt");
		Если ЗначениеЗаполнено(ТочнаяДата) Тогда
			ДанныеОперации.Вставить("ПоказательПериода", Формат(ТочнаяДата, "ДФ=dd.MM.yyyy;"));
		КонецЕсли;
	КонецЕсли;

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

Процедура ПрочитатьКодИНазначениеПлатежаISO20022(ДетальТранзакции, ДанныеОперации)
		
		ДеталиДокумента = ЗначениеСвойстваXDTO(ДетальТранзакции, "RmtInf");
		
		Если ДеталиДокумента <> Неопределено Тогда // детали документа
		
			СвойстваДокумента = ДеталиДокумента.Свойства(); // КоллекцияСвойствXDTO
			
			Если СвойстваДокумента.Получить("Ustrd") <> Неопределено Тогда // назначение платежа
				Если ТипЗнч(ДеталиДокумента.Ustrd) = Тип("Строка") Тогда
					НазначенияПлатежа = Новый Массив;
					НазначенияПлатежа.Добавить(ДеталиДокумента.Ustrd);
				Иначе
					НазначенияПлатежа = ДеталиДокумента.Ustrd;
				КонецЕсли;
				НазначениеПлатежаПолное = "";
				Для Каждого НазначениеПлатежа Из НазначенияПлатежа Цикл
					НазначениеПлатежаПолное = ?(ПустаяСтрока(НазначениеПлатежаПолное), "",
												НазначениеПлатежаПолное + Символы.ПС);
					НазначениеПлатежаПолное = НазначениеПлатежаПолное + НазначениеПлатежа;
				КонецЦикла;
				ДанныеОперации.НазначениеПлатежа = НазначениеПлатежаПолное;
			КонецЕсли;
			
			Если СвойстваДокумента.Получить("Strd") <> Неопределено Тогда
				Если ТипЗнч(ДеталиДокумента.Strd) = Тип("ОбъектXDTO") Тогда
					СтруктурныеДетали = ДеталиДокумента.Strd;
				Иначе
					СтруктурныеДетали = ДеталиДокумента.Strd[0];
				КонецЕсли;
				ДанныеОперации.Вставить("Код", ЗначениеСвойстваXDTO(СтруктурныеДетали, "CdtrRefInf.Ref"));
			КонецЕсли;
		КонецЕсли;
		
КонецПроцедуры

Процедура ПрочитатьДанныеПлательщикаISO20022(ДетальТранзакции, ДанныеОперации, РеквизитыВладельцаСчета)
		
	Дебитор = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.Dbtr");
	Если Дебитор = Неопределено И ДанныеОперации.НаправлениеПлатежа = "1" Тогда
		ДанныеОперации.Плательщик = РеквизитыВладельцаСчета.Наименование;
		ДанныеОперации.ПлательщикИНН = РеквизитыВладельцаСчета.ИНН;
		ДанныеОперации.ПлательщикСтрана = РеквизитыВладельцаСчета.Страна;
		ДанныеОперации.ПлательщикСчет = РеквизитыВладельцаСчета.НомерСчета;
		ДанныеОперации.ПлательщикБанкSWIFT = РеквизитыВладельцаСчета.БанкSWIFT;
		ДанныеОперации.ПлательщикБанк = РеквизитыВладельцаСчета.Банк;
	Иначе
		ДанныеОперации.Плательщик = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.Dbtr.Nm");
		ПлательщикId = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.Dbtr.Id.OrgId.Othr.Id");
		ПлательщикBIC = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.Dbtr.Id.OrgId.BICOrBEI");
		ДанныеОперации.ПлательщикИНН = ?(ЗначениеЗаполнено(ПлательщикId), ПлательщикId, ПлательщикBIC);
	
		КодСтраны = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.Dbtr.CtryOfRes");
		Если ЗначениеЗаполнено(КодСтраны) Тогда
			ИнформацияОСтране = УправлениеКонтактнойИнформацией.ДанныеКлассификатораСтранМираПоКоду(
				КодСтраны, "КодАльфа2");
			Если ЗначениеЗаполнено(ИнформацияОСтране) Тогда
				ДанныеОперации.ПлательщикСтрана = ИнформацияОСтране.Наименование;
			КонецЕсли;
		КонецЕсли;
	
		НомерСчета = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.DbtrAcct.Id.Othr.Id");
		КодIBAN = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.DbtrAcct.Id.IBAN");
		ДанныеОперации.ПлательщикСчет = ?(ЗначениеЗаполнено(НомерСчета), НомерСчета, КодIBAN);
		ДанныеОперации.ПлательщикБанкSWIFT = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdAgts.DbtrAgt.FinInstnId.BIC");
		ДанныеОперации.ПлательщикБанк = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdAgts.DbtrAgt.FinInstnId.Nm");
	КонецЕсли;
	
КонецПроцедуры

Процедура ПрочитатьДанныеПолучателяISO20022(ДетальТранзакции, ДанныеОперации, РеквизитыВладельцаСчета)
		
	Кредитор = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.Cdtr");
	Если Кредитор = Неопределено И ДанныеОперации.НаправлениеПлатежа = "2" Тогда
		ДанныеОперации.Получатель = РеквизитыВладельцаСчета.Наименование;
		ДанныеОперации.ПолучательИНН = РеквизитыВладельцаСчета.ИНН;
		ДанныеОперации.ПолучательСтрана = РеквизитыВладельцаСчета.Страна;
		ДанныеОперации.ПолучательСчет = РеквизитыВладельцаСчета.НомерСчета;
		ДанныеОперации.ПолучательБанкSWIFT = РеквизитыВладельцаСчета.БанкSWIFT;
		ДанныеОперации.ПолучательБанк = РеквизитыВладельцаСчета.Банк;
	Иначе
		ДанныеОперации.Получатель = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.Cdtr.Nm");
		ПолучательId = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.Cdtr.Id.OrgId.Othr.Id");
		ПолучательBIC = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.Cdtr.Id.OrgId.BICOrBEI");
		ДанныеОперации.ПолучательИНН = ?(ЗначениеЗаполнено(ПолучательId), ПолучательId, ПолучательBIC);
		
		КодСтраны = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.Cdtr.CtryOfRes");
		Если ЗначениеЗаполнено(КодСтраны) Тогда
			ИнформацияОСтране = УправлениеКонтактнойИнформацией.ДанныеКлассификатораСтранМираПоКоду(
				КодСтраны, "КодАльфа2");
			Если ЗначениеЗаполнено(ИнформацияОСтране) Тогда
				ДанныеОперации.ПолучательСтрана = ИнформацияОСтране.Наименование;
			КонецЕсли;
		КонецЕсли;
		
		НомерСчета = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.CdtrAcct.Id.Othr.Id");
		КодIBAN = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdPties.CdtrAcct.Id.IBAN");
		ДанныеОперации.ПолучательСчет = ?(ЗначениеЗаполнено(НомерСчета), НомерСчета, КодIBAN);
		
		ДанныеОперации.ПолучательБанкSWIFT = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdAgts.CdtrAgt.FinInstnId.BIC");
		ДанныеОперации.ПолучательБанк = ЗначениеСвойстваXDTO(ДетальТранзакции, "RltdAgts.CdtrAgt.FinInstnId.Nm");
	КонецЕсли;

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

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

Процедура ПрочитатьДанныеВыпискиMT940(ДвоичныеДанныеФайла, Результат, Кодировка)

	Попытка
		ИмяФайла = ПолучитьИмяВременногоФайла();
		ДвоичныеДанныеФайла.Записать(ИмяФайла);
		
		СтрокиФайла = Новый Массив;
		
		ФайлВыписки = Новый Файл(ИмяФайла);
		
		Если Кодировка = "DOS" Тогда
			КодировкаФайла = "cp866";        // КодировкаТекста.OEM;
		Иначе
			КодировкаФайла = "windows-1251"; // КодировкаТекста.ANSI;
		КонецЕсли;
		
		ПотокЧтения = Новый ЧтениеТекста(ИмяФайла, КодировкаФайла,,, Ложь);
		
		ТекстДляРазбора = ПотокЧтения.Прочитать();
		
		МассивСтраницВыписки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекстДляРазбора, ":20:");
		
		Для СтрокаМассиваВыписки = 0 По МассивСтраницВыписки.Количество() - 1 Цикл
			
			ДанныеПоРасчетномуСчету = ДенежныеСредстваКлиентСервер.ДанныеРасчетногоСчета();
			
			ТекущийБлокВыписки = МассивСтраницВыписки.Получить(СтрокаМассиваВыписки);
			
			Если Лев(ТекущийБлокВыписки, 3) = "{1:" Или ТекущийБлокВыписки = "" Тогда
				Продолжить;
			КонецЕсли;
			
			СтрокаСТегом25 = СтрПолучитьСтроку(ТекущийБлокВыписки, 2);
			
			Если СтрНайти(СтрокаСТегом25, ":25:") Тогда
				Если СтрНайти(СтрокаСТегом25, "/") Тогда
					ДанныеПоРасчетномуСчету.РасчСчет = СокрЛП(Сред(СтрокаСТегом25, СтрНайти(СтрокаСТегом25, "/") + 1));
				Иначе
					ДанныеПоРасчетномуСчету.РасчСчет = СокрЛП(Сред(СтрокаСТегом25, 5));
				КонецЕсли;
			КонецЕсли;
			
			МассивПоТегу60F = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекущийБлокВыписки, ":60F:");
			МассивПоТегу60M = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекущийБлокВыписки, ":60M:");
				
			Если МассивПоТегу60F.Количество() > 1 Или МассивПоТегу60M.Количество() > 1 Тогда
				
				МассивПоТегу60 = ?(МассивПоТегу60F.Количество() > 1, МассивПоТегу60F, МассивПоТегу60M);
				
				СтрокаСТегом60 = СтрПолучитьСтроку(МассивПоТегу60[1], 1);
				
				ДатаВыписки = ПолучитьДатуВыпискиMT940(СтрокаСТегом60, 2);
				
				ВалютаСтрока = Сред(СтрокаСТегом60, 8, 3);
				
				Остаток = Число(Сред(СтрокаСТегом60, 11));
				
				ДанныеПоРасчетномуСчету.ДатаНачала		 = ДатаВыписки;
				ДанныеПоРасчетномуСчету.ДатаКонца		 = ДатаВыписки;
				ДанныеПоРасчетномуСчету.НачальныйОстаток = Остаток;
				
			КонецЕсли;
			
			МассивПоТегу62F = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекущийБлокВыписки, ":62F:");
			МассивПоТегу62M = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекущийБлокВыписки, ":62M:");
				
			Если МассивПоТегу62F.Количество() > 1 Или МассивПоТегу62M.Количество() > 1 Тогда
				
				МассивПоТегу62 = ?(МассивПоТегу62F.Количество() > 1, МассивПоТегу62F, МассивПоТегу62M);
				
				СтрокаСТегом62 = СтрПолучитьСтроку(МассивПоТегу62[1], 1);
				
				Остаток = Число(Сред(СтрокаСТегом62, 11));

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

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

Функция ПолучитьДатуВыпискиMT940(ДатаВСтроке, НачальныйНомерСимвола);
	
	ДатаСтрока = Сред(ДатаВСтроке, НачальныйНомерСимвола, 6);
	
	Возврат Дата("20" + Лев(ДатаСтрока, 2) + Прав(ДатаСтрока, 4));
	
КонецФункции

Процедура ПрочитатьОперациюМТ940(МассивПоТегу86, ДокументыВыписки, РеквизитыВладельцаСчета)
	
	Если МассивПоТегу86.Количество() = 1 Тогда
		Возврат;
	КонецЕсли;
	
	Данные61тега = СокрЛП(МассивПоТегу86.Получить(0));
	
	КодСимвола7  = КодСимвола(Данные61тега, 7);
	КодСимвола11 = КодСимвола(Данные61тега, 11);
	
	Если (КодСимвола7 >= 65 И КодСимвола7 <= 90) Тогда
		
		ВидДвижения = Сред(Данные61тега, 7, 1);
		СимволДебитКредит = 7;
		
	ИначеЕсли (КодСимвола11 >= 65 И КодСимвола11 <= 90) Тогда
		
		ВидДвижения = Сред(Данные61тега, 11, 1);
		СимволДебитКредит = 11;
		
	Иначе
		
		Возврат;
		
	КонецЕсли;
	
	КодСимволаОтсчетаСумм = КодСимвола(Данные61тега, СимволДебитКредит + 1);
	
	Если (КодСимволаОтсчетаСумм >= 65 И КодСимволаОтсчетаСумм <= 90) Тогда
		
		СимволНачалаОтсчетаСуммы = СимволДебитКредит + 2;
		
	Иначе
		
		СимволНачалаОтсчетаСуммы = СимволДебитКредит + 1;
		
	КонецЕсли;
	
	ДанныеОперации = ДенежныеСредстваСервер.ДанныеЗагружаемойОперации();
	
	КоличествоСимволовМеждуNИЗапятой = СтрНайти(Данные61тега, ",") - СимволНачалаОтсчетаСуммы;
	
	Если СтрНайти(Данные61тега, "//") > 0 Тогда
		Номер = СокрЛП(Сред(Данные61тега, СтрНайти(Данные61тега, "//") + 2));
	Иначе
		Номер = "";
	КонецЕсли;
	
	ДанныеОперации.ДатаОперации 	  = ПолучитьДатуВыпискиMT940(Данные61тега, 1);
	ДанныеОперации.Дата				  = ДанныеОперации.ДатаОперации;
	ДанныеОперации.НаправлениеПлатежа = ?(ВидДвижения = "D", "1", "2");
	ДанныеОперации.Номер			  = Номер;
	Попытка
		ДанныеОперации.Сумма		  = Число(Сред(Данные61тега, СимволНачалаОтсчетаСуммы, КоличествоСимволовМеждуNИЗапятой + 3));
	Исключение
		ДанныеОперации.Сумма		  = 0;
	КонецПопытки;
	
	СтрокаПоТегу86 = СтрЗаменить(МассивПоТегу86.Получить(МассивПоТегу86.Количество() - 1), Символы.ПС, "");
	
	Если СтрНайти(СтрокаПоТегу86, "~") > 0 Тогда
		СимволПоиска = "~";
	Иначе
		СимволПоиска = "?";
	КонецЕсли;
	
	МассивСтрокПоТегу = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаПоТегу86, СимволПоиска);
	
	СтруктураВыписки = Новый Структура;
	СтруктураВыписки.Вставить("Наименование");
	СтруктураВыписки.Вставить("ИНН");
	СтруктураВыписки.Вставить("Страна");
	СтруктураВыписки.Вставить("НомерСчета");
	СтруктураВыписки.Вставить("БанкSWIFT");
	СтруктураВыписки.Вставить("Банк");
	
	Для Каждого ЭлементМассива Из МассивСтрокПоТегу Цикл
		Если Лев(ЭлементМассива, 2) = "30" Тогда
			ДанныеОперации.Идентификатор = ПолучитьСтрокуБезТега(ЭлементМассива);
		ИначеЕсли Лев(ЭлементМассива, 2) = "31" Тогда
			СтруктураВыписки.НомерСчета = ПолучитьСтрокуБезТега(ЭлементМассива); 
		ИначеЕсли Лев(ЭлементМассива, 2) = "32" Или Лев(ЭлементМассива, 2) = "33" Тогда
			СтруктураВыписки.Наименование = ПолучитьСтрокуБезТега(ЭлементМассива);
		КонецЕсли;
	КонецЦикла;
	
	ЗаполнитьДанныеПлательщикаМТ940(ДанныеОперации, СтруктураВыписки, РеквизитыВладельцаСчета);
	ЗаполнитьДанныеПолучателяМТ940(ДанныеОперации, СтруктураВыписки, РеквизитыВладельцаСчета);
	
	ДокументыВыписки.Добавить(ДанныеОперации);
	
КонецПроцедуры

Процедура ЗаполнитьДанныеПлательщикаМТ940(ДанныеОперации, СтруктураВыписки, РеквизитыВладельцаСчета)
	
	Если ДанныеОперации.НаправлениеПлатежа = "1" Тогда
		ДанныеОперации.Плательщик = "";
		ДанныеОперации.ПлательщикИНН = "";
		ДанныеОперации.ПлательщикСтрана = "";
		ДанныеОперации.ПлательщикСчет = РеквизитыВладельцаСчета.РасчСчет;
		ДанныеОперации.ПлательщикБанкSWIFT = "";
		ДанныеОперации.ПлательщикБанк = "";
	Иначе
		ДанныеОперации.Плательщик = СтруктураВыписки.Наименование;
		ДанныеОперации.ПлательщикИНН = СтруктураВыписки.ИНН;
		ДанныеОперации.ПлательщикСтрана = СтруктураВыписки.Страна;
		ДанныеОперации.ПлательщикСчет = СтруктураВыписки.НомерСчета;
		ДанныеОперации.ПлательщикБанкSWIFT = СтруктураВыписки.БанкSWIFT;
		ДанныеОперации.ПлательщикБанк = СтруктураВыписки.Банк;
	КонецЕсли;
	
КонецПроцедуры

Процедура ЗаполнитьДанныеПолучателяМТ940(ДанныеОперации, СтруктураВыписки, РеквизитыВладельцаСчета)
	
	Если ДанныеОперации.НаправлениеПлатежа = "2" Тогда
		ДанныеОперации.Получатель = "";
		ДанныеОперации.ПолучательИНН = "";
		ДанныеОперации.ПолучательСтрана = "";
		ДанныеОперации.ПолучательСчет = РеквизитыВладельцаСчета.РасчСчет;
		ДанныеОперации.ПолучательБанкSWIFT = "";
		ДанныеОперации.ПолучательБанк = "";
	Иначе
		ДанныеОперации.Получатель = СтруктураВыписки.Наименование;
		ДанныеОперации.ПолучательИНН = СтруктураВыписки.ИНН;
		ДанныеОперации.ПолучательСтрана = СтруктураВыписки.Страна;
		ДанныеОперации.ПолучательСчет = СтруктураВыписки.НомерСчета;
		ДанныеОперации.ПолучательБанкSWIFT = СтруктураВыписки.БанкSWIFT;
		ДанныеОперации.ПолучательБанк = СтруктураВыписки.Банк;
	КонецЕсли;

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

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

Процедура ПрочитатьДанныеАрхиваТОФК(Архив, Результат)

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

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

Процедура ПрочитатьФайлВыпискиТОФК(Файл, Результат)
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьПоток(Файл.ОткрытьПотокДляЧтения());

	ОбъектXDTOФайл = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
	
	ПакетВыписки = ФабрикаXDTO.Пакеты.Получить(Метаданные.ПакетыXDTO.TSE_StatemAccNubp_D13.ПространствоИмен);
	СхемаФорматаВыписки = ФабрикаXDTO.Создать(ПакетВыписки.КорневыеСвойства[0].Тип);
	
	СтруктураДанныхФайла = Новый Структура;
	ПрочитатьДанныеXDTOПоСхеме(ОбъектXDTOФайл, СхемаФорматаВыписки, СтруктураДанныхФайла);
	
	ЧтениеXML.Закрыть();
	
	Если СтруктураДанныхФайла.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	ЗаполнитьДанныеВыпискиТОФК(СтруктураДанныхФайла, Результат);
	
КонецПроцедуры

// Читает файл платежного поручения типа TSE_0401060_D07 от ТОФК.
// 
// Параметры:
//  Файл - ДвоичныеДанные - Файл
//  Результат - Структура - Результат:
//  * Заголовок - Структура:
//   ** Отправитель - Строка - имя отправителя файла.
//   ** ДатаСоздания - Дата, Неопределено - дата создания файла.
//   ** ДатаНачала - Дата, Неопределено - дата начала периода, за который сформированы данные файла.
//   ** ДатаКонца - Дата, Неопределено - дата конца периода, за который сформированы данные файла.
//  * РасчетныеСчета - Массив из Строка - расчетные счета по прочитанному файлу.
//  * ДокументыВыписки - Массив из Структура - данные по загружаемым операциям.
//  * ОшибкиРазбора - Массив из Строка - ошибки загрузки.
//  * ЛицевыеСчета - Массив из Строка - список лицевых счетов по читаемому файлу.
//
Процедура ПрочитатьФайлПлатежногоПорученияТОФК(Файл, Результат)

	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьПоток(Файл.ОткрытьПотокДляЧтения());

	ОбъектXDTOФайл = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
	
	ПакетПлатежныхПоручений = ФабрикаXDTO.Пакеты.Получить(Метаданные.ПакетыXDTO.TSE_0401060_D07.ПространствоИмен);
	СхемаФорматаПлатежногоПоручения = ФабрикаXDTO.Создать(ПакетПлатежныхПоручений.КорневыеСвойства[0].Тип);
	
	СтруктураДанныхФайла = Новый Структура;
	ПрочитатьДанныеXDTOПоСхеме(ОбъектXDTOФайл, СхемаФорматаПлатежногоПоручения, СтруктураДанныхФайла);
	
	ЧтениеXML.Закрыть();
	
	Если СтруктураДанныхФайла.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	// Реквизиты платежного поручения
	ДанныеОперации = ДенежныеСредстваСервер.ДанныеЗагружаемойОперации();
	ДанныеОперации.Вставить("Номер", СтруктураДанныхФайла.BasicRequisites_DocNum);
	ДанныеОперации.Вставить("Дата", СтруктураДанныхФайла.BasicRequisites_DocDate);
	ДанныеОперации.Вставить("Сумма", СтруктураДанныхФайла.BasicRequisites_PaySum);
	
	ДанныеОперации.Вставить("Идентификатор", ЗначениеТегаТОФК(СтруктураДанныхФайла, "BasicRequisites_DocGuid"));
	ДанныеОперации.Вставить("Операция", ЗначениеТегаТОФК(СтруктураДанныхФайла, "BasicRequisites_PayView", ""));
	
	ВидПлатежа = ЗначениеТегаТОФК(СтруктураДанныхФайла, "BasicRequisites_PayView_code", "");
	ДанныеОперации.Вставить("ВидПлатежа", ?(ВидПлатежа = "4", "Срочно", ""));
	
	Если СтруктураДанныхФайла.Свойство("AdditionalInfo_PayDate") Тогда
		ДанныеОперации.Вставить("СрокПлатежа", СтруктураДанныхФайла.AdditionalInfo_PayDate);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("AdditionalInfo_OperType") Тогда
		ДанныеОперации.Вставить("ВидОплаты", СтруктураДанныхФайла.AdditionalInfo_OperType);
	КонецЕсли;
	
	ДанныеОперации.Вставить("Очередность", СтруктураДанныхФайла.AdditionalInfo_PayOrder);
	
	// Реквизиты плательщика
	ДанныеОперации.Вставить("ПлательщикИНН", СтруктураДанныхФайла.PayerAndRecipient_Payer_INN);
	
	Если СтруктураДанныхФайла.Свойство("PayerAndRecipient_Payer_KPP") Тогда
		ДанныеОперации.Вставить("ПлательщикКПП", СтруктураДанныхФайла.PayerAndRecipient_Payer_KPP);
	КонецЕсли;
	
	ДанныеОперации.Вставить("Плательщик", СтруктураДанныхФайла.PayerAndRecipient_Payer_Name);
	ДанныеОперации.Вставить("ПлательщикРасчСчет", СтруктураДанныхФайла.PayerAndRecipient_Payer_CheckAcc);
	ДанныеОперации.Вставить("ПлательщикСчет", СтруктураДанныхФайла.PayerAndRecipient_Payer_CheckAcc);
	ДанныеОперации.Вставить("ПлательщикЛицевойСчет", СтруктураДанныхФайла.PayerAndRecipient_Payer_PersonalAcc);
	
	ДанныеОперации.Вставить("НаправлениеПлатежа", ?(ЗначениеЗаполнено(ДанныеОперации.ПлательщикСчет), "1", "2"));
	
	// Реквизиты банка плательщика
	ДанныеОперации.Вставить("ПлательщикБИК", СтруктураДанныхФайла.PayerAndRecipient_Payer_BIK);
	
	Если СтруктураДанныхФайла.Свойство("PayerAndRecipient_Payer_BankName") Тогда
		ДанныеОперации.Вставить("ПлательщикБанк", СтруктураДанныхФайла.PayerAndRecipient_Payer_BankName);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("PayerAndRecipient_Payer_CorrAcc") Тогда
		ДанныеОперации.Вставить("ПлательщикКорсчет", СтруктураДанныхФайла.PayerAndRecipient_Payer_CorrAcc);
	КонецЕсли;
	
	// Реквизиты получателя
	ДанныеОперации.Вставить("ПолучательИНН", СтруктураДанныхФайла.PayerAndRecipient_Recip_INN);
	
	Если СтруктураДанныхФайла.Свойство("PayerAndRecipient_Recip_KPP") Тогда
		ДанныеОперации.Вставить("ПолучательКПП", СтруктураДанныхФайла.PayerAndRecipient_Recip_KPP);
	КонецЕсли;
	
	ДанныеОперации.Вставить("Получатель", СтруктураДанныхФайла.PayerAndRecipient_Recip_Name);
	
	Если СтруктураДанныхФайла.Свойство("PayerAndRecipient_Recip_CheckAcc") Тогда
		ДанныеОперации.Вставить("ПолучательРасчСчет", СтруктураДанныхФайла.PayerAndRecipient_Recip_CheckAcc);
		ДанныеОперации.Вставить("ПолучательСчет", СтруктураДанныхФайла.PayerAndRecipient_Recip_CheckAcc);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("PayerAndRecipient_Recip_PersonalAcc") Тогда
		ДанныеОперации.Вставить("ПолучательЛицевойСчет", СтруктураДанныхФайла.PayerAndRecipient_Recip_PersonalAcc);
	КонецЕсли;
	
	// Реквизиты банка получателя
	ДанныеОперации.Вставить("ПолучательБИК", СтруктураДанныхФайла.PayerAndRecipient_Recip_BIK);
	
	Если СтруктураДанныхФайла.Свойство("PayerAndRecipient_Recip_BankName") Тогда
		ДанныеОперации.Вставить("ПолучательБанк", СтруктураДанныхФайла.PayerAndRecipient_Recip_BankName);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("PayerAndRecipient_Recip_CorrAcc") Тогда
		ДанныеОперации.Вставить("ПолучательКорсчет", СтруктураДанныхФайла.PayerAndRecipient_Recip_CorrAcc);
	КонецЕсли;
	
	// Налоговые платежи
	Если СтруктураДанныхФайла.Свойство("TAX_UIN") Тогда
		ДанныеОперации.Вставить("Код", СтруктураДанныхФайла.TAX_UIN);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("TAX_DrawStat") Тогда
		ДанныеОперации.Вставить("СтатусСоставителя", СтруктураДанныхФайла.TAX_DrawStat);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("TAX_KBK") Тогда
		ДанныеОперации.Вставить("ПоказательКБК", СтруктураДанныхФайла.TAX_KBK);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("TAX_OKTMO") Тогда
		ДанныеОперации.Вставить("ОКАТО", СтруктураДанныхФайла.TAX_OKTMO);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("TAX_PayReason") Тогда
		ДанныеОперации.Вставить("ПоказательОснования", СтруктураДанныхФайла.TAX_PayReason);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("TAX_Period") Тогда
		ДанныеОперации.Вставить("ПоказательПериода", СтруктураДанныхФайла.TAX_Period);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("TAX_DocNo") Тогда
		ДанныеОперации.Вставить("ПоказательНомера", СтруктураДанныхФайла.TAX_DocNo);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("TAX_DocDate") Тогда
		
		Если СтруктураДанныхФайла.TAX_DocDate = "0"
			ИЛИ СтруктураДанныхФайла.TAX_DocDate = "00" Тогда
			ДанныеОперации.Вставить("ПоказательДаты", СтруктураДанныхФайла.TAX_DocDate);
		Иначе
			ДанныеОперации.Вставить("ПоказательДаты", XMLЗначение(Тип("Дата"), СтруктураДанныхФайла.TAX_DocDate));
		КонецЕсли;
		
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("TAX_TypeNP") Тогда
		ДанныеОперации.Вставить("ПоказательТипа", СтруктураДанныхФайла.TAX_TypeNP);
	КонецЕсли;
	
	// Общие данные платежного поручения
	ДанныеОперации.Вставить("НазначениеПлатежа", СтруктураДанныхФайла.TranscriptPP_PayPurpose);
	
	Если СтруктураДанныхФайла.Свойство("MarksTOFK_DateOper") Тогда
		ДанныеОперации.Вставить("ДатаОперации", СтруктураДанныхФайла.MarksTOFK_DateOper);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("DepartmentalInfo_PurposePayment") Тогда
		ДанныеОперации.Вставить("КодНазПлатежа", СтруктураДанныхФайла.DepartmentalInfo_PurposePayment);
	КонецЕсли;
	
	// Расшифровка платежа
	Если СтруктураДанныхФайла.Свойство("TSE_Tab0401060_TSE_Tab0401060_ITEM") Тогда
		
		ТаблицаРасшифровки = ПустаяТаблицаРасшифровкиТОФК();
		
		Для Каждого СтрокаРасшифровки Из СтруктураДанныхФайла.TSE_Tab0401060_TSE_Tab0401060_ITEM Цикл
			
			НоваяСтрока = ТаблицаРасшифровки.Добавить();
			
			Если ДанныеОперации.НаправлениеПлатежа = "1" Тогда
				
				НоваяСтрока.АналитическийКодРаздела = ЗначениеТегаТОФК(СтрокаРасшифровки, "AnalyticCodePay");
				
				
			Иначе
				
				НоваяСтрока.АналитическийКодРаздела = ЗначениеТегаТОФК(СтрокаРасшифровки, "AnalyticCodeRec");
			
				
			КонецЕсли;
			
			НоваяСтрока.ИГК = ЗначениеТегаТОФК(СтрокаРасшифровки, "ContractID");
			НоваяСтрока.Сумма = ЗначениеТегаТОФК(СтрокаРасшифровки, "Sum");
			НоваяСтрока.СуммаНДС = ЗначениеТегаТОФК(СтрокаРасшифровки, "SumNDS");
			
		КонецЦикла;
		
		Разделы = ТаблицаРасшифровки.Скопировать(, "АналитическийКодРаздела, Сумма, СуммаНДС");
		Разделы.Свернуть("АналитическийКодРаздела", "Сумма, СуммаНДС");
		
		ВсегоСтрок = Разделы.Количество();
		
		Если ВсегоСтрок > 1 Тогда
			
			Для Индекс = 1 По ВсегоСтрок - 1 Цикл
				
				Раздел = Разделы[Индекс];
				Отбор = Новый Структура("АналитическийКодРаздела");
				ЗаполнитьЗначенияСвойств(Отбор, Раздел);
				
				ТаблицаПоОтбору = ТаблицаРасшифровки.Скопировать(Отбор);
				
				Если ТаблицаПоОтбору.Колонки.Найти("СтатьяЦелевыхСредств") <> Неопределено Тогда
					ТаблицаПоОтбору.Свернуть("ИГК, АналитическийКодРаздела, СтатьяЦелевыхСредств", "Сумма, СуммаНДС");
				Иначе
					ТаблицаПоОтбору.Свернуть("ИГК, АналитическийКодРаздела", "Сумма, СуммаНДС");
				КонецЕсли;
				
				ДанныеОперацииКопия = ОбщегоНазначения.СкопироватьРекурсивно(ДанныеОперации);
				ДанныеОперацииКопия.Вставить("АналитическийКодРаздела", Раздел.АналитическийКодРаздела);
				ДанныеОперацииКопия.Вставить("Сумма", Раздел.Сумма + Раздел.СуммаНДС);
				ДанныеОперацииКопия.Вставить("ИГК", ТаблицаПоОтбору[0].ИГК);
				
				Результат.ДокументыВыписки.Добавить(ДанныеОперацииКопия);
				
			КонецЦикла;
			
		КонецЕсли;
			
		СтрокаТаблицы = ТаблицаРасшифровки[0];
		ДанныеОперации.Вставить("АналитическийКодРаздела", Разделы[0].АналитическийКодРаздела);
		ДанныеОперации.Вставить("ИГК", СтрокаТаблицы.ИГК);
		ДанныеОперации.Вставить("Сумма", Разделы[0].Сумма + Разделы[0].СуммаНДС);
		
	КонецЕсли;
	
	Результат.ДокументыВыписки.Добавить(ДанныеОперации);
	
	Результат.Заголовок.ДатаНачала = ?(Результат.Заголовок.ДатаНачала = Неопределено,
									ДанныеОперации.Дата,
									Мин(Результат.Заголовок.ДатаНачала, ДанныеОперации.Дата));
	Результат.Заголовок.ДатаКонца = ?(Результат.Заголовок.ДатаКонца = Неопределено,
									КонецДня(ДанныеОперации.Дата),
									Макс(Результат.Заголовок.ДатаКонца, КонецДня(ДанныеОперации.Дата)));
									
	Для Каждого РасчетныйСчет Из Результат.РасчетныеСчета Цикл
		РасчетныйСчет.ДатаНачала = Результат.Заголовок.ДатаНачала;
		РасчетныйСчет.ДатаКонца = Результат.Заголовок.ДатаКонца;
	КонецЦикла;

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

Процедура ПрочитатьФайлРаспоряженияОСовершенииПлатежаТОФК(Файл, Результат)

	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьПоток(Файл.ОткрытьПотокДляЧтения());

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

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


Функция ЗначениеТегаТОФК(Источник, ИмяТега, ЗначениеПоУмолчанию = Неопределено)
	
	Если Источник.Свойство(ИмяТега) Тогда
		Возврат Источник[ИмяТега];
	КонецЕсли;
	
	Возврат ЗначениеПоУмолчанию;
	
КонецФункции

Процедура ЗаполнитьДанныеВыпискиТОФК(Выписка, Результат)

	Если Результат.ЛицевыеСчета.Найти(Выписка.BasicRequisites_AccNum) <> Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Результат.ЛицевыеСчета.Добавить(Выписка.BasicRequisites_AccNum);
	Результат.Заголовок.ДатаНачала = ?(Результат.Заголовок.ДатаНачала = Неопределено,
									КонецДня(Выписка.BasicRequisites_DatePrevStatement) + 1,
									Мин(Результат.Заголовок.ДатаНачала, КонецДня(Выписка.BasicRequisites_DatePrevStatement) + 1));
	Результат.Заголовок.ДатаКонца = ?(Результат.Заголовок.ДатаКонца = Неопределено,
									КонецДня(Выписка.BasicRequisites_DocDate),
									Макс(Результат.Заголовок.ДатаКонца, КонецДня(Выписка.BasicRequisites_DocDate)));
	Результат.Заголовок.ДатаСоздания = Выписка.BasicRequisites_DocDate;
	Результат.Заголовок.Отправитель = Выписка.ORFK_NameFK;
	
	Если Выписка.Свойство("TSE_BalanAcc_D13_TSE_BalanAcc_D13_ITEM")
		ИЛИ Выписка.Свойство("TSE_BalanAcc2_D13_TSE_BalanAcc2_D13_ITEM") Тогда
		
		ТаблицаОстатков = ?(Выписка.Свойство("TSE_BalanAcc_D13_TSE_BalanAcc_D13_ITEM"),
							Выписка.TSE_BalanAcc_D13_TSE_BalanAcc_D13_ITEM,
							Выписка.TSE_BalanAcc2_D13_TSE_BalanAcc2_D13_ITEM);
		ОстаткиСредствПоРазделам = НоваяТаблицаОстатковВыпискиТОФК();
		
		Для Каждого ТекущийОстаток Из ТаблицаОстатков Цикл
			
			НоваяСтрока = ОстаткиСредствПоРазделам.Добавить();
			
			НоваяСтрока.АналитическийКодРаздела = ТекущийОстаток.AnalitCode;
			НоваяСтрока.НачальныйОстаток = ТекущийОстаток.SDTotal;
			НоваяСтрока.КонечныйОстаток = ТекущийОстаток.EDTotal;
		
		КонецЦикла;
		
		ЗаполнитьСведенияОбОстаткахТОФК(ОстаткиСредствПоРазделам,
										Выписка.BasicRequisites_AccNum,
										Результат.Заголовок.ДатаНачала,
										Результат.Заголовок.ДатаКонца,
										Результат.РасчетныеСчета);
		
	КонецЕсли;

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

Процедура ЗаполнитьДанныеВыпискиТОФКПоДокументамВыписки(ДокументыВыписки, РасчетныеСчета)

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

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

Процедура ЗаполнитьДанныеРаспоряженияТОФК(СтруктураДанныхФайла, Результат)

	ДанныеОперации = ДенежныеСредстваСервер.ДанныеЗагружаемойОперации();
	ДанныеОперации.Вставить("Номер", СтруктураДанныхФайла.AccDoc_DocNum);
	ДанныеОперации.Вставить("Дата", СтруктураДанныхФайла.AccDoc_DocDate);
	
	Если СтруктураДанныхФайла.Свойство("ExecDate") Тогда
		ДанныеОперации.Вставить("ДатаОперации", СтруктураДанныхФайла.ExecDate);
		ДанныеОперации.Вставить("НаправлениеПлатежа", "1");
	Иначе
		ДанныеОперации.Вставить("ДатаОперации", СтруктураДанныхФайла.AccDoc_DocDate);
		ДанныеОперации.Вставить("НаправлениеПлатежа", "2");
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("AddInfo_PaymentID") Тогда
		ДанныеОперации.Вставить("Идентификатор", ЗначениеТегаТОФК(СтруктураДанныхФайла, "AddInfo_PaymentID"));
	КонецЕсли;
	
	ДанныеОперации.Вставить("Сумма", СтруктураДанныхФайла.BasicRequisites_PaySum);
	ДанныеОперации.Вставить("Валюта", Справочники.Валюты.НайтиПоКоду(СтруктураДанныхФайла.CurrCode_OKV));
	
	// Реквизиты плательщика
	ДанныеОперации.Вставить("ПлательщикИНН", СтруктураДанныхФайла.Payer_INN);
	ДанныеОперации.Вставить("ПлательщикКПП", СтруктураДанныхФайла.Payer_KPP);
	ДанныеОперации.Вставить("Плательщик", СтруктураДанныхФайла.Payer_Name);
	ДанныеОперации.Вставить("ПлательщикРасчСчет", СтруктураДанныхФайла.Payer_CheckAcc);
	ДанныеОперации.Вставить("ПлательщикСчет", СтруктураДанныхФайла.Payer_CheckAcc);
	
	Если СтруктураДанныхФайла.Свойство("Payer_AccNum") Тогда
		ДанныеОперации.Вставить("ПлательщикЛицевойСчет", СтруктураДанныхФайла.Payer_AccNum);
	КонецЕсли;
	
	// Реквизиты банка плательщика
	ДанныеОперации.Вставить("ПлательщикБИК", СтруктураДанныхФайла.Payer_BIK);
	ДанныеОперации.Вставить("ПлательщикБанк", СтруктураДанныхФайла.Payer_BankName);
	ДанныеОперации.Вставить("ПлательщикКорсчет", СтруктураДанныхФайла.Payer_CorrAcc);
	
	// Реквизиты получателя
	ДанныеОперации.Вставить("ПолучательИНН", СтруктураДанныхФайла.Recip_INN);
	ДанныеОперации.Вставить("ПолучательКПП", СтруктураДанныхФайла.Recip_KPP);
	ДанныеОперации.Вставить("Получатель", СтруктураДанныхФайла.Recip_Name);
	ДанныеОперации.Вставить("ПолучательРасчСчет", СтруктураДанныхФайла.Recip_CheckAcc);
	ДанныеОперации.Вставить("ПолучательСчет", СтруктураДанныхФайла.Recip_CheckAcc);
	
	Если СтруктураДанныхФайла.Свойство("Recip_AccNum") Тогда
		ДанныеОперации.Вставить("ПолучательЛицевойСчет", СтруктураДанныхФайла.Recip_AccNum);
	КонецЕсли;
	
	// Реквизиты банка получателя
	ДанныеОперации.Вставить("ПолучательБИК", СтруктураДанныхФайла.Recip_BIK);
	ДанныеОперации.Вставить("ПолучательБанк", СтруктураДанныхФайла.Recip_BankName);
	ДанныеОперации.Вставить("ПолучательКорсчет", СтруктураДанныхФайла.Recip_CorrAcc);
	
	// Налоговые реквизиты
	Если СтруктураДанныхФайла.Свойство("DepInfo_TAX_DrawStat") Тогда
		ДанныеОперации.Вставить("СтатусСоставителя", СтруктураДанныхФайла.DepInfo_TAX_DrawStat);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("DepInfo_TAX_KBK") Тогда
		ДанныеОперации.Вставить("ПоказательКБК", СтруктураДанныхФайла.DepInfo_TAX_KBK);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("DepInfo_TAX_OKTMO") Тогда
		ДанныеОперации.Вставить("ОКАТО", СтруктураДанныхФайла.DepInfo_TAX_OKTMO);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("DepInfo_TAX_PayReason") Тогда
		ДанныеОперации.Вставить("ПоказательОснования", СтруктураДанныхФайла.DepInfo_TAX_PayReason);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("DepInfo_TAX_Period") Тогда
		ДанныеОперации.Вставить("ПоказательПериода", СтруктураДанныхФайла.DepInfo_TAX_Period);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("DepInfo_TAX_DocNo") Тогда
		ДанныеОперации.Вставить("ПоказательНомера", СтруктураДанныхФайла.DepInfo_TAX_DocNo);
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("DepInfo_TAX_DocDate") Тогда
		
		Если СтруктураДанныхФайла.TAX_DocDate = "0"
			ИЛИ СтруктураДанныхФайла.TAX_DocDate = "00" Тогда
			ДанныеОперации.Вставить("ПоказательДаты", СтруктураДанныхФайла.DepInfo_TAX_DocDate);
		Иначе
			ДанныеОперации.Вставить("ПоказательДаты", XMLЗначение(Тип("Дата"), СтруктураДанныхФайла.DepInfo_TAX_DocDate));
		КонецЕсли;
		
	КонецЕсли;
	
	Если СтруктураДанныхФайла.Свойство("Payer_Ident") Тогда
		ДанныеОперации.Вставить("Код", СтруктураДанныхФайла.Payer_Ident);
	КонецЕсли;
	
	// Общие данные платежного поручения
	ДанныеОперации.Вставить("НазначениеПлатежа", СтруктураДанныхФайла.DepInfo_PayPurpose);
	
	// Расшифровка поручения
	Если СтруктураДанныхФайла.Свойство("OrdersAcc_OrdersAcc_ITEM") Тогда
		
		ТаблицаРасшифровки = ПустаяТаблицаРасшифровкиТОФК();
		
		Для Каждого СтрокаРасшифровки Из СтруктураДанныхФайла.OrdersAcc_OrdersAcc_ITEM Цикл
			
			НоваяСтрока = ТаблицаРасшифровки.Добавить();
			
			Если ДанныеОперации.НаправлениеПлатежа = "1" Тогда
				
				НоваяСтрока.АналитическийКодРаздела = ЗначениеТегаТОФК(СтрокаРасшифровки, "Order_AnalyticCodePay");
				
				
			Иначе
				
				НоваяСтрока.АналитическийКодРаздела = ЗначениеТегаТОФК(СтрокаРасшифровки, "Order_AnalyticCodeRec");
			
				
			КонецЕсли;
			
			НоваяСтрока.ИГК = ЗначениеТегаТОФК(СтрокаРасшифровки, "Order_IGK");
			НоваяСтрока.Сумма = ЗначениеТегаТОФК(СтрокаРасшифровки, "Order_Sum");
			
		КонецЦикла;
		
		Разделы = ТаблицаРасшифровки.Скопировать(, "АналитическийКодРаздела, Сумма");
		Разделы.Свернуть("АналитическийКодРаздела", "Сумма");
		
		ВсегоСтрок = Разделы.Количество();
		
		Если ВсегоСтрок > 1 Тогда
			
			Для Индекс = 1 По ВсегоСтрок - 1 Цикл
				
				Раздел = Разделы[Индекс];
				Отбор = Новый Структура("АналитическийКодРаздела");
				ЗаполнитьЗначенияСвойств(Отбор, Раздел);
				
				ТаблицаПоОтбору = ТаблицаРасшифровки.Скопировать(Отбор);
				
				Если ТаблицаПоОтбору.Колонки.Найти("СтатьяЦелевыхСредств") <> Неопределено Тогда
					ТаблицаПоОтбору.Свернуть("ИГК, АналитическийКодРаздела, СтатьяЦелевыхСредств", "Сумма");
				Иначе
					ТаблицаПоОтбору.Свернуть("ИГК, АналитическийКодРаздела", "Сумма");
				КонецЕсли;
				
				ДанныеОперацииКопия = ОбщегоНазначения.СкопироватьРекурсивно(ДанныеОперации);
				ДанныеОперацииКопия.Вставить("АналитическийКодРаздела", Раздел.АналитическийКодРаздела);
				ДанныеОперацииКопия.Вставить("Сумма", Раздел.Сумма);
				ДанныеОперацииКопия.Вставить("ИГК", ТаблицаПоОтбору[0].ИГК);
				
				Результат.ДокументыВыписки.Добавить(ДанныеОперацииКопия);
				
			КонецЦикла;
			
		КонецЕсли;
			
		СтрокаТаблицы = ТаблицаРасшифровки[0];
		ДанныеОперации.Вставить("АналитическийКодРаздела", Разделы[0].АналитическийКодРаздела);
		ДанныеОперации.Вставить("ИГК", СтрокаТаблицы.ИГК);
		ДанныеОперации.Вставить("Сумма", Разделы[0].Сумма);
		
	КонецЕсли;
	
	Результат.ДокументыВыписки.Добавить(ДанныеОперации);
	
	Результат.Заголовок.ДатаНачала = ?(Результат.Заголовок.ДатаНачала = Неопределено,
									ДанныеОперации.Дата,
									Мин(Результат.Заголовок.ДатаНачала, ДанныеОперации.Дата));
	Результат.Заголовок.ДатаКонца = ?(Результат.Заголовок.ДатаКонца = Неопределено,
									КонецДня(ДанныеОперации.Дата),
									Макс(Результат.Заголовок.ДатаКонца, КонецДня(ДанныеОперации.Дата)));
									
	Для Каждого РасчетныйСчет Из Результат.РасчетныеСчета Цикл
		
		Если РасчетныйСчет.РасчСчет = ДанныеОперации.ПлательщикРасчСчет
			Или РасчетныйСчет.РасчСчет = ДанныеОперации.ПолучательРасчСчет Тогда
			
			РасчетныйСчет.ДатаНачала = Результат.Заголовок.ДатаНачала;
			РасчетныйСчет.ДатаКонца = Результат.Заголовок.ДатаКонца;
			
			РасчетныйСчет.ВсегоПоступило = ?(ДанныеОперации.НаправлениеПлатежа = "1", 0, ДанныеОперации.Сумма);
			РасчетныйСчет.ВсегоСписано = ?(ДанныеОперации.НаправлениеПлатежа = "1", ДанныеОперации.Сумма, 0);
			
		КонецЕсли;
		
	КонецЦикла;

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

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

Функция ПолучитьСтрокуБезТега(СтрокаСТегом)
	
	Возврат(Прав(СтрокаСТегом, СтрДлина(СтрокаСТегом) - 2));
	
КонецФункции

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

Процедура ЗаполнитьКонтрагентов(ДокументыКЗагрузке, ТаблицаДокументов) Экспорт
	
	Запрос = Новый Запрос;
	МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	
	Запрос.Текст = "
	|ВЫБРАТЬ
	|	ТаблицаДокументов.НомерСтроки,
	|	ТаблицаДокументов.ИмяКонтрагента КАК Наименование,
	|	ТаблицаДокументов.СокрИмяКонтрагента КАК СокращенноеНаименование,
	|	ТаблицаДокументов.Контрагент КАК Контрагент,
	|	ВЫБОР
	|		КОГДА ТаблицаДокументов.Исходящий ТОГДА
	|			ТаблицаДокументов.ПолучательИНН
	|		ИНАЧЕ
	|			ТаблицаДокументов.ПлательщикИНН
	|	КОНЕЦ КАК ИНН,
	|	ВЫБОР
	|		КОГДА ТаблицаДокументов.Исходящий ТОГДА
	|		ТаблицаДокументов.ПолучательКПП
	|	ИНАЧЕ
	|		ТаблицаДокументов.ПлательщикКПП
	|	КОНЕЦ КАК КПП,
	|	ТаблицаДокументов.ПроверятьИНН,
	|	ТаблицаДокументов.ПроверятьКПП,
	|	ВЫБОР
	|		КОГДА ТаблицаДокументов.Исходящий ТОГДА
	|			ТаблицаДокументов.ПолучательСчет
	|		ИНАЧЕ
	|			ТаблицаДокументов.ПлательщикСчет
	|	КОНЕЦ КАК НомерСчета,
	|	ВЫРАЗИТЬ(ВЫБОР
	|		КОГДА ТаблицаДокументов.Исходящий ТОГДА
	|			ТаблицаДокументов.ПолучательБИК
	|		ИНАЧЕ
	|			ТаблицаДокументов.ПлательщикБИК
	|	КОНЕЦ КАК Строка(9)) КАК БИКБанка,
	|	ТаблицаДокументов.ВидОперации
	|
	|ПОМЕСТИТЬ ТаблицаДокументов
	|
	|ИЗ
	|	&ТаблицаДокументов КАК ТаблицаДокументов
	|";
	
	Запрос.УстановитьПараметр("ТаблицаДокументов", ТаблицаДокументов);
	Запрос.Выполнить();
	
	Запрос.Текст = "
	|ВЫБРАТЬ
	|	ТаблицаДокументов.НомерСтроки КАК НомерСтроки,
	|	ДанныеСправочника.Владелец КАК Контрагент,
	|	ДанныеСправочника.Ссылка КАК СчетКонтрагента,
	|	0 КАК Приоритет
	|
	|ИЗ
	|	ТаблицаДокументов
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|		Справочник.БанковскиеСчетаОрганизаций КАК ДанныеСправочника
	|	ПО
	|		ДанныеСправочника.НомерСчета = ТаблицаДокументов.НомерСчета
	|		И (ДанныеСправочника.Банк.Код = ТаблицаДокументов.БИКБанка Или ДанныеСправочника.БИКБанка = ТаблицаДокументов.БИКБанка)
	|		И ДанныеСправочника.Владелец.ИНН = ТаблицаДокументов.ИНН
	|		И ТаблицаДокументов.ПроверятьИНН
	|		И НЕ ДанныеСправочника.Закрыт,
	|	Константа.ИспользоватьПередачиТоваровМеждуОрганизациями КАК ИспользоватьПередачиТоваровМеждуОрганизациями
	|ГДЕ
	|	ВЫБОР
	|		КОГДА ТаблицаДокументов.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПустаяСсылка)
	|				ИЛИ ТаблицаДокументов.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПоступлениеДенежныхСредствИзДругойОрганизации)
	|				ИЛИ ТаблицаДокументов.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ОплатаДенежныхСредствВДругуюОрганизацию)
	|			ТОГДА ИспользоватьПередачиТоваровМеждуОрганизациями.Значение
	|			ИНАЧЕ ИСТИНА
	|		КОНЕЦ
	|	
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ // Контрагент уже найден, ищем счет
	|	ТаблицаДокументов.НомерСтроки КАК НомерСтроки,
	|	Контрагенты.Ссылка КАК Контрагент,
	|	ДанныеСправочника.Ссылка КАК СчетКонтрагента,
	|	5 КАК Приоритет
	|
	|ИЗ
	|	ТаблицаДокументов
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|		Справочник.Контрагенты КАК Контрагенты
	|	ПО
	|		Контрагенты.Ссылка = ТаблицаДокументов.Контрагент
	|	
	|	ЛЕВОЕ СОЕДИНЕНИЕ
	|		Справочник.БанковскиеСчетаКонтрагентов КАК ДанныеСправочника
	|	ПО
	|		ДанныеСправочника.НомерСчета = ТаблицаДокументов.НомерСчета
	|		И ДанныеСправочника.Владелец = Контрагенты.Ссылка
	|		И НЕ ДанныеСправочника.Закрыт
	|	
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ТаблицаДокументов.НомерСтроки КАК НомерСтроки,
	|	ДанныеСправочника.Владелец КАК Контрагент,
	|	ДанныеСправочника.Ссылка КАК СчетКонтрагента,
	|	10 КАК Приоритет
	|
	|ИЗ
	|	ТаблицаДокументов
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|		Справочник.БанковскиеСчетаКонтрагентов КАК ДанныеСправочника
	|	ПО
	|		ДанныеСправочника.НомерСчета = ТаблицаДокументов.НомерСчета
	|		И ДанныеСправочника.Владелец.ИНН = ТаблицаДокументов.ИНН
	|		И ДанныеСправочника.Владелец.КПП = ТаблицаДокументов.КПП
	|		И ТаблицаДокументов.ПроверятьКПП
	|		И НЕ ДанныеСправочника.Закрыт
	|	
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ТаблицаДокументов.НомерСтроки КАК НомерСтроки,
	|	ДанныеСправочника.Владелец КАК Контрагент,
	|	ДанныеСправочника.Ссылка КАК СчетКонтрагента,
	|	20 КАК Приоритет
	|
	|ИЗ
	|	ТаблицаДокументов
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|		Справочник.БанковскиеСчетаКонтрагентов КАК ДанныеСправочника
	|	ПО
	|		ДанныеСправочника.НомерСчета = ТаблицаДокументов.НомерСчета
	|		И ДанныеСправочника.Владелец.ИНН = ТаблицаДокументов.ИНН
	|		И ТаблицаДокументов.ПроверятьИНН
	|		И НЕ ДанныеСправочника.Закрыт
	|	
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ТаблицаДокументов.НомерСтроки КАК НомерСтроки,
	|	ДанныеСправочника.Владелец КАК Контрагент,
	|	ДанныеСправочника.Ссылка КАК СчетКонтрагента,
	|	30 КАК Приоритет
	|
	|ИЗ
	|	ТаблицаДокументов
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|		Справочник.БанковскиеСчетаКонтрагентов КАК ДанныеСправочника
	|	ПО
	|		ДанныеСправочника.НомерСчета = ТаблицаДокументов.НомерСчета
	|		И (ДанныеСправочника.Владелец.НаименованиеПолное = ТаблицаДокументов.Наименование
	|			ИЛИ ДанныеСправочника.Владелец.НаименованиеПолное = ТаблицаДокументов.СокращенноеНаименование)
	|		И НЕ ДанныеСправочника.Закрыт
	|	
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ТаблицаДокументов.НомерСтроки КАК НомерСтроки,
	|	ДанныеСправочника.Ссылка КАК Контрагент,
	|	НЕОПРЕДЕЛЕНО КАК СчетКонтрагента,
	|	40 КАК Приоритет
	|
	|ИЗ
	|	ТаблицаДокументов
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|		Справочник.Контрагенты КАК ДанныеСправочника
	|	ПО
	|		ДанныеСправочника.ИНН = ТаблицаДокументов.ИНН
	|		И ДанныеСправочника.КПП = ТаблицаДокументов.КПП
	|		И ТаблицаДокументов.ПроверятьКПП
	|	
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ТаблицаДокументов.НомерСтроки КАК НомерСтроки,
	|	ДанныеСправочника.Ссылка КАК Контрагент,
	|	НЕОПРЕДЕЛЕНО КАК СчетКонтрагента,
	|	50 КАК Приоритет
	|
	|ИЗ
	|	ТаблицаДокументов
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|		Справочник.Контрагенты КАК ДанныеСправочника
	|	ПО
	|		ДанныеСправочника.ИНН = ТаблицаДокументов.ИНН
	|		И ТаблицаДокументов.ПроверятьИНН
	|	
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ТаблицаДокументов.НомерСтроки КАК НомерСтроки,
	|	ДанныеСправочника.Ссылка КАК Контрагент,
	|	НЕОПРЕДЕЛЕНО КАК СчетКонтрагента,
	|	60 КАК Приоритет
	|
	|ИЗ
	|	ТаблицаДокументов
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|		Справочник.Контрагенты КАК ДанныеСправочника
	|	ПО
	|		ДанныеСправочника.НаименованиеПолное = ТаблицаДокументов.Наименование
	|		И (ДанныеСправочника.ИНН = """"
	|			ИЛИ НЕ ТаблицаДокументов.ПроверятьИНН)
	|		И (ДанныеСправочника.КПП = """"
	|			ИЛИ НЕ ТаблицаДокументов.ПроверятьКПП)
	|	
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ТаблицаДокументов.НомерСтроки КАК НомерСтроки,
	|	ДанныеСправочника.Ссылка КАК Контрагент,
	|	НЕОПРЕДЕЛЕНО КАК СчетКонтрагента,
	|	70 КАК Приоритет
	|
	|ИЗ
	|	ТаблицаДокументов
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|		Справочник.ФизическиеЛица КАК ДанныеСправочника
	|	ПО
	|		ДанныеСправочника.Наименование = ТаблицаДокументов.Наименование
	|		И (ДанныеСправочника.ИНН = ТаблицаДокументов.ИНН
	|			ИЛИ ДанныеСправочника.ИНН = """"
	|			ИЛИ НЕ ТаблицаДокументов.ПроверятьИНН)
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ТаблицаДокументов.НомерСтроки,
	|	ДанныеСправочника.Владелец,
	|	ДанныеСправочника.Ссылка,
	|	80
	|
	|ИЗ
	|	ТаблицаДокументов
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|		Справочник.БанковскиеСчетаКонтрагентов КАК ДанныеСправочника
	|		ПО ДанныеСправочника.НомерСчета = ТаблицаДокументов.НомерСчета
	|			И НЕ ДанныеСправочника.Закрыт
	|			И (ДанныеСправочника.Владелец.ИНН = """"
	|				ИЛИ НЕ ТаблицаДокументов.ПроверятьИНН)
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки,
	|	Приоритет
	|";
	
	УстановитьПривилегированныйРежим(Истина);
	Выборка = Запрос.Выполнить().Выбрать();
	УстановитьПривилегированныйРежим(Ложь);
	
	Пока Выборка.СледующийПоЗначениюПоля("НомерСтроки") Цикл
		
		СтрокаДокумента = ДокументыКЗагрузке.Найти(Выборка.НомерСтроки, "НомерСтроки");
		Если СтрокаДокумента <> Неопределено Тогда
			
			НайденоКонтрагентов = 0;
			ТекущийПриоритет = 99;
			
			Пока Выборка.Следующий() Цикл
				Если ТекущийПриоритет < Выборка.Приоритет Тогда
					Прервать;
				КонецЕсли;
				
				Если СтрокаДокумента.ЭтоСБП
					И Не ЗначениеЗаполнено(СтрокаДокумента.Контрагент)
					И Выборка.Контрагент = Справочники.Контрагенты.РозничныйПокупатель Тогда
					Продолжить;
				КонецЕсли;
				
				ТекущийПриоритет = Выборка.Приоритет;
				НайденоКонтрагентов = НайденоКонтрагентов + 1;
				
				Если НайденоКонтрагентов = 1 Тогда
					
					СтрокаДокумента.Контрагент = Выборка.Контрагент;
					СтрокаДокумента.НайденКонтрагент = Истина;
					
					Если ЗначениеЗаполнено(Выборка.СчетКонтрагента) Тогда
						СтрокаДокумента.СчетКонтрагента = Выборка.СчетКонтрагента;
						СтрокаДокумента.НайденСчетКонтрагента = Истина;
					КонецЕсли;
				КонецЕсли;
			КонецЦикла;
			
			// Если найдено два одинаковых контрагента с одинаковым номером счета, тогда контрагента не заполняем, 
			// будет предложено выбрать контрагента, по выбранному контрагенту определится счет.
			// Если найдено два одинаковых контрагента без найденного счета, тогда контрагент не заполняем, 
			// будет предложено выбрать контрагента и для него будет создан счет.
			// Если у одного контрагента 2 и более одинаковых счета, тогда контрагента не заполняем.
			// В остальных случаях если найдены дубли с одинаковым приоритетом, то контрагент останется пустым и новый создаваться не будет.
			Если НайденоКонтрагентов > 1 Тогда
				
				СтрокаДокумента.Контрагент = Неопределено;
				СтрокаДокумента.СчетКонтрагента = Неопределено;
				СтрокаДокумента.СоздаватьКонтрагента = Ложь;
				СтрокаДокумента.НайденКонтрагент = Ложь;
				СтрокаДокумента.НайденСчетКонтрагента = Ложь;
			
				ДобавитьЗамечание(СтрокаДокумента.ОшибкиЗагрузки,
					СтрШаблон(НСтр("ru='Найдено более одного контрагента или банковского счета контрагента (%1)!'"), СтрокаДокумента.ИмяКонтрагента));
				
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

Процедура ДобавитьЗамечание(Буфер, НоваяСтрока, Разделитель = "")
	
	Если ПустаяСтрока(Буфер) Тогда
		Буфер = НоваяСтрока;
	Иначе
		Шаблон = НСтр("ru = '%1%2%3'");
		Буфер = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			Шаблон,
			Буфер,
			?(ПустаяСтрока(Разделитель), Символы.ПС, Разделитель),
			НоваяСтрока);
	КонецЕсли;
	
КонецПроцедуры

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

Функция НайтиРазбитыйПлатеж(ТаблицаДокументов, СтрокаДокумента)

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

КонецФункции

Процедура ПроверитьДубликатыПлатежейВыписки(ДокументыКЗагрузке)

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

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

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

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

#Область Локализация

Процедура ЗагрузитьПодтверждениеЗачисления(Параметры, Адрес)

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

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

Функция НоваяТаблицаОстатковВыпискиТОФК()

	Таблица = Новый ТаблицаЗначений;
	
	Таблица.Колонки.Добавить("АналитическийКодРаздела", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(8)));
	Таблица.Колонки.Добавить("НачальныйОстаток", Новый ОписаниеТипов("Число"));
	Таблица.Колонки.Добавить("КонечныйОстаток", Новый ОписаниеТипов("Число"));
	
	Возврат Таблица;

КонецФункции

Процедура ЗаполнитьСведенияОбОстаткахТОФК(ОстаткиДенежныхСредствПоРазделам, НомерСчета, ДатаНачала, ДатаКонца, РасчетныеСчета)

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

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

Функция ВыборкаКазначейскихСчетовОрганизацийПоЛицевымСчетамИРазделам(ИсходныеДанные)

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

КонецФункции

Функция ПустаяТаблицаРасшифровкиТОФК()
	
	Таблица = Новый ТаблицаЗначений;
	Таблица.Колонки.Добавить("ИГК", Новый ОписаниеТипов("Строка"));
	Таблица.Колонки.Добавить("АналитическийКодРаздела", Новый ОписаниеТипов("Строка"));
	
	
	Таблица.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
	Таблица.Колонки.Добавить("СуммаНДС", Новый ОписаниеТипов("Число"));
	
	Возврат Таблица;
	
КонецФункции

Процедура ПрочитатьДанныеXDTOПоСхеме(ОбъектXDTO, ИсточникXDTO, Данные, ЗаголовокПоля = "")

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

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

// Возращает признак наличия фразы в исходной строке.
//
// Параметры:
//  ИсходнаяСтрока - Строка - исходная строка, в которой выполняется поиск фразы.
//  СписокПодстрок - Массив из Строка - массив искомой подстроки в виде отдельных слов.
//  ПозицияПодстроки - Число - позиция, с учетом которой выполняется поиск в исходной строке.
//  Индекс - Число - индекс, рассматриваемой строки списка подстрок.
// 
// Возвращаемое значение:
//   - Булево
//
Функция НайденаФразаИзСпискаПодстрок(ИсходнаяСтрока, СписокПодстрок, ПозицияПодстроки, Индекс)

	Подстрока = СписокПодстрок.Получить(Индекс);
	
	Если Индекс = 0 Тогда
		ПредыдущаяПодстрока = "";
	Иначе
		ПредыдущаяПодстрока = СписокПодстрок.Получить(Индекс - 1);
	КонецЕсли;
	
	НачальнаяПозиция = ПозицияПодстроки + СтрДлина(ПредыдущаяПодстрока);
	ПозицияПодстроки = СтрНайти(НРег(ИсходнаяСтрока), Подстрока, , НачальнаяПозиция);
	
	Если ПозицияПодстроки > 0 Тогда
		
		Если СписокПодстрок.ВГраница() >= Индекс + 1 Тогда
			Результат = НайденаФразаИзСпискаПодстрок(ИсходнаяСтрока, СписокПодстрок, ПозицияПодстроки, Индекс + 1);
		Иначе
			Результат = Истина;
		КонецЕсли;
		
	Иначе
		Результат = Ложь;
	КонецЕсли;
	
	Возврат Результат;

КонецФункции

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

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

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

#КонецЕсли

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