Имя: Пароль:
1C
1С v8
Набор записей регистра сведений
0 Max Street
 
20.01.16
10:57
Привет.

Регистр сведений ШтрихкодыНоменклатуры. Измерение: Штрихкод. Ресурсы: Номенклатура, Характеристика.

Я хочу удалить все записи по заданным номенклатуре и характеристике, а затем добавить новую.

Код такой:

    НаборЗаписей = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Записывать = Истина;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ШтрихкодыНоменклатуры.Штрихкод
    |ИЗ
    |    РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
    |ГДЕ
    |    ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура
    |    И ШтрихкодыНоменклатуры.Характеристика = &Характеристика";

    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("Характеристика", Характеристика);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        НаборЗаписей.Отбор.Штрихкод.Установить(ВыборкаДетальныеЗаписи.Штрихкод);
        НаборЗаписей.Прочитать();
        НаборЗаписей.Очистить();
    КонецЦикла;
    
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Штрихкод = Штрихкод;
    НоваяЗапись.Номенклатура = Номенклатура;
    НоваяЗапись.Характеристика = Характеристика;        
        
    Попытка
        НаборЗаписей.Записать(Ложь);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

При выполнении ошибка: "
Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует!".


подскажите, пожалуйста, что сделал не так
1 Господин ПЖ
 
20.01.16
10:59
>что сделал не так

все не так
2 Max Street
 
20.01.16
11:01
(1) как правильно?
3 Господин ПЖ
 
20.01.16
11:02
читая буквари по 1с
4 Max Street
 
20.01.16
11:06
(3) сострил? расскажи лучше как исправить
5 Одинесю
 
20.01.16
11:12
(4) Буквально несколько дней назад эти штрихкоды до дыр затерли.
6 lEvGl
 
гуру
20.01.16
11:13
чтобы отработало надо после очистить() поставить записать()
и это НаборЗаписей.Записывать не нужно тут
(5) этот самодельный по-моему
7 lEvGl
 
гуру
20.01.16
11:14
+ или при записать(ложь) убрать ложь
8 hhhh
 
20.01.16
11:17
(4) вот так пробуй

   НаборЗаписей.Отбор.Штрихкод.Установить(ВыборкаДетальныеЗаписи.Штрихкод);
    
   НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Штрихкод = Штрихкод;
    НоваяЗапись.Номенклатура = Номенклатура;
    НоваяЗапись.Характеристика = Характеристика;
9 Max Street
 
20.01.16
11:17
(7) если при НаборЗаписей.Записать(Ложь); убрать Ложь - стирает все записи из регистра

(6) спасибо, помогло
10 hhhh
 
20.01.16
11:17
(8)+  

НаборЗаписей.Отбор.Штрихкод.Установить(Штрихкод);

конечно же
11 chelentano
 
20.01.16
11:19
имхо, вот этого должно хватить:

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

НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Штрихкод = Штрихкод;
НоваяЗапись.Номенклатура = Номенклатура;
НоваяЗапись.Характеристика = Характеристика;

НаборЗаписей.Записать(Истина);
12 Max Street
 
20.01.16
11:20
(11) отбор по ресурсам не накладывается
13 Max Street
 
20.01.16
11:21
(8) не понял. это как?
14 chelentano
 
20.01.16
11:23
(12) Я в курсе. Но, всё-равно, спасибо
15 hhhh
 
20.01.16
11:37
(13) ну у тебя в (0) тупо отбор в цикле. ЕСли цикл не выполнялся, получается

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

вообще без отбора, весь регистр затираешь.

а если цикл выполнялся, то остается последний из отборов, который был. Тоже фигня.
16 chelentano
 
20.01.16
11:39
Я вообще не понял, зачем запрос, зачем цикл?
17 chelentano
 
20.01.16
11:40
(14), (16) Всё, извините, невнимательно заголовок прочитал