Задвоение в справочнике контрагенты при обмене с УХ

1. Airat116 28.04.20 11:21 Сейчас в теме
Здравствуйте. Помогите пожалуйста, в чем может быть причина дублирование контрагентов при обмене с УХ
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ReDvAlL 28.04.20 11:28 Сейчас в теме
Неплохо было бы для начала узнать через что идет обмен, если через планы обмена, то правила конвертации в студию :) Если же нет, то участок кода загрузки. Поиск существующих контрагентов вообще выполняется? По каким полям?
3. Airat116 28.04.20 11:57 Сейчас в теме
(2) Плана обмена нету,
Есть код:
Функция ЗагрузитьКонтрагентов(Ответ) 

	НаличиеОшибокЗагрузкиКонтрагентов = Ложь;
	ОбменДаннымиЗагрузка	= Истина;
	МКонтрагенты			= Справочники.Контрагенты;
	Для Каждого Стр Из Ответ.Контрагенты.Строки Цикл
		Если СокрЛП(Стр.Код)="" Тогда
			ЗаписьЖурналаРегистрации("ВебСервисУХ.ЗагрузитьКонтрагентов_НетКода", УровеньЖурналаРегистрации.Ошибка);
			НаличиеОшибокЗагрузкиКонтрагентов = Истина; Продолжить;
		КонецЕсли;
		Если Стр.ЭтоГруппа Тогда Продолжить; КонецЕсли;
		ГУИД = новый УникальныйИдентификатор(Стр.Ссылка);
		КонтрагентСсылка = МКонтрагенты.ПолучитьСсылку(ГУИД);
		
		КонтрагентОбъект = Неопределено;
		СсылкаСуществует = ОбщегоНазначения.СсылкаСуществует(КонтрагентСсылка);
		Если НЕ СсылкаСуществует Тогда
			КонтрагентСсылка = ВернутьКонтрагентаПоКодуSAP(Стр.Код);
		КонецЕсли;
		Если НЕ ЗначениеЗаполнено(КонтрагентСсылка) Тогда
			КонтрагентСсылка = ВернутьКонтрагентаПоИННКПП(Стр.ИНН, Стр.КПП);
		КонецЕсли;
		Если НЕ ЗначениеЗаполнено(КонтрагентСсылка) Тогда
			Если Стр.ЭтоГруппа Тогда
				КонтрагентОбъект = МКонтрагенты.СоздатьГруппу();
			Иначе
				КонтрагентОбъект = МКонтрагенты.СоздатьЭлемент();
			КонецЕсли;
			КонтрагентОбъект.УстановитьНовыйКод();
		Иначе
			КонтрагентОбъект = КонтрагентСсылка.ПолучитьОбъект();
		КонецЕсли;
		
		КонтрагентОбъект.ОбменДанными.Загрузка = ОбменДаннымиЗагрузка;
		КонтрагентОбъект.ПометкаУдаления = Стр.ПометкаУдаления;
		КонтрагентОбъект.КодSAP = Стр.Код;
		
		Если Не ЗначениеЗаполнено(КонтрагентОбъект.Наименование) Тогда
			КонтрагентОбъект.Наименование = СокрЛП(Стр.Наименование);
		КонецЕсли;
		
		Если Не ЗначениеЗаполнено(КонтрагентОбъект.НаименованиеПолное) Тогда
			КонтрагентОбъект.НаименованиеПолное = СокрЛП(Стр.НаименованиеПолное);
		КонецЕсли;
		
		Если Стр.ЭтоГруппа Тогда
			КонтрагентОбъект.Записать();
			Продолжить;
		КонецЕсли;
		
		КонтрагентОбъект.Комментарий= "#УХ#";
		КонтрагентОбъект.ЮрФизЛицо	= ?(Стр.ЮридическоеФизическоеЛицо = "ЮридическоеЛицо",Перечисления.ЮрФизЛицо.ЮрЛицо,Перечисления.ЮрФизЛицо.ФизЛицо);
		КонтрагентОбъект.ИНН		= СокрЛП(Стр.ИНН);
		КонтрагентОбъект.КПП		= СокрЛП(Стр.КПП);
		КонтрагентОбъект.КодПоОКПО	= СокрЛП(Стр.ОКПО);
		КонтрагентОбъект.ГоловнойКонтрагент = КонтрагентСсылка;
		
		Если ЗначениеЗаполнено(Стр.ГоловнойКонтрагент) И Не Стр.ГоловнойКонтрагент = Стр.Код Тогда
			КонтрагентПоКодуСАП = ВернутьКонтрагентаПоКодуSAP(Стр.ГоловнойКонтрагент);
			Если ЗначениеЗаполнено(КонтрагентПоКодуСАП) Тогда
				КонтрагентОбъект.ГоловнойКонтрагент = КонтрагентПоКодуСАП;
			КонецЕсли;
		КонецЕсли;
		Попытка
			КонтрагентОбъект.Записать();
		Исключение
		
			ЗаписьЖурналаРегистрации("ВебСервисУХ.Контрагент_Записать", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
			НаличиеОшибокЗагрузкиКонтрагентов = Истина; Продолжить;
		
		КонецПопытки;
		Если ЗначениеЗаполнено(Стр.АдресЮридический) Тогда
			НаборКонтакт = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
			НаборКонтакт.Отбор.Объект.Установить(КонтрагентОбъект.Ссылка);
			НаборКонтакт.Отбор.Тип.Установить(Перечисления.ТипыКонтактнойИнформации.Адрес);
			НаборКонтакт.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента);
			ЗаписьКонтакт				= НаборКонтакт.Добавить();
			ЗаписьКонтакт.Объект		= КонтрагентОбъект.Ссылка;
			ЗаписьКонтакт.Тип			= Перечисления.ТипыКонтактнойИнформации.Адрес;
			ЗаписьКонтакт.Вид			= Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
			ЗаписьКонтакт.Представление	= Стр.АдресЮридический;
		
			Попытка
				НаборКонтакт.Записать(Истина);	
			Исключение
				ЗаписьЖурналаРегистрации("ВебСервисУХ.КонтактнаяИнформация_ЗаписатьЮрАдрес", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
			КонецПопытки;
		
		КонецЕсли;
		Если ЗначениеЗаполнено(Стр.АдресФактический) Тогда
			НаборКонтакт = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
			НаборКонтакт.Отбор.Объект.Установить(КонтрагентОбъект.Ссылка);
			НаборКонтакт.Отбор.Тип.Установить(Перечисления.ТипыКонтактнойИнформации.Адрес);
			НаборКонтакт.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента);
			ЗаписьКонтакт				= НаборКонтакт.Добавить();
			ЗаписьКонтакт.Объект		= КонтрагентОбъект.Ссылка;
			ЗаписьКонтакт.Тип			= Перечисления.ТипыКонтактнойИнформации.Адрес;
			ЗаписьКонтакт.Вид			= Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента;
			ЗаписьКонтакт.Представление	= Стр.АдресПочтовый;
			Попытка
				НаборКонтакт.Записать(Истина);	
			Исключение
				ЗаписьЖурналаРегистрации("ВебСервисУХ.КонтактнаяИнформация_ЗаписатьФактАдрес", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
		
			КонецПопытки;
		
		КонецЕсли;
		Если ЗначениеЗаполнено(Стр.Телефон) Тогда
			НаборКонтакт = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
			НаборКонтакт.Отбор.Объект.Установить(КонтрагентОбъект.Ссылка);
			НаборКонтакт.Отбор.Тип.Установить(Перечисления.ТипыКонтактнойИнформации.Телефон);
			НаборКонтакт.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента);
			ЗаписьКонтакт		= НаборКонтакт.Добавить();
			ЗаписьКонтакт.Объект= КонтрагентОбъект.Ссылка;
			ЗаписьКонтакт.Тип	= Перечисления.ТипыКонтактнойИнформации.Телефон;
			ЗаписьКонтакт.Вид	= Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента;
			ЗаписьКонтакт.Представление	= Стр.Телефон;
			Попытка
				НаборКонтакт.Записать(Истина);	
			Исключение
				ЗаписьЖурналаРегистрации("ВебСервисУХ.КонтактнаяИнформация_ЗаписатьТелефон", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
		
			КонецПопытки;
		
		КонецЕсли;
	КонецЦикла;
	Возврат НаличиеОшибокЗагрузкиКонтрагентов;
Показать
4. ReDvAlL 28.04.20 12:11 Сейчас в теме
(3) Код этих функций бы еще посмотреть
Если НЕ СсылкаСуществует Тогда
	КонтрагентСсылка = ВернутьКонтрагентаПоКодуSAP(Стр.Код);
КонецЕсли;
		
Если НЕ ЗначениеЗаполнено(КонтрагентСсылка) Тогда
	КонтрагентСсылка = ВернутьКонтрагентаПоИННКПП(Стр.ИНН, Стр.КПП);
КонецЕсли;

Если удалить один из дублей, при повторной загрузке он опять появляется?
5. Airat116 28.04.20 13:10 Сейчас в теме
(4) 1)
Функция ВернутьКонтрагентаПоКодуSAP(КодSAP)
	
	Если СокрЛП(КодSAP) = "" Тогда
		Возврат Справочники.Контрагенты.ПустаяСсылка();
	КонецЕсли;
	Возврат Справочники.Контрагенты.НайтиПоРеквизиту("КодSAP", СокрЛП(КодSAP));
	
