Показать сообщение отдельно
Старый 10.11.2012, 15:44   #42  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
856 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
Цитата:
Сообщение от Narayana Посмотреть сообщение
... и все-таки, ничо не понимаю.

Вот, есть представления традиционной ориентации.
Есть таблица в БД, есть рекордсет.
Берем таблицу и с помощью оператора select набираем записи из таблицы в рекордсет.

Теперь Аксапта.
Есть таблица в БД.
Дальше Аксапта знает про эту таблицу в БД и структуру этой таблицы держит у себя в качестве типа объекта в виде элемента АОТ. Так?

Так


Дальше мы объявляем переменную с типом данной таблицы.
Что при этом происходит? Ничего вроде, разве что память выделяется под переменную, но не уверен, вроде бы как в Java языке происходит.
Мы создаем в памяти только пустую структуру этой таблицы или уже структуру, заселенную данными?

Дальше самое интересное.
Применяем оператор select.
Результатом его работы должен быть рекордсет.
Так этот самый рекордсет куда складывается?
В нашу пустую объявленную переменную или еще куда-то? оператор селект формирует запрос к БП. Если не используется noFetch то он обычно сразу же и исполняется. Результат "складывается" (в реальности все сложнее - используется буфер, и складывается не весь результат) в объявленную табличную переменную

Создается впечатление, что складывается как раз в нашу же переменную.
Но, это же какой-то бардак получается.

То есть, объявлением переменной с типом таблицы, мы создаем копию таблицы или пустой рекордсет?
Если, допустим, пустой рекордсет "r" , то странным выглядит синтаксическая конструкция "select r;", потому как, вроде бы, "r" должен быть не операндом операции select, а ее результатом. Синтаксис не я придумал, но наверное проблемы с его пониманием возникают только у .Net девеорперов. Если вы его не понимаете, то у вас скорее всего проблемы с абстрагированием и программирование вам вообще противопоказано

Вот, когда мы, например, в АОТе открываем форму таблицы, где показывается содержание таблицы, что происходит? Много чего, впрочем к вышесказанному отношение имеет опосредованное

И еще.
Вот мы создали в АОТе таблицу.
А потом используем ее, например, в качестве датасорса для датасета, используемого дальше в портале.
Допустим, я хочу к тому моменту, когда таблица будет использоваться в качестве дата сорса, произвести некоторые вычисления и положить результат их в одно из полей таблицы.
Какое событие нужно использовать и какой метод таблицы лучше перекрывать для размещения кода вычислений? вы хотите не это наверное, просто решили, что хотите сделать XXX через YYY и спрашиваете на форуме, как сделать YYY как в известном анекдоте. Никто так не делает в здравом уме, обновление данных вместе с выводом тупо убъет производительность, представьте, что два пользователя откроют страничку, что произойдет с блокировками в сиквеле?
возьмите книжку для начинающих по аксапте и прочтите первую главу про таблицы и запросы, если книжка хорошая, там есть ответы на все ваши вопросы

Последний раз редактировалось lvan; 10.11.2012 в 16:01.