Подмена контрагента при выгрузке документа из клиент-банка

Задача: в выгрузке из банка в графе "Содержание платежа" содержится имя контрагента. Необходимо найти его в базе. В случае успеха - подменить.

В стандартном клиент-банке Bank Data Converter формирование выписок происходит в процедуре СформироватьВыпискиСервер

Процедура СформироватьВыпискиСервер()
	
	Для Каждого Строка Из Объект.тчИмпорт Цикл
		Если Строка.Флаг Тогда

            //Здесь идет работа со строкой ТЧ документа
			докОб = Док.СоздатьДокумент();
			докОб.Контрагент 			= Строка.Контрагент;
            //......
		КонецЕсли;
	КонецЦикла;	
	
	// применим сортировку по настройкам
	СортировкаТчИмпорт();
	
КонецПроцедуры

Руководствуясь принципом минимального вмешательства в чужой код, добавляем в цикл только вызов своей функции, в которой и будет происходить вся остальная работа:

Если НовыйДокумент Тогда
	ПодменимКонтрагентаИсходяИзСодержания(Строка);	
КонецЕсли; 

В функции ПодменимКонтрагентаИсходяИзСодержания производится поиск нового контрагента по наименованию.  Если нашли - получаем договор контрагента. Если контрагент найден и договор заполнен - подменяем его в строке ТЧ. В функцию ПолучитьКонтрагентаИзСодержания мы передаем строку "СодержаниеПлатежа". С помощью функции - СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов раскладываем ее в массив. Далее берем из массива 3 последних элемента и с помощью функции СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок получаем нужную нам строку.

&НаСервере
Функция ПолучитьКонтрагентаИзСодержания(СодержаниеПлатежа)
	Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов(СодержаниеПлатежа);	
	
	Если Массив.Количество() < 3 Тогда
		Возврат Справочники.Контрагенты.ПустаяСсылка();	
	КонецЕсли; 
			
	//Добавляем в НовыйМассив последние 3 элемента Массив
	НовыйМассив = Новый Массив(3);
	НовыйМассив.Добавить(Массив[Массив.Количество()-3]);
	НовыйМассив.Добавить(Массив[Массив.Количество()-2]);
	НовыйМассив.Добавить(Массив[Массив.Количество()-1]);
	
	НовКонтрагентСтрока = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(НовыйМассив, " ");
	
	//Ссылка на нашего пациента (справочник Контрагенты)
	Возврат Справочники.Контрагенты.НайтиПоНаименованию(НовКонтрагентСтрока, Истина);
КонецФункции


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

 


Похожие материалы

Комментарии