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