Не записывает наборЗаписей ?*

```1c
    РегистрТЦ=Документы.УстановкаЦенНоменклатуры.НайтиПоНомеру("РР-00000012",текущаядата());
    НаборЗаписей = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(РегистрТЦ);
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Период = РегистрУС.Дата;
    НоваяЗапись.Регистратор =РегистрУС.Ссылка;
    НоваяЗапись.Магазин=Справочники.Магазины.НайтиПоНаименованию("КЕ");
    НоваяЗапись.Номенклатура=Резуль.Ссылка;
    НоваяЗапись.Активность=Истина;
    НоваяЗапись.Цена =ЦенаХ ;
    НаборЗаписей.Записать(Истина);
```
---
Замени
 сообщить("Ошибка записи в регистр");
На
Сообщить(ОписаниеОшибки());

или дополни, увидишь истинную причину ошибки
---
РегистрТЦ=Документы.УстановкаЦенНоменклатуры.НайтиПоНомеру("РР-00000012",текущаядата()); После поиска по номеру неплохо бы проверять его результат - найден документ или нет? Соответственно, дальше или добавлять набор записей, или нет.
---
найден,я проверял по отладке
---
РегистрТЦ=Документы.УстановкаЦенНоменклатуры.НайтиПоНомеру("РР-00000012",текущаядата());
    НаборЗаписей = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(РегистрТЦ);
Документ УстановкаЦенНоменклатуры не является регистратором регистра СебестоимостьНоменклатуры
---
ты прав)) ошибка
---
(4)Но все равно не записывает,проверил документ находит, в наборе есть записи
---
После создания набора записей его нужно прочитать и очистить. Иначе ты попытаешься сделать второй подобный набор, а этого делать нельзя. Иесли ты хочешь всю номенклатуру в регистр добавить, то нуно это делать в цикле. Я не знаю как у тебя называется ТЧ документа, в примере я назвал ее "Товары"

```1c
    РегистрТЦ=Документы.УстановкаЦенНоменклатуры.НайтиПоНомеру("РР-00000012",текущаядата());
    НаборЗаписей = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(РегистрТЦ);
    НаборЗаписей.Прочитать();
    НаборЗаписей.Записать();
    Для Каждого СтрокаТовара из РегистрТЦ.Товары Цикл
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Период = РегистрУС.Дата;
    НоваяЗапись.Регистратор =РегистрУС.Ссылка;
    НоваяЗапись.Магазин=Справочники.Магазины.НайтиПоНаименованию("КЕ");
    НоваяЗапись.Номенклатура=Резуль.Ссылка;
    НоваяЗапись.Активность=Истина;
    НоваяЗапись.Цена =ЦенаХ ;
    КонецЦикла;
    НаборЗаписей.Записать(Истина);
```
---
почистил, все равно не записывает
---
Может, потому что ты устанавливаешь отбор по одному регистратору, а в наборе добавляешь запись по другому регистратору?
---
Да ,ты тоже это заметил , исправил,но все равно не записывает
---
НаборЗаписей.Отбор.Регистратор.Установить(РегистрТЦ);
НоваяЗапись.Регистратор =РегистрУС.Ссылка;

Кто такой "РегистрУС.Ссылка" ?
---
переменная с ссылкой к регистратору
---
РегистрТЦ и РегистрУС - Это не один и тот же объект.
---
да ты прав, но обе переменные заполнены и содержать объект,расчет себестоимости, поменял, но все равно не записывет.Если надо могу скинуть полный код
---
```1c
    НаборЗаписей.Записывать = Истина;
```

Тоже не помогает?
---
перед записью или перед созданием, я так понял это очищение набора?
---
После создания, перед записью.
---
поставил перед записью набора, не сработало
---
кидай
---
кинул
---
```1c
    i=0;
    sum=0;//счтиваем общее количество созданных карточек
    ФайлExcel="C:\Users\корт\Documents\себестоиомсть\yt10_TOS.xlsx"
    ТЗ = ИзExcelВТаблицу(ФайлExcel,1,Истина);
    РегистрУС=Документы.УстановкаСебестоимости.НайтиПоНомеру("РР-00000011",текущаядата());
    НаборЗаписей2 = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей2.Отбор.Регистратор.Установить(РегистрУС);
    //Читаем регистр и добавляем колонку код
    наборзаписей2.Прочитать();
    ТаблН=наборзаписей2.Выгрузить(,"Номенклатура,Цена");
    ТаблН.Колонки.Добавить("Код");
    ДЛя каждого стрТ Из ТаблН Цикл
    СтрТ.код=стрТ.Номенклатура.Код;
    КонецЦикла;
    //-к
    //-первое определение для чтения ,второй для записи
    РегистрТЦ=Документы.УстановкаСебестоимости.НайтиПоНомеру("РР-00000012",текущаядата());
    НаборЗаписей = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(РегистрТЦ);
    //--чтобы регистр записался

    НомерСтроки=Наборзаписей.Количество();
    НаборЗаписей.записать();
    Для Каждого Стр Из ТЗ Цикл //таблица копий
    СебесН=ЧИсло(СтрЗаменить(Стр.Стоимость,Символы.НПП,"));
    КодН=Строка(СтрЗаменить(Стр.код,Символы.НПП,"));
    КолвоН=Число(Стр.Количество);
    Пока СтрДлина(КодН)<11 Цикл
    КодН="0"+КодН;
    КонецЦикла;
    //находим
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.Код КАК Код,
    | Номенклатура.Ссылка КАК Ссылка,
    | Номенклатура.Родитель.Наименование КАК РодительНаименование
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Код = &Код
    | И Номенклатура.Родитель.Наименование = &Наименование";

    Запрос.УстановитьПараметр("Код", КодН);
    Запрос.УстановитьПараметр("Наименование", "TS Ювелирные изделия");
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Резуль=ВыборкаДетальныеЗаписи;// Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;
    Если ЗначениеЗаполнено(Резуль) тогда //Если найдена номенклатура
    НайдСтр=ТаблН.Найти(КодН);
    ЦенаХ=Окр(СебесН/КолвоН,2);
    Если ЗначениеЗаполнено(НайдСтр) тогда // находим интревал округления
    РазличиеЦен=Макс(-(НайдСтр.Цена-ЦенаХ),НайдСтр.Цена-ЦенаХ); //модуль числа,чтоб всегда положительное
    иначе
    РазличиеЦен=ЦенаХ;
    КонецЕсли;

    Если РазличиеЦен>0.01 Тогда //если различие одна копейка , то оставляем старую цену
    Если Не ЗначениеЗаполнено(НайдСтр) или НайдСтр.Цена<>(ЦенаХ) ТОгда

    НоваяЗапись = НаборЗаписей.Добавить();

    НоваяЗапись.Период = РегистрТЦ.Дата;// +(сч)так как врегистр не записываются одинаковые строки в одно время
    НоваяЗапись.Регистратор =РегистрТЦ.Ссылка;
    НоваяЗапись.Магазин=Справочники.Магазины.НайтиПоНаименованию("TOUS");
    НоваяЗапись.Номенклатура=Резуль.Ссылка;
    НоваяЗапись.Активность=Истина;
    НоваяЗапись.Цена =ЦенаХ ;//ЦенаХ из ексел ут 10

    Если Не ЗначениеЗаполнено(НайдСтр) ТОгда
    Сообщить("Записано в регистр:"+Резуль.ссылка+" себестоимость:"+Строка(ЦенаХ));
    иначе
    Сообщить("Записано в регистр:"+Резуль.ссылка+" себестоимость:"+Строка(ЦенаХ)+" была себес:"+строка(НайдСтр.Цена));
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    i=i+1;
    КонецЕсли;
    КонецЦикла;
    Попытка
    НаборЗаписей.Записать();
    Исключение
    сообщить("Ошибка записи в регистр");
    КонецПопытки;
```
---
Сперва не правильно код вставил
---
Возможно, дублируются записи по измерениям в самом наборе. Вы бы убрали Попытку / Исключение и показали реальный текст ошибки, вместо этого
```1c
    Попытка
    НаборЗаписей.Записать();
    Исключение
    сообщить("Ошибка записи в регистр");
    КонецПопытки;
```
---
ты прав, сейчас увидел что дублируются. На минуту раньше, тебе бы отправил за решение.А так тебя опередили.Спасибо большое день мучился
---
Жесть. Зачем так сложно.
---
там я беру данные из файла ексель, сверяю с данными из регистра и не достающие или неправильные по цифрам данные записываю в регистр, а как можно проще это сделать?
---
там еще в считанные данные добавляю колонку код, так как только этот реквизит уникальный в пределах номенклатуры
---
Замени
 сообщить("Ошибка записи в регистр");
На
Сообщить(ОписаниеОшибки());

или дополни, увидишь истинную причину ошибки
---
спасибо вставил.
Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : СебестоимостьНоменклатуры: 01.01.2022 1:00:00, Расчет и установка себестоимости РР-00000012
---
тебе же уже написали выше - ставишь отбор по одному регистратору, а в новую запись пихаешь другой регистратор, будет всегда ошибка - не соответствие отбору при записи такого набора.
---
Да, я это поправил, но все равно была ошибка записи,оказалось двойная запись
---
НомерСтроки=Наборзаписей.Количество();
//НаборЗаписей.записать(); это выкинуть, для начала. Не надо очищать набор, это лишнее
---
да ,понял.ошибка была в двойной записи
---
Спасибо всем большое, все помогли!!
---
Вот как-то так проще наверно

```1c
    i=0;
    sum=0;//счтиваем общее количество созданных карточек
    ФайлExcel="C:\Users\корт\Documents\себестоиомсть\yt10_TOS.xlsx"
    ТЗ = ИзExcelВТаблицу(ФайлExcel,1,Истина);

    ТЗ.Колонки.Добавить("Код11",Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(11, ДопустимаяДлина.Фиксированная));
    ТЗ.Колонки.Добавить("Себест",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Любой)));
    ТЗ.Колонки.Добавить("Колво",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 3, ДопустимыйЗнак.Любой)));

    //Вот это по идее сразу нужно делать в ИзExcelВТаблицу
    Стр0="00000000000";
    Для Каждого Стр Из ТЗ Цикл //таблица копий
    Стр.Себест=Число(СтрЗаменить(Стр.Стоимость,Символы.НПП,"));
    Стр.Колво=Число(Стр.Количество);
    КодН=СокрЛП(СтрЗаменить(Стр.код,Символы.НПП,"));
    Стр.Код11=Лев(Стр0,11-СтрДлина(КодН))+КодН;
    КонецЦикла;

    ТЗ.Колонки.Удалить("Стоимость");
    ТЗ.Колонки.Удалить("Количество");
    ТЗ.Колонки.Удалить("код");

    РегистрУС=Документы.УстановкаСебестоимости.НайтиПоНомеру("РР-00000011",текущаядата());
    РегистрТЦ=Документы.УстановкаСебестоимости.НайтиПоНомеру("РР-00000012",текущаядата());
    Родитель=Справочники.Номенклатура.НайтиПоНаименованию("TS Ювелирные изделия",Истина);
    Магазин=Справочники.Магазины.НайтиПоНаименованию("TOUS");
    //Тут бы по уму проверку, что все это нашлось

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ТЗ.Код11 КАК Код,
    | ТЗ.Себест КАК Себест,
    | ТЗ.Колво КАК Колво
    |ПОМЕСТИТЬ ТЗ
    |ИЗ &ТЗ КАК ТЗ
    |;
    |ВЫБРАТЬ
    | ISNULL(СпрНоменклатура.Ссылка,ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) КАК Номенклатура,
    | ВЫРАЗИТЬ(ТЗ.Себест/ТЗ.Колво КАК (Число(15,2)) КАК НоваяЦена,
    | ВЫБОР
    | КОГДА СпрНоменклатура.Ссылка IS NULL ТОГДА 0
    | ИНАЧЕ ISNULL(СебестоимостьНоменклатурыСрезПоследних.Цена,0)
    | КОНЕЦ КАК Цена
    |ИЗ ТЗ КАК ТЗ
    |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
    | ПО СпрНоменклатура.Код = ТЗ.Код,
    | И СпрНоменклатура.Родитель = &Родитель
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СебестоимостьНоменклатуры.СрезПоследних(, Регистратор = &Регистратор) КАК СебНомСрезПоследних
    | ПО СебНомСрезПоследних.Номенклатура = ISNULL(СпрНоменклатура.Ссылка,ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    |";

    Запрос.УстановитьПараметр("ТЗ", ТЗ);
    Запрос.УстановитьПараметр("РегистрУС", РегистрУС);
    Запрос.УстановитьПараметр("Родитель",Родитель);
    Выборка = Запрос.Выполнить().Выбрать();

    НаборЗаписей = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(РегистрТЦ);

    Пока Выборка.Следующий() Цикл

    Если ЗначениеЗаполнено(Выборка.Номенклатура) Тогда

    Если Выборка.Цена=0 ИЛИ Макс(Выборка.Цена-Выборка.НоваяЦена,Выборка.НоваяЦена-Выборка.Цена)>0.01 Тогда

    НоваяЗапись = НаборЗаписей.Добавить();

    НоваяЗапись.Период = РегистрТЦ.Дата;// +(сч)так как врегистр не записываются одинаковые строки в одно время
    НоваяЗапись.Регистратор =РегистрТЦ;
    НоваяЗапись.Магазин=Магазин;
    НоваяЗапись.Номенклатура=Выборка.Номенклатура;
    НоваяЗапись.Активность=Истина;
    НоваяЗапись.Цена =Выборка.НоваяЦена ;//ЦенаХ из ексел ут 10

    Если Не Выборка.Цена=0 ТОгда
    Сообщить("Записано в регистр:"+Выборка.Номенклатура+" себестоимость:"+Выборка.НоваяЦена);
    иначе
    Сообщить("Записано в регистр:"+Выборка.Номенклатура+" себестоимость:"+Выборка.НоваяЦена+" была себес:"+Выборка.Цена);
    КонецЕсли;

    i=i+1;

    КонецЕсли;

    КонецЕсли;

    КонецЦикла;

    Попытка
    НаборЗаписей.Записать();
    Исключение
    сообщить("Ошибка записи в регистр");
    КонецПопытки;
```
---
спасибо, там просто еще дописок много будет