Добрый день!
Не пинайте сильно, помогите разобраться.
Есть задача загружать в справочник номенклатуры данные из внешнего файла.
Эта задача включает в себя проверку на отсутствие дублей, чтобы проверялся артикул и наименование.

Я сделал алгоритм, но дубли все равно создаются, всю голову сломал уже.
По итогу выяснилось что почему то в массивах итоговых остается только одна номенклатура и один артикул на момент начала проверки, хотя я выгружаю из запроса все наименования и артикулы которые уже есть в загруженных данных и в справочнике номенклатура.
Хотя эти массивы (ИтоговыйМассивНаименований и ИтоговыйМассивАртикулов) не находятся в циклах.
То есть сначала в них есть все данные, все ок, но потом когда начинается проверка данные из них пропадают.

Помогите разобраться в чем проблема.
Вот код

```1c
    МассивАртикулов = Новый Массив; //В этом массиве все артикулы номенклатуры, которую хотим загрузить
    МассивНаименований = Новый Массив; //В этом массиве все наименнования номенклатуры, которую хотим загрузить

    Для Каждого СтрокаДанных из Объект.ДанныеФайла Цикл
    МассивАртикулов.Добавить(СтрокаДанных.Артикул);
    МассивНаименований.Добавить(СтрокаДанных.Наименование);
    КонецЦикла;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.Ссылка,
    | Номенклатура.Артикул,
    | Номенклатура.Наименование
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Артикул В(&МассивАртикулов)
    | И Номенклатура.Наименование В(&МассивНаименований)";

    //Запросом выбрали всю номенклатуру из справочника, в котором Артикул и Наименование находятся в списке из массива.

    Запрос.УстановитьПараметр("МассивАртикулов", МассивАртикулов);
    Запрос.УстановитьПараметр("МассивНаименований", МассивНаименований);

    РезультатЗапроса = Запрос.Выполнить();

    ИтоговаяТаблица = РезультатЗапроса.Выгрузить();

    ИтоговыйМассивНаименований = Новый Массив;
    ИтоговыйМассивАртикулов = Новый Массив;

    Для каждого СтрокаТаблицы из ИтоговаяТаблица Цикл

    ИтоговыйМассивНаименований.Добавить(СтрокаТаблицы.Наименование);
    ИтоговыйМассивАртикулов.Добавить(СтрокаТаблицы.Артикул);

    КонецЦикла;

    //Сложили в два массива все наименования и артикулы с которыми загружаемые данные не должны совпадать.

    Для каждого Строка из Объект.ДанныеФайла Цикл

    НайденноеНаименование = ИтоговыйМассивНаименований.Найти(Строка.Наименование); // Если не найдено = неопределено
    НайденныйАртикул = ИтоговыйМассивАртикулов.Найти(Строка.Артикул); // Если не найдено = неопределено

    Если НайденныйАртикул <> Неопределено Тогда
    Если НайденноеНаименование = Строка.Наименование Тогда
    Продолжить; // Пропускаем создание, если совпал артикул, но не совпало наименование
    КонецЕсли;
    КонецЕсли;

    Если НайденноеНаименование <> Неопределено Тогда
    Если НайденныйАртикул = Строка.Артикул Тогда
    Продолжить; // Пропускаем создание, если совпало наименование, но не совпал артикул
    КонецЕсли;
    КонецЕсли;

    НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
    НоваяНоменклатура.Наименование = Строка.Наименование;
    НоваяНоменклатура.Артикул = Строка.Артикул;

    НоваяНоменклатура.Записать();

    // Обновляем массивы после добавления новой записи
    ИтоговыйМассивАртикулов.Добавить(Строка.Артикул);
    ИтоговыйМассивНаименований.Добавить(Строка.Наименование);

    КонецЦикла;

    Сообщить("Данные успешно загружены!");
```
---
в условиях запроса поменяй И на ИЛИ
---
1. Потому что ты не обновляешь, а добавляешь.
2. У тебя в запросе есть Ссылка. Если есть несколько ссылок с одинаковыми наименованиями и артикулами - то это не дубли (исходя из твоего кода).

Да и вообще работать не будет. Ты в качестве дубля ищешь не связанную пару, а два разных значения из разных массивов.
---
ищешь не связа

По ТЗ нет связанных пар - может совпасть либо наименование либо артикул, у заказчика этот момент уточнялся, поэтому я пары и не проверяю.

Может быть так, что наименование одинаковое, а артикулы разные и это дубль, второй раз его создавать не нужно.

"Потому что ты не обновляешь, а добавляешь." - вот это не понял, у массива есть метод добавить, я добавляю данные в массив.

спасибо за отклик)
---
в условиях запроса поменяй И на ИЛИ
---
поменяй И

Да, Вы правы)
Но теперь почему то

Если НайденноеНаименование <> Неопределено Тогда
   Если НайденныйАртикул = Строка.Артикул Тогда
    Продолжить; // Пропускаем создание, если совпало наименование, но не совпал артикул
   КонецЕсли;
  КонецЕсли;

НайденноеНаименование в отладчике = 4, но алгоритм почему то идет дальше и создает новый объект, хотя должен в это если((
---
Если НайденныйАртикул <> Неопределено Тогда
            Если НайденноеНаименование = Строка.Наименование Тогда
                Продолжить; // Пропускаем создание, если совпал артикул, но не совпало наименование
            КонецЕсли;
        КонецЕсли;

        Если НайденноеНаименование <> Неопределено Тогда
            Если НайденныйАртикул = Строка.Артикул Тогда
                Продолжить; // Пропускаем создание, если совпало наименование, но не совпал артикул
            КонецЕсли;
        КонецЕсли;

Комментарии не соответствуют коду.
---
Да, поправил, спасибо!
Я просто разные варианты пробовал и комментировал для себя.
---
вообще уникальность не по парам должна проверяться а по отдельости
не должно быть в справочнике элементов
1.ни с совпадающими Артикулами
2.ни с совпадающими Наименованиями

отсуда и ошибки задвоений
---
дающими Наиме

Так вроде бы так и делаю, отдельно проверяю наименования и отдельно артикулы)) Полностью с Вами согласен
---
Всем спасибо!

Проблема была тут

Если НайденныйАртикул <> Неопределено Тогда
   //Если НайденноеНаименование <> Неопределено Тогда
    Продолжить; // Пропускаем создание, если совпал артикул
   //КонецЕсли;
  КонецЕсли;

  Если НайденноеНаименование <> Неопределено Тогда
   //Если НайденныйАртикул <> Неопределено Тогда
    Продолжить; // Пропускаем создание, если совпало наименование
   //КонецЕсли;
  КонецЕсли;

И в смене И на ИЛИ в запросе
---
сделайте такой запрос

выбрать
спр.Артикул как Реквизит
из справочник.Номенклатура спр

объединить

выбрать
спр.Наименование как Реквизит
из справочник.Номенклатура спр

выгрузите значение колонки Реквизит в массив,

и в цикле при обходе строк загружаемых данных
ищите И Артикул и Наименование
и если оба НЕ найдены в этом массиве - тогда добавляете новую номенклатуру