Как изменить объект после его записи? #417302


#0 by sem4cnt
Ситуация следующая. Необходимо программно присвоить значение реквизиту "ОсновнойДоговорКонтрагента" для нового контрагента. Делаю так: При попытки второй записи возникает ошибка: ...... операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных. В чем я не прав?
#1 by Лефмихалыч
в том, что первый раз не надо записывать
#2 by Лефмихалыч
+ почтиай про УстановитьСсылкуНового
#3 by sem4cnt
Интересно, а как же тогда для договоров указать владельца?
#4 by dimoff
Во всем прав, код нормальный, надо смотреть СоздатьДоговорыИВыбратьОсновной;
#5 by H A D G E H O G s
При первой записи - объект еще дополнительно меняется, например в процедуре ПередЗаписбю или в подписке на события. Тогда объект спрКонтр становится устаревшим.
#6 by sem4cnt
Это все происходит единовременно...
#7 by Лефмихалыч
при помощи УстановитьСсылкуНового и ПолучитьСсылкуНовго
#8 by H A D G E H O G s
Примитивненько:
#9 by dimoff
Не бредь, ПередЗаписью для СпрКонтр и вызывается.
#10 by Лефмихалыч
ну, тогда уж так:
#11 by H A D G E H O G s
Спросим автора?
#12 by Лефмихалыч
Не надо выкладывать сюда гуано, в особенности СоздатьДоговорыИВыбратьОсновной
#13 by dimoff
Лучше попросим автора заменить строчку на и убедимся что ошибка вдруг исчезла.
#14 by sem4cnt
функция СоздатьДоговорыИВыбратьОсновной создает договоры и возвращает тот, который должен быть основным
#15 by dimoff
Скорей всего именно в СоздатьДоговорыИВыбратьОсновной читается из базы созданный элемент и меняется, ещё раз для (характеристика по вкусу) - код в абсолютно верный и приемлемый.
#16 by Лефмихалыч
ну, и ни *ера подобного болеете?
#17 by dimoff
Контрагент как в неё попадает?
#18 by dimoff
ты автор?
#19 by Лефмихалыч
нет, а поцчему вы спгашиваете?
#20 by H A D G E H O G s
Автор, давай быстрее код функции СоздатьДоговорыИВыбратьОсновной, а то счаст виртуальная кровь прольется.
#21 by sem4cnt
Я выложил задачу в несколько упрощенном виде. На самом деле речь идет об ОЛЕ обмене. Если хотите то вод реальный код этой функции Функция ЗаполнитьРеквизитыОбъектаОЛЕ(Знач ЭлементСсылка, Знач ЭлементОЛЕОбъект, ЗаполнятьРеквизиты)
#22 by Лефмихалыч
и пару общих модулей впридачу
#23 by Лефмихалыч
иппааать...
#24 by sem4cnt
Ну вы хотели
#25 by sem4cnt
Вот глючный кусок
#26 by dimoff
Ну собственно в чем я и не сомневался Если СправочникПодчиненный > 0 Тогда
#27 by sem4cnt
И что?
#28 by sem4cnt
Он действительно может рекурсивно изменяться, но в конце функции всегда происходит запись
#29 by Лефмихалыч
Да нет там ни чего подобного. Следующим этапом ты потребуешь выложить код ПолучитьОбъектОЛЕ?
#30 by France
мля.. димычу респект и уважуха.. сразу просек, что код в адекватен... сам на днях аналогичные клепал.. и все класссно..
#31 by H A D G E H O G s
Нууу, ты был прав. Судьба выдала тебе шанс.
#32 by Лефмихалыч
за такой код надо бейца отрывать...
#33 by dimoff
Что там просекать, сам подобный миллиард раз писал.
#34 by dimoff
За твои тупые советы в этойй ветке надо бейца отрывать.
#35 by France
об чом и грю... дважды "Записать" проблем не должно вызывать..
#36 by H A D G E H O G s
Я чертовски согласен с тобой
#37 by sem4cnt
Господа, я так и не понял в чем ошибка. Дайте пожалуйста конструктив.
#38 by dimoff
Автор, когда ошибку выдает, в строчке  ТекЭлементОЛЕОбъект.Записать; перед Возвратом?
#39 by dimoff
никто пока не понял
#40 by H A D G E H O G s
#41 by H A D G E H O G s
ТекЭлементОЛЕОбъектВладелец.Записать;  ///ВОТ ОНО
#42 by France
надеюсь, не виктор.. а то, пожалуй, смешно будет.. контрагентов я вчерась добил... аВВтар, нах тебе основного клепать в одном??.. плин.. как в у мя весь код не наберется..
#43 by dimoff
Именно, теперь повинись и назови себя тем кем я тебе справедливо называю последний месяц.
#45 by H A D G E H O G s
Это запись делает устаревшим объект спрКонтр.ОсновнойДоговорКонтрагента = СоздатьДоговорыИВыбратьОсновной; спрКонтр Если вы меня поняли...
#46 by dimoff
Хотя Ежов молодец, первый заметил где именно ошибка
#47 by H A D G E H O G s
Тебе предупреждение.
#49 by France
даж не успел увидеть 44...
#50 by sem4cnt
Да, скорее всего. И как же мне быть с записью?
#51 by Лефмихалыч
там были ссылки на и читай
#52 by dimoff
Таким образом итог (Если ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем Тогда эти присвоения необходимо делать в блоке с контрагентом в не в блоке с договором
#54 by France
весь код в 52 в строку нужно писать..  = ?(,,)
#55 by sem4cnt
Как же я вынесу это в блок с контрагентом, когда именно от вида договора зависит кто у меня контрагент - покупатель или поставщик???
#56 by dimoff
Что-то мешает после присвоения основного договора проверить ВидДоговора?
#57 by France
чо?? чо ты заморачивешся, не пАнимаю..
#58 by sem4cnt
57 я не понимаю элементарную вещь. Можно ли записать объект, после того как он был модифицирован. И как?
#59 by H A D G E H O G s
Я вот делаю так:
#60 by H A D G E H O G s
Пусть есть неоптимальности, но зато код читаем и понятен.
#61 by France
пЫпЭць..
#62 by dimoff
Судя по 58 автор так и не понял в чем дело, ну и фиг с ним, надо будет - поймет
#63 by H A D G E H O G s
Купить книгу "Габец, Профессиональная разработка в 1С 8.0", читать про объектный (ну заодно и про транзакционный) кэши. Страница вроде 68.
#64 by sem4cnt
ОК. Всем спасибо. Буду разбираться.
#65 by Лефмихалыч
можно, но сначала его надо прочитать, чтобы обновить версю объекта. Почитай в большой книже "Профессиональная рабоработка" про версионирование
#66 by H A D G E H O G s
Окей, а я лучше про кирпич поразмышляю.
#67 by H A D G E H O G s
И нашел ошибку. Вот так надо:
#69 by H A D G E H O G s
#70 by H A D G E H O G s
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С