![]() |
|
Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы | ☑ | ||
---|---|---|---|---|
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 Записать() и ошибка пропала!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |