18.03.2002, 10:25 | #1 |
Administrator
|
Переход к основной таблице
Кто-нибудь имеет хоть какое-нибудь представление, каким образом в Axapta реализован механизм перехода к основной талице?
Интересно вот что: как в форме узнать, вызвана она из меню или в качестве основной таблицы?
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
18.03.2002, 11:07 | #2 |
Участник
|
Привет!
Есть такой объект - называется он args(). Вот он многое умеет - в том числе показывает, кто есть caller() данного элемента. Т.е. запись element.args().caller() вернет объект, вызвавший данный (или NULL)
__________________
С уважением, Андрей Беседин |
|
18.03.2002, 11:24 | #3 |
Administrator
|
Спасибо, Andrew.
Я пошел немного дальше и нашел такую вот штуку: <ol><li>Во-первых, у args есть еще метод record(). Он имеет тип Common. Если форма вызвана просто так, то RecId у этого Common равен нулю. Иначе он равен recId записи в той таблице, из которой была вызвана основная. Можно, кстати, и tableid узнать: метод dataset() у того же args.</li> <li>Во-вторых, если форма вызывается как форма с основной таблицей, то у основного FormDataSource (где указаны критерии отбора основного dataSource из набора, я не знаю) формируется query (покопаться в нем и разобраться, как он устроен, я не успел). Если свои query прицеплять к этому, то все вроде бы работает нормально.</li></ol>
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
18.03.2002, 13:24 | #4 |
Участник
|
Все правильно.
Есть небольшие уточнения. 1. TableID можно проверить у любого Record. Даже у Common 2. Query формируется автоматически только в том случае, если у датасорса формы это разрешено в свойствах. |
|
20.03.2002, 15:27 | #5 |
Участник
|
Переход к основной таблице
чтобы создать на форме новое поле с возможностью выбора данных из другой таблицы и возможностью перехода к основной таблице.
Пусть для примера необходимо добавить в форму номенклатурных единиц поле для выбора категории номенклатуры (список категорий будем заполнять отдельно в форме). 1. Создать новую таблицу и поля в ней. В таблице нужно иметь как минимум два поля: код записи (поле String), и ее название (тоже String). Назовем их для примера CategoryCode и CategoryName. Для CategoryName указать свойство ExtendedDataType = Name. 2. Создать новый EDT (Extended Data Type), например, ItemCategory. Создать для него Relation, в свойствах которого указать Table = созданная таблица, RelatedField = поле в таблице, отвечающее за код записи (в нашем примере CategoryCode). 3. Создать форму, для нее создать Data Source, указав для него свойство Table = созданная таблица. В дизайне формы создать Grid, на ней два поля StringEdit. У одного поля указать свойство DataSourse = Category, DataField = CategoryCode, для другого то же самое, но DataField = CategoryName. 4. В таблице InventTable создать новое поле String, указав для него свойство ExtendedDataType = созданный расширенный тип данных (у нас ItemCategory). 5. В форме InventTable создать StringEdit, задать свойства DataSource = InventTable, DataField = созданное в InventTable поле. 5. Чтобы иметь возможность перейти из поля к основной таблице, необходимо сделать следующее: - Создать MenuItem с типом Display и ссылкой на ту форму, которую необходимо вызывать; - Указать созданный MenuItem в свойстве FormRef для таблицы-источника вызываемой формы. Каждый из элементов сразу после создания нужно сохранить. Если возникнет необходимость в правке ранее созданных Вами объектов, все объекты, созданные после этого нужно будет перекомпилировать. Этого достаточно, чтобы при переходе к основной таблице из созданного поля открывалась исходная форма с одной записью - в соответствии с введенным в поле значением. |
|
|
За это сообщение автора поблагодарили: Poleax (1). |