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