#Область ОписаниеПеременных
&НаКлиенте
Перем СуммыПлатежейКВыгрузке;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
УстановитьУсловноеОформление();
ОбменСБанкамиКлиентСервер.ПоказатьРекламуДиректБанк(Элементы.ГруппаРекламаДиректБанкГоризонтально, Элементы.ТекстДиректБанкГоризонтально);
ЗаполнитьТаблицуСчетов();
Если Параметры.Свойство("БанковскийСчет")
И ЗначениеЗаполнено(Параметры.БанковскийСчет) Тогда
СтрокиТаблицы = Объект.БанковскиеСчета.НайтиСтроки(Новый Структура("Ссылка", Параметры.БанковскийСчет));
Если СтрокиТаблицы.Количество() Тогда
СтрокиТаблицы[0].Пометка = Истина;
Объект.СписокСчетов.Добавить(СтрокиТаблицы[0]["Ссылка"]);
ОбновитьСписокПлатежей();
ИндексСтрокиСчета = Объект.БанковскиеСчета.Индекс(СтрокиТаблицы[0]);
КонецЕсли;
ИначеЕсли Параметры.Свойство("АдресДокументовДляВыгрузки")
И ЗначениеЗаполнено(Параметры.АдресДокументовДляВыгрузки) Тогда
ДокументыОтбор.Загрузить(ПолучитьИзВременногоХранилища(Параметры.АдресДокументовДляВыгрузки));
БанковскиеСчета = ДокументыОтбор.Выгрузить(,"БанковскийСчет").ВыгрузитьКолонку("БанковскийСчет");
Для Каждого БанковскийСчет Из БанковскиеСчета Цикл
СтрокиТаблицы = Объект.БанковскиеСчета.НайтиСтроки(Новый Структура("Ссылка", БанковскийСчет));
Если СтрокиТаблицы.Количество() Тогда
СтрокиТаблицы[0].Пометка = Истина;
Объект.СписокСчетов.Добавить(СтрокиТаблицы[0]["Ссылка"]);
ОбновитьСписокПлатежей();
ИндексСтрокиСчета = Объект.БанковскиеСчета.Индекс(СтрокиТаблицы[0]);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ЗаполнитьСписокВыбораПериодов();
Элементы.ГруппаКаталогВыгрузкиПодтверждающихДокументов.Видимость =
ПолучитьФункциональнуюОпцию("ПоддержкаБанковскогоИКазначейскогоСопровожденияГосконтрактов");
СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
Объект.ТолькоНевыгруженные = (ТолькоНевыгруженные = 1);
Если Период = НСтр("ru='Все время'") Тогда
Объект.ДатаНачалаВыгрузки = '00010101';
Объект.ДатаКонцаВыгрузки = '00010101';
ИначеЕсли Период = "ЗаДату" Тогда
Объект.ДатаНачалаВыгрузки = НачалоДня(ДатаОтбор);
Объект.ДатаКонцаВыгрузки = КонецДня(ДатаОтбор);
ИначеЕсли ТипЗнч(Период) = Тип("Дата") Тогда
Объект.ДатаНачалаВыгрузки = Период;
Объект.ДатаКонцаВыгрузки = КонецДня(Период);
ИначеЕсли Период = НСтр("ru='Сегодня'") Тогда
Объект.ДатаНачалаВыгрузки = ТекущаяДатаСеанса();
Объект.ДатаКонцаВыгрузки = КонецДня(ТекущаяДатаСеанса());
ИначеЕсли Период = НСтр("ru='Три дня'") Тогда
Объект.ДатаНачалаВыгрузки = ТекущаяДатаСеанса() - 3 * 24 * 3600;
Объект.ДатаКонцаВыгрузки = КонецДня(ТекущаяДатаСеанса());
ИначеЕсли Период = НСтр("ru='Неделю'") Тогда
Объект.ДатаНачалаВыгрузки = ТекущаяДатаСеанса() - 7 * 24 * 3600;
Объект.ДатаКонцаВыгрузки = КонецДня(ТекущаяДатаСеанса());
КонецЕсли;
ОбновитьСписокПлатежей();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОбновитьПодвал();
Если Объект.СписокСчетов.Количество() = 1 Тогда
БанковскийСчет = Объект.СписокСчетов[0].Значение;
Элементы.БанковскиеСчета.ТекущаяСтрока = ИндексСтрокиСчета;
КонецЕсли;
Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда
ПодключитьОбработчикОжидания("Подключаемый_ПодключитьРасширениеРаботыСФайлами", 0.1, Истина);
Иначе
ВозможностьВыбораФайлов = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПодключитьРасширениеРаботыСФайлами() Экспорт
ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьРасширениеРаботыСФайламиЗавершение", ЭтотОбъект);
ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ПодключитьРасширениеРаботыСФайламиЗавершение(ПодключеноРасширениеРаботыСФайлами, ДополнительныеПараметры) Экспорт
ВозможностьВыбораФайлов = ПодключеноРасширениеРаботыСФайлами;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОтправленоDirectBank" Тогда
ОбработатьЗавершениеВыгрузкиПрямойОбмен(Параметр);
ОбновитьПодвал();
КонецЕсли;
ОбменСБанкамиКлиент.ОбновитьРекламуДиректБанк(ИмяСобытия, Элементы.ГруппаРекламаДиректБанкГоризонтально, Элементы.ТекстДиректБанкГоризонтально);
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если Не ЗакрытьБезВопроса Тогда
ЕстьВыгруженныеФайлы = Ложь;
Для каждого Счет Из Объект.БанковскиеСчета Цикл
Если Счет.Выгружен И Счет.ОбменЧерезФайл Тогда
ЕстьВыгруженныеФайлы = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьВыгруженныеФайлы Тогда
СтандартнаяОбработка = Ложь;
Отказ = Истина;
Если ЗавершениеРаботы Тогда
ТекстПредупреждения = НСтр("ru = 'Данные были изменены. Все изменения будут потеряны.'");
Возврат;
КонецЕсли;
Кнопки = Новый СписокЗначений();
Кнопки.Добавить(1, НСтр("ru = 'Удалить файлы и закрыть'"));
Кнопки.Добавить(2, НСтр("ru = 'Закрыть без удаления'"));
Кнопки.Добавить(0, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр("ru = 'Выгруженные файлы могут быть несанкционированно изменены.
|Рекомендуется удалить файлы перед закрытием формы.'");
ПоказатьВопрос(
Новый ОписаниеОповещения("ВопросОЗакрытии", ЭтотОбъект),
ТекстВопроса,
Кнопки,,
1);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВопросОЗакрытии(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ <> Неопределено Тогда
Если Ответ = 1 Тогда
УдалитьИЗакрыть(Неопределено);
ИначеЕсли Ответ = 2 Тогда
ЗакрытьБезВопроса = Истина;
Закрыть();
КонецЕсли;
Иначе
ЗакрытьБезВопроса = Истина;
Закрыть();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура КаталогВыгрузкиПодтверждающихДокументовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовСпискаБанковскихСчетов
&НаКлиенте
Процедура БанковскиеСчетаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ТекущиеДанные = Элементы.БанковскиеСчета.ТекущиеДанные;
Если Поле.Имя = "БанковскиеСчетаСсылка" Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, ТекущиеДанные.Ссылка);
ИначеЕсли Поле.Имя = "БанковскиеСчетаНастройкаОбмена" Тогда
Если ТекущиеДанные.ПрямойОбмен Тогда
СтандартнаяОбработка = Ложь;
Обработчик = Новый ОписаниеОповещения("ПослеСозданияНастройкиЭДО", ЭтотОбъект);
ОбменСБанкамиКлиент.ОткрытьСоздатьНастройкуОбмена(
ТекущиеДанные.Организация,
ТекущиеДанные.Банк,
ТекущиеДанные.НомерСчета,
Обработчик);
Иначе
Если ТекущиеДанные.Выгружается Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура БанковскиеСчетаПометкаПриИзменении(Элемент)
ПодключитьОбработчикОжидания("ОбработатьПометкуСчета", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура БанковскиеСчетаНастройкаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ВозможностьВыбораФайлов Тогда
ТекущиеДанные = Элементы.БанковскиеСчета.ТекущиеДанные;
ВыборФайлаОбменаСБанком(ТекущиеДанные);
Иначе
ПодключитьОбработчикОжидания("Подключаемый_ПодключитьРасширениеРаботыСФайламиИВыбратьФайл", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура БанковскиеСчетаНастройкаОбменаОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.БанковскиеСчета.ТекущиеДанные;
Если ЗначениеЗаполнено(ТекущиеДанные.НастройкаОбмена) Тогда
ФинансыКлиент.ОткрытьФайлДляПросмотра(
"Объект.БанковскиеСчета[" + Строка(Элементы.БанковскиеСчета.ТекущаяСтрока) + "].НастройкаОбмена",
ТекущиеДанные.НастройкаОбмена, ТекущиеДанные.Кодировка, НСтр("ru = 'Файл выгрузки'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура БанковскиеСчетаНастройкаОбменаПриИзменении(Элемент)
ТекущиеДанные = Элементы.БанковскиеСчета.ТекущиеДанные;
ТекущиеДанные.ПравилоФайловогоОбменаСБанками = ТекущиеДанные.НастройкаОбмена;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовСпискаПлатежей
&НаКлиенте
Процедура ПериодПриИзменении(Элемент)
ЛокальнаяТекущаяДата = ЛокальнаяТекущаяДата();
Если Период = НСтр("ru='Все время'") Тогда
Объект.ДатаНачалаВыгрузки = '00010101';
Объект.ДатаКонцаВыгрузки = '00010101';
ИначеЕсли Период = "ЗаДату" Тогда
Оповещение = Новый ОписаниеОповещения("ВыполнитьПослеВыбораДаты", ЭтаФорма, );
ПоказатьВводДаты(Оповещение, ЛокальнаяТекущаяДата, НСтр("ru='Дата отбора платежей'"), ЧастиДаты.Дата);
Возврат;
ИначеЕсли ТипЗнч(Период) = Тип("Дата") Тогда
Объект.ДатаНачалаВыгрузки = Период;
Если ЗначениеЗаполнено(Период) Тогда
Объект.ДатаКонцаВыгрузки = КонецДня(Период);
Иначе
Объект.ДатаКонцаВыгрузки = Период;
КонецЕсли;
ИначеЕсли Период = НСтр("ru='Сегодня'") Тогда
Объект.ДатаНачалаВыгрузки = ЛокальнаяТекущаяДата;
Объект.ДатаКонцаВыгрузки = КонецДня(ЛокальнаяТекущаяДата);
ИначеЕсли Период = НСтр("ru='Три дня'") Тогда
Объект.ДатаНачалаВыгрузки = ЛокальнаяТекущаяДата - 3 * 24 * 3600;
Объект.ДатаКонцаВыгрузки = КонецДня(ЛокальнаяТекущаяДата);
ИначеЕсли Период = НСтр("ru='Неделю'") Тогда
Объект.ДатаНачалаВыгрузки = ЛокальнаяТекущаяДата - 7 * 24 * 3600;
Объект.ДатаКонцаВыгрузки = КонецДня(ЛокальнаяТекущаяДата);
КонецЕсли;
ПериодПриИзмененииНаСервере();
ОбновитьПодвал();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЛокальнаяТекущаяДата()
Возврат ТекущаяДатаСеанса();
КонецФункции
&НаКлиенте
Процедура ПериодОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ВыбранноеЗначение = "Дату" Тогда
СтандартнаяОбработка = Ложь;
Оповещение = Новый ОписаниеОповещения("ВыполнитьПослеВыбораДаты", ЭтотОбъект);
ПоясняющийТекст = НСтр("ru='Выберите дату выгружаемых документов'") + " ";
ОткрытьФорму(
"ОбщаяФорма.ВыборДаты",
Новый Структура("ПоясняющийТекст, НачальноеЗначение", ПоясняющийТекст),
,,,,
Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
ИначеЕсли ТипЗнч(ВыбранноеЗначение) <> Тип("Дата") Тогда
Массив = Новый Массив;
Массив.Добавить(Тип("Строка"));
ОписаниеТиповДата = Новый ОписаниеТипов(Массив, , );
Элемент.ОграничениеТипа = ОписаниеТиповДата;
Элемент.КнопкаВыбора = Ложь;
Элемент.РедактированиеТекста = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПослеВыбораДаты(ВыбраннаяДата, Параметры) Экспорт
ЛокальнаяТекущаяДата = ЛокальнаяТекущаяДата();
Если ЗначениеЗаполнено(ВыбраннаяДата) Тогда
Объект.ДатаНачалаВыгрузки = НачалоДня(ВыбраннаяДата);
Объект.ДатаКонцаВыгрузки = КонецДня(ВыбраннаяДата);
Период = ВыбраннаяДата;
Массив = Новый Массив;
Массив.Добавить(Тип("Дата"));
ОписаниеТиповДата = Новый ОписаниеТипов(Массив, , );
Элементы.Период.ОграничениеТипа = ОписаниеТиповДата;
Элементы.Период.КнопкаВыбора = Истина;
Элементы.Период.РедактированиеТекста = Истина;
Иначе
Если ТипЗнч(Период) = Тип("Дата") Тогда
Возврат;
КонецЕсли;
Если Объект.ДатаНачалаВыгрузки = '00010101' И Объект.ДатаКонцаВыгрузки = '00010101' Тогда
Период = НСтр("ru='Все время'");
ИначеЕсли Объект.ДатаНачалаВыгрузки = НачалоДня(ЛокальнаяТекущаяДата)
И Объект.ДатаКонцаВыгрузки = КонецДня(ЛокальнаяТекущаяДата) Тогда
Период = НСтр("ru='Сегодня'");
ИначеЕсли Объект.ДатаНачалаВыгрузки = НачалоДня(ЛокальнаяТекущаяДата) - 3 * 24 * 3600
И Объект.ДатаКонцаВыгрузки = КонецДня(ЛокальнаяТекущаяДата) Тогда
Период = НСтр("ru='Три дня'");
ИначеЕсли Объект.ДатаНачалаВыгрузки = НачалоДня(ЛокальнаяТекущаяДата) - 7 * 24 * 3600
И Объект.ДатаКонцаВыгрузки = КонецДня(ЛокальнаяТекущаяДата) Тогда
Период = НСтр("ru='Неделю'");
КонецЕсли;
КонецЕсли;
ПериодПриИзмененииНаСервере();
ОбновитьПодвал();
КонецПроцедуры
&НаСервере
Процедура ПериодПриИзмененииНаСервере()
ОбновитьСписокПлатежей();
КонецПроцедуры
&НаКлиенте
Процедура ТолькоНеВыгруженныеПриИзменении(Элемент)
Объект.ТолькоНевыгруженные = (ТолькоНевыгруженные = 1);
ОбновитьСписокПлатежей();
ОбновитьПодвал();
КонецПроцедуры
&НаКлиенте
Процедура ДокументыКВыгрузкеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Не Поле.Имя = "ДокументыКВыгрузкеВыгружать" Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(Неопределено, Элемент.ТекущиеДанные.Ссылка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПлатежныеДокументыВыгружатьПриИзменении(Элемент)
ТекущиеДанные = Элементы.ДокументыКВыгрузке.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Знак = ?(ТекущиеДанные.Выгружать, 1, -1);
КоличествоКВыгрузке = КоличествоКВыгрузке + 1 * Знак;
СуммаПлатежей = СуммыПлатежейКВыгрузке.Получить(ТекущиеДанные.Валюта);
Если СуммаПлатежей = Неопределено Тогда
СуммыПлатежейКВыгрузке.Вставить(ТекущиеДанные.Валюта, ТекущиеДанные.Сумма);
Иначе
СуммыПлатежейКВыгрузке.Вставить(ТекущиеДанные.Валюта, СуммаПлатежей + ТекущиеДанные.Сумма * Знак);
КонецЕсли;
СформироватьСтрокуСуммыКВыгрузке();
Отбор = Новый Структура("Ссылка", ТекущиеДанные.Ссылка);
НайденныеСтроки = ДокументыОтбор.НайтиСтроки(Отбор);
Если ТекущиеДанные.Выгружать И НайденныеСтроки.Количество() = 0 Тогда
НоваяСтрокаДокумента = ДокументыОтбор.Добавить();
НоваяСтрокаДокумента.Ссылка = ТекущиеДанные.Ссылка;
ИначеЕсли Не ТекущиеДанные.Выгружать И Не НайденныеСтроки.Количество() = 0 Тогда
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
ДокументыОтбор.Удалить(НайденнаяСтрока);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТекстДиректБанкГоризонтальноОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
ОбменСБанкамиКлиент.ОбработкаНавигационнойСсылкиРекламыДиректБанк(НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОтметитьСчета(Команда)
ОчиститьСообщения();
Объект.СписокСчетов.Очистить();
Для каждого Счет Из Объект.БанковскиеСчета Цикл
Если Не Счет.Выгружается Тогда
Счет.Пометка = Истина;
Объект.СписокСчетов.Добавить(Счет.Ссылка);
КонецЕсли;
КонецЦикла;
ОбновитьСписокПлатежей();
ОбновитьПодвал();
КонецПроцедуры
&НаКлиенте
Процедура СнятьОтметкиСчетов(Команда)
Объект.СписокСчетов.Очистить();
Для каждого Счет Из Объект.БанковскиеСчета Цикл
Если Не Счет.Выгружается Тогда
Счет.Пометка = Ложь;
КонецЕсли;
КонецЦикла;
Объект.ДокументыКВыгрузке.Очистить();
ОбновитьПодвал();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСписокСчетов(Команда)
ПроизводитсяВыгрузка = Ложь;
Для каждого Счет Из Объект.БанковскиеСчета Цикл
Если Счет.Выгружается Тогда
ПроизводитсяВыгрузка = Истина;
КонецЕсли;
КонецЦикла;
Если Не ПроизводитсяВыгрузка Тогда
ОбновитьСписокСчетовНаСервере();
ОбновитьПодвал();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьСписокСчетовНаСервере()
ЗаполнитьТаблицуСчетов();
МассивНайденныхСчетов = Новый Массив;
Для каждого Счет Из Объект.БанковскиеСчета Цикл
СчетСписка = Объект.СписокСчетов.НайтиПоЗначению(Счет.Ссылка);
Если СчетСписка <> Неопределено Тогда
Счет.Пометка = Истина;
МассивНайденныхСчетов.Добавить(СчетСписка);
КонецЕсли;
КонецЦикла;
МассивНеНайденныхСчетов = Новый Массив;
Для каждого Счет Из Объект.СписокСчетов Цикл
Если МассивНайденныхСчетов.Найти(Счет) = Неопределено Тогда
МассивНеНайденныхСчетов.Добавить(Счет);
КонецЕсли;
КонецЦикла;
Для каждого Счет Из МассивНеНайденныхСчетов Цикл
Объект.СписокСчетов.Удалить(Счет);
КонецЦикла;
ОбновитьСписокПлатежей();
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФайл(Команда)
ОчиститьСообщения();
ТекущиеДанные = Элементы.БанковскиеСчета.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
Если ВозможностьВыбораФайлов Тогда
ВыборФайлаОбменаСБанком(ТекущиеДанные);
Иначе
ПодключитьОбработчикОжидания("Подключаемый_ПодключитьРасширениеРаботыСФайламиИВыбратьФайл", 0.1, Истина);
КонецЕсли;
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru = 'Для выбора файла должна быть выделена строка с банковским счетом.
|Если список банковских счетов пуст, убедитесь, что в карточке банковского счета включен обмен с банком.'"),,
"Элементы.БанковскиеСчетаСсылка");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФайл(Команда)
ОчиститьСообщения();
ТекущиеДанные = Элементы.БанковскиеСчета.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
Если Не ТекущиеДанные.ПрямойОбмен И ЗначениеЗаполнено(ТекущиеДанные.НастройкаОбмена) Тогда
ФинансыКлиент.ОткрытьФайлДляПросмотра(
"Объект.БанковскиеСчета[" + Строка(Элементы.БанковскиеСчета.ТекущаяСтрока) + "].НастройкаОбмена",
ТекущиеДанные.НастройкаОбмена, ТекущиеДанные.Кодировка, НСтр("ru = 'Файл выгрузки'"));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Отметить(Команда)
Для каждого СтрокаДокумента Из Объект.ДокументыКВыгрузке Цикл
СтрокаДокумента.Выгружать = Истина;
КонецЦикла;
ОбновитьПодвал();
КонецПроцедуры
&НаКлиенте
Процедура СнятьОтметки(Команда)
ОчиститьСообщения();
Для каждого СтрокаДокумента Из Объект.ДокументыКВыгрузке Цикл
СтрокаДокумента.Выгружать = Ложь;
КонецЦикла;
ОбновитьПодвал();
КонецПроцедуры
&НаКлиенте
Процедура Обновить(Команда)
ОбновитьСписокПлатежей();
ОбновитьПодвал();
КонецПроцедуры
&НаКлиенте
Процедура Выгрузить(Команда)
ОчиститьСообщения();
МассивДокументовПрямойОбмен = Новый Массив;
Для каждого Счет Из Объект.БанковскиеСчета Цикл
Если Не Счет.Пометка Тогда
Продолжить;
КонецЕсли;
Если Счет.ПрямойОбмен Тогда
Если Не ЗначениеЗаполнено(Счет.НастройкаОбмена) Тогда
ТекстСообщения = СтрШаблон(
НСтр("ru = 'Для банковского счета %1 не настроен прямой обмен. Выполните подключение к сервису 1С:ДиректБанк, или воспользуйтесь выгрузкой в файл.'"),
Счет.Ссылка);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,,
Элементы.БанковскиеСчетаНастройкаОбмена.Имя);
Иначе
Отбор = Новый Структура;
Отбор.Вставить("Выгружать", Истина);
Отбор.Вставить("БанковскийСчет", Счет.Ссылка);
СтрокиКВыгрузке = Объект.ДокументыКВыгрузке.НайтиСтроки(Отбор);
Для каждого СтрокаКВыгрузке Из СтрокиКВыгрузке Цикл
МассивДокументовПрямойОбмен.Добавить(СтрокаКВыгрузке["Ссылка"]);
КонецЦикла;
КонецЕсли;
Иначе
Если Не ЗначениеЗаполнено(Счет.НастройкаОбмена) Тогда
Если ВозможностьВыбораФайлов Тогда
ВыборФайлаПриВыгрузке(Счет);
Иначе
ПодключитьРасширениеРаботыСФайламиИВыбратьФайлПриВыгрузке(Счет);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если МассивДокументовПрямойОбмен.Количество() Тогда
Обработчик = Новый ОписаниеОповещения("СформироватьПодписатьОтправитьЭДПродолжение", ЭтотОбъект, Новый Структура);
ЭлектронноеВзаимодействиеКлиентПереопределяемый.ВыполнитьПроверкуПроведенияДокументов(
МассивДокументовПрямойОбмен, Обработчик, ЭтаФорма);
КонецЕсли;
ВыгрузитьНаСервере();
ОбработатьЗавершениеВыгрузки();
ПодключитьОжиданиеФоновыхЗаданий();
КонецПроцедуры
&НаСервере
Процедура ВыгрузитьНаСервере()
Обработка = РеквизитФормыВЗначение("Объект");
Обработка.ВыгрузитьПлатежи(ЭтаФорма.УникальныйИдентификатор);
ЗначениеВРеквизитФормы(Обработка, "Объект");
КонецПроцедуры
&НаКлиенте
Процедура УдалитьИЗакрыть(Команда)
ОчиститьСообщения();
ОтключитьОбработчикОжидания("Подключаемый_ПроверитьФайлыВыгрузки");
Для каждого Счет Из Объект.БанковскиеСчета Цикл
Если Счет.Выгружен И Счет.ОбменЧерезФайл И ЗначениеЗаполнено(Счет.НастройкаОбмена) Тогда
НачатьУдалениеФайлов(Новый ОписаниеОповещения("ПослеУдаленияФайлов", ЭтотОбъект), Счет.НастройкаОбмена);
КонецЕсли;
КонецЦикла;
ЗакрытьБезВопроса = Истина;
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ПослеУдаленияФайлов(ДополнительныеПараметры) Экспорт
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ВывестиОтчет(Команда)
ИндексыСтрок = Новый Массив;
Для каждого ВыделеннаяСтрока Из Элементы.БанковскиеСчета.ВыделенныеСтроки Цикл
ИндексыСтрок.Добавить(Объект.БанковскиеСчета.Индекс(Элементы.БанковскиеСчета.ДанныеСтроки(ВыделеннаяСтрока)));
КонецЦикла;
ТаблицаОтчетОВыгрузке = ВывестиОтчетНаСервере(ИндексыСтрок);
Если ТаблицаОтчетОВыгрузке <> Неопределено Тогда
ТаблицаОтчетОВыгрузке.ТолькоПросмотр = Истина;
ТаблицаОтчетОВыгрузке.Показать(НСтр("ru='Отчет о выгрузке платежей'"));
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ВывестиОтчетНаСервере(ИндексыСтрок)
Обработка = РеквизитФормыВЗначение("Объект");
Возврат Обработка.ПечатьОтчетаОВыгрузке(ИндексыСтрок);
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.БанковскиеСчетаНастройкаОбмена.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.БанковскиеСчета.ПрямойОбмен");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.БанковскиеСчета.НастройкаОбмена");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='<ЭДО не настроен. Создать настройку>'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.БанковскиеСчетаНастройкаОбмена.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.БанковскиеСчета.ПрямойОбмен");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.БанковскиеСчетаКВыгрузке.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.БанковскиеСчета.Выгружается");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='Выгружается...'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДокументыКВыгрузкеДатаВыгрузки.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ДокументыКВыгрузке.ДатаВыгрузки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Дата("00010101");
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", "-");
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДокументыКВыгрузке.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ДокументыКВыгрузке.ЕстьОшибка");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("БанковскиеСчета");
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.БанковскиеСчета.Закрыт");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимость()
ЕстьОшибкиПлатежей = Ложь;
Отбор = Новый Структура("ЕстьОшибка", Истина);
НайденныеСтроки = Объект.ДокументыКВыгрузке.НайтиСтроки(Отбор);
ЕстьОшибкиПлатежей = Булево(НайденныеСтроки.Количество());
Элементы.ДокументыКВыгрузкеОписаниеОшибок.Видимость = ЕстьОшибкиПлатежей;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТаблицуСчетов()
Обработка = РеквизитФормыВЗначение("Объект");
Обработка.ЗаполнитьТаблицуСчетовВыгрузки();
ЗначениеВРеквизитФормы(Обработка, "Объект");
МассивСчетов = Объект.БанковскиеСчета.Выгрузить().ВыгрузитьКолонку("Ссылка");
ДополнитьТаблицуСчетовКоличествомДокументовКВыгрузке(МассивСчетов);
КонецПроцедуры
&НаСервере
Процедура ДополнитьТаблицуСчетовКоличествомДокументовКВыгрузке(МассивСчетов)
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДанныеДокумента.БанковскийСчет КАК БанковскийСчет,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеДокумента.Ссылка) КАК Количество
|ИЗ
| Документ.СписаниеБезналичныхДенежныхСредств КАК ДанныеДокумента
|ГДЕ
| ДанныеДокумента.Проведен
| И НЕ ДанныеДокумента.ПроведеноБанком
| И ДанныеДокумента.ТипПлатежногоДокумента В (
| ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеПоручение)
| , ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.РаспоряжениеОбОбязательнойПродаже)
| )
| И ДанныеДокумента.БанковскийСчет В (&МассивСчетов)
| И ДанныеДокумента.ДатаВыгрузки = ДАТАВРЕМЯ(1,1,1)
|
|СГРУППИРОВАТЬ ПО
| ДанныеДокумента.БанковскийСчет
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ДанныеДокумента.БанковскийСчет КАК БанковскийСчет,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеДокумента.Ссылка) КАК Количество
|ИЗ
| Документ.ПоступлениеБезналичныхДенежныхСредств КАК ДанныеДокумента
|ГДЕ
| ДанныеДокумента.Проведен
| И НЕ ДанныеДокумента.ПроведеноБанком
| И ДанныеДокумента.ТипПлатежногоДокумента = ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.ПлатежноеТребование)
| И ДанныеДокумента.БанковскийСчет В (&МассивСчетов)
| И ДанныеДокумента.ДатаВыгрузки = ДАТАВРЕМЯ(1,1,1)
|
|СГРУППИРОВАТЬ ПО
| ДанныеДокумента.БанковскийСчет
|";
Запрос.УстановитьПараметр("МассивСчетов", МассивСчетов);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат;
КонецЕсли;
Таблица = Результат.Выгрузить();
Таблица.Свернуть("БанковскийСчет", "Количество");
Для каждого Счет Из Объект.БанковскиеСчета Цикл
СтрокаКоличества = Таблица.Найти(Счет.Ссылка, "БанковскийСчет");
Если СтрокаКоличества <> Неопределено Тогда
Счет.КВыгрузке = СтрокаКоличества.Количество;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбновитьСписокПлатежей()
Обработка = РеквизитФормыВЗначение("Объект");
Если ДокументыОтбор.Количество() Тогда
Обработка.ЗаполнитьТаблицуПлатежей(ДокументыОтбор);
Иначе
Обработка.ЗаполнитьТаблицуПлатежей();
КонецЕсли;
ЗначениеВРеквизитФормы(Обработка, "Объект");
УстановитьВидимость();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокВыбораПериодов()
СписокВыбораПериода = Элементы.Период.СписокВыбора;
СписокВыбораПериода.Добавить(НСтр("ru='Все время'"), НСтр("ru='Все время'"));
СписокВыбораПериода.Добавить("Дату", НСтр("ru='Дату...'"));
СписокВыбораПериода.Добавить(НСтр("ru='Сегодня'"), НСтр("ru='Сегодня'"));
СписокВыбораПериода.Добавить(НСтр("ru='Три дня'"), НСтр("ru='Три дня'"));
СписокВыбораПериода.Добавить(НСтр("ru='Неделю'"), НСтр("ru='Неделю'"));
Период = НСтр("ru='Все время'");
Объект.ДатаНачалаВыгрузки = '00010101';
Объект.ДатаКонцаВыгрузки = '00010101';
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьПометкуСчета()
ОбработатьПометкуСчетаСервер();
ОбновитьПодвал();
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьЗавершениеВыгрузки()
ЕстьФайлыДляСохранения = Ложь;
ЕстьНеобходимостьОбновленияСпискаПлатежей = Ложь;
ЕстьНевыполненныеЗадания = Ложь;
Для каждого Счет Из Объект.БанковскиеСчета Цикл
Если Счет.СохранитьФайл Тогда
ЕстьФайлыДляСохранения = Истина;
Если Счет.Пометка Тогда
ЕстьНеобходимостьОбновленияСпискаПлатежей = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ЕстьФайлыДляСохранения Тогда
СохранитьФайлы();
КонецЕсли;
ВсегоФайлов = 0;
ПравилаОбъединенияФайлов = Новый Массив;
Для каждого Счет Из Объект.БанковскиеСчета Цикл
Если Счет.Выгружен И Счет.ОбменЧерезФайл Тогда
Если Счет.ФорматОбмена <> ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ФедеральноеКазначействоРФ") Тогда
Счет.ТекстФайлаВыгрузкиСтрокой = ТекстВыгрузкиСтрокой(Счет.АдресХранилищаФайла);
Иначе
Счет.ТекстФайлаВыгрузкиСтрокой = ТекстыАрхиваВыгрузкиСтрокой(Счет.АдресХранилищаФайла);
КонецЕсли;
Если Не ЗначениеЗаполнено(Счет.ПравилоФайловогоОбменаСБанками) Тогда
ВсегоФайлов = ВсегоФайлов + 1;
Иначе
Если ПравилаОбъединенияФайлов.Найти(Счет.ПравилоФайловогоОбменаСБанками) = Неопределено Тогда
ПравилаОбъединенияФайлов.Добавить(Счет.ПравилоФайловогоОбменаСБанками);
ВсегоФайлов = ВсегоФайлов + 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ОбработатьЗавершениеВыгрузкиНаСервере(ЕстьНеобходимостьОбновленияСпискаПлатежей, ВсегоФайлов);
Если ЕстьНеобходимостьОбновленияСпискаПлатежей Тогда
ОбновитьПодвал();
КонецЕсли;
СчетчикПроверок = 0;
ПроверкаВыполняется = Истина;
ПодключитьОбработчикОжидания("Подключаемый_ПроверитьФайлыВыгрузки", 1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПодключитьОжиданиеФоновыхЗаданий();
Для Каждого Счет Из Объект.БанковскиеСчета Цикл
Если ЗначениеЗаполнено(Счет.ДанныеВыгрузки)
И ЭтоАдресВременногоХранилища(Счет.ДанныеВыгрузки) Тогда
ФоновоеЗадание = ПолучитьИзВременногоХранилища(Счет.ДанныеВыгрузки);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбработатьЗавершениеВыгрузкиОповещение", ЭтотОбъект, Счет);
ДлительныеОперацииКлиент.ОжидатьЗавершение(
ФоновоеЗадание, ОповещениеОЗавершении, ПараметрыОжидания);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьЗавершениеВыгрузкиОповещение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Статус = "Ошибка" Тогда
СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(Результат.ИнформацияОбОшибке);
Возврат;
КонецЕсли;
Если Результат.Статус = "Выполнено" Тогда
ДополнительныеПараметры.Выгружается = Ложь;
ДополнительныеПараметры.СохранитьФайл = Истина;
ДополнительныеПараметры.ДанныеВыгрузки = "";
ОбработатьЗавершениеВыгрузки();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработатьЗавершениеВыгрузкиНаСервере(ЕстьНеобходимостьОбновленияСпискаПлатежей, ВсегоФайлов)
Обработка = РеквизитФормыВЗначение("Объект");
Обработка.ЗаписатьДатуВыгрузкиПлатежей();
Если ЕстьНеобходимостьОбновленияСпискаПлатежей Тогда
Обработка.ЗаполнитьТаблицуПлатежей();
КонецЕсли;
ЗначениеВРеквизитФормы(Обработка, "Объект");
УстановитьВидимость();
ОтборПометка = Новый Структура("Пометка", Истина);
ОтборВыгружен = Новый Структура("Выгружен", Истина);
Элементы.ДекорацияВыгружено.Заголовок = "";
Если ВсегоФайлов > 0 Тогда
СклонениеВыгружено = НСтр("ru = 'Выгружен, Выгружено, Выгружено'");
Выгружено = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(ВсегоФайлов, СклонениеВыгружено);
Выгружено = СокрЛП(СтрЗаменить(Выгружено, ВсегоФайлов + " ", ""));
СклонениеФайлов = НСтр("ru = 'файл, файла, файлов'");
Файлов = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(ВсегоФайлов, СклонениеФайлов);
Если ВозможностьВыбораФайлов Тогда
Элементы.ДекорацияВыгружено.Заголовок = Выгружено + " " + Файлов + ". " +
НСтр("ru = 'В целях безопасности проводится контроль соответствия файлов выгрузки и данных программы, пока эта форма открыта. При закрытии этой формы файлы будут удалены.
|Обязательно проверьте правильность платежных реквизитов в программе Клиент банка.'");
Иначе
Элементы.ДекорацияВыгружено.Заголовок = Выгружено + " " + Файлов + ". " +
НСтр("ru = 'Контроль соответствия файлов выгрузки и данных программы не производится. В целях безопасности требуется установить расширение для работы с файлами.
|Обязательно проверьте правильность платежных реквизитов в программе Клиент банка.'");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СформироватьПодписатьОтправитьЭДПродолжение(МассивДокументов, Результат) Экспорт
Если ЗначениеЗаполнено(МассивДокументов) Тогда
ОбменСБанкамиКлиент.СформироватьПодписатьОтправитьЭД(МассивДокументов);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПодвал()
СуммыПлатежейКВыгрузке.Очистить();
ОтборСтрокКВыгрузке = Новый Структура("Выгружать", Истина);
СтрокиКВыгрузке = Объект.ДокументыКВыгрузке.НайтиСтроки(ОтборСтрокКВыгрузке);
КоличествоКВыгрузке = СтрокиКВыгрузке.Количество();
Для каждого Строка Из СтрокиКВыгрузке Цикл
СуммаПлатежей = СуммыПлатежейКВыгрузке.Получить(Строка.Валюта);
Если СуммаПлатежей = Неопределено Тогда
СуммыПлатежейКВыгрузке.Вставить(Строка.Валюта, Строка.Сумма);
Иначе
СуммыПлатежейКВыгрузке.Вставить(Строка.Валюта, СуммаПлатежей + Строка.Сумма);
КонецЕсли;
КонецЦикла;
СформироватьСтрокуСуммыКВыгрузке();
КонецПроцедуры
&НаКлиенте
Процедура СформироватьСтрокуСуммыКВыгрузке()
СуммаКВыгрузке = "";
Если СуммыПлатежейКВыгрузке.Количество() Тогда
Для каждого СуммаПлатежей Из СуммыПлатежейКВыгрузке Цикл
Если ЗначениеЗаполнено(СуммаПлатежей.Значение) Тогда
СуммаКВыгрузке = СуммаКВыгрузке + Формат(СуммаПлатежей.Значение, "ЧДЦ=2") + " " + Строка(СуммаПлатежей.Ключ) + ", ";
КонецЕсли;
КонецЦикла;
СуммаКВыгрузке = Лев(СуммаКВыгрузке, СтрДлина(СуммаКВыгрузке) - 2);
СуммаКВыгрузке = НСтр("ru = 'На сумму:'") + " " + ?(СуммаКВыгрузке = "", "-", СуммаКВыгрузке);
Иначе
СуммаКВыгрузке = НСтр("ru = 'На сумму: -'")
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеСозданияНастройкиЭДО(НастройкаЭДО, Параметры) Экспорт
Возврат;
КонецПроцедуры
&НаСервере
Процедура ОбработатьЗавершениеВыгрузкиПрямойОбмен(ВыгруженныеДокументы)
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(СостоянияОбменСБанками.СсылкаНаОбъект) = ТИП(Документ.ПоступлениеБезналичныхДенежныхСредств) ТОГДА
| ВЫРАЗИТЬ(СостоянияОбменСБанками.СсылкаНаОбъект КАК Документ.ПоступлениеБезналичныхДенежныхСредств).БанковскийСчет
| КОГДА ТИПЗНАЧЕНИЯ(СостоянияОбменСБанками.СсылкаНаОбъект) = ТИП(Документ.СписаниеБезналичныхДенежныхСредств) ТОГДА
| ВЫРАЗИТЬ(СостоянияОбменСБанками.СсылкаНаОбъект КАК Документ.СписаниеБезналичныхДенежныхСредств).БанковскийСчет
| КОНЕЦ КАК Счет
|
|ИЗ
| РегистрСведений.СостоянияОбменСБанками КАК СостоянияОбменСБанками
|
|ГДЕ
| СостоянияОбменСБанками.СсылкаНаОбъект В (&МассивОбъектов)
| И СостоянияОбменСБанками.Состояние В (
| ЗНАЧЕНИЕ(Перечисление.СостоянияОбменСБанками.ОжидаетсяИсполнение)
| )
|
|СГРУППИРОВАТЬ ПО
| ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(СостоянияОбменСБанками.СсылкаНаОбъект) = ТИП(Документ.ПоступлениеБезналичныхДенежныхСредств) ТОГДА
| ВЫРАЗИТЬ(СостоянияОбменСБанками.СсылкаНаОбъект КАК Документ.ПоступлениеБезналичныхДенежныхСредств).БанковскийСчет
| КОГДА ТИПЗНАЧЕНИЯ(СостоянияОбменСБанками.СсылкаНаОбъект) = ТИП(Документ.СписаниеБезналичныхДенежныхСредств) ТОГДА
| ВЫРАЗИТЬ(СостоянияОбменСБанками.СсылкаНаОбъект КАК Документ.СписаниеБезналичныхДенежныхСредств).БанковскийСчет
| КОНЕЦ
|
|;
|
|
|ВЫБРАТЬ
| СостоянияОбменСБанками.СсылкаНаОбъект КАК Ссылка,
| СостоянияОбменСБанками.Состояние КАК Состояние,
| ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(СостоянияОбменСБанками.СсылкаНаОбъект) = ТИП(Документ.ПоступлениеБезналичныхДенежныхСредств) ТОГДА
| ВЫРАЗИТЬ(СостоянияОбменСБанками.СсылкаНаОбъект КАК Документ.ПоступлениеБезналичныхДенежныхСредств).БанковскийСчет
| КОГДА ТИПЗНАЧЕНИЯ(СостоянияОбменСБанками.СсылкаНаОбъект) = ТИП(Документ.СписаниеБезналичныхДенежныхСредств) ТОГДА
| ВЫРАЗИТЬ(СостоянияОбменСБанками.СсылкаНаОбъект КАК Документ.СписаниеБезналичныхДенежныхСредств).БанковскийСчет
| КОНЕЦ КАК Счет
|ИЗ
| РегистрСведений.СостоянияОбменСБанками КАК СостоянияОбменСБанками
|ГДЕ
| СостоянияОбменСБанками.СсылкаНаОбъект В (&МассивОбъектов)
| И СостоянияОбменСБанками.Состояние В (
| ЗНАЧЕНИЕ(Перечисление.СостоянияОбменСБанками.ОжидаетсяИсполнение)
| )
|";
Запрос.УстановитьПараметр("МассивОбъектов", ВыгруженныеДокументы);
Результат = Запрос.ВыполнитьПакет();
ТаблицаДокументов = Результат[1].Выгрузить();
МассивСчетов = Новый Массив;
Выборка = Результат[0].Выбрать();
Пока Выборка.Следующий() Цикл
Строки = Объект.БанковскиеСчета.НайтиСтроки(Новый Структура("Ссылка", Выборка.Счет));
Для Каждого СтрокаТЧ Из Строки Цикл
СтрокаТЧ.Выгружен = Истина;
МассивСчетов.Добавить(Выборка.Счет);
МассивСтрок = Новый Массив;
СсылкиНаДокументы = ТаблицаДокументов.НайтиСтроки(Новый Структура("Счет", Выборка.Счет));
Для Каждого СсылкаНаДокумент Из СсылкиНаДокументы Цикл
Строки = Объект.ДокументыКВыгрузке.НайтиСтроки(Новый Структура("Ссылка", СсылкаНаДокумент["Ссылка"]));
Для каждого СтрокаДокумента Из Строки Цикл
МассивСтрок.Добавить(СтрокаДокумента);
КонецЦикла;
КонецЦикла;
СтрокаТЧ.АдресХранилищаДокументов =
ПоместитьВоВременноеХранилище(Объект.ДокументыКВыгрузке.Выгрузить(МассивСтрок), ЭтаФорма.УникальныйИдентификатор);
КонецЦикла;
КонецЦикла;
Обработка = РеквизитФормыВЗначение("Объект");
Обработка.ЗаписатьДатуВыгрузкиПлатежей();
Обработка.ЗаполнитьТаблицуПлатежей();
ЗначениеВРеквизитФормы(Обработка, "Объект");
ДополнитьТаблицуСчетовКоличествомДокументовКВыгрузке(МассивСчетов);
УстановитьВидимость();
КонецПроцедуры
&НаКлиенте
Процедура ВыборФайлаПриВыгрузке(Счет)
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Если Счет.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ISO20022") Тогда
ДиалогВыбораФайла.Фильтр = НСтр("ru='XML файл (*.xml)|*.xml'");
ДиалогВыбораФайла.Расширение = "xml";
ИначеЕсли Счет.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ClientBankExchange1c")
ИЛИ Счет.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.MT940") Тогда
ДиалогВыбораФайла.Фильтр = НСтр("ru='Текстовый файл (*.txt)|*.txt'");
ДиалогВыбораФайла.Расширение = "txt";
ИначеЕсли Счет.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ФедеральноеКазначействоРФ") Тогда
ДиалогВыбораФайла.Фильтр = НСтр("ru='Zip-архив (*.zip)|*.zip'");
ДиалогВыбораФайла.Расширение = "zip";
КонецЕсли;
ДиалогВыбораФайла.Заголовок =
СтрШаблон(НСтр("ru='Укажите имя файла для выгрузки данных по счету %1'"), Строка(Счет.Ссылка));
ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
ДиалогВыбораФайла.ИндексФильтра = 0;
ДиалогВыбораФайла.ПолноеИмяФайла = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Ложь;
ДопПараметры = Новый Структура;
ДопПараметры.Вставить("ИдСчета", Счет.ПолучитьИдентификатор());
ОписаниеОповещения = Новый ОписаниеОповещения("ВыборФайлаПриВыгрузкеЗавершение", ЭтаФорма, ДопПараметры);
ДиалогВыбораФайла.Показать(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ВыборФайлаПриВыгрузкеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено
И ТипЗнч(Результат) = Тип("Массив")
И Результат.Количество() > 0 Тогда
ИмяФайла = Результат[0];
Счет = Объект.БанковскиеСчета.НайтиПоИдентификатору(ДополнительныеПараметры.ИдСчета);
Если Счет <> Неопределено Тогда
Счет.НастройкаОбмена = ИмяФайла;
ВыгрузитьПлатежиПослеВыбораФайла(ДополнительныеПараметры.ИдСчета);
ОбработатьЗавершениеВыгрузки();
ПодключитьОжиданиеФоновыхЗаданий();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыборФайлаОбменаСБанком(ТекущиеДанные)
Если ТекущиеДанные.ПрямойОбмен Тогда
ИмяФайла = "";
Иначе
Если ТекущиеДанные.ЗагружатьКаталог Тогда
ИмяФайла = "";
Иначе
ИмяФайла = ТекущиеДанные.НастройкаОбмена;
КонецЕсли;
КонецЕсли;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Если ТекущиеДанные.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ISO20022") Тогда
ДиалогВыбораФайла.Фильтр = НСтр("ru='XML файл (*.xml)|*.xml'");
ДиалогВыбораФайла.Расширение = "xml";
ИначеЕсли ТекущиеДанные.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ФедеральноеКазначействоРФ") Тогда
ДиалогВыбораФайла.Фильтр = НСтр("ru='Zip-архив (*.zip)|*.zip'");
ДиалогВыбораФайла.Расширение = "zip";
Иначе
ДиалогВыбораФайла.Фильтр = НСтр("ru='Текстовый файл (*.txt)|*.txt'");
ДиалогВыбораФайла.Расширение = "txt";
КонецЕсли;
ДиалогВыбораФайла.Заголовок = НСтр("ru='Укажите имя файла для выгрузки данных'");
ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
ДиалогВыбораФайла.ИндексФильтра = 0;
ДиалогВыбораФайла.ПолноеИмяФайла =
?(ПустаяСтрока(ИмяФайла), СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", ""), ИмяФайла);
ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Ложь;
ОписаниеОповещения = Новый ОписаниеОповещения(
"ВыборФайлаЗавершение",
ЭтотОбъект,
Новый Структура("ТекущиеДанные", ТекущиеДанные));
ДиалогВыбораФайла.Показать(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ВыборФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат;
Иначе
ДополнительныеПараметры.ТекущиеДанные.НастройкаОбмена = ВыбранныеФайлы[0];
ДополнительныеПараметры.ТекущиеДанные.ПравилоФайловогоОбменаСБанками = ВыбранныеФайлы[0];
ДополнительныеПараметры.ТекущиеДанные.ПрямойОбмен = Ложь;
Если Не ДополнительныеПараметры.ТекущиеДанные.Пометка Тогда
ПодключитьОбработчикОжидания("ОбработатьПометкуСчета", 0.1, Истина);
КонецЕсли;
ДополнительныеПараметры.ТекущиеДанные.Пометка = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СохранитьФайлы()
ВыгруженныеСчета = "";
Для каждого Счет Из Объект.БанковскиеСчета Цикл
Если Счет.СохранитьФайл И ЭтоАдресВременногоХранилища(Счет.АдресХранилищаФайла) Тогда
ДанныеВыгрузки = ПолучитьИзВременногоХранилища(Счет.АдресХранилищаФайла);
Если ТипЗнч(ДанныеВыгрузки) = Тип("ДвоичныеДанные") Тогда
Если ВозможностьВыбораФайлов Тогда
ВыгрузитьФайлНаКлиенте(Счет);
Иначе
Попытка
Если ЗначениеЗаполнено(Счет.НастройкаОбмена) Тогда
ПолучитьФайл(Счет.АдресХранилищаФайла, Счет.НастройкаОбмена, Истина);
Иначе
ПолучитьФайл(Счет.АдресХранилищаФайла, СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", ""), Истина);
КонецЕсли;
Счет.Выгружен = Истина;
Исключение
ШаблонСообщения = НСтр("ru = 'При записи файла возникла ошибка
|%1'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КонецПопытки;
КонецЕсли;
ВыгруженныеСчета = ВыгруженныеСчета + Строка(Счет.Ссылка) + "
|";
КонецЕсли;
Счет.СохранитьФайл = Ложь;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ВыгруженныеСчета) Тогда
ПоказатьОповещениеПользователя(,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Выгружены в файлы данные по счетам
|%1'"),
ВыгруженныеСчета)
);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьФайлНаКлиенте(Счет)
ДополнительныеПараметры = Новый Структура("Счет", Счет);
ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузитьФайлНаКлиентеСозданиеФайла", ЭтотОбъект, ДополнительныеПараметры);
Файл = Новый Файл();
Файл.НачатьИнициализацию(ОписаниеОповещения, Счет.НастройкаОбмена);
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьФайлНаКлиентеСозданиеФайла(Файл, ДополнительныеПараметры) Экспорт
ДополнительныеПараметры.Вставить("Файл", Файл);
ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузитьФайлНаКлиентеПроверкаСуществования", ЭтотОбъект, ДополнительныеПараметры);
Файл.НачатьПроверкуСуществования(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьФайлНаКлиентеПроверкаСуществования(Существует, ДополнительныеПараметры) Экспорт
Файл = ДополнительныеПараметры.Файл;
ДополнительныеПараметры.Вставить("ФайлСуществует", Существует);
ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузитьФайлНаКлиентеПроверкаНаКаталог", ЭтотОбъект, ДополнительныеПараметры);
Если Существует Тогда
Файл.НачатьПроверкуЭтоКаталог(ОписаниеОповещения);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеОповещения, Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьФайлНаКлиентеПроверкаНаКаталог(ЭтоКаталог, ДополнительныеПараметры) Экспорт
Счет = ДополнительныеПараметры.Счет;
ИмяФайла = Счет.НастройкаОбмена;
Если Прав(СокрЛП(Счет.НастройкаОбмена), 1) = "\"
Или Прав(СокрЛП(Счет.НастройкаОбмена), 1) = "/"
Или ЭтоКаталог Тогда
Расширение = "";
Если Счет.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ISO20022") Тогда
Расширение = ".xml";
ИначеЕсли Счет.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ClientBankExchange1c") Тогда
Расширение = ".txt";
ИначеЕсли Счет.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ФедеральноеКазначействоРФ") Тогда
Расширение = ".zip";
КонецЕсли;
ИмяФайла = Счет.НастройкаОбмена
+ ?(Прав(СокрЛП(Счет.НастройкаОбмена), 1) = "\" Или Прав(СокрЛП(Счет.НастройкаОбмена), 1) = "/", "", "\")
+ СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "")
+ Расширение;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузитьФайлНаКлиентеЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ФайловаяСистемаКлиент.СохранитьФайл(ОписаниеОповещения, Счет.АдресХранилищаФайла, ИмяФайла);
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьФайлНаКлиентеЗавершение(ПолученныеФайлы, ДополнительныеПараметры) Экспорт
ДополнительныеПараметры.Счет.Выгружен = Истина;
ОбработатьЗавершениеВыгрузки();
КонецПроцедуры
#Область РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПодключитьРасширениеРаботыСФайламиИВыбратьФайл()
ТекстСообщения = НСтр("ru = 'Для выбора файла необходимо установить расширение работы с файлами.'");
ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьФайлЗавершение", ЭтотОбъект);
ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения, ТекстСообщения);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФайлЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВозможностьВыбораФайлов = Результат;
Если ВозможностьВыбораФайлов Тогда
ТекущиеДанные = Элементы.БанковскиеСчета.ТекущиеДанные;
ВыборФайлаОбменаСБанком(ТекущиеДанные);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПодключитьРасширениеРаботыСФайламиИВыбратьФайлПриВыгрузке(Счет)
ТекстСообщения = НСтр("ru = 'Для указания файла выгрузки платежей по счету %1 необходимо установить расширение работы с файлами.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Счет.Наименование);
ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьФайлПриВыгрузкеЗавершение", ЭтотОбъект, Счет);
ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения, ТекстСообщения, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФайлПриВыгрузкеЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВозможностьВыбораФайлов = Результат;
Если ВозможностьВыбораФайлов Тогда
ВыборФайлаПриВыгрузке(ДополнительныеПараметры);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВыгрузитьПлатежиПослеВыбораФайла(ИдСчета)
Счет = Объект.БанковскиеСчета.НайтиПоИдентификатору(ИдСчета);
Обработка = РеквизитФормыВЗначение("Объект");
Обработка.ВыгрузитьПлатежиПоСчету(Счет, ЭтаФорма.УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Процедура ОбработатьПометкуСчетаСервер()
Объект.СписокСчетов.Очистить();
Для каждого Счет Из Объект.БанковскиеСчета Цикл
Если Счет.Пометка Тогда
Объект.СписокСчетов.Добавить(Счет.Ссылка);
КонецЕсли;
КонецЦикла;
ОбновитьСписокПлатежей();
КонецПроцедуры
&НаКлиенте
Функция ТекстВыгрузкиСтрокой(Знач АдресИсходныхДанных)
#Если ВебКлиент ИЛИ МобильныйКлиент Тогда
Возврат "";
#Иначе
ДвоичныеДанныеИсходногоФайла = ПолучитьИзВременногоХранилища(АдресИсходныхДанных);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанныеИсходногоФайла.Записать(ИмяВременногоФайла);
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ИмяВременногоФайла);
ТекстСтрокой = ТекстовыйДокумент.ПолучитьТекст();
НачатьУдалениеФайлов(Новый ОписаниеОповещения("ПослеУдаленияФайлов", ЭтотОбъект), ИмяВременногоФайла);
Возврат ТекстСтрокой;
#КонецЕсли
КонецФункции
&НаКлиенте
Функция ТекстыАрхиваВыгрузкиСтрокой(Знач АдресИсходныхДанных)
#Если ВебКлиент ИЛИ МобильныйКлиент Тогда
Возврат "";
#Иначе
ТекстФайлаВыгрузкиСтрокой = "";
ДвоичныеДанныеИсходногоФайла = ПолучитьИзВременногоХранилища(АдресИсходныхДанных);
ТекстФайлаВыгрузкиСтрокой = Base64Строка(ДвоичныеДанныеИсходногоФайла);
Возврат ТекстФайлаВыгрузкиСтрокой;
#КонецЕсли
КонецФункции
&НаКлиенте
Процедура Подключаемый_ПроверитьФайлыВыгрузки()
Для каждого Счет Из Объект.БанковскиеСчета Цикл
Если Счет.Выгружен И Счет.ОбменЧерезФайл И ЗначениеЗаполнено(Счет.НастройкаОбмена) Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ЗапуститьПроверкуПовторно", ЭтотОбъект, Счет);
ПроверитьФайлыНаКлиенте(Счет, ОписаниеОповещения);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ЗапуститьПроверкуПовторно(Результат, ДополнительныеПараметры) Экспорт
Если Не ПроверкаВыполняется Тогда
Возврат;
КонецЕсли;
СчетчикПроверок = СчетчикПроверок - 1;
Если Результат = "ПроверкаВыполненаУспешно" Тогда
Если СчетчикПроверок = 0 Тогда
#Если ВебКлиент Тогда
Интервал = 0.5;
#Иначе
ГСЧ = Новый ГенераторСлучайныхЧисел();
Делитель = ГСЧ.СлучайноеЧисло(1, 10);
Интервал = Окр(2 / Делитель, 1);
#КонецЕсли
ПодключитьОбработчикОжидания("Подключаемый_ПроверитьФайлыВыгрузки", Интервал, Истина);
КонецЕсли;
ИначеЕсли Результат = "ФайлыИзменены" Тогда
ПроверкаВыполняется = Ложь;
СчетчикПроверок = 0;
ОтключитьОбработчикОжидания("Подключаемый_ПроверитьФайлыВыгрузки");
ПараметрыПроверки = Новый Структура;
ПараметрыПроверки.Вставить("Результат", Результат);
ОткрытьФорму("Обработка.КлиентБанк.Форма.КонтрольБезопасностиВыгрузкиВФайл",
ПараметрыПроверки,
ЭтотОбъект,
"КонтрольБезопасностиВыгрузкиВФайл",,,,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьФайлыНаКлиенте(Счет, ОповещениеПослеПроверки)
СчетчикПроверок = СчетчикПроверок + 1;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОповещениеПослеПроверки", ОповещениеПослеПроверки);
ДополнительныеПараметры.Вставить("Счет", Счет);
ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьФайлыНаКлиентеЭтоКаталог", ЭтотОбъект, ДополнительныеПараметры);
Файл = Новый Файл(Счет.НастройкаОбмена);
Файл.НачатьПроверкуЭтоКаталог(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьФайлыНаКлиентеЭтоКаталог(ЭтоКаталог, ДополнительныеПараметры) Экспорт
Если Не ЭтоКаталог Тогда
ПроверитьФайлНаКлиенте(ДополнительныеПараметры.Счет, ДополнительныеПараметры.ОповещениеПослеПроверки)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьФайлНаКлиенте(Счет, ОповещениеПослеПроверки)
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОповещениеПослеПроверки", ОповещениеПослеПроверки);
ДополнительныеПараметры.Вставить("Счет", Счет);
ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьФайлНаКлиентеСозданиеФайла", ЭтотОбъект, ДополнительныеПараметры);
Файл = Новый Файл();
Файл.НачатьИнициализацию(ОписаниеОповещения, Счет.НастройкаОбмена);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьФайлНаКлиентеСозданиеФайла(Файл, ДополнительныеПараметры) Экспорт
ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьФайлНаКлиентеПроверкаСуществования", ЭтотОбъект, ДополнительныеПараметры);
Файл.НачатьПроверкуСуществования(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьФайлНаКлиентеПроверкаСуществования(Существует, ДополнительныеПараметры) Экспорт
Если Существует Тогда
#Если ВебКлиент ИЛИ МобильныйКлиент Тогда
ОписаниеОповещения = ДополнительныеПараметры.ОповещениеПослеПроверки;
ВыполнитьОбработкуОповещения(ОписаниеОповещения, "ФайлыУдалены");
#Иначе
Если ДополнительныеПараметры.Счет.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ФедеральноеКазначействоРФ") Тогда
ДвоичныеДанные = Новый ДвоичныеДанные(ДополнительныеПараметры.Счет.НастройкаОбмена);
ДанныеФайла = Base64Строка(ДвоичныеДанные);
ДополнительныеПараметры.Вставить("ТекстовыйДокументВыписки", ДанныеФайла);
ПроверитьФайлНаКлиентеПослеЧтенияФайла(ДополнительныеПараметры);
Иначе
ТекстовыйДокументВыписки = Новый ТекстовыйДокумент;
ДополнительныеПараметры.Вставить("ТекстовыйДокументВыписки", ТекстовыйДокументВыписки);
ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьФайлНаКлиентеПослеЧтенияФайла", ЭтотОбъект, ДополнительныеПараметры);
ТекстовыйДокументВыписки.НачатьЧтение(ОписаниеОповещения, ДополнительныеПараметры.Счет.НастройкаОбмена);
КонецЕсли;
#КонецЕсли
Иначе
ОписаниеОповещения = ДополнительныеПараметры.ОповещениеПослеПроверки;
ВыполнитьОбработкуОповещения(ОписаниеОповещения, "ФайлыУдалены");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьФайлНаКлиентеПослеЧтенияФайла(ДополнительныеПараметры) Экспорт
Если ДополнительныеПараметры.Счет.ФорматОбмена = ПредопределенноеЗначение("Перечисление.ФорматОбменаСБанком.ФедеральноеКазначействоРФ") Тогда
ТекстПроверяемогоФайла = ДополнительныеПараметры.ТекстовыйДокументВыписки;
Иначе
ТекстПроверяемогоФайла = ДополнительныеПараметры.ТекстовыйДокументВыписки.ПолучитьТекст();
КонецЕсли;
Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда
ТекстВыгрузкиИсходногоФайлаСтрокой = ТекстВыгрузкиСтрокой(ДополнительныеПараметры.Счет.АдресХранилищаФайла);
Иначе
ТекстВыгрузкиИсходногоФайлаСтрокой = ДополнительныеПараметры.Счет.ТекстФайлаВыгрузкиСтрокой;
КонецЕсли;
Результат = ?(ТекстВыгрузкиИсходногоФайлаСтрокой = ТекстПроверяемогоФайла, "ПроверкаВыполненаУспешно", "ФайлыИзменены");
ДополнительныеПараметры.Вставить("ТекстовыйДокументВыписки", Неопределено);
ОписаниеОповещения = ДополнительныеПараметры.ОповещениеПослеПроверки;
ВыполнитьОбработкуОповещения(ОписаниеОповещения, Результат);
КонецПроцедуры
#КонецОбласти
СуммыПлатежейКВыгрузке = Новый Соответствие;
#КонецОбласти