Загрузка отчета банка по СБП / Форма / Модуль формы

файл

#Область ОбработчикиСобытийФормы

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ДоговорПодключенияКПлатежнойСистемеПриИзменении(Элемент)
	
	ОчиститьСообщения();
	ДоговорПодключенияКПлатежнойСистемеПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ВариантЗагрузкиПриИзменении(Элемент)
	
	ВариантЗагрузкиПриИзмененииНаСервере();
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиПодключения

&НаКлиенте
Процедура НастройкиПодключенияПриАктивизацииСтроки(Элемент)
	
	УстановитьОтборДетальныеДанныеСверки();
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура УстановитьИнтервалПериода(Команда)
	
	Оповещение = Новый ОписаниеОповещения(
		"УстановитьИнтервалПериодаЗавершение",
		ЭтотОбъект);
		
	ОбщегоНазначенияУТКлиент.РедактироватьПериод(
		ЭтотОбъект, 
		Новый Структура("ДатаНачала, ДатаОкончания", "НачалоПериода", "КонецПериода"),
		Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура Загрузить(Команда)
	
	ОчиститьСообщения();
	
	Если Не ПроверитьЗаполнение() Тогда
		Возврат;
	КонецЕсли;
	
	СтруктураФоновогоЗадания = ВыполнитьФункциюВФонеЗагрузитьОтчетыБанка();
	
	ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
	ПараметрыОжидания.Заголовок = НСтр("ru = 'Загрузка отчетов банка...'");
	ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
	ПараметрыОжидания.ВыводитьСообщения = Истина;
	ПараметрыОжидания.Интервал  = 2;
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьФункциюВФонеЗагрузитьОтчетыБанкаЗавершение", ЭтотОбъект);
	ДлительныеОперацииКлиент.ОжидатьЗавершение(СтруктураФоновогоЗадания, ОписаниеОповещения, ПараметрыОжидания);
	
КонецПроцедуры

&НаКлиенте
Процедура Сверить(Команда)
	
	ОчиститьСообщения();
	
	Если Не ПроверитьЗаполнение() Тогда
		Возврат;
	КонецЕсли;
	
	СтруктураФоновогоЗадания = ВыполнитьФункциюВФонеСверитьОтчетыСБанком();
	
	ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
	ПараметрыОжидания.Заголовок = НСтр("ru = 'Сверка отчетов с банком...'");
	ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
	ПараметрыОжидания.ВыводитьСообщения = Истина;
	ПараметрыОжидания.Интервал  = 2;
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьФункциюВФонеСверитьОтчетыСБанкомЗавершение", ЭтотОбъект);
	ДлительныеОперацииКлиент.ОжидатьЗавершение(СтруктураФоновогоЗадания, ОписаниеОповещения, ПараметрыОжидания);
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьВсе(Команда)
	
	Для Каждого СтрокаТЧ Из Объект.НастройкиПодключения Цикл
		СтрокаТЧ.Пометка = Истина;
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ИсключитьВсе(Команда)
	
	Для Каждого СтрокаТЧ Из Объект.НастройкиПодключения Цикл
		СтрокаТЧ.Пометка = Ложь;
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура НастройкиПодключенияПоказатьТолькоОтклонения(Команда)
	
	Если Элементы.НастройкиПодключения.ОтборСтрок = Неопределено Тогда
		Элементы.НастройкиПодключения.ОтборСтрок = Новый ФиксированнаяСтруктура("ЕстьОтклонение", Истина);
		Элементы.НастройкиПодключенияПоказатьТолькоОтклонения.Заголовок = НСтр("ru = 'Показать все строки'");
	Иначе
		Элементы.НастройкиПодключения.ОтборСтрок = Неопределено;
		Элементы.НастройкиПодключенияПоказатьТолькоОтклонения.Заголовок = НСтр("ru = 'Показать строки с отклонением'");
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДетальныеДанныеСверкиПоказатьТолькоОтклонения(Команда)
	
	УстановитьОтборДетальныеДанныеСверки();
	
	Если ДетальныеДанныеСверкиТолькоСОтклонениями Тогда
        Элементы.ДетальныеДанныеСверкиПоказатьТолькоОтклонения.Заголовок = НСтр("ru = 'Показать строки с отклонением'");
    Иначе
        Элементы.ДетальныеДанныеСверкиПоказатьТолькоОтклонения.Заголовок = НСтр("ru = 'Показать все строки'");
	КонецЕсли;
	
	ДетальныеДанныеСверкиТолькоСОтклонениями = НЕ ДетальныеДанныеСверкиТолькоСОтклонениями;
	
КонецПроцедуры

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

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

#Область Прочее

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

&НаСервере
Процедура ЗаполнитьСписокВыбораДляДоговораПодключения()

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

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

&НаСервере
Процедура УстановитьВидимостьЭлементовФормы()
	
	Элементы.НастройкиПодключенияПоказатьТолькоОтклонения.Заголовок = НСтр("ru = 'Показать строки с отклонением'");
	Элементы.ДетальныеДанныеСверкиПоказатьТолькоОтклонения.Заголовок = НСтр("ru = 'Показать строки с отклонением'");
	
	Если Объект.ВариантЗагрузки = Перечисления.ВариантыЗагрузкиОтчетаБанкаПоСБП.СверкаСБанком Тогда
		Элементы.ФормаЗагрузить.Видимость = Ложь;
		Элементы.ФормаСверитьПоБанку.Видимость = Истина;
		
		Элементы.ПроводитьДокументыПриЗагрузке.Видимость = Ложь;
		
		Элементы.НастройкиПодключенияПоказатьТолькоОтклонения.Видимость = Истина;
		
		Элементы.ГруппаИтоговыеСуммыСверки.Видимость = Истина;
		Элементы.ДетальныеДанныеСверки.Видимость = Истина;
		
		Элементы.НастройкиПодключенияГруппаОбъектГоризонтально.Группировка = ГруппировкаКолонок.Вертикальная;
	Иначе
		Элементы.ФормаЗагрузить.Видимость = Истина;
		Элементы.ФормаСверитьПоБанку.Видимость = Ложь;
		
		Элементы.ПроводитьДокументыПриЗагрузке.Видимость = Истина;
		
		Элементы.НастройкиПодключенияПоказатьТолькоОтклонения.Видимость = Ложь;
		
		Элементы.ГруппаИтоговыеСуммыСверки.Видимость = Ложь;
		Элементы.ДетальныеДанныеСверки.Видимость = Ложь;
		
		Элементы.НастройкиПодключенияГруппаОбъектГоризонтально.Группировка = ГруппировкаКолонок.Горизонтальная;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ВариантЗагрузкиПриИзмененииНаСервере()
	
	Объект.ДетальныеДанныеСверки.Очистить();
	
	Для Каждого СтрокаТЧ Из Объект.НастройкиПодключения Цикл
		СтрокаТЧ.Пометка = Истина;
		СтрокаТЧ.ЗагруженБезОшибки = Ложь;
		СтрокаТЧ.ЗагруженСОшибкой = Ложь;
	КонецЦикла;
	
	УстановитьВидимостьЭлементовФормы();
	
КонецПроцедуры

// Обрабатывает результат установки периода пользователем
// 
// Параметры:
//  Период - СтандартныйПериод -Период
//  ДополнительныеПараметры - Неопределено, Структура - Дополнительные параметры
&НаКлиенте
Процедура УстановитьИнтервалПериодаЗавершение(Период, ДополнительныеПараметры) Экспорт 
	
	Если Период = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Объект.ДатаНач = Период.ДатаНачала;
	Объект.ДатаКон = Период.ДатаОкончания;
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура ОтобразитьРезультатЗагрузкиОтчетовБанка(АдресРезультата)
	
	Объект.НастройкиПодключения.Загрузить(ПолучитьИзВременногоХранилища(АдресРезультата));
	
КонецПроцедуры

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

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

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

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

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

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