Показать сообщение отдельно
Старый 22.03.2016, 11:49   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Logger Посмотреть сообщение
при создании записи из клиентского кода, при передаче буфера на сервер, common.orig() начинает возвращать тот же буфер, что может приводить к неприятным глюкам. при исполнении на клиенте все ок, orig() возвращает пустой буфер, но при переходе исполнения на сервер (например внутри метода Insert() который всегда на сервере исполняется), orig() начинает возвращать непустой буфер равный текущему. Из-за этого могут некорректно работать модификации закладывающиеся на сравнение значений полей в буфере с его orig() значениями. Как это можно быстро исправить для кучи модификаций без переделки кода?
Багофича, конечно, неприятная, но масштаб бедствий вроде не такой большой, как кажется. Ведь влияет эта багофича только на код, который
  • вызывается и на вставке новых записей, и при обновлении существующих
  • работает на сервере, вызываясь напрямую или опосредованно из клиентского кода
  • различает вставку записей и их обновление неявно по тому, что те или иные поля, отличные от RecId, не заполнены в orig (например, SalesTable.orig().CustAccount)
  • если поля в текущем буфере и в orig различаются, выполняет какую-то дополнительную логику
Т.е. проблема, как мне кажется, не столько в багофиче, сколько в том, что некий код полагается на различие полей как неявный признак вставки новой записи. По идее такого кода должно быть не очень много.