Имя: Пароль:
1C
1С v8
Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы
0 Vito
 
05.08.22
14:25
Создаю программно элемент номенклатуры. При этом присваиваю ему дополнительный реквизит. Для того, чтобы присвоить дополнительный реквизит, нужно сохранить номенклатуру. Получается следующая структура кода:

1  НовыйЭлементНоменклатуры = Справочники.Номенклатура.СоздатьЭлемент();
...НекийКодДляПрисвоенияРеквизитовЭлементу;  (включая получение СсылкиНового)
2  НовыйЭлементНоменклатуры.Записать();
...НекийКодДляПрисвоенияДополнительныхРеквизитов;
3  НовыйЭлементНоменклатуры.Записать();


После последней записи получаю ошибку " Ошибка при вызове метода контекста (Записать): Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!"

При этом происходит запись 2-х экземпляров номенклатуры, отличающихся на доп.реквизиты. Причем возникает несистемно, только для части элементов. Хотя эта ошибка может и не связана с первой)
В чем может быть дело? (Мне кажется что-то связанное с механизмом транзакций). И как с эти бороться?

Заранее спасибо за любую помощь!
1 ZDenis
 
05.08.22
14:32
(0)Чтобы не ругалось можно перед записью
НовыйЭлементНоменклатуры.Прочитать();

А почему у тебя создается 2 элемента тут не видно
2 vde69
 
05.08.22
14:53
у тебя между п. 2 и п.3 есть еще где-то "получитьобъект().записать()"
3 vde69
 
05.08.22
14:54
(2) например в подписке или еще где....
4 kostyan29
 
05.08.22
15:02
(0) Для начала можно упростить код, убрав получения и установления ссылки нового. И сделать так:

1  НовыйЭлементНоменклатуры = Справочники.Номенклатура.СоздатьЭлемент();
2  НовыйЭлементНоменклатуры.Записать();
...НекийКодДляПрисвоенияРеквизитовЭлементу;
...НекийКодДляПрисвоенияДополнительныхРеквизитов;
3  НовыйЭлементНоменклатуры.Записать();

Если все будет работать без задвоения, значит, что-то с ссылкой нового не то.
5 Eiffil123
 
05.08.22
15:05
а доп.реквизиты разве не в табличной части самого элемента справочника хранятся? или это какая-то древняя конфигурация?
6 kostyan29
 
05.08.22
15:09
(5) может ТС имел в виду дополнительные сведения, которые в регистре хранятся?
7 kostyan29
 
05.08.22
15:13
(6) + хотя если так, то второй раз номенклатуру записывать смысла нет...

Тогда так вообще должно быть

НовыйЭлементНоменклатуры = Справочники.Номенклатура.СоздатьЭлемент();
НекийКодДляПрисвоенияРеквизитовЭлементу;
НовыйЭлементНоменклатуры.Записать();
НекийКодДляПрисвоения_ДОП_СВЕДЕНИЯЭлементу;

и все
8 Vito
 
05.08.22
15:24
(2) Дубли победил, они возникали за счет того, что сразу после после строки 2 (запсии) было:
НовыйЭлементНоменклатур=СсылкаНового.ПолучитьОбъект()
Это был рудимент попыток избавиться от ошибки
(6)  они самые
(7) Логично, попробую, отпишусь
9 Vito
 
05.08.22
15:32
(7) Спасибо! Все получилось: убрал 3 Записать() и ошибка пропала!