Доброго времени суток,

Прошу помочь, т.к. я только вникаю в 1С. Имеется самописная конфигурация для мобильной платформы. В ней присутствует документ, который создает записи в регистре сведений исходя из данных в табличной части. Регистр сведений непереодический.
Возникла следующая проблема - при создании записей в регистре, я хочу проверять что аналогичных записей нет в регистре, т.к. в таком случае выбивает сообщение о том, что данные уже имеются - хотелось бы его избежать.
Первое что пришло мне в голову это перед формированием записей проверять присутствует-ли строка из табличной части документа в регистре сведений, но понял что создал запрос в цикле и отказался от этой идеи.
После этого я обратился к поисковикам, но, возможно потому, что я неправильно задавал вопрос, ответа не нашел.
В конечном итоге я создал запрос, который получает все данные из документа, потом сравнивает их с регистром сведений и все совпадающие помещает в виртуальную таблицу. После я сравниваю данные из документа с данными из виртуальной таблицы и строки, которые не совпадают я записываю в регистр.
Данный алгоритм работает, но, по моему мнению, это как-то слишком сложно.
Прошу подсказать, есть-ли какой-либо способ легко и просто установить правило, что если данные из табличной части уже есть в регистре, то записывать не нужно, а если есть отличающиеся, то записывать только их?
Заранее благодарю за помощь.
---
конечном итоге я создал запрос, который получает все данные из документа, потом сравнивает их с регистром сведений и все совпадающие помещает в виртуальную таблицу. После я сравниваю данные из документа с данными из виртуальной таблицы и строки, которые не совпадают я записываю в регистр. Надо наооборот - выдать из запроса все данные, которых нет в регистре

Что то такое:

```1c
    Выбрать различные
    ДокТЧ.Поле1,
    ДокТЧ.Поле2
    ИЗ Документ.МойДокумент.ТабЧасть КАК ДокТЧ
    Левое соединение РегистрСведений.МойРегистр КАК Рег
    ПО ДокТЧ.Поле1 = Рег.Измерение1
    И ДокТЧ.Поле2 = Рег.Измерение2
    ГДЕ Рег.Измерение1 есть NULL
```

и вот эту выборку просто записать в регистр
---
Вообще-то это не плохой алгоритм, как альтернативу можно предожить, разве что сравнить две таблицы значений: выгруженные в ТЗ записи регистра и выгруженную твою табчасть. Либо сравнивать два массива (ключевые поля твоих данных) функцией

```1c
    // Вычисляет разность массивов. Разностью массивов А и В является массив, содержащий
    // все элементы массива А не существующие в массиве В.
    //
    // Параметры:
    // Массив - Массив - массив элементов, из которого необходимо выполнить вычитание;
    // МассивВычитания - Массив - массив элементов, который будет вычитаться.
    //
    // Возвращаемое значение:
    // Массив - дополнение массива В до А.
    //
    // Пример:
    // //А = [1, 3, 5, 7];
    // //В = [3, 7, 9];
    // Результат = РазностьМассивов(А, В);
    // //Результат = [1, 5];
    //
    Функция РазностьМассивов(Массив, МассивВычитания) Экспорт

    Результат = Новый Массив;

    Для Каждого Элемент Из Массив Цикл

    Если МассивВычитания.Найти(Элемент) = Неопределено Тогда

    Результат.Добавить(Элемент);

    КонецЕсли;

    КонецЦикла;

    Возврат Результат;

    КонецФункции
```

Но запрос в сранении с этим выглядит оптимальнее
---
ить, разве что сравнить две таблицы значений: выгруженные в ТЗ записи регистра и выгруженную твою табчасть. Либо сравнивать два массив
Спасибо за предложение, действительно, вероятно запросом проще.
---
Поскольку конфа самописная - то зачем вы создали РС без регистратора?
Все ваши проблемы решаются добавлением в структуру вашего РС Регистратора
---
о зачем вы создали РС без регистратора?
Все ваши проблемы решаются добав

Спасибо за ответ.
Мой регистр с Регистратором. По моему замыслу в регистре должны храниться только уникальные значения для Реквизита. Например:
Поступает молоко в различных упаковках(0,5л, 1л, 1,5л, 0,45л), я хочу чтобы после проведения документа поступления в регистр попадало значение, только если для указанного молока такая упаковка является уникальной, если же когда-либо молоко в такой упаковке уже приходило, то записывать не нужно.
Надеюсь, что правильно понял Вашу мысль.
---
Тогда хотелось бы узнать назначение этого РС - какую ПОЛЕЗНУЮ информацию он дасТ в плане учета?

Не проще было создать справочник ВидыУпаковок, и из него вставлять в документ упаковку?
У меня ощущение - что регистр ваш - как 5 колесо у телеги...
---
ось бы узнать назначение этого РС - какую ПОЛЕЗНУЮ информацию о
В реальном учете не могу сказать. Но т.к. я по большому счету тренируюсь у меня такая идея(стоит отметить, что данная конфигурация, это что-то вроде записной книжки, куда я фиксирую свои действия):
Пример такой, я создал справочник со списком упражнений. Документ, это, например, тренировка. В этом документе есть табличная часть выполненных упражнений, например, Колонки: Упражнение, вес, и т.д.. В результате тренировки я заношу Упражнение - поднятие штанги, Вес - 50кг. Эти данные вводятся в регистр. А потом при открытии справочника по поднятию штанги я хочу увидеть вес, который я когда-либо использовал.
Это весьма условным пример, но я делаю нечто похожее.
---
Не проще было создать справочник ВидыУпаковок, и из него вставлять в документ упаковку?
У меня ощущение - что регистр ваш - как 5 колесо у телеги...
Да, изначально у меня и была такая идея, но потом я захотел, чтобы для каждого товара варианты упаковок создавались сами и дошел до такого)
---
Сестра таланта - простота...
У вас была простая - почти гениальная идея ))), но вы все усложнили и получили кучу проблем....
Успешных побед над своими идеями...
---
идея ))), но вы все усложнили и получили кучу проблем....
Успешных побед над своими идеями...
Спасибо. Ну, первоначальная идея была все записывать в блокнот, но вот захотелось же вместо этого разработать свое первое мобильное приложение 1С, а тут уже не могу остановиться)
---
Пример того как сделано сейчас:
ВЫБРАТЬ
 ТабДока.Реквизит1,
 ТабДока.Реквизит2
ПОМЕСТИТЬ ВТ_ИзДокумента
ИЗ
 Документ.Документ1.ТабЧДокумента КАК ТабДока
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ВТ_ИзДокумента.Реквизит1,
 ВТ_ИзДокумента.Реквизит2
ПОМЕСТИТЬ ВТ_Имеющиеся
ИЗ
 ВТ_ИзДокумента КАК ВТ_ИзДокумента
  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр1 КАК НазваниеРегистра
  ПО ВТ_ИзДокумента.Реквизит1 = НазваниеРегистра.Измерение1
   И ВТ_ИзДокумента.Реквизит2 = НазваниеРегистра.Ресурс1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ВТ_ИзДокумента.Реквизит1 КАК Название1,
 ВТ_ИзДокумента.Реквизит2 КАК Название2
ИЗ
 ВТ_ИзДокумента КАК ВТ_ИзДокумента
  ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Имеющиеся КАК ВТ_Имеющиеся
  ПО ВТ_ИзДокумента.Реквизит1 = ВТ_Имеющиеся.Реквизит1
   И ВТ_ИзДокумента.Реквизит2 = ВТ_Имеющиеся.Реквизит2
ГДЕ
 ВТ_Имеющиеся.Реквизит1 ЕСТЬ NULL
---
в данном случае временные таблицы не нужны и даже вредны.
---
Да, большое спасибо, вижу что слишком усложнил.
---
Потому что скажем продажа морковки по цене 10 рублей может быть несколько раз в день, но в разных документах продажи....
Ключевым отличием - выступает документ продажи - регистратор
---
конечном итоге я создал запрос, который получает все данные из документа, потом сравнивает их с регистром сведений и все совпадающие помещает в виртуальную таблицу. После я сравниваю данные из документа с данными из виртуальной таблицы и строки, которые не совпадают я записываю в регистр. Надо наооборот - выдать из запроса все данные, которых нет в регистре

Что то такое:

```1c
    Выбрать различные
    ДокТЧ.Поле1,
    ДокТЧ.Поле2
    ИЗ Документ.МойДокумент.ТабЧасть КАК ДокТЧ
    Левое соединение РегистрСведений.МойРегистр КАК Рег
    ПО ДокТЧ.Поле1 = Рег.Измерение1
    И ДокТЧ.Поле2 = Рег.Измерение2
    ГДЕ Рег.Измерение1 есть NULL
```

и вот эту выборку просто записать в регистр
---
- выдать из запроса все данные
Спасибо за ответ, да, меня не покидает мысль, что в своем запросе(4) я перебрал с виртуальными таблицами.
---
А зачем проверять на уникальность?

Посмотрите в сторону - РегистрСведенийМенеджерЗаписи.<Имя регистра сведений> метод Записать(<Замещать>)

Параметры:

<Замещать> (необязательный)

Тип: Булево.
Определяет режим замещения существующей записи с тем же набором значений измерений регистра и с тем же периодом (для периодических регистров). Истина - если запись регистра сведений с таким набором существует, то выполняется замещение; Ложь - запись будет дописана к уже существующим в информационной базе записям.
Значение по умолчанию: Истина.

//////////////................////////////////

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер)
---
мет
Спасибо за ответ. Я изначально сделал таким образом, когда у меня регистр сведений был независимым, но столкнулся с проблемой при отмене проведения документа.
А именно: Я замещал запись в регистре, ошибки не было, меня устраивало. Но при отмене проведения мне нужно было бы прописывать механизм удаления записи из регистра. Например, я создал документ тренировки в котором, например, поднял штангу Xкг. Данная информация записалась в регистр(перезаписала старую запись), а потом пришлось отменить проведение. А т.к. регистр непериодический, то моя информация о Xкг стерлась и мне сложно понять, а поднимал-ли я когда-либо до этого Xкг или это был первый раз? Т.е. запись о Xкг пропала и нужно было пробежаться по документам, посмотреть, а вдруг я такой вес уже брал.
В подчиненном регистре сведений отказался от перезаписи, т.к. интересно видеть когда именно я первый раз взял этот вес.
При Запись(Ложь) все равно выбило ошибку, что записи с такими полями существуют.