gifts2017

Интеграция ДБО BS-Client (Белагропромбанк) и БП 1.6 (не используемая обработка "КлиентБанк")

Опубликовал Yauhen Makei (mrDSide) в раздел Обмен - Обмен через DBF

Как можно сделать рабочую интеграцию с клиентом банка за два часа? Привожу пример из личного опыта.

Доработка влючает следующие шаги:

1) добавить процедуру модуля формы обработки "КлиентБанк" следующего содержания:

// Процедура сборка из DBF
Процедура ЗаполнитьДокументыНаИмпортDBF(ДокументыДляИмпорта,таблица) Экспорт
	
	Перем СтрокаРССчетов;
	
	// Проверка каталога загрузки
	Путь = Новый Файл(ФайлЗагрузки);
	
	Если Не Путь.Существует() Тогда
		Сообщить("Каталог не существует!", СтатусСообщения.Важное);
		Возврат;
	ИначеЕсли Не Путь.ЭтоКаталог() Тогда
		Сообщить("Выбран файл загрзуки. Ожидается каталог", СтатусСообщения.Важное);
		Возврат;
	КонецЕсли;
	
	// Подготавливаем структуры обработки данных
	Импорт_ПризнакОбмена = Ложь;
	ЗагрРасчетныеСчета   = Новый СписокЗначений;
	СписокДокументов     = Новый СписокЗначений;
	ЗагрВидыДокументов   = Новый СписокЗначений;
	
	Импорт_РасчетныеСчета.Очистить();
	
	ДокументыДляИмпорта.Очистить();
	
	Файлы = НайтиФайлы(ФайлЗагрузки, "??_??*.dbf", Ложь);
	ЧтениеФайла = Новый XBase;
	ЧтениеФайла.Кодировка = КодировкаXBase.OEM;
	
	Для каждого Файл Из Файлы Цикл
	
		ЧтениеФайла.ОткрытьФайл(Файл.ПолноеИмя,, Истина);
		
		СодержитДокументы = ( ЧтениеФайла.поля.Найти("TYPE_DOC") <> Неопределено );
		
		Пока Не ЧтениеФайла.ВКонце() Цикл
			
			Если Не СодержитДокументы Тогда
				
				СчетОрганизации = СокрЛП(ЧтениеФайла.ПолучитьЗначениеПоля("SCHETKL"));
				ВалютаСтр = СокрЛП(ЧтениеФайла.ПолучитьЗначениеПоля("VALKL"));
				//счет 
				ВыборкаСчета = СчетПринадлежитОрганизации(СчетОрганизации).Выбрать();
				Если ВыборкаСчета.Следующий() Тогда
					СтрокаРССчетов = Импорт_РасчетныеСчета.Найти(СчетОрганизации, "РасчСчет");
					СчетОрганизацииСсылка = ВыборкаСчета.Ссылка;
					ВалютаСтр             = ВыборкаСчета.Ссылка.ВалютаДенежныхСредств;
					ОрганизацияСсылка     = ВыборкаСчета.Владелец;
                    КодВалютыДокумента    = ВыборкаСчета.Ссылка.ВалютаДенежныхСредств;
					Если СтрокаРССчетов = Неопределено Тогда
						СтрокаРССчетов = Импорт_РасчетныеСчета.Добавить();
						СтрокаРССчетов.РасчСчет = СчетОрганизации;
						// добавим информацию о выписке
						СтрокаРССчетов.РасчетныйСчет = СчетОрганизацииСсылка;
						СтрокаРССчетов.ДатаНачала = Формат(ЧтениеФайла.ПолучитьЗначениеПоля("DATEVIP"), "ДФ=дд.ММ.гггг");
						СтрокаРССчетов.ДатаКонца = Формат(ЧтениеФайла.ПолучитьЗначениеПоля("DATEVIP"), "ДФ=дд.ММ.гггг");
						СтрокаРССчетов.Начало = ЧтениеФайла.ПолучитьЗначениеПоля("DATEVIP");
						СтрокаРССчетов.Конец = ЧтениеФайла.ПолучитьЗначениеПоля("DATEVIP");
						СтрокаРССчетов.НачальныйОстаток = Формат(ЧтениеФайла.ПолучитьЗначениеПоля("VH_OSTR"), "ЧДЦ=2; ЧРД=.; ЧГ=0");
						СтрокаРССчетов.КонечныйОстаток = Формат(ЧтениеФайла.ПолучитьЗначениеПоля("ISH_OSTR"), "ЧДЦ=2; ЧРД=.; ЧГ=0");
						СтрокаРССчетов.НачальнаяСумма = ЧтениеФайла.ПолучитьЗначениеПоля("VH_OSTR");
						СтрокаРССчетов.КонечнаяСумма = ЧтениеФайла.ПолучитьЗначениеПоля("ISH_OSTR");
						СтрокаРССчетов.Поступило = 0;
						СтрокаРССчетов.Списано = 0;
					Иначе
						ДатаВ = ЧтениеФайла.ПолучитьЗначениеПоля("DATEVIP");
						Если ДатаВ < СтрокаРССчетов.Начало Тогда
							СтрокаРССчетов.ДатаНачала = Формат(ДатаВ, "ДФ=дд.ММ.гггг");
							СтрокаРССчетов.Начало = ДатаВ;
							СтрокаРССчетов.НачальныйОстаток = Формат(ЧтениеФайла.ПолучитьЗначениеПоля("VH_OSTR"), "ЧДЦ=2; ЧРД=.; ЧГ=0");
							СтрокаРССчетов.НачальнаяСумма = ЧтениеФайла.ПолучитьЗначениеПоля("VH_OSTR");
						Иначе
							СтрокаРССчетов.ДатаКонца = Формат(ДатаВ, "ДФ=дд.ММ.гггг");
							СтрокаРССчетов.Конец = ДатаВ;
							СтрокаРССчетов.КонечныйОстаток = Формат(ЧтениеФайла.ПолучитьЗначениеПоля("ISH_OSTR"), "ЧДЦ=2; ЧРД=.; ЧГ=0");
							СтрокаРССчетов.КонечнаяСумма = ЧтениеФайла.ПолучитьЗначениеПоля("ISH_OSTR");
						КонецЕсли;
					КонецЕсли;
					Если СчетОрганизации <> БанковскийСчет.НомерСчета Тогда
						Сообщить("В заголовке файла импорта указан счет, принадлежащий организации: " + СчетОрганизации + "," + Символы.ПС + "но он отличается от счета, выбранного в настройках! (" + БанковскийСчет.НомерСчета + ")" , СтатусСообщения.ОченьВажное);
                    КонецЕсли;
				Иначе
					Сообщить("В заголовке файла импорта указан счет, не принадлежащий организации: " + СчетОрганизации + " !", СтатусСообщения.ОченьВажное);
					Возврат;
				КонецЕсли;
				
				ДатаВыписки = ЧтениеФайла.ПолучитьЗначениеПоля("DATEVIP");
				
				Прервать;
				
			КонецЕсли;
			
			НоваяСтрокаДокументов = ДокументыДляИмпорта.Добавить();
			НоваяСтрокаДокументов.НОМЕР = СокрЛП(ЧтениеФайла.ПолучитьЗначениеПоля("N_DOC"));
			НоваяСтрокаДокументов.ОПЕРАЦИЯ = Строка(ЧтениеФайла.ПолучитьЗначениеПоля("PR_DK"));
			//НоваяСтрокаДокументов.Дата = Значение;
			НоваяСтрокаДокументов.ДАТА = ЧтениеФайла.ПолучитьЗначениеПоля("DATEPR");
			НоваяСтрокаДокументов.КОНТРАГЕНТИНН = СокрЛП(ЧтениеФайла.ПолучитьЗначениеПоля("UNP"));
			НоваяСтрокаДокументов.КОНТРАГЕНТ = "";//ЧтениеФайла.ПолучитьЗначениеПоля("UNP");
			НоваяСтрокаДокументов.КОДПЛАТЕЖАВБЮДЖЕТ = "";
			НоваяСтрокаДокументов.СЧЕТКОНТРАГЕНТА = СокрЛП(ЧтениеФайла.ПолучитьЗначениеПоля("SCHETKORR"));
			Если НоваяСтрокаДокументов.ОПЕРАЦИЯ = "1" Тогда//"0" Тогда
				НоваяСтрокаДокументов.Операция  = "ПЛАТЕЖНОЕПОРУЧЕНИЕ";
				НоваяСтрокаДокументов.СУММАСПИСАНО = 0;
				НоваяСтрокаДокументов.СУММАПОСТУПИЛО = Строка(ЧтениеФайла.ПолучитьЗначениеПоля("SUMMRUB"));
				СтрокаРССчетов.Поступило = СтрокаРССчетов.Поступило + ЧтениеФайла.ПолучитьЗначениеПоля("SUMMRUB");
			Иначе
				НоваяСтрокаДокументов.Операция  = "ПЛАТЕЖНОЕТРЕБОВАНИЕ";
				НоваяСтрокаДокументов.СУММАСПИСАНО = Строка(ЧтениеФайла.ПолучитьЗначениеПоля("SUMMRUB"));
				НоваяСтрокаДокументов.СУММАПОСТУПИЛО = 0;
				СтрокаРССчетов.Списано = СтрокаРССчетов.Списано + ЧтениеФайла.ПолучитьЗначениеПоля("SUMMRUB");
			КонецЕсли;
			НоваяСтрокаДокументов.НАЗНАЧЕНИЕПЛАТЕЖА = СокрЛП(ЧтениеФайла.ПолучитьЗначениеПоля("NAZNPLAT"));
			НоваяСтрокаДокументов.ВидПлатежа               = "электронно";
			НоваяСтрокаДокументов.ВалютаДокумента          = КодВалютыДокумента;
			НоваяСтрокаДокументов.ДатаДок                  = НоваяСтрокаДокументов.Дата; //ДатаВыписки;
			НоваяСтрокаДокументов.Поступило                = НоваяСтрокаДокументов.Дата;
			НоваяСтрокаДокументов.Списано                  = НоваяСтрокаДокументов.Дата;
			НоваяСтрокаДокументов.СчетОрганизации          = СчетОрганизацииСсылка;//СчетОрганизации;
			НоваяСтрокаДокументов.СчетОрганизацииСсылка    = СчетОрганизацииСсылка;
			НоваяСтрокаДокументов.ОрганизацияСсылка        = ОрганизацияСсылка; 
			НоваяСтрокаДокументов.Организация              = ОрганизацияСсылка; 
			НоваяСтрокаДокументов.КодВалютыДокумента       = КодВалютыДокумента; 
			НоваяСтрокаДокументов.КодВалютыДокументаСсылка = КодВалютыДокумента; 
			НоваяСтрокаДокументов.НомерДок                 = СокрЛП(ЧтениеФайла.ПолучитьЗначениеПоля("N_DOC"));//НоваяСтрокаДокументов.Номер;
			НоваяСтрокаДокументов.ДатаПроведения           = НоваяСтрокаДокументов.Дата;
			НоваяСтрокаДокументов.КонтрагентИНН            = Сред(Врег(СокрЛП(НоваяСтрокаДокументов.КонтрагентИНН)),20, 10);
			НоваяСтрокаДокументов.ПОЛУЧАТЕЛЬИНН            = НоваяСтрокаДокументов.КОНТРАГЕНТИНН;
			НоваяСтрокаДокументов.ПОЛУЧАТЕЛЬСЧЕТ           = НоваяСтрокаДокументов.СЧЕТКОНТРАГЕНТА;
			
			ЧтениеФайла.Следующая();
			
		КонецЦикла;
		
		ЧтениеФайла.ЗакрытьФайл();
		
	КонецЦикла;
	
	Если ЗначениеЗаполнено(СтрокаРССчетов) Тогда
		СтрокаРССчетов.ВсегоПоступило = Формат(СтрокаРССчетов.Поступило, "ЧДЦ=2; ЧРД=.; ЧГ=0");
		СтрокаРССчетов.ВсегоСписано = Формат(СтрокаРССчетов.Списано, "ЧДЦ=2; ЧРД=.; ЧГ=0");
	КонецЕсли;
	
	УдалитьФайлы(ФайлЗагрузки, "??_??*.dbf");
	
	НомерСтроки = 0;
	Для Каждого СтрокаДокумента Из ДокументыДляИмпорта Цикл
		// Последовательно обрабатываем каждую загруженную строку
		РаспознатьДанныеВСтрокеДокумента1(СтрокаДокумента, "СчетКонтрагента");
		РаспознатьДанныеВСтрокеДокумента1(СтрокаДокумента, "Сумма");
		РаспознатьДанныеВСтрокеДокумента1(СтрокаДокумента, "Документ");
		//Распознаем реквизиты
		НомерСтроки = НомерСтроки + 1;
		СтрокаДокумента.НомерСтроки = НомерСтроки;
		Если ТипЗнч(СтрокаДокумента.Контрагент)=Тип("Строка") ИЛИ
			ТипЗнч(СтрокаДокумента.СчетКонтрагента)=Тип("Строка") ИЛИ
			ТипЗнч(СтрокаДокумента.Договор)=Тип("Строка") Тогда
			
			//добавляем реквизиты в табличну часть для дальнейнего использования
			СписокНенайденных(СтрокаДокумента);
		КонецЕсли;
	КонецЦикла;

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

2) в процедуре "ПрочитатьДанныеИзФайла" модуля формы внести изменения:

//ЗаполнитьДокументыНаИмпорт(ДокументыКИмпорту,ЭлементыФормы.ДокументыКИмпорту);
ЗаполнитьДокументыНаИмпортDBF(ДокументыКИмпорту,ЭлементыФормы.ДокументыКИмпорту);

Далее требуется настроить пути загрузки в 1С, а в программе клиент банка зайти "Входящие-Выписки", выделить все нужные документы, выбрать пункт контекстного меню "Экспорт в DBF". После чего в обрабоке "Клиент банка" нажимаем "Прочитать данные из файла" (это произведёт загрузку всех выгруженных документов в таблицу).

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа