|
Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы |
☑ |
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 Записать() и ошибка пропала!
|
|