Имя: Пароль:
1C
 
Происходит задвоение в справочнике "Контрагенты" при обмене
0 Айрат_116
 
02.05.20
13:16
Здравствуйте, у кого была такая проблема, что при обмене происходит задвоение в справочнике (https://wampi.ru/image/6omsk20)
Начал смотреть в журнале когда было добавление этого контрагента (https://wampi.ru/image/6omARog)
И там не было такого что два раза он был добавлен
1 Маленький Вопросик
 
02.05.20
13:19
сопоставление конграгентов идет по ГУИД  внутреннему. значит, задвоенные были сделаны и там и там.
2 Айрат_116
 
02.05.20
13:21
(1)  В той базе от куда она приходит?
3 Айрат_116
 
02.05.20
13:23
(1) В этой базе не типовой обмен
Вот функция где загружает контрагентов

Функция ЗагрузитьКонтрагентов(Ответ)
    
    НаличиеОшибокЗагрузкиКонтрагентов = Ложь;

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


вот здесь смотри
5 Айрат_116
 
02.05.20
13:31
(4) Вот что внутри
Функция СсылкаСуществует(ЛюбаяСсылка) Экспорт
    
    ТекстЗапроса = "
    |ВЫБРАТЬ
    |    Ссылка КАК Ссылка
    |ИЗ
    |    [ИмяТаблицы]
    |ГДЕ
    |    Ссылка = &Ссылка
    |";
    
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицы]", ИмяТаблицыПоСсылке(ЛюбаяСсылка));
    
    Запрос = Новый Запрос;
    Запрос.Текст = ТекстЗапроса;
    Запрос.УстановитьПараметр("Ссылка", ЛюбаяСсылка);
    
    УстановитьПривилегированныйРежим(Истина);
    
    Возврат НЕ Запрос.Выполнить().Пустой();
    
КонецФункции

Щас еще отладкой посмотрю
6 Маленький Вопросик
 
02.05.20
13:51
(5) ну это фигня какая-то
7 Маленький Вопросик
 
02.05.20
14:00
поиск ссылки по гуид нужно делать так

НовыйGUID     = Новый УникальныйИдентификатор(НоменклатураГуид);
Номенклатура     = Справочники.Номенклатура.ПолучитьСсылку(НовыйGUID);
8 Айрат_116
 
02.05.20
14:05
(7) Вы про эту часть кода пишите?

ГУИД = новый УникальныйИдентификатор(Стр.Ссылка);
        КонтрагентСсылка = МКонтрагенты.ПолучитьСсылку(ГУИД);
9 Маленький Вопросик
 
02.05.20
14:19
НоменклатураГуид - это гуид, а не ссылка 7897-8978-7897-78......
10 Айрат_116
 
02.05.20
14:25
(9) мне скорее всего нужно узнать ГУИД у контрагента с этой базы, и узнать какой ГУИД в той откуда приходит контрагент