КонецФункции


2)
Функция ВернутьКонтрагентаПоИННКПП(ИНН, КПП);
	
	КонтрагентПоИННКПП = Справочники.Контрагенты.ПустаяСсылка();	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Контрагенты.Ссылка КАК Контрагент
	|ИЗ
	|	Справочник.Контрагенты КАК Контрагенты
	|ГДЕ
	|	Контрагенты.ИНН = &ИНН
	|	И Контрагенты.КПП = &КПП";
	Запрос.УстановитьПараметр("ИНН", СокрЛП(ИНН));
	Запрос.УстановитьПараметр("КПП", СокрЛП(КПП));
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		КонтрагентПоИННКПП = Выборка.Контрагент;
	КонецЦикла;
	Возврат КонтрагентПоИННКПП;
	
КонецФункции
Показать
6. Airat116 28.04.20 13:11 Сейчас в теме
(4) "Если удалить один из дублей, при повторной загрузке он опять появляется?" - не проверял
8. ReDvAlL 28.04.20 13:30 Сейчас в теме
(6) Надо проверить + понаблюдать за загрузкой через отладку
7. Airat116 28.04.20 13:12 Сейчас в теме
Пока нужен ответ на вопрос (узнать и как программа идентифицирует контрагента при интеграции ух-бп)
На это не могу пока что ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот