|
13.09.2006, 15:29 | #1 |
Участник
|
Создание объекта таблицы по ее имени
Доброго времени суток Коллеги.
Вот у меня возникла проблемка. Хочу перебрать все поля таблицы (их описания), которую укажут в диалоге. Посадил на диалог поле для ввода текста и вызываю метод моего класса, в параметре которого передается строка из диалога. Данная строка будет являться именем таблицы, поля которой мне нужно перебрать. Но как мне из строкового выражения создать объект. а может я не так предоставляю выбор таблицы? Поделитесь пожалуйста опытом. Заранее благодарен! |
|
13.09.2006, 15:31 | #2 |
Участник
|
\System Documentation\Classes\DictTable\makeRecord
|
|
13.09.2006, 15:35 | #3 |
Axapta
|
Что-то не совсем понял. А зачем создавать объект, чтобы перебрать св-ва полей? Есть замечательные классы DictTable и DictField.
|
|
13.09.2006, 15:36 | #4 |
Участник
|
ну вобще мне нужно для произвольной таблицы узнать:
какие у нее есть поля и описание полей |
|
13.09.2006, 15:39 | #5 |
Участник
|
DictTable очень вам в этом поможет - при создании объекта нужно ему передать tableId той таблицы (произвольной), которой нужно.
И сразу объект этот будет все знать об этой таблице А для того чтобы получить tableId достаточно метода tableName2Id() |
|
|
За это сообщение автора поблагодарили: demon46 (1). |
13.09.2006, 15:42 | #6 |
Участник
|
Об этом я знаю. Но при создании объекта необходимо передавать его ID а у меня есть название таблицы
|
|
13.09.2006, 15:43 | #7 |
Участник
|
Упс... простите не дочитал
|
|
13.09.2006, 15:44 | #8 |
Axapta
|
Зачем объект-то создавать?
|
|
13.09.2006, 15:46 | #9 |
Участник
|
Вот тебе еще кусочек кода:
Код: static void Job5(Args _args) { #define.yourTableNameFromDialog('InventTable') DictTable dt; DictField df; int i; ; dt = new DictTable(tableName2Id(#yourTableNameFromDialog)); for (i = 1; i <= dt.fieldCnt(); i++) { info(fieldId2Name(dt.id(), dt.fieldCnt2Id(i))); df = new DictField(dt.id(), dt.fieldCnt2Id(i)); //df.получаем о поле всю необходимую инфу } } |
|
13.09.2006, 15:46 | #10 |
Axapta
|
X++: static void JOB6666() { SysDictTable dictTable; SysDictField dictField; int i; ; dictTable = new SysDictTable(tableName2Id('CustTable')); for (i = 1; i <= dictTable.fieldCnt(); i++) { dictField = dictTable.fieldObject(dictTable.fieldCnt2Id(i)); info (dictField.name()); } } Последний раз редактировалось oip; 13.09.2006 в 15:59. |
|
|
За это сообщение автора поблагодарили: demon46 (1). |
13.09.2006, 15:47 | #11 |
Участник
|
Вот вам даже 2 кусочка кода - по-разному сделанных
|
|
13.09.2006, 15:48 | #12 |
Участник
|
Это конечно не по теме, но мне все же важно! В форуме на исходниках есть опция закрытия темы. А на этом форуме я не нашел данной опции. Здесь темы закрывает модератор? Ну не нравится мне, когда вопрос решен, а тема еще открыта... Подскажите как закрыть тему.
|
|
13.09.2006, 15:51 | #13 |
Axapta
|
Не стоит закрывать тему! Если у кого-нить потом возникнет вопрос подобный, то он сможет его задать в этой теме, а не создавать новую. ИМХО.
PS Тут принято кликать на зеленый квадратик, если Вам кто-то помог. Последний раз редактировалось oip; 13.09.2006 в 16:05. |
|
13.09.2006, 15:51 | #14 |
Участник
|
Написать просто можно - тема закрыта.
Отписаться от подписки на нее, чтобы не получать уведомления в дальнейшем. И поблагодарить участников + оценить саму тему |
|
13.09.2006, 15:53 | #15 |
Moderator
|
Цитата:
Включайте там в экселе автофильтр и смотрите поля любой таблицы. Можно даже с собой на дачу взять на ноутбуке и под коньячок, укрывшись пледом, неспешно изучать Или Вы просто в программировании этих вопросов хотите попрактиковаться? |
|
13.09.2006, 15:54 | #16 |
Участник
|
Да но тут еще один вопрос а что если пользователь ошибется в одном символе и такой таблици не окажется?
|
|
13.09.2006, 15:55 | #17 |
Участник
|
тогда метод tablename2id вернет 0 - сделайте проверку на это и все.
|
|
13.09.2006, 15:57 | #18 |
Axapta
|
X++: static void JOB6666() { SysDictTable dictTable; SysDictField dictField; int i; ; dictTable = new SysDictTable(tableName2Id('CustTable1')); if (dictTable) { for (i = 1; i <= dictTable.fieldCnt(); i++) { dictField = dictTable.fieldObject(dictTable.fieldCnt2Id(i)); if (!dictField.isSystem()) info (dictField.name()); } } else { error ('Такой таблицы нет!'); } } |
|
13.09.2006, 16:00 | #19 |
Участник
|
GUSTAV я помню, что вы такое уже писали, но там перебор таблиц шел по ID. Да и к тому же мне данный вариант был неудобен.
|
|
13.09.2006, 16:17 | #20 |
Moderator
|
Цитата:
На самом деле изучите в AOT раздел System Documentation \ Functions. Сразу будет легче. К сожалению, функции Аксапты называются часто весьма заковыристо, поэтому этот словарь надо просто через себя пропустить. Этот узел можно экспортировать как обычный проект. Получившийся файл Functions.xpo можно переименовать в Functions.htm и распечатать (там страниц 70 получается, с большими промежутками, т.е. значимого текста существенно меньше). Я в свое время так и читал их на даче под коньячок... |
|