AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.04.2011, 15:41   #1  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
============================
В С++ я бы написал что-то вроде
struct { int64 refTable; int refField } myStruct;
set<myStruct> myStructSet = ( {Table1, Field1}, {Table2, Field2} );
и получил бы одновременно и контроль типов, и легкость инициализации.

========================
извините что может не в тему но просто для расширения общего познания написал как бы выглядел этот код на ABAP.
============================
TYPE: BEGIN OF myStruct,
table TYPE integer64,
field TYPE integer,
END OF myStruct.

TYPE: BEGIN OF myStructComlex,
key TYPE myStruct,
value TYPE myStruct,
END OF myStructComlex.

TYPE myStructComlexTab TYPE HASH TABLE myStructComlex WITH UNIQUAE KEY key.
============================
Старый 10.04.2011, 16:11   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от konopello Посмотреть сообщение
извините что может не в тему
не в тему.
и вы не написали как будет выглядеть добавление нескольких значений в эту хэш-таблицу.

если уж речь идет о таблицах, то fed предложил более изящный способ - создать структуру в АОТ. и дальше делать несколько insert'ов. и кода меньше, и проверок больше.

а в аксапте прямой аналог вашего кода - map (вариант я не выписывал с способы из-за явно избыточного key)
X++:
myMap = new(Types::string, Types::class);
myMy.add("someKey1", new myPair(table1, field1);
myMy.add("someKey2", new myPair(table2, field2);
чтобы не геммороится с key в аксапте есть класс set. и варианты 2.1, 2.2, 2.3 подразумевали работу именно с этим классом set.

но все равно кода получается слишком много по сравнению с
set<myStruct> myStructSet = ( {Table1, Field1}, {Table2, Field2} );
__________________
полезное на axForum, github, vk, coub.
Старый 10.04.2011, 17:31   #3  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
не в тему.
и вы не написали как будет выглядеть добавление нескольких значений в эту хэш-таблицу.
А будет выглядеть так
================
DATA:
lt_myStructComlexTab TYPE myStructComlexTab,
ls_myStructComlexTab LIKE LINE OF lt_myStructComlexTab.

CLEAR ls_myStructComlexTab.
ls_myStructComlexTab-key-table = 'TABLE1'.
ls_myStructComlexTab-key-field = 'FIELD1'.
ls_myStructComlexTab-value-table = 'TABLE2'.
ls_myStructComlexTab-value-field = 'FIELD2'.
INSERT ls_myStructComlexTab INTO TABLE lt_myStructComlexTab.
================

не совсем понял что значит гемороится с ключами, ядро само контролирует ключ.
если вам это не надо то можно тип таблицы изменить на простую.
================
TYPE myStructComlexTab TYPE STANDARD TABLE myStructComlex.
================
это аналог SET.

извините за за СПАМ.
Старый 10.04.2011, 18:46   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от konopello Посмотреть сообщение
не совсем понял что значит гемороится с ключами, ядро само контролирует ключ.
?!

а! у вас структура хранится два раза: и в ключе, и в значении (value)
Цитата:
Сообщение от konopello Посмотреть сообщение
key TYPE myStruct,
value TYPE myStruct,
хорошо, что есть аналог set.

давайте все-таки вернемся к теме.
итак - аксапта.
контейнеры - статично, просто, без контроля, очень затратно по памяти.
класс-классов - полный контроль, но писать блин много. хотя, гуру утверждают, что окупается.
(временная) таблица - писать тоже много. но зато хоть какой-то контроль типов.
__________________
полезное на axForum, github, vk, coub.
Старый 10.04.2011, 19:45   #5  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
давайте все-таки вернемся к теме.
А можно уточнить? Что все-таки нужно? Хранить некие константные значения в коде (аналогично моему посту выше) и впоследствии на основе их заполнять некие данные или вести работу с набором переменных данных (например, разноска в ГК и классы LedgerVoucherList, LedgerVoucherTransList).
А то создание всяких коллекций, классов-оберток и т.д. актуально больше не для столько для начальных константных данных, сколько для переменных данных (разноска ГК)
__________________
Возможно сделать все. Вопрос времени
Старый 10.04.2011, 19:57   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
А можно уточнить? Что все-таки нужно? Хранить некие константные значения в коде (аналогично моему посту выше) и впоследствии на основе их заполнять некие данные или вести работу с набором переменных данных (например, разноска в ГК и классы LedgerVoucherList, LedgerVoucherTransList).
изначальная тема "хранить статичный набор начальных данных в классах"

я не очень понимаю в чем выбор между твоими вариантами.
да, нужно предоставить программисту (!) удобный механизм для заполнения набора начальных статичных константных данных. чтобы в дальнейшем что-то делать с этими данными.

причем, заполнение набора может проводится как в одном методе, так и в нескольких. например, часть добавляется (или убирается) в методах-потомках.
__________________
полезное на axForum, github, vk, coub.
Старый 10.04.2011, 21:48   #7  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
я не очень понимаю в чем выбор между твоими вариантами.
Поясню.
1. Задача создания закладки "Номерные серии" в параметрах модуля. Пользователь ничего не вводит, однако ему выводится некая таблица (грид) значений, которые на самом деле хранятся в коде (контейнер контейнеров, классы, временная таблица - неважно). Важно, что при изменении соответствующего куска кода - данные в этой таблице должны меняться.

В этом случае мне нравится (в порядке убывания):
- вариант таблицы (лучше постоянной - как с номерными сериями)
- вариант XML (в памяти)
- вариант контейнера контейнеров
не нравится вариант класса классов или Set (Types::Class) - т.к. слишком много кода

2. Задача создания разноски в ГК. Тут нет начальных константных данных, однако по входящим данным генерируется некоторый набор записей. Генерируемый набор может быть представлен как набор экземпляров классов (Set Types::Class). Важно - что нам не нужно хранить в классах параметры, т.е. многие параметры входящие

В этом случае мне нравится (в порядке убывания):
- вариант класса классов (на худой конец Set Types::Class)
- вариант таблицы (лучше временной, как промежуточной, хотя может даже лучше и постоянной - т.к. все равно откат произойдет, если не закроется транзакция)
не нравится вариант XML (сложность реализации) и контейнера контейнеров / Map / Set / List (нечитабельный код)

PS. Упс... ответ уже получен - пункт 1. Но все равно - мнение свое выскажу
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 10.04.2011 в 21:52.
Старый 10.04.2011, 20:08   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
аналогично моему посту выше)
ага, спасибо.

вот суть:
вариант "хранения в коде" сводится к варианту fed - создать таблицу и инициализировать ее в коде.
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 531
Размер:	32.7 Кб
ID:	6737

вариант хранения в ресурсах не рассматривался. спасибо.
Нажмите на изображение для увеличения
Название: 2.PNG
Просмотров: 533
Размер:	68.7 Кб
ID:	6738

итак - аксапта. есть следующие способы хранения статичного набора начальных данных.
  • контейнеры - статично, просто, без контроля, очень затратно по памяти.
  • класс-классов - полный контроль, но писать блин много. хотя, гуру утверждают, что окупается.
  • (временная) таблица - писать тоже много. но зато хоть какой-то контроль типов. пример инициализации
  • хранить файл с наперед заданной структурой (например, xml) в ресурсах
__________________
полезное на axForum, github, vk, coub.
Старый 10.04.2011, 22:22   #9  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
Не... это плохой пример инициализации. Создается ощущение, что нужно писать много кода в куче в одном месте.

Вот хороший пример:
Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 502
Размер:	34.9 Кб
ID:	6739
Нажмите на изображение для увеличения
Название: Снимок2.PNG
Просмотров: 444
Размер:	42.0 Кб
ID:	6740

Каждый наследник заполняет только "свою" часть настроек.

Пример из жизни. Мы оказываем складские услуги сторонним организациям. Мы используем АХ. Каждый клиент присылает документ об отгрузке / приемке в электронном виде и каждый в своем формате. Задача хранить параметры импорта в разрезе форматов данных (на самом деле еще и в разрезе клиента). При этом параметры у каждого формата могут быть разные (типы разные) и количество их также может быть разным.

Создаем механизм, аналогичный номерным сериям. Создаем наследника на каждый тип формата данных. Т.о. в коде у нас создаются записи, каждая из которой отвечает за свой параметр. Какие-то параметры (к примеру, каталог импорта / экспорта) у нас будут общие для нескольких форматов данных => соответствующие строки из метода loadModule можно перенести в родительский класс.

Данное решение не учитывает AIF или какие- еще технологии и я не собираюсь обсуждать в этой ветке плюсы и минусы решения поставленной задачи именно такой реализацией. Однако, я хотел привести пример использования на практике идеи закладки "Номерные серии" как пример заполнения таблицы данными из кода.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 10.04.2011 в 22:26.
Старый 11.04.2011, 00:41   #10  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
класс-классов - полный контроль, но писать блин много. хотя, гуру утверждают, что окупается.
я за этот вариант если что то серьезное делать, ну или за временную таблицу. По моему контейнер не очень удобен в использовании и дебаге + накладные расходы.
Старый 12.04.2011, 12:03   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Как мне кажется, вопрос о способе записи статических данных "вообще" в отрыве от способа использования этих самых статических данных - не имеет смысла.

Ну, например, разработчики Axapta может и хотели бы хранить данные о номерных сериях в виде контейнеров, но ведь использоваться-то они будут как записи таблицы. Так зачем же вводить промежуточные структуры, если в конце концов все-равно придется создавать записи? Ну, так сразу и создаем.

Т.е. способ дальнейшего использования этих самых статических данных собственно и определяет способ их задания. Все остальные соображения тут же отходят на второй план.

Кроме того, меня несколько удивляет акцентирование внимание на контроле типов данных. Это ты сам себе не доверяешь? Ну, в худшем случае, получишь ты ошибку не на этапе компиляции, а на этапе исполнения. Или написанный код предварительно не тестируется? А почему, собственно, надо контролировать только тип и не надо контролировать значение? Ведь тоже возможна ошибка!

Т.е. контроль типов не то чтобы лишнее требование, но, скорее, из разряда приятных, но не обязательных бонусов. Есть - хорошо, нет - не очень-то и нужно...
Старый 12.04.2011, 12:40   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Как мне кажется, вопрос о способе записи статических данных "вообще" в отрыве от способа использования этих самых статических данных - не имеет смысла.
предложи варианты

я говорил о наборе пар <таблица, поле> для редактирования query.
я предполагал что-то сугубо внутренне-программистское. такое что не дается пользователю.

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Это ты сам себе не доверяешь?
и сам себе не доверяю - особенно если буду добавлять/изменять что-нибудь через несколько месяцев.
и не доверяю другим программистам - которые будут добавлять/изменять что-нибудь после меня через некоторое время.

а главное - хочу иметь штатный механизм с контролем, который использовали бы другие, а я при добавлении/изменении не запорол бы их работу.

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Ну, в худшем случае, получишь ты ошибку не на этапе компиляции, а на этапе исполнения.
Хе... Это ж большая разница.

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Или написанный код предварительно не тестируется? А почему, собственно, надо контролировать только тип и не надо контролировать значение? Ведь тоже возможна ошибка!
А мне нравится эта вывернутая логика:
Конечно же надо контролировать значение - "скажи как".

И мне нравится этот переход на личности:
"раз у тебя код не тестируется, поэтому зачем тебе контроль начальных данных?"

==============
В контейнерах нет контроля ни типа, ни значения.
Я спрашивал - есть ли механизм который контролирует хотя бы тип?
Мне ответили - только создавать свои классы (но достаточно трудоемко)
Мало того, контейнер уж очень неповоротливая структура (хоть и легкая в использовании)

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

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Т.е. контроль типов не то чтобы лишнее требование, но, скорее, из разряда приятных, но не обязательных бонусов. Есть - хорошо, нет - не очень-то и нужно...
__________________
полезное на axForum, github, vk, coub.
Старый 12.04.2011, 13:20   #13  
mayk is offline
mayk
Участник
Аватар для mayk
 
43 / 65 (3) ++++
Регистрация: 07.03.2008
Цитата:
Сообщение от mazzy Посмотреть сообщение
Хе... Это ж большая разница.
Не смертельная. Учитывая удобство, можно и потерпеть. Особенно если не смешивать record'ы и int'ы в одном контейнере.

по теме: зависит от.
контейнеры,
Код:
container fields;;
fields = [[#CustAccount, custTable.custAccount],
[#CustId, custTable.accountNum],
etc];
for(i=1;i<=conlen(fields);++i){
 [bookmark, value]=conpeek(fields,i);
 excelDocument.insert(bookmark, value, #worksheet);
иногда hook'и (типа Runbase.dialogPostInit)
Код:
void initQuery(){;
   query = new Query(querystr(aotquery));
   postInitQuery(); //наследники могут делать грязную работу здесь, не перекрывая initQuery()
Особенно если предполагается что вызов super'а накладен:
Код:
void initQueries(){;
   for(i=1;i<N;++i)
   query = new Query(querystr(aotquery));
   this.postInitQuery(query); 
   this.addQuery(query);//здесь хук для инициализации легче сделать чем super() в DerivedClass.initQueries()
лучше всего вместе с parm'ами

Код:
myClass = myClass::construct(/**/);
myClass.parmQuery().dataSourceTable(xx).range(...);
List'ы и struct'ы на этапе компиляции всё равно не поймают ошибку типов. И вроде не на ембеддеде клиент запускается, чтобы сильно о памяти беспокоиться.

Последний раз редактировалось mayk; 12.04.2011 в 13:22.
За это сообщение автора поблагодарили: mazzy (2).
Старый 12.04.2011, 14:41   #14  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
я говорил о наборе пар <таблица, поле> для редактирования query.
я предполагал что-то сугубо внутренне-программистское. такое что не дается пользователю.
Как "стандартно" задается пара <таблица, поле> для будущего Range? Очевидно, через функции tablenum(), fieldnum(). И вот КАК здесь можно ошибиться? Приведи пример.

Это очень показательный пример того, что без знания цели, выбор "идеального" средства - бессмысленное занятие

Цитата:
Сообщение от mazzy Посмотреть сообщение
А мне нравится эта вывернутая логика:
Конечно же надо контролировать значение - "скажи как".
Ну, это просто. Если известно, что речь идет о паре: таблица-поле, то, очевидно, можно проконтролировать корректность Id-таблица и корректность Id-поля. Только вот, не кажется ли, ну, мягко говоря, странным подобное занятие? Разве tablenum() и filednum() в принципе могут дать не корректное значение?

Цитата:
Сообщение от mazzy Посмотреть сообщение
И мне нравится этот переход на личности:
"раз у тебя код не тестируется, поэтому зачем тебе контроль начальных данных?"
Это не "переход на личности". Это доведение до абсурда, чтобы показать не корректность исходной постановки задачи.

Ведь насколько я понимаю, Вы не ставите задачу проверки значения не потому, что это невозможно "в принципе". Как раз-таки очень даже возможно. Просто Вы понимаете полную бессмысленность этой задачи. Однако контроль типов Вам не кажется бессмысленным. Почему, собственно? Только потому, что это относительно просто?
Старый 12.04.2011, 17:58   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Как "стандартно" задается пара <таблица, поле> для будущего Range? Очевидно, через функции tablenum(), fieldnum(). И вот КАК здесь можно ошибиться? Приведи пример.
легко. здесь выкладывают проекты.
проекты могут быть импортированы в среду, где таких таблиц нет.

другой вариант: дев и продакт системы.
в дев таблицы и поля есть, а в продакт еще не перенесли.

или вот так: Несколько AOS: синхронность изменения объектов

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Это очень показательный пример того, что без знания цели, выбор "идеального" средства - бессмысленное занятие
Как скажете

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Ведь насколько я понимаю, Вы не ставите задачу проверки значения не потому, что это невозможно "в принципе". Как раз-таки очень даже возможно. Просто Вы понимаете полную бессмысленность этой задачи. Однако контроль типов Вам не кажется бессмысленным. Почему, собственно? Только потому, что это относительно просто?
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 12.04.2011 в 18:16. Причина: добавил ссылку на соседнюю ветку.
Старый 12.04.2011, 18:17   #16  
Evgeniy2020 is offline
Evgeniy2020
Участник
 
309 / 68 (3) ++++
Регистрация: 10.04.2007
Адрес: Москва, САО, СЗАО
Я бы может генерил бы на основе таблиц и полей, или классов (метаданных)
XML формы для ввода, что то вроде ASP.net или веб сервис,
и не программист мог бы вводить данные с привязкой к метаданным (не по id а возможно символьно)

а потом умный парсер, преобразовывал бы стрктуру XML и заполнял бы те данные для которых есть таблицы поля классы, или настроил бы генерить ошибку если не вся структура подгружена, или же частично загружать не выкидывая ошибок.

можно было бы сделать веб сервис поставщик данных, на основе того что вводят не программисты. в веб поля которые генерятся на основе дев метаданных.

Последний раз редактировалось Evgeniy2020; 12.04.2011 в 18:25.
Старый 12.04.2011, 19:41   #17  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
легко. здесь выкладывают проекты.
проекты могут быть импортированы в среду, где таких таблиц нет.

другой вариант: дев и продакт системы.
в дев таблицы и поля есть, а в продакт еще не перенесли.

или вот так: Несколько AOS: синхронность изменения объектов
Во всех описанных случаях при использовании tablenum() и fieldnum() будет ошибка на этапе компиляции. Импорт не получится. Нет причин в дополнительном контроле не только значений, но и типов данных.

Можно привести еще варианты, когда при вводе констант (статических данных) действительно необходим дополнительный контроль типов этих самых констант?
Старый 14.04.2011, 11:13   #18  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
предложи варианты

я говорил о наборе пар <таблица, поле> для редактирования query.
я предполагал что-то сугубо внутренне-программистское. такое что не дается пользователю.
Предлагаю

Для начала, небольшое отступление. Когда я начал программировать в среде X++ я считал "не правильным" создавать временные таблицы в AOT. Логика здесь была такая: данные временные, значит, и все объекты, которые их используют должны быть временными. В том смысле, что они должны быть удалены по окончании работы кода. А объект AOT остается! Т.е. "временный объект" оказывается "постоянным".

В настоящее время, я рассматриваю временные таблицы, как программный код написанный визуальными средствами. Это позволяет избавится от психологического "затыка".

Так вот, возвращаясь к задаче. Если сама задача заключается в создании/изменении query, то, почему-то вариант создания этого самого query напрямую в AOT не рассматривается в принципе. "По определению". Почему собственно? Думаю, по двум причинам:

1. Тот психологический "затык", который я описал чуть выше
2. В отличие от временной таблицы query можно создать программно

Итого, предлагаю вариант прямого создания Query в AOT. Со всеми предопределенными Range.

=============================================

Ну, хорошо, предположим, "ломка" настолько сильная и не преодолимая, что заставить себя создать объект в AOT - невозможно . Ладно. Тогда переходим к "программистским" трюкам

Как правило, для построения query создается отдельный метод класса вроде BuildQuery. И вот тут еще один интересный вопрос.

А зачем вообще надо предварительно "запихивать" поля в какое-то промежуточное хранилище, если можно прямо так и писать код создания с явным указанием имен полей? Ну, там

queryBuildDataSource.addRange(fieldnum(...))

Зачем здесь "лишние" посредники? Хотите модифицировать query в классах-наследниках? Да пожалуйста! Есть куча методов для этого - clearRange(), findRange() и т.п.

==============================

Ну, предположим, у нас стоит задача иметь возможность делать query с разными таблицами-источниками. Т.е. одного метода создания - недостаточно. Ну, так создайте несколько методов! Не в одном классе, разумеется, а иерархия классов-наследников, каждый из которых будет работать со своими данными

Это как-раз стандартный подход в Axapta.

===============================

Другими словами, все предложенные решения сводятся к тому, что просто не создается временное хранилище для статических данных. Статические данные сразу используются. Без промежуточных хранилищ

Вот именно про это я и говорил, что бессмысленно рассматривать подобную задачу "вообще". Нужна конкретная постановка задачи в смысле конечной цели использования статического набора.
Старый 14.04.2011, 11:17   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Так вот, возвращаясь к задаче. Если сама задача заключается в создании/изменении query, то...
...у нас стоит задача иметь возможность делать query с разными таблицами-источниками...
Владимир Максимов, вы тормоз.
Тема называется: Как правильно хранить статичный набор начальных данных в классах?
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: S.Kuskov (-1).
Старый 14.04.2011, 11:26   #20  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
А зачем вообще надо предварительно "запихивать" поля в какое-то промежуточное хранилище, если можно прямо так и писать код создания с явным указанием имен полей? Ну, там

queryBuildDataSource.addRange(fieldnum(...))

Зачем здесь "лишние" посредники? Хотите модифицировать query в классах-наследниках? Да пожалуйста! Есть куча методов для этого - clearRange(), findRange() и т.п.
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ок, например, Query не позволяет удалять Range. Поэтому, по-уму надо бы сначала провести оптимизацию range'й.

в общем, бывают случаи, когда совсем статический подход не работает.
но согласен - это очень хороший подход в большинстве случаев.
.
За это сообщение автора поблагодарили: mazzy (2).
Теги
как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Загрузка начальных данных MIVura DAX: Прочие вопросы 1 31.03.2009 14:52
Набор данных на лету HorrR DAX: Программирование 15 26.09.2008 15:21
Прогноз роста базы данных и выбор топологии системы, Как правильно расчитать возможный рост sergeypp DAX: Администрирование 0 05.12.2006 16:55
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:39.