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