Здравствуйте. Жестко туплю. Такая ситуация: на форму видов расчета в плане видов расчета Начисления добавил несколько реквизитов с перечислениями. Эти реквизиты формы, которые после того как были выбраны какие-то элементы перечисления (скрин приложил), записываются в созданный мной регистр сведений Соответствие. Так как это реквизиты формы то при открытии этой формы эти реквизиты пустые. Поэтому в обработчике события ПриОткрытии я прочитываю регистр сведений и заполняю реквизиты формы. Ок.

Но если я хочу изменить или добавить что-то в вид начисления, у которого уже есть данные прочитанные из регистра сведений (скрин приложил), то у меня выходит ошибка "Запись с такими ключевыми полями существует".
Вот код:
```1c
    НаборЗаписей = РегистрыСведений.Расш_2_Соответствие.СоздатьНаборЗаписей();

    Если ЭтотОбъект.ОблагаетсяОМС = 0 ИЛИ ЭтотОбъект.ОблагаетсяПФ = 0 ИЛИ ЭтотОбъект.ОблагаетсяСПБ = 0 Тогда
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Соответ_Начисления = Объект.Ссылка;

    Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеПФ) Тогда
    НоваяЗапись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблагаемыеПФ;
    КонецЕсли;

    Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеСПБ) Тогда
    НоваяЗапись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
    КонецЕсли;

    Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблогаетсяОМС) Тогда
    НоваяЗапись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблогаетсяОМС;
    КонецЕсли;

    НаборЗаписей.Записать();
    КонецЕсли;
```

В выше приведенном коде я создаю записи в РС. А если они уже есть и кокретную запись нужно изменить я не могу сообразить как сделать это сделать.
---
По-моему здесь бы хватило:

```1c
    НаборЗаписей.Отбор.Соответ_Начисления.Установить(Объект.Ссылка);
    Запись = НаборЗаписей.Добавить();
    Запись.Соответ_Начисления = Объект.Ссылка;
    Запись .ОснованиеПФ = ОснованияНеОблагаемыеПФ;
    Запись .ОснованиеСПБ = ОснованияНеОблагаемыеСПБ;
    Запись .ОснованиеОМС = ОснованияНеОблогаетсяОМС;
    НаборЗаписей.Записать();
```
---
НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Соответ_Начисления = Объект.Ссылка;
НоваяЗапись.Отбор.Соответ_Начисления.Установить(Объект.Ссылка);
НоваяЗапись.Прочитать();
---
Я забыл дописать, что прочитал данные. Но ошибка таже самая если в Записать передать Ложь. Если Истина то данные записываются не все, а последнее выбранное перечисление.

 Код
```1c
    НаборЗаписей = РегистрыСведений.Расш_2_Соответствие.СоздатьНаборЗаписей();

    Если ЭтотОбъект.ОблагаетсяОМС = 0 ИЛИ ЭтотОбъект.ОблагаетсяПФ = 0 ИЛИ ЭтотОбъект.ОблагаетсяСПБ = 0 Тогда

    НаборЗаписей.Прочитать();

    Если НаборЗаписей.Количество() Тогда

    Для Каждого Запись Из НаборЗаписей Цикл

    Если Запись.Соответ_Начисления = Объект.Ссылка Тогда
    Запись.Соответ_Начисления = Объект.Ссылка;
    Запись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблагаемыеПФ;
    Запись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
    Запись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблогаетсяОМС;
    КонецЕсли;

    КонецЦикла;

    НаборЗаписей.Записать(Ложь);
    Возврат;
    КонецЕсли;

    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Соответ_Начисления = Объект.Ссылка;

    Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеПФ) Тогда
    НоваяЗапись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблагаемыеПФ;
    КонецЕсли;

    Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеСПБ) Тогда
    НоваяЗапись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
    КонецЕсли;

    Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблогаетсяОМС) Тогда
    НоваяЗапись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблогаетсяОМС;
    КонецЕсли;

    НаборЗаписей.Записать();
    КонецЕсли;
```
---
НаборЗаписей.Прочитать();

        Если НаборЗаписей.Количество() Тогда

            Для Каждого Запись Из НаборЗаписей Цикл
                Запись.Соответ_Начисления = Объект.Ссылка;
                Запись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблагаемыеПФ;
                Запись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
                Запись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблогаетсяОМС;
            КонецЦикла;

            НаборЗаписей.Записать(Ложь);
Это в корне не правильно.
Прочитали все записи из регистра. У всех записей заменили значение измерения и ресурсов. И пытаетесь записать в режиме не заменять, а добавить.
Вот сколько записей было в РС, столько раз пытаетесь добавить одинаковых записей.
Измерение в РС одно?
Выше указа, что нужно указать отбор по нему. Прочитать. Добавить одну запись с нужными значениями и соответствующим отбору. Записать.
---
Так и есть. Исправил. Теперь только по конкретной записи. Но ошибка таже самая "Запись с такими ключевыми полями существует" если в Записать передать Ложь. Если Истина то данные записываются не все, а последнее выбранное перечисление.

Код
```1c
    НаборЗаписей = РегистрыСведений.Расш_2_Соответствие.СоздатьНаборЗаписей();

    Если ЭтотОбъект.ОблагаетсяОМС = 0 ИЛИ ЭтотОбъект.ОблагаетсяПФ = 0 ИЛИ ЭтотОбъект.ОблагаетсяСПБ = 0 Тогда

    НаборЗаписей.Прочитать();

    Если НаборЗаписей.Количество() Тогда

    Для Каждого Запись Из НаборЗаписей Цикл

    Если Запись.Соответ_Начисления = Объект.Ссылка Тогда
    Запись.Соответ_Начисления = Объект.Ссылка;
    Запись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблагаемыеПФ;
    Запись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
    Запись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблогаетсяОМС;
    КонецЕсли;

    КонецЦикла;

    НаборЗаписей.Записать(Ложь);
    Возврат;
    КонецЕсли;

    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Соответ_Начисления = Объект.Ссылка;

    Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеПФ) Тогда
    НоваяЗапись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблагаемыеПФ;
    КонецЕсли;

    Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеСПБ) Тогда
    НоваяЗапись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
    КонецЕсли;

    Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблогаетсяОМС) Тогда
    НоваяЗапись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблогаетсяОМС;
    КонецЕсли;

    НаборЗаписей.Записать();
    КонецЕсли;
```
---
Переписал код. Но теперь ругается, что поле объекта не обнаружено в отборе (Соответ_Начисления):
Код
```1c
    НаборЗаписей = РегистрыСведений.Расш_2_Соответствие.СоздатьНаборЗаписей();

    Если ЭтотОбъект.ОблагаетсяОМС = 0 ИЛИ ЭтотОбъект.ОблагаетсяПФ = 0 ИЛИ ЭтотОбъект.ОблагаетсяСПБ = 0 Тогда

    НаборЗаписей.Отбор.Соответ_Начисления.Установить(РегистрыСведений.Расш_2_Соответствие.Соответ_Начисления);
    НаборЗаписей.Прочитать();
    МенеджерЗаписи = РегистрыСведений.Расш_2_Соответствие.СоздатьМенеджерЗаписи();

    Для Каждого ТекЗапись Из НаборЗаписей Цикл
    Если ТекЗапись.Соответ_Начисления = Объект.Ссылка Тогда
    ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ТекЗапись);
    МенеджерЗаписи.Прочитать();
    МенеджерЗаписи.Соответ_Начисления = Объект.Ссылка;
    МенеджерЗаписи.ОснованиеОМС = ЭтаФорма.ОснованияНеОблагаемыеПФ;
    МенеджерЗаписи.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
    МенеджерЗаписи.ОснованиеПФ = ЭтаФорма.ОснованияНеОблогаетсяОМС;
    МенеджерЗаписи.Записать();
    КонецЕсли;
    Возврат;
    КонецЦикла;

    //////////////////////////////////////////////////

    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Соответ_Начисления = Объект.Ссылка;

    Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеПФ) Тогда
    НоваяЗапись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблагаемыеПФ;
    КонецЕсли;

    Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеСПБ) Тогда
    НоваяЗапись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
    КонецЕсли;

    Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблогаетсяОМС) Тогда
    НоваяЗапись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблогаетсяОМС;
    КонецЕсли;

    НаборЗаписей.Записать(Ложь);
    КонецЕсли;
```
---
НаборЗаписей.Отбор.Соответ_Начисления.Установить(РегистрыСведений.Расш_2_Соответствие.Соответ_Начисления);
Этачо? Какой смысл хотя бы подразумевался-то?
---
Соответ_Начисления это измерение. Если просто пишу НаборЗаписей.Отбор.Соответ_Начисления.Установить(Соответ_Начисления) ошибка компиляции переменная неопределена.
---
Соответ_Начисления это измерениеНе, я пожалуй пас. Тебе столько всего объяснять надо...
---
А в какую сторону копать? Хочется знать в чем нужно восполнить пробелы.

PS Вот этот код заработал мне как было нужно:
```1c
    НаборЗаписей = РегистрыСведений.Расш_2_Соответствие.СоздатьНаборЗаписей();

    Если ЭтотОбъект.ОблагаетсяОМС = 0 ИЛИ ЭтотОбъект.ОблагаетсяПФ = 0 ИЛИ ЭтотОбъект.ОблагаетсяСПБ = 0 Тогда

    НаборЗаписей.Прочитать();
    Для Каждого Запись Из НаборЗаписей Цикл

    Если Запись.Соответ_Начисления = Объект.Ссылка Тогда
    Запись.Соответ_Начисления = Объект.Ссылка;
    Запись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблогаетсяОМС;
    Запись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
    Запись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблагаемыеПФ;
    НаборЗаписей.Записать();
    Возврат;
    КонецЕсли;
    КонецЦикла;

    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Соответ_Начисления = Объект.Ссылка;
    НоваяЗапись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблагаемыеПФ;
    НоваяЗапись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
    НоваяЗапись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблогаетсяОМС;
    НаборЗаписей.Записать();
    КонецЕсли;
```
---
По-моему здесь бы хватило:

```1c
    НаборЗаписей.Отбор.Соответ_Начисления.Установить(Объект.Ссылка);
    Запись = НаборЗаписей.Добавить();
    Запись.Соответ_Начисления = Объект.Ссылка;
    Запись .ОснованиеПФ = ОснованияНеОблагаемыеПФ;
    Запись .ОснованиеСПБ = ОснованияНеОблагаемыеСПБ;
    Запись .ОснованиеОМС = ОснованияНеОблогаетсяОМС;
    НаборЗаписей.Записать();
```