18.08.2006, 06:06 | #1 |
Участник
|
Помогите разобраться с InventoryDimensions на форме
Вообщем на форме в гриде присутствует группа InventoryDimensions, куда входят ВСЕ складские аналитики (таблица InventDim), причем свойство AutoDataGroup=Yes, соответственно все внутренние контролы в группе не доступны для редактирования их свойств. Вопрос собственно в следующем:
где и как отслеживается какие поля(складские аналитики) выводить на форму (в гриде). Пример формы SalesTable (ее нижняя часть со строками), форма InventJournalMovement. Сюда же вопрос: на всех этих формах есть закладка Аналитика, где также есть эта группа полей, там отдельные поля (в зависимости от настроек номенклатуры ) доступны для заполнения, другие нет. Хотелось бы узнать также где и как это реализуется. P.S. можно конечно в свойстве AutoDataGroup поставить NO и тогда ручкамии удалить не нужные поля-аналитики, НО как то так не интересно. Хочется выяснить как это в оригинале реализовано. |
|
18.08.2006, 07:03 | #2 |
сибиряк
|
__________________
С уважением, Вячеслав. |
|
21.08.2006, 09:56 | #3 |
Участник
|
Цитата:
Сообщение от slava
Или я что то не догнал по этой статье?? поясните плиззз... Мне необходимо всего навсего каким то образом для всех в моей форме отобразить только нужные аналитики, остальные скрыть. |
|
21.08.2006, 10:14 | #4 |
program-ёр
|
Цитата:
Сообщение от sparur
А мне как то не улыбается для каждого юзера задавать эти отображения...
__________________
Становись лучше |
|
21.08.2006, 10:24 | #5 |
Участник
|
Цитата:
Сообщение от kvg6
Просто покажите пользователю как это делается и пусть задает сам. Ибо на всех не угодишь
|
|
21.08.2006, 10:34 | #6 |
NavAx
|
а разве в группах складской аналитики нельзя настроить возможность редактирования аналитики для форм?
|
|
21.08.2006, 10:44 | #7 |
Участник
|
А ваша форма работает в новом модуле? Или это расширение функциональности существующего?
Если новый, то сомотрите на таблице InventDimSetupGrid метод movement2FieldId() - в нем необходимо для вашего модуля вернуть номер поля в таблице InventDimSetupGrid. Если необходимо, то надо будет добавить это поле в таблицу по аналогии с существующими (не забудьте создать группу полей для него). Используется эта таблица в форме "Параметры" модулей, в закладке "Складская аналитика". Там, как-раз таки, проставляются параметры по-умолчанию для всех пользователей. Как сделать у себя - смотрите по аналогии с реализацией этой формы для модулей, например, InventParameters Если модуль существующий, то просто включите нужные вам аналитики в указанной форме
__________________
Axapta v.3.0 sp5 kr2 |
|
21.08.2006, 10:52 | #8 |
Участник
|
Цитата:
Сообщение от Roman777
а разве в группах складской аналитики нельзя настроить возможность редактирования аналитики для форм?
|
|
21.08.2006, 10:53 | #9 |
Участник
|
Цитата:
Сообщение от AndyD
А ваша форма работает в новом модуле? Или это расширение функциональности существующего?
Если новый, то сомотрите на таблице InventDimSetupGrid метод movement2FieldId() - в нем необходимо для вашего модуля вернуть номер поля в таблице InventDimSetupGrid. Если необходимо, то надо будет добавить это поле в таблицу по аналогии с существующими (не забудьте создать группу полей для него). Используется эта таблица в форме "Параметры" модулей, в закладке "Складская аналитика". Там, как-раз таки, проставляются параметры по-умолчанию для всех пользователей. Как сделать у себя - смотрите по аналогии с реализацией этой формы для модулей, например, InventParameters Если модуль существующий, то просто включите нужные вам аналитики в указанной форме модуль существующий, однако настройки в закладке "Складская аналитика" не действуют на мою форму |
|
21.08.2006, 11:02 | #10 |
NavAx
|
Ваша форма использеут наследник класса InventDimCtrl_Frm по стандартному механизму, описаному по ссылке выше?
Если да, то создайте в классе - наследнике метод, подобный такому: PHP код:
PHP код:
|
|
21.08.2006, 11:16 | #11 |
Участник
|
Цитата:
Сообщение от Roman777
Ваша форма использеут наследник класса InventDimCtrl_Frm по стандартному механизму, описаному по ссылке выше?
Если да, то создайте в классе - наследнике метод, подобный такому: PHP код:
PHP код:
да, пробую по стандартному механизму, однако не получается вызывать метод updateDesign в инете формы, так как описано в статье ругается при создании объекта могего класса наследника... т.к. при создании объекта передается только форма(element) а в методе new нужен еще и объект типа InventMovement... где его брать понять не могу... Последний раз редактировалось sparur; 21.08.2006 в 11:18. |
|
21.08.2006, 11:21 | #12 |
Участник
|
Ну если у вас складской журнал, то я бы советовал обратить внимание на существующие реализации.
Например, для формы InventJournalMovement (складские проводки) в методе Init() создается экземпляр класса InventJournalFormTrans_Movement, а дальше вызывается метод этого класса formInitPost() (точнее метод его предка InventJournalFormTrans). В этом методе идет вызов X++: this.updateDesign(InventDimFormDesignUpdate::Init);
__________________
Axapta v.3.0 sp5 kr2 |
|
21.08.2006, 11:29 | #13 |
Участник
|
Цитата:
Сообщение от AndyD
Ну если у вас складской журнал, то я бы советовал обратить внимание на существующие реализации.
Например, для формы InventJournalMovement (складские проводки) в методе Init() создается экземпляр класса InventJournalFormTrans_Movement, а дальше вызывается метод этого класса formInitPost() (точнее метод его предка InventJournalFormTrans). В этом методе идет вызов X++: this.updateDesign(InventDimFormDesignUpdate::Init); |
|
21.08.2006, 11:32 | #14 |
Участник
|
Цитата:
Сообщение от sparur
да, пробую по стандартному механизму, однако не получается вызывать метод updateDesign в инете формы, так как описано в статье ругается при создании объекта могего класса наследника... т.к. при создании объекта передается только форма(element) а в методе new нужен еще и объект типа InventMovement... где его брать понять не могу...
X++: InventMovement _movement = InventMovement::Construct(inventJournalTrans); InventTable inventTable; ; switch ( mode ) { case InventDimFormDesignUpdate::Init : if ( !inventDimFormSetup ) inventDimFormSetup = new InventDimCtrl_Frm_*( element, _movement); inventDimFormSetup.parmSkipOnHandLookUp( true ); // do continue Кстати, если наследоваться от InventDimCtrl_Frm, то надо так же переопределять метод mustShowGridField(), как, например, в классе InventDimCtrl_Frm_Mov, иначе, просто, не будет привязки к таблице настроек, а все будет зашито в коде
__________________
Axapta v.3.0 sp5 kr2 |
|
21.08.2006, 11:48 | #15 |
Участник
|
Цитата:
Сообщение от AndyD
X++: InventMovement _movement = InventMovement::Construct(inventJournalTrans); InventTable inventTable; ; switch ( mode ) { case InventDimFormDesignUpdate::Init : if ( !inventDimFormSetup ) inventDimFormSetup = new InventDimCtrl_Frm_*( element, _movement); inventDimFormSetup.parmSkipOnHandLookUp( true ); // do continue Кстати, если наследоваться от InventDimCtrl_Frm, то надо так же переопределять метод mustShowGridField(), как, например, в классе InventDimCtrl_Frm_Mov, иначе, просто, не будет привязки к таблице настроек, а все будет зашито в коде case InventDimFormDesignUpdate::Init : if ( !inventDimFormSetup ) inventDimFormSetup = new InventDimCtrl_Frm_Mov_Copy(element,movement); inventDimFormSetup.parmSkipOnHandLookUp( true ); // do continue case InventDimFormDesignUpdate::Active : inventTable = InventTable::find(inventJournalTrans.itemId); inventDimFormSetup.formActiveSetup(inventTable.dimGroupId); inventDimFormSetup.formSetControls(true); break; то вылезает другая проблема, а именно мы вызываем updatedesign() в методе Init нашей формы, в этот момент к сожалению еще не известна номенклатура и объект InventTable не определен (inventTable = InventTable::find(inventJournalTrans.itemId)) в итоге мы имеем ошибку (или она имеет нас ) |
|
21.08.2006, 12:00 | #16 |
Участник
|
А почему там ошибка возникает? Ну передается пустой dimGroupId, ну и что? Может быть вам надо добавать
X++: inventDimFormSetup.formActiveSetup(inventTable.dimGroupId, _movement); И в InventDimFormDesignUpdate::FieldChange тоже
__________________
Axapta v.3.0 sp5 kr2 |
|
21.08.2006, 12:05 | #17 |
Участник
|
Цитата:
Сообщение от AndyD
Может быть вам надо добавать
[xpp] inventDimFormSetup.formActiveSetup(inventTable.dimGroupId, _movement); |
|
21.08.2006, 12:16 | #18 |
Участник
|
Хотелось бы акцентировать внимание вот на чем.
По-моему, для складских журналов работу с аналитиками стоит все-таки реализовывать не на форме, а с использованием класса InventJournalFormTrans_Movement, вызывая метод formInitPost() этого класса в Init() формы. Собственно остальная работа уже реализована в этом классе
__________________
Axapta v.3.0 sp5 kr2 |
|
21.08.2006, 12:32 | #19 |
Участник
|
Цитата:
Сообщение от AndyD
Хотелось бы акцентировать внимание вот на чем.
По-моему, для складских журналов работу с аналитиками стоит все-таки реализовывать не на форме, а с использованием класса InventJournalFormTrans_Movement, вызывая метод formInitPost() этого класса в Init() формы. Собственно остальная работа уже реализована в этом классе void initJournalFormTable() { Object callerForm; ; callerForm = formRun.args().caller(); journalFormTable = callerForm.journalForm(); journalFormTable.formRunLines(formRun); } в моем же случае вызывающий объект - это форма строк и у нее нет методов, которые используются при создании объекта класса InventJournalFormTrans_Movement. в частности ругается на: journalFormTable.formRunLines(formRun); вот поэтому и пришлось немного отступить от стандартов... |
|