#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция ПрочитатьДанныеВыпискиИзФайла(ДвоичныеДанные, ФорматОбмена, Кодировка) Экспорт
ДанныеВыписки = Новый Структура;
ДанныеВыписки.Вставить("Заголовок", ДенежныеСредстваСервер.ЗаголовокВыписки());
ДанныеВыписки.Вставить("РасчетныеСчета", Новый Массив);
ДанныеВыписки.Вставить("ДокументыВыписки", Новый Массив);
ДанныеВыписки.Вставить("ОшибкиРазбора", Новый Массив);
Если ФорматОбмена = Перечисления.ФорматОбменаСБанком.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, СписокДанных[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");
Если ПараметрыВыгрузки.Кодировка = "DOS" Тогда
Кодировка = "cp866";
Иначе
Кодировка = "windows-1251";
КонецЕсли;
ПотокВыгрузки.Записать(ИмяВременногоФайла, Кодировка);
ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла), АдресХранилища);
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
ЗаписьЖурналаРегистрации(
СтрШаблон("%1 %2", НСтр("ru = 'Выгрузка платежей в банк.'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru = 'Удаление временного файла'", ОбщегоНазначения.КодОсновногоЯзыка())),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Функция СекцияДокумент(СтруктураДокумента)
Буфер = "";
Секция = СтруктураЭкспорта();
ЗаполнитьЗначениеЭкспорта(Секция, СтруктураДокумента);
ДобавитьВСтроку(Буфер, "СекцияДокумент=" + СтруктураДокумента.ВидДокумента);
Для каждого ВыгружаемыйРеквизит Из Секция Цикл
Значение = ПривестиЗначение(ВыгружаемыйРеквизит.Значение);
Если Не ПустаяСтрока(Значение) Тогда
ДобавитьВСтроку(Буфер, ВыгружаемыйРеквизит.Ключ + "=" + Значение);
КонецЕсли;
КонецЦикла;
ДобавитьВСтроку(Буфер, "КонецДокумента");
Возврат Буфер;
КонецФункции
Функция ПривестиЗначение(Значение)
Если ТипЗнч(Значение) = Тип("Строка") Тогда
Возврат СокрЛП(Значение);
ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда
Возврат Формат(Значение, "ЧРД=.; ЧРГ=' '; ЧГ=0");
ИначеЕсли ТипЗнч(Значение) = Тип("Дата") Тогда
Возврат Формат(Значение, "ДФ=дд.ММ.гггг");
Иначе
Возврат "";
КонецЕсли;
КонецФункции
Процедура ДобавитьВСтроку(Буфер, НоваяСтрока, Разделитель = "")
Если ПустаяСтрока(Буфер) Тогда
Буфер = НоваяСтрока;
Иначе
УжеЕстьФразаОшибкаВФайле = СтрНайти(Буфер, НСтр("ru='Ошибка в файле.'")) > 0;
Если УжеЕстьФразаОшибкаВФайле Тогда
НоваяСтрока = СтрЗаменить(НоваяСтрока, НСтр("ru='Ошибка в файле.'"), "");
КонецЕсли;
Шаблон = НСтр("ru = '%1%2%3'");
Буфер = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
Буфер,
?(ПустаяСтрока(Разделитель), Символы.ПС, Разделитель),
НоваяСтрока);
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьЗначениеЭкспорта(СтрокаЭкспорта, ВыборкаДляЭкспорта)
Если ВыборкаДляЭкспорта.ВидДокумента = Перечисления.ТипыПлатежныхДокументов.ПлатежноеТребование Тогда
Плательщик = "Контрагент";
Получатель = "Организация";
Иначе
Плательщик = "Организация";
Получатель = "Контрагент";
КонецЕсли;
СтрокаЭкспорта.Номер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ВыборкаДляЭкспорта.Номер, Истина, Истина);
СтрокаЭкспорта.Дата = Формат(ВыборкаДляЭкспорта.Дата, "ДФ=дд.ММ.гггг");
СтрокаЭкспорта.Сумма = Формат(ВыборкаДляЭкспорта.Сумма, "ЧДЦ=2; ЧРД=.; ЧРГ=' '; ЧГ=0");
СтрокаЭкспорта.ПлательщикСчет = ВыборкаДляЭкспорта[Плательщик + "РасчСчет"];
СтрокаЭкспорта.ПолучательСчет = ВыборкаДляЭкспорта[Получатель + "РасчСчет"];
СтрокаЭкспорта.ВидПлатежа = ВыборкаДляЭкспорта.ВидПлатежа;
НепрямыеРасчетыУПлательщика = ЗначениеЗаполнено(ВыборкаДляЭкспорта[Плательщик + "БанкДляРасчетов"]);
НепрямыеРасчетыУПолучателя = ЗначениеЗаполнено(ВыборкаДляЭкспорта[Получатель + "БанкДляРасчетов"]);
Если ВыборкаДляЭкспорта.ВидДокумента = Перечисления.ТипыПлатежныхДокументов.ПлатежноеПоручение Тогда
СтрокаЭкспорта.ВидОплаты = "01";
ИначеЕсли ВыборкаДляЭкспорта.ВидДокумента = Перечисления.ТипыПлатежныхДокументов.Аккредитив Тогда
СтрокаЭкспорта.ВидОплаты = "08";
ИначеЕсли ВыборкаДляЭкспорта.ВидДокумента = Перечисления.ТипыПлатежныхДокументов.ИнкассовоеПоручение Тогда
СтрокаЭкспорта.ВидОплаты = "06";
ИначеЕсли ВыборкаДляЭкспорта.ВидДокумента = Перечисления.ТипыПлатежныхДокументов.ПлатежноеТребование Тогда
СтрокаЭкспорта.ВидОплаты = "02";
Иначе
СтрокаЭкспорта.ВидОплаты = "00";
КонецЕсли;
СтрокаЭкспорта.Код = ВыборкаДляЭкспорта.Код;
СтрокаЭкспорта.Плательщик1 = ВыборкаДляЭкспорта[Плательщик + "Наим"];
Значение = ВыборкаДляЭкспорта[Плательщик + "ИНН"];
СтрокаЭкспорта.ПлательщикИНН = Значение;
СтрокаЭкспорта.Плательщик = "ИНН " + ВыборкаДляЭкспорта[Плательщик + "ИНН"] + " " + СтрокаЭкспорта.Плательщик1;
Если НепрямыеРасчетыУПлательщика Тогда
СтрокаЭкспорта.Плательщик2 = ВыборкаДляЭкспорта[Плательщик + "РасчСчет"];
СтрокаЭкспорта.Плательщик3 = ВыборкаДляЭкспорта[Плательщик + "Банк"];
СтрокаЭкспорта.Плательщик4 = ВыборкаДляЭкспорта[Плательщик + "ГородБанка"];
СтрокаЭкспорта.Плательщик = СтрокаЭкспорта.Плательщик
+ " р/с " + СтрокаЭкспорта.Плательщик2
+ " в " + СтрокаЭкспорта.Плательщик3
+ " " + СтрокаЭкспорта.Плательщик4;
СтрокаЭкспорта.ПлательщикРасчСчет = ВыборкаДляЭкспорта[Плательщик + "КоррСчет"];
СтрокаЭкспорта.ПлательщикБанк1 = ВыборкаДляЭкспорта[Плательщик + "БанкДляРасчетов"];
СтрокаЭкспорта.ПлательщикБанк2 = ВыборкаДляЭкспорта[Плательщик + "ГородРЦБанка"];
СтрокаЭкспорта.ПлательщикБИК = ВыборкаДляЭкспорта[Плательщик + "БИКРЦБанка"];
СтрокаЭкспорта.ПлательщикКорсчет = ВыборкаДляЭкспорта[Плательщик + "КоррСчетРЦБанка"];
Иначе
СтрокаЭкспорта.ПлательщикРасчСчет = ВыборкаДляЭкспорта[Плательщик + "РасчСчет"];
СтрокаЭкспорта.ПлательщикБанк1 = ВыборкаДляЭкспорта[Плательщик + "Банк"];
СтрокаЭкспорта.ПлательщикБанк2 = ВыборкаДляЭкспорта[Плательщик + "ГородБанка"];
СтрокаЭкспорта.ПлательщикБИК = ВыборкаДляЭкспорта[Плательщик + "БИКБанка"];
СтрокаЭкспорта.ПлательщикКорсчет = ВыборкаДляЭкспорта[Плательщик + "КоррСчет"];
КонецЕсли;
ПолучательПозицияСимволВК = СтрНайти(ВыборкаДляЭкспорта[Получатель + "Наим"], Символы.ВК);
Если ПолучательПозицияСимволВК = 0 Тогда
СтрокаЭкспорта.Получатель1 = ВыборкаДляЭкспорта[Получатель + "Наим"];
КонецЕсли;
СтрокаЭкспорта.ПолучательИНН = ВыборкаДляЭкспорта[Получатель + "ИНН"];
СтрокаЭкспорта.Получатель = "ИНН " + ВыборкаДляЭкспорта[Получатель + "ИНН"] + " " + СтрокаЭкспорта.Получатель1;
Если НепрямыеРасчетыУПолучателя Тогда
СтрокаЭкспорта.Получатель2 = ВыборкаДляЭкспорта[Получатель + "РасчСчет"];
СтрокаЭкспорта.Получатель3 = ВыборкаДляЭкспорта[Получатель + "Банк"];
СтрокаЭкспорта.Получатель4 = ВыборкаДляЭкспорта[Получатель + "ГородБанка"];
СтрокаЭкспорта.Получатель = СтрокаЭкспорта.Получатель
+ " р/с " + СтрокаЭкспорта.Получатель2
+ " в " + СтрокаЭкспорта.Получатель3
+ " " + СтрокаЭкспорта.Получатель4;
СтрокаЭкспорта.ПолучательРасчСчет = ВыборкаДляЭкспорта[Получатель + "КоррСчет"];
Если ЗначениеЗаполнено(ВыборкаДляЭкспорта[Получатель + "БанкДляРасчетовНаименованиеРКЦ"]) Тогда
СтрокаЭкспорта.ПолучательБанк1 = ВыборкаДляЭкспорта[Получатель + "БанкДляРасчетовНаименованиеРКЦ"]
+ "//" + ВыборкаДляЭкспорта[Получатель + "БанкДляРасчетов"];
Иначе
СтрокаЭкспорта.ПолучательБанк1 = ВыборкаДляЭкспорта[Получатель + "БанкДляРасчетов"];
КонецЕсли;
СтрокаЭкспорта.ПолучательБанк2 = ВыборкаДляЭкспорта[Получатель + "ГородРЦБанка"];
СтрокаЭкспорта.ПолучательБИК = ВыборкаДляЭкспорта[Получатель + "БИКРЦБанка"];
СтрокаЭкспорта.ПолучательКорсчет = ВыборкаДляЭкспорта[Получатель + "КоррСчетРЦБанка"];
Иначе
СтрокаЭкспорта.ПолучательРасчСчет = ВыборкаДляЭкспорта[Получатель + "РасчСчет"];
Если ЗначениеЗаполнено(ВыборкаДляЭкспорта[Получатель + "БанкНаименованиеРКЦ"]) Тогда
СтрокаЭкспорта.ПолучательБанк1 = ВыборкаДляЭкспорта[Получатель + "БанкНаименованиеРКЦ"]
+ "//" + ВыборкаДляЭкспорта[Получатель + "Банк"];
Иначе
СтрокаЭкспорта.ПолучательБанк1 = ВыборкаДляЭкспорта[Получатель + "Банк"];
КонецЕсли;
СтрокаЭкспорта.ПолучательБанк2 = ВыборкаДляЭкспорта[Получатель + "ГородБанка"];
СтрокаЭкспорта.ПолучательБИК = ВыборкаДляЭкспорта[Получатель + "БИКБанка"];
СтрокаЭкспорта.ПолучательКорсчет = ВыборкаДляЭкспорта[Получатель + "КоррСчет"];
КонецЕсли;
Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПлательщикКПП) Тогда
СтрокаЭкспорта.ПлательщикКПП = ВыборкаДляЭкспорта.КПППлательщика;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПолучательКПП) Тогда
СтрокаЭкспорта.ПолучательКПП = ВыборкаДляЭкспорта.КПППолучателя;
КонецЕсли;
Если ВыборкаДляЭкспорта.ПеречислениеВБюджет Тогда
СтрокаЭкспорта.СтатусСоставителя = ВыборкаДляЭкспорта.СтатусСоставителя;
Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПлательщикКПП) Тогда
СтрокаЭкспорта.ПлательщикКПП = "0";
КонецЕсли;
Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПолучательКПП) Тогда
СтрокаЭкспорта.ПолучательКПП = "0";
КонецЕсли;
Если ПустаяСтрока(ВыборкаДляЭкспорта.КодБК) Тогда
СтрокаЭкспорта.ПоказательКБК = "0";
Иначе
СтрокаЭкспорта.ПоказательКБК = ВыборкаДляЭкспорта.КодБК;
КонецЕсли;
Если ПустаяСтрока(ВыборкаДляЭкспорта.КодОКАТО) Тогда
СтрокаЭкспорта.ОКАТО = "0";
Иначе
СтрокаЭкспорта.ОКАТО = СокрЛП(ВыборкаДляЭкспорта.КодОКАТО);
КонецЕсли;
Если ПустаяСтрока(ВыборкаДляЭкспорта.ПоказательОснования) Тогда
СтрокаЭкспорта.ПоказательОснования = "0";
Иначе
СтрокаЭкспорта.ПоказательОснования = ВыборкаДляЭкспорта.ПоказательОснования;
КонецЕсли;
Если ПустаяСтрока(ВыборкаДляЭкспорта.ПоказательПериода) ИЛИ (ВыборкаДляЭкспорта.ПоказательПериода = " . . ") Тогда
СтрокаЭкспорта.ПоказательПериода = "0";
Иначе
СтрокаЭкспорта.ПоказательПериода = ВыборкаДляЭкспорта.ПоказательПериода;
КонецЕсли;
Если ПустаяСтрока(ВыборкаДляЭкспорта.ПоказательНомера) Тогда
СтрокаЭкспорта.ПоказательНомера = "0";
Иначе
СтрокаЭкспорта.ПоказательНомера = ВыборкаДляЭкспорта.ПоказательНомера;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ВыборкаДляЭкспорта.ПоказательДаты) Тогда
СтрокаЭкспорта.ПоказательДаты = "0";
Иначе
СтрокаЭкспорта.ПоказательДаты = ВыборкаДляЭкспорта.ПоказательДаты;
КонецЕсли;
КонецЕсли;
СтрокаЭкспорта.ПоказательТипа = "" + ВыборкаДляЭкспорта.КодВыплат;
СтрокаЭкспорта.КодНазПлатежа = "" + ВыборкаДляЭкспорта.КодВидаДохода;
СтрокаЭкспорта.Очередность = "" + ВыборкаДляЭкспорта.ОчередностьПлатежа;
СтрокаЭкспорта.НазначениеПлатежа = СтрЗаменить(ВыборкаДляЭкспорта.НазначениеПлатежа, Символы.ПС + Символы.ВК, " ");
СтрокаЭкспорта.НазначениеПлатежа = СтрЗаменить(
СтрЗаменить(СтрЗаменить(СтрокаЭкспорта.НазначениеПлатежа, Символы.ПС, " "), Символы.ВК, " "), Символы.ПФ, " ");
КоличествоСтрокНП = СтрЧислоСтрок(ВыборкаДляЭкспорта.НазначениеПлатежа);
Если КоличествоСтрокНП > 6 Тогда
КоличествоСтрокНП = 6;
КонецЕсли;
Для Сч = 1 По КоличествоСтрокНП Цикл
СтрокаЭкспорта["НазначениеПлатежа" + Сч] = СтрПолучитьСтроку(ВыборкаДляЭкспорта.НазначениеПлатежа, Сч);
КонецЦикла;
Для Сч = (КоличествоСтрокНП + 1) По 6 Цикл
СтрокаЭкспорта["НазначениеПлатежа" + Сч] = "";
КонецЦикла;
КонецПроцедуры
Функция СтруктураЭкспорта()
СтруктураЭкспорта = Новый Структура;
СтруктураЭкспорта.Вставить("Выгружать", "");
СтруктураЭкспорта.Вставить("Готовность", "");
СтруктураЭкспорта.Вставить("НомерДок", "");
СтруктураЭкспорта.Вставить("Номер", "");
СтруктураЭкспорта.Вставить("Дата", "");
СтруктураЭкспорта.Вставить("Операция", "");
СтруктураЭкспорта.Вставить("СчетОрганизации", "");
СтруктураЭкспорта.Вставить("НомерСчетаОрганизации", "");
СтруктураЭкспорта.Вставить("Сумма", "");
СтруктураЭкспорта.Вставить("Контрагент", "");
СтруктураЭкспорта.Вставить("СчетКонтрагента", "");
СтруктураЭкспорта.Вставить("НомерСчетаКонтрагента", "");
СтруктураЭкспорта.Вставить("КвитанцияДата", "");
СтруктураЭкспорта.Вставить("КвитанцияВремя", "");
СтруктураЭкспорта.Вставить("КвитанцияСодержание", "");
СтруктураЭкспорта.Вставить("ПлательщикСчет", "");
СтруктураЭкспорта.Вставить("Плательщик", "");
СтруктураЭкспорта.Вставить("ПлательщикИНН", "");
СтруктураЭкспорта.Вставить("Плательщик1", "");
СтруктураЭкспорта.Вставить("Плательщик2", "");
СтруктураЭкспорта.Вставить("Плательщик3", "");
СтруктураЭкспорта.Вставить("Плательщик4", "");
СтруктураЭкспорта.Вставить("ПлательщикРасчСчет", "");
СтруктураЭкспорта.Вставить("ПлательщикБанк1", "");
СтруктураЭкспорта.Вставить("ПлательщикБанк2", "");
СтруктураЭкспорта.Вставить("ПлательщикБИК", "");
СтруктураЭкспорта.Вставить("ПлательщикКорсчет", "");
СтруктураЭкспорта.Вставить("ПолучательСчет", "");
СтруктураЭкспорта.Вставить("Получатель", "");
СтруктураЭкспорта.Вставить("ПолучательИНН", "");
СтруктураЭкспорта.Вставить("Получатель1", "");
СтруктураЭкспорта.Вставить("Получатель2", "");
СтруктураЭкспорта.Вставить("Получатель3", "");
СтруктураЭкспорта.Вставить("Получатель4", "");
СтруктураЭкспорта.Вставить("ПолучательРасчСчет", "");
СтруктураЭкспорта.Вставить("ПолучательБанк1", "");
СтруктураЭкспорта.Вставить("ПолучательБанк2", "");
СтруктураЭкспорта.Вставить("ПолучательБИК", "");
СтруктураЭкспорта.Вставить("ПолучательКорсчет", "");
СтруктураЭкспорта.Вставить("ВидПлатежа", "");
СтруктураЭкспорта.Вставить("КодНазПлатежа", "");
СтруктураЭкспорта.Вставить("ВидОплаты", "");
СтруктураЭкспорта.Вставить("ПеречислениеВБюджет", "");
СтруктураЭкспорта.Вставить("ВидПеречисленияВБюджет", "");
СтруктураЭкспорта.Вставить("СтатусСоставителя", "");
СтруктураЭкспорта.Вставить("ПлательщикКПП", "");
СтруктураЭкспорта.Вставить("ПолучательКПП", "");
СтруктураЭкспорта.Вставить("ПоказательКБК", "");
СтруктураЭкспорта.Вставить("ОКАТО", "");
СтруктураЭкспорта.Вставить("ПоказательОснования", "");
СтруктураЭкспорта.Вставить("ПоказательПериода", "");
СтруктураЭкспорта.Вставить("ПоказательНомера", "");
СтруктураЭкспорта.Вставить("ПоказательДаты", "");
СтруктураЭкспорта.Вставить("ПоказательТипа", "");
СтруктураЭкспорта.Вставить("СрокПлатежа", "");
СтруктураЭкспорта.Вставить("Очередность", "");
СтруктураЭкспорта.Вставить("НазначениеПлатежа", "");
СтруктураЭкспорта.Вставить("НазначениеПлатежа1", "");
СтруктураЭкспорта.Вставить("НазначениеПлатежа2", "");
СтруктураЭкспорта.Вставить("НазначениеПлатежа3", "");
СтруктураЭкспорта.Вставить("НазначениеПлатежа4", "");
СтруктураЭкспорта.Вставить("НазначениеПлатежа5", "");
СтруктураЭкспорта.Вставить("НазначениеПлатежа6", "");
СтруктураЭкспорта.Вставить("СрокАкцепта", "");
СтруктураЭкспорта.Вставить("ВидАккредитива", "");
СтруктураЭкспорта.Вставить("УсловиеОплаты1", "");
СтруктураЭкспорта.Вставить("УсловиеОплаты2", "");
СтруктураЭкспорта.Вставить("УсловиеОплаты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") И Документ.ISOКодВалюты = "RUB" Тогда
НаименованиеПолучателя = Документ.КонтрагентИНН
+ ?(ЗначениеЗаполнено(Документ.КПППолучателя), "/" + Документ.КПППолучателя, "") + " "
+ НаименованиеПолучателя;
Остаток = Сред(НаименованиеПолучателя, 71);
Если ЗначениеЗаполнено(Остаток) Тогда
СекцияПочтовыйАдрес = ОбъектТипа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" Тогда
ГородБанка = ?(ЗначениеЗаполнено(Документ.КонтрагентГородБанкаМеждународный),
Документ.КонтрагентГородБанкаМеждународный, Документ.КонтрагентГородБанка);
НаименованиеБанка = НаименованиеБанка + " " + ГородБанка + " " + Документ.КонтрагентБИКБанка + " "
+ Документ.КонтрагентКоррСчет;
КонецЕсли;
ЗаполнитьСвойство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.МаксДлина);
Если ФасетМаксимальнаяДлина <> Неопределено Тогда
МаксимальнаяДлина = Число(ФасетМаксимальнаяДлина.Значение);
Если СтрДлина(Значение) > МаксимальнаяДлина Тогда
ШаблонОшибки = НСтр("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");
Если ПараметрыВыгрузки.Кодировка = "DOS" Тогда
Кодировка = "cp866";
Иначе
Кодировка = "windows-1251";
КонецЕсли;
ПотокВыгрузки.Записать(ИмяВременногоФайла, Кодировка);
ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла), АдресХранилища);
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Выгрузка платежей в банк. Удаление временного файла'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , ,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Процедура ВыгрузитьДокументВMT940(ПотокВыгрузки, СтрокаСекции ,НомерСчета)
ПотокВыгрузки.ДобавитьСтроку(":28С:"
+ ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СтрокаСекции.Номер, Истина, Истина));
НаименованиеВалюты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаСекции.Валюта, "Наименование");
ПотокВыгрузки.ДобавитьСтроку(":61:"
+ Формат(ТекущаяДатаСеанса(), "ДФ=ггММдд")
+ Формат(ТекущаяДатаСеанса(), "ДФ=ММдд")
+ ?(ТипЗнч(СтрокаСекции.Ссылка) = Тип("ДокументСсылка.СписаниеБезналичныхДенежныхСредств"), "C", "D")
+ Прав(НаименованиеВалюты, 1)
+ Формат(СтрокаСекции.Сумма, "ЧДЦ=2; ЧРД=.; ЧРГ=' '; ЧГ=0")
+ "FTRF"
+ "NONREF");
ПотокВыгрузки.ДобавитьСтроку(":86:"
+ ?(СтрокаСекции.НазначениеПлатежа = "", "", "?20" + СтрокаСекции.НазначениеПлатежа)
+ ?(СтрокаСекции.КонтрагентСВИФТБанка = "",
"?30" + СтрокаСекции.КонтрагентБИКБанка, "?30" + СтрокаСекции.КонтрагентСВИФТБанка)
+ "?31" + СтрокаСекции.КонтрагентРасчСчет
+ "?32" + СтрокаСекции.КонтрагентНаим);
КонецПроцедуры
Процедура ВыгрузитьПлатежиТОФК(ПараметрыВыгрузки, АдресХранилища)
КаталогВременныхФайлов = "";
ТаблицаДокументов = ПараметрыВыгрузки.ТаблицаДокументов;
Если ТаблицаДокументов.Количество() > 0 Тогда
КаталогВременныхФайлов = ФайловаяСистема.СоздатьВременныйКаталог("");
Иначе
Возврат;
КонецЕсли;
Организация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПараметрыВыгрузки.БанковскийСчет, "Владелец");
ЗаписатьФайлыПлатежныхПорученийТОФК(Организация, ТаблицаДокументов, КаталогВременныхФайлов);
ФайлыКаталога = НайтиФайлы(КаталогВременныхФайлов, "*.xml", Истина);
Если ФайлыКаталога.Количество() > 0 Тогда
ИмяАрхивногоФайла = Строка(Новый УникальныйИдентификатор) + ".zip";
ИмяАрхивногоФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяАрхивногоФайла);
Архив = Новый ЗаписьZipФайла(КаталогВременныхФайлов + ИмяАрхивногоФайла, , , , , , КодировкаИменФайловВZipФайле.UTF8);
Для Каждого ТекущийФайл Из ФайлыКаталога Цикл
Архив.Добавить(ТекущийФайл.ПолноеИмя);
КонецЦикла;
Архив.Записать();
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(КаталогВременныхФайлов + ИмяАрхивногоФайла);
ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла, АдресХранилища);
КонецЕсли;
КонецПроцедуры
Процедура ЗаписатьФайлыПлатежныхПорученийТОФК(Организация, ТаблицаДокументов, КаталогФайлов)
Индекс = 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;
КонецФункции
Процедура ДобавитьКлючиКДаннымДокумента(ДанныеДокумента, СтруктураФайла, ВерхнийКлюч = "")
Для Каждого ЭлементСтруктуры Из СтруктураФайла Цикл
ТекущийКлюч = ВерхнийКлюч + ?(ВерхнийКлюч <> "", "_" + ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Ключ);
Если ЭлементСтруктуры.Значение <> Неопределено
И ДанныеДокумента.Свойство(ЭлементСтруктуры.Значение) Тогда
ДанныеДокумента.Вставить(ТекущийКлюч, ДанныеДокумента[ЭлементСтруктуры.Значение]);
Иначе
ДанныеДокумента.Вставить(ТекущийКлюч);
КонецЕсли;
Если ЭлементСтруктуры.Значение <> Неопределено
И ТипЗнч(ЭлементСтруктуры.Значение) = Тип("Структура") Тогда
ДобавитьКлючиКДаннымДокумента(ДанныеДокумента, ЭлементСтруктуры.Значение, ЭлементСтруктуры.Ключ)
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ИзменитьФорматОтображенияДесятичныхСвойств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);
СвойстваОбъекта = ЭД.Свойства();
Если СвойстваОбъекта.Получить("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(Выписка, ДанныеПоРасчетномуСчету);
Результат.РасчетныеСчета.Добавить(ДанныеПоРасчетномуСчету);
НаборСвойствВыписки = Выписка.Свойства();
Если НаборСвойствВыписки.Получить("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.Свойства();
Если НаборСвойствCdOrPrtry.Получить("Cd") <> Неопределено Тогда
СуммаСтрокой = Баланс.Amt.Последовательность().ПолучитьТекст(0);
Если Баланс.Tp.CdOrPrtry.Cd = "OPBD" Тогда
ДанныеПоРасчетномуСчету.НачальныйОстаток = XMLЗначение(Тип("Число"), СуммаСтрокой);
ИначеЕсли Баланс.Tp.CdOrPrtry.Cd = "CLBD" Тогда
ДанныеПоРасчетномуСчету.КонечныйОстаток = XMLЗначение(Тип("Число"), СуммаСтрокой);
КонецЕсли;
КонецЕсли;
КонецЦикла;
НаборСвойствВыписки = Выписка.Свойства();
Если НаборСвойствВыписки.Получить("TxsSummry") <> Неопределено Тогда
НаборСвойствTxsSummry = Выписка.TxsSummry.Свойства();
Если НаборСвойствTxsSummry.Получить("TtlCdtNtries") <> Неопределено Тогда
НаборСвойствTtlCdtNtries = Выписка.TxsSummry.TtlCdtNtries.Свойства();
Если НаборСвойствTtlCdtNtries.Получить("Sum") <> Неопределено Тогда
ДанныеПоРасчетномуСчету.ВсегоПоступило = XMLЗначение(Тип("Число"), Выписка.TxsSummry.TtlCdtNtries.Sum);
КонецЕсли;
КонецЕсли;
Если НаборСвойствTxsSummry.Получить("TtlDbtNtries") <> Неопределено Тогда
НаборСвойствTtlDbtNtries = Выписка.TxsSummry.TtlDbtNtries.Свойства();
Если НаборСвойств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"));
НаборСвойствОперации = Операция.Свойства();
Если НаборСвойствОперации.Получить("NtryDtls") <> Неопределено Тогда
Если ТипЗнч(Операция.NtryDtls) = Тип("ОбъектXDTO") Тогда
Транзакция = Операция.NtryDtls;
Иначе
Транзакция = Операция.NtryDtls[0];
КонецЕсли;
НаборСвойствТранзакции = Транзакция.Свойства();
Если НаборСвойствТранзакции.Получить("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Значение(Тип("Дата"), ПоказательДатыСтрокой));
ДанныеОперации.Вставить("ПоказательДаты", ПоказательДатыСтрокой);
КонецЕсли;
СвойстваТранзакции = ДетальТранзакции.Свойства();
Если СвойстваТранзакции.Получить("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");
Если ДеталиДокумента <> Неопределено Тогда
СвойстваДокумента = ДеталиДокумента.Свойства();
Если СвойстваДокумента.Получить("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.Свойства();
Если КоллекцияСвойств.Получить(МассивСтрок[0]) = Неопределено Тогда
Возврат Неопределено
КонецЕсли;
Если МассивСтрок.Количество() = 1 Тогда
Значение = ОбъектXDTO[МассивСтрок[0]];
Если ТипЗнч(Значение) = Тип("ОбъектXDTO") И Значение.Свойства().Количество() = 0 Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Значение;
Иначе
НаборСвойств = ОбъектXDTO.Свойства();
Свойство = НаборСвойств.Получить(МассивСтрок[0]);
Если Свойство = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если Свойство.ВерхняяГраница = 1 Тогда
ПодОбъектXDTO = ОбъектXDTO.ПолучитьXDTO(Свойство);
Иначе
Список = ОбъектXDTO.ПолучитьСписок(Свойство);
Если Список.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
ПодОбъектXDTO = Список[0];
КонецЕсли;
КонецЕсли;
МассивСтрок.Удалить(0);
НоваяСтрока = "";
Для Каждого Элемент Из МассивСтрок Цикл
НоваяСтрока = НоваяСтрока + ?(ПустаяСтрока(НоваяСтрока), "", ".") + Элемент;
КонецЦикла;
Возврат ЗначениеСвойстваXDTO(ПодОбъектXDTO, НоваяСтрока);
КонецЕсли;
КонецФункции
Процедура ПрочитатьДанныеВыпискиMT940(ДвоичныеДанныеФайла, Результат, Кодировка)
Попытка
ИмяФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанныеФайла.Записать(ИмяФайла);
СтрокиФайла = Новый Массив;
ФайлВыписки = Новый Файл(ИмяФайла);
Если Кодировка = "DOS" Тогда
КодировкаФайла = "cp866";
Иначе
КодировкаФайла = "windows-1251";
КонецЕсли;
ПотокЧтения = Новый ЧтениеТекста(ИмяФайла, КодировкаФайла,,, Ложь);
ТекстДляРазбора = ПотокЧтения.Прочитать();
МассивСтраницВыписки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекстДляРазбора, ":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 Тогда
Возврат;
КонецЕсли;
ЗаполнитьДанныеВыпискиТОФК(СтруктураДанныхФайла, Результат);
КонецПроцедуры
Процедура ПрочитатьФайлПлатежногоПорученияТОФК(Файл, Результат)
Чтение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 Тогда
СтрокаДокумента.Контрагент = Выборка.Контрагент;
СтрокаДокумента.НайденКонтрагент = Истина;
Если ЗначениеЗаполнено(Выборка.СчетКонтрагента) Тогда
СтрокаДокумента.СчетКонтрагента = Выборка.СчетКонтрагента;
СтрокаДокумента.НайденСчетКонтрагента = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НайденоКонтрагентов > 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") Тогда
МассивДанных = Новый Массив;
НомерСтроки = 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);
Иначе
Результат = Истина;
КонецЕсли;
Иначе
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли