Показать сообщение отдельно
Старый 25.09.2018, 16:55   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,874 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от belugin Посмотреть сообщение
Тут может быть проблема в том, что Common ведет себя иногда как ссылочный тип, иногда как значение.
Похоже, что табличный тип это не совсем тип, а некий интерфейс.
И получается в иерархии DirPartyTable ... CompanyInfo у нас есть набор интерфейсов по работе с ядреным курсором.

При этом реализация DirPartyTable.orig() и CompanyInfo.orig() разная. Каждый знает только про свой набор полей - про тот набор, который мы в AOT для таблички описали. И именно этот набор полей при вызове и заполняет в возвращаемом буфере.

Соответственно, задача стояла как получить доступ к соответствующему интерфейсу курсора. Если в коде объявлена переменная соответствующего типа, то все просто, а если ее нет, то как ее получить в runTime.
Ну, я нашел способ.

P.S.
Кстати, аналогичная проблема возникает при помещении и извлечении буфера в List (см. http://sashanazarov.blogspot.com/201...n-objects.html)

а также при помещении и извлечении в контейнер таким способом, популярным в предыдущих версиях:
X++:
con = [buffer];
buffer = conPeek(con, 1);
там тоже при использовании наследуемых табличек теряется инфа о других полях (не из текущего типа).

Видимо, во всех этих случаях задействован какой-то общий механизм в ядре.