Имя: Пароль:
1C
1С v8
Запись с такими ключевыми полями существует (при повторной загрузке)
, ,
0 Mary01
 
29.06.15
15:51
Добрый день!
Как сделать, чтобы в регистре сведений данные замещались при совпадении ключевых полей?
Есть ТЗ, из нее в цикле заполняю регистр ЦеныНоменклатуры.
Регистр периодический, периодичность - день.
До начала цикла я создаю набор записей, в цикле заполняю, после цикла записываю: НаборЗаписей.Записать();
Но при этом, вместо того, чтобы заместить повторяющиеся записи, программа выдает ошибку, что запись с такими ключевыми полями существует.
1 Enterprise
 
29.06.15
15:56
(0) Может надо еще Прочитать() ?
2 pavelul73
 
29.06.15
15:59
Записать (Write)
Синтаксис:

Записать(<Замещать>)
Параметры:

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

Тип: Булево.
Определяет режим замещения существующей записи в соответствии с текущими установками отбора. Истина - перед записью существующие записи будут удалены. Ложь - записи будут дописаны к уже существующим в информационной базе записям.
3 Ненавижу 1С
 
гуру
29.06.15
16:00
если регистраторы разные, то не взлетит, записи другого регистратора придется очистить
4 Mary01
 
29.06.15
16:01
(2) Истина по умолчанию, поэтому не указываю параметр
5 Mary01
 
29.06.15
16:01
(3) Регистр не подчинен регистратору, он независимый
6 hhhh
 
29.06.15
16:08
значит 2 одинаковые номенклатуры в набор записей пишете
7 Mary01
 
29.06.15
16:12
(1) Если Прочитать() перед циклом, то та же ошибка, если после цикла, то ошибки нет, но и не записывает ничего.
Если в цикле, то тогда надо и  НаборЗаписей.Записать() писать в цикле - но при этом опять та же ошибка
8 anatoly
 
29.06.15
16:29
(6) надо чтобы все измерения совпали.
9 hhhh
 
29.06.15
17:49
(6) они и совпадают. разница в номенклатуре.
10 Maniac
 
29.06.15
17:56
НаборЗаписей = РегистрыСведений.НоменклатураКонтрагентов.СоздатьНаборЗаписей();    
    НаборЗаписей.Отбор.Контрагент.Установить(Контрагент);
    НаборЗаписей.Отбор.Номенклатура.Установить(Стр.Номенклатура);
    НаборЗаписей.Отбор.ХарактеристикаНоменклатуры.Установить(Стр.ХарактеристикаНоменклатуры);            
    
    НаборЗаписей.Прочитать();


Если НаборЗаписей.Количество() = 0 Тогда
        Запись = НаборЗаписей.Добавить();
    Иначе
        Запись = НаборЗаписей.Получить(0);
    КонецЕсли;
11 Рэйв
 
29.06.15
18:46
(10)Не учи плохому.
А если несколько ?
12 Mary01
 
30.06.15
07:00
(10) мне нужно без отбора, т.к. в таблице строки не по одной какой-то номенклатуре, а по многим.
Просто в регистре уже есть абсолютно аналогичные строки, на  них и ругается и не записывает. А мне надо чтобы эти строки просто замещались, а новые добавлялись
13 Mary01
 
30.06.15
08:00
(6) Вы оказались правы, в ТЗ действительно было 2 строки, где все поля были одинаковы (кроме цены - в одной строке цена нормальная, в другой цена = 0). Удалила строку с нулевой ценой, и все стало нормально загружаться.
Всем спасибо!