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


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

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

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". После чего в обрабоке "Клиент банка" нажимаем "Прочитать данные из файла" (это произведёт загрузку всех выгруженных документов в таблицу).

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *