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

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 Ответить
Оставьте свое сообщение
Вакансии
Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Программист 1С
Екатеринбург
зарплата от 130 000 руб. до 170 000 руб.
Полный день

Программист 1C
Санкт-Петербург
зарплата от 140 000 руб. до 200 000 руб.
Полный день