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