Как сделать проверку дублей перед записью контрагента

1. user1697411 10.03.22 15:01 Сейчас в теме
У меня вместе с json приходит пачка всех контрагентов с другой базы
//ПАРСИМ JSON СТРОКУ
Процедура ЗагрузитьКонтрагентаJSON(СтрокаКонтрагентJSON)Экспорт
	
	 ЧтениеJSON = Новый ЧтениеJSON();
	 ЧтениеJSON.УстановитьСтроку(СтрокаКонтрагентJSON);
	 
	 КонтрагентМассив = ПрочитатьJSON(ЧтениеJSON);
	 Для Каждого СтрокаМассива Из КонтрагентМассив Цикл
		 СоздатьКонтрагента(СтрокаМассива);
	 КонецЦикла;

 КонецПроцедуры
 
 
 //СОЗДАЕМ ЭЛЕМЕНТЫ СПРАВОЧНИКА Контрагент
 Процедура СоздатьКонтрагента(СтруктураСДанными)
	 
	 КонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();   
	 КонтрагентОбъект.ПометкаУдаления = СтруктураСДанными.ПометкаУдаления;
	 КонтрагентОбъект.Наименование = СтруктураСДанными.Наименование;
	 КонтрагентОбъект.ДатаСвидетельстваПоНДС = СтруктураСДанными.ДатаСвидетельстваПоНДС;
	 КонтрагентОбъект.ДокументУдостоверяющийЛичность = СтруктураСДанными.ДокументУдостоверяющийЛичность;
	 КонтрагентОбъект.ИдентификационныйКодЛичности = СтруктураСДанными.ИдентификационныйКодЛичности;
	 КонтрагентОбъект.ИндивидуальныйПредпринимательАдвокатЧастныйНотариус = СтруктураСДанными.ИндивидуальныйПредпринимательАдвокатЧастныйНотариус;
	 КонтрагентОбъект.КБЕ = СтруктураСДанными.КБЕ;
	 КонтрагентОбъект.КодПоОКПО = СтруктураСДанными.КодПоОКПО;
	 КонтрагентОбъект.Комментарий = СтруктураСДанными.Комментарий;
	 КонтрагентОбъект.НаименованиеПолное = СтруктураСДанными.НаименованиеПолное;
	 КонтрагентОбъект.НомерНалоговойРегистрацииВСтранеРезидентства = СтруктураСДанными.НомерНалоговойРегистрацииВСтранеРезидентства;
	 КонтрагентОбъект.НомерСвидетельстваПоНДС = СтруктураСДанными.НомерСвидетельстваПоНДС;
	 КонтрагентОбъект.РНН = СтруктураСДанными.РНН;
	 КонтрагентОбъект.СерияСвидетельстваПоНДС = СтруктураСДанными.СерияСвидетельстваПоНДС;
	 КонтрагентОбъект.СИК = СтруктураСДанными.СИК;
	 КонтрагентОбъект.УказыватьРеквизитыГоловнойОрганизацииВСчетеФактуре = СтруктураСДанными.УказыватьРеквизитыГоловнойОрганизацииВСчетеФактуре;
	 КонтрагентОбъект.ГосударственноеУчреждение = СтруктураСДанными.ГосударственноеУчреждение;
	 КонтрагентОбъект.ИмяПредопределенныхДанных = СтруктураСДанными.ИмяПредопределенныхДанных;
	 КонтрагентОбъект.Записать();
	 
КонецПроцедуры
Показать

Теперь не могу сообразить как правильно сделать проверку на дубли чтобы не записывались уже существующие контрагенты, потому что эта процедура будет проходить каждые 5-10 минут. Подскажите каким методом лучше всё залепить. Процедуры находятся в общем модуле
По теме из базы знаний
Найденные решения
5. M_Salakh 10.03.22 15:45 Сейчас в теме
СтруктураСДанными.Наименование - подразумеваю, что тут строка с отсечением пробелом с обеих сторон. Иначе вот так

ИскомоеНаименованиеКонтрагента = СокрЛП(Строка(СтруктураСДанными.Наименование));
СпрКонтрНаименованиеПолное = Справочники.Контрагенты.НайтиПоНаименованию(ИскомоеНаименованиеКонтрагента);
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. M_Salakh 10.03.22 15:32 Сейчас в теме
Искать по Наименованию или Коду если они есть, то не создавать, а просто перезаписывать действующего контрагента, на случай, если обновилась информация.
3. user1697411 10.03.22 15:36 Сейчас в теме
(2) это понятно, а как именно не создавать, пробовал через найти по реквизиту, но не сработало
СпрКонтрНаименованиеПолное = Справочники.Контрагенты.НайтиПоРеквизиту("Наименование", СтруктураСДанными.Наименование);
	СпрКонтрИИН = Справочники.Контрагенты.НайтиПоРеквизиту("ИдентификационныйКодЛичности", СтруктураСДанными.ИдентификационныйКодЛичности);
	Если СпрКонтрИИН = Справочники.Контрагенты.ПустаяСсылка() и СпрКонтрНаименованиеПолное = Справочники.Контрагенты.ПустаяСсылка() Тогда
4. M_Salakh 10.03.22 15:40 Сейчас в теме
(3)
СпрКонтрНаименованиеПолное = Справочники.Контрагенты.НайтиПоНаименованию(СтруктураСДанными.Наименование);


А так работает?
5. M_Salakh 10.03.22 15:45 Сейчас в теме
СтруктураСДанными.Наименование - подразумеваю, что тут строка с отсечением пробелом с обеих сторон. Иначе вот так

ИскомоеНаименованиеКонтрагента = СокрЛП(Строка(СтруктураСДанными.Наименование));
СпрКонтрНаименованиеПолное = Справочники.Контрагенты.НайтиПоНаименованию(ИскомоеНаименованиеКонтрагента);
6. user1697411 10.03.22 15:56 Сейчас в теме
(5) Да, сработает, но хотелось бы и по реквизиту проверять, через ИдентификационныйКодЛичности например
7. M_Salakh 10.03.22 16:14 Сейчас в теме
Я так понимаю вот этот поиск не работает
 СпрКонтрИИН = Справочники.Контрагенты.НайтиПоРеквизиту("ИдентификационныйКодЛичности", СтруктураСДанными.ИдентификационныйКодЛичности);


А типы реквизитов совпадают? Нет ли такой ошибки, что "ИдентификационныйКодЛичности" - тип "число", а СтруктураСДанными.ИдентификационныйКодЛичности - это строка?
8. user1697411 10.03.22 17:11 Сейчас в теме
(7) А вы случайно не знаете можно ли засунуть два массива в один json и затем нормально распарсить его?
9. M_Salakh 10.03.22 17:55 Сейчас в теме
(8) Вы передаете сейчас массив структур, где в структуре данные контрагента. Попробуйте передать Структуре вида

СтруктураПередаваемыхДанных = Новый структура;
Структура.Вставить("КонтрагентМассив" , СозданныйМассивКонтрагентов);
Структура.Вставить("ДругойМассив" , СозданныйМассивДругихДанных);


Должно получиться
10. M_Salakh 10.03.22 20:59 Сейчас в теме
(9)

СтруктураПередаваемыхДанных .Вставить("КонтрагентМассив" , СозданныйМассивКонтрагентов);
СтруктураПередаваемыхДанных .Вставить("ДругойМассив" , СозданныйМассивДругихДанных);
user1697411; +1 Ответить
11. user1697411 11.03.22 07:12 Сейчас в теме
(10) получилось, спасибо, а как затем его распарсить если там две структуры
12. user1697411 11.03.22 07:18 Сейчас в теме
(10)
ЧтениеJSON = Новый ЧтениеJSON();
	 ЧтениеJSON.УстановитьСтроку(СтрокаКонтрагентJSON);
	 
	 КонтрагентМассив = ПрочитатьJSON(ЧтениеJSON);
	 Для Каждого СтрокаМассива Из КонтрагентМассив Цикл
		 СоздатьКонтрагента(СтрокаМассива);
	 КонецЦикла;

То есть теперь нужно принять обе структуры и раскидать в два массива, а как их поделить?
13. user1697411 11.03.22 08:06 Сейчас в теме
(12)
ЧтениеJSON = Новый ЧтениеJSON();
	 ЧтениеJSON.УстановитьСтроку(СтрокаКонтрагентJSON);
	 
	 НашеСоответствие = ПрочитатьJSON(ЧтениеJSON, Истина);
	 КонтрагентМассив = НашеСоответствие.Получить("КонтрагентМассив");
Прикрепленные файлы:
14. M_Salakh 11.03.22 08:21 Сейчас в теме
(12) Вот так примерно будет

//Запись
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();   
СтруктураПередаваемыхДанных = Новый структура;
СтруктураПередаваемыхДанных.Вставить("КонтрагентМассив" , СозданныйМассивКонтрагентов);
СтруктураПередаваемыхДанных.Вставить("ДругойМассив" , СозданныйМассивДругихДанных);
ЗаписатьJSON(ЗаписьJSON, СтруктураПередаваемыхДанных);
Результат = ЗаписьJSON.Закрыть();

//Чтение
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(Результат);
ОбъектИзJSON = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

КонтрагентМассив = ОбъектИзJSON.КонтрагентМассив;
ДругойМассив	 = ОбъектИзJSON.ДругойМассив;
Для Каждого СтрокаМассива Из КонтрагентМассив Цикл
	СоздатьКонтрагента(СтрокаМассива);
КонецЦикла;
Показать
user1697411; +1 Ответить
Оставьте свое сообщение

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