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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.08.2006, 06:06   #1  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Помогите разобраться с InventoryDimensions на форме
Вообщем на форме в гриде присутствует группа InventoryDimensions, куда входят ВСЕ складские аналитики (таблица InventDim), причем свойство AutoDataGroup=Yes, соответственно все внутренние контролы в группе не доступны для редактирования их свойств. Вопрос собственно в следующем:
где и как отслеживается какие поля(складские аналитики) выводить на форму (в гриде). Пример формы SalesTable (ее нижняя часть со строками), форма InventJournalMovement.
Сюда же вопрос: на всех этих формах есть закладка Аналитика, где также есть эта группа полей, там отдельные поля (в зависимости от настроек номенклатуры ) доступны для заполнения, другие нет. Хотелось бы узнать также где и как это реализуется.

P.S. можно конечно в свойстве AutoDataGroup поставить NO и тогда ручкамии удалить не нужные поля-аналитики, НО как то так не интересно. Хочется выяснить как это в оригинале реализовано.
Старый 18.08.2006, 07:03   #2  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
http://axapta.mazzy.ru/lib/inventdim/
__________________
С уважением, Вячеслав.
Старый 21.08.2006, 09:56   #3  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от slava
это все прочитано... Однако там описан стандартный механизм ПОЛЬЗОВАТЕЛЬСКИХ настроек, т.е. та форма (Отображение аналитик) скрывает/отображает аналитики для конкретного юзера!!! а не для всех. А мне как то не улыбается для каждого юзера задавать эти отображения...

Или я что то не догнал по этой статье?? поясните плиззз... Мне необходимо всего навсего каким то образом для всех в моей форме отобразить только нужные аналитики, остальные скрыть.
Старый 21.08.2006, 10:14   #4  
kvg6 is offline
kvg6
program-ёр
Аватар для kvg6
1C
 
160 / 81 (3) ++++
Регистрация: 27.09.2005
Адрес: Moscow forever
Цитата:
Сообщение от sparur
А мне как то не улыбается для каждого юзера задавать эти отображения...
Просто покажите пользователю как это делается и пусть задает сам. Ибо на всех не угодишь
__________________
Становись лучше
Старый 21.08.2006, 10:24   #5  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от kvg6
Просто покажите пользователю как это делается и пусть задает сам. Ибо на всех не угодишь
блин, зная наших пользователей, то лучше бы как нибудь жестко ограничить интерфейс без вмешательства юзера... иначе они там отобразят и то что надо и то что не надо и потом будешь до каждого бегать пояснять че почем... Что неужели все формы реализованы именно через этот механизм?? не может быть... Ну или хотя бы можно как нибудь поумолчанию задать в этом механизме нужные аналитики для отображения, чтоб для каждого нового юзверя не выстраивать их...
Старый 21.08.2006, 10:34   #6  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
а разве в группах складской аналитики нельзя настроить возможность редактирования аналитики для форм?
Старый 21.08.2006, 10:44   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А ваша форма работает в новом модуле? Или это расширение функциональности существующего?

Если новый, то сомотрите на таблице InventDimSetupGrid метод movement2FieldId() - в нем необходимо для вашего модуля вернуть номер поля в таблице InventDimSetupGrid. Если необходимо, то надо будет добавить это поле в таблицу по аналогии с существующими (не забудьте создать группу полей для него). Используется эта таблица в форме "Параметры" модулей, в закладке "Складская аналитика". Там, как-раз таки, проставляются параметры по-умолчанию для всех пользователей. Как сделать у себя - смотрите по аналогии с реализацией этой формы для модулей, например, InventParameters

Если модуль существующий, то просто включите нужные вам аналитики в указанной форме
__________________
Axapta v.3.0 sp5 kr2
Старый 21.08.2006, 10:52   #8  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Roman777
а разве в группах складской аналитики нельзя настроить возможность редактирования аналитики для форм?
настраивается то оно может и настраивается, однако для моей формы (форма вызывается из формы строк журнала Проводка) почему-то настройки из Параметров складского модуля игнорируются и отображаются ВСЕ аналитики склада...
Старый 21.08.2006, 10:53   #9  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от AndyD
А ваша форма работает в новом модуле? Или это расширение функциональности существующего?

Если новый, то сомотрите на таблице InventDimSetupGrid метод movement2FieldId() - в нем необходимо для вашего модуля вернуть номер поля в таблице InventDimSetupGrid. Если необходимо, то надо будет добавить это поле в таблицу по аналогии с существующими (не забудьте создать группу полей для него). Используется эта таблица в форме "Параметры" модулей, в закладке "Складская аналитика". Там, как-раз таки, проставляются параметры по-умолчанию для всех пользователей. Как сделать у себя - смотрите по аналогии с реализацией этой формы для модулей, например, InventParameters

Если модуль существующий, то просто включите нужные вам аналитики в указанной форме

модуль существующий, однако настройки в закладке "Складская аналитика" не действуют на мою форму
Старый 21.08.2006, 11:02   #10  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Ваша форма использеут наследник класса InventDimCtrl_Frm по стандартному механизму, описаному по ссылке выше?
Если да, то создайте в классе - наследнике метод, подобный такому:
PHP код:
void initFromCaller()
{
    
// видны на гриде
    
dimParmVisibleGrid.itemIdFlag               true;
    
dimParmVisibleGrid.InventSizeIdFlag         true;
    
dimParmVisibleGrid.InventLocationIdFlag     true;
    
dimParmVisibleGrid.InventGTDIdFlag_RU       true;

    
// не доступны для редактирования
    
dimParmLockedRightClick.ItemIdFlag          true;
    
dimParmLockedRightClick.InventSizeIdFlag    true;
    
dimParmLockedRightClick.InventLocationIdFlagtrue;
    
dimParmLockedRightClick.InventGTDIdFlag_RU  true;

    
dimParmEnabled.InventLocationIdFlag true;


Вызовите его в Init() вашей формы:
PHP код:
element.inventDimSetupObject().initFromCaller(); 
Старый 21.08.2006, 11:16   #11  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Roman777
Ваша форма использеут наследник класса InventDimCtrl_Frm по стандартному механизму, описаному по ссылке выше?
Если да, то создайте в классе - наследнике метод, подобный такому:
PHP код:
void initFromCaller()
{
    
// видны на гриде
    
dimParmVisibleGrid.itemIdFlag               true;
    
dimParmVisibleGrid.InventSizeIdFlag         true;
    
dimParmVisibleGrid.InventLocationIdFlag     true;
    
dimParmVisibleGrid.InventGTDIdFlag_RU       true;

    
// не доступны для редактирования
    
dimParmLockedRightClick.ItemIdFlag          true;
    
dimParmLockedRightClick.InventSizeIdFlag    true;
    
dimParmLockedRightClick.InventLocationIdFlagtrue;
    
dimParmLockedRightClick.InventGTDIdFlag_RU  true;

    
dimParmEnabled.InventLocationIdFlag true;


Вызовите его в Init() вашей формы:
PHP код:
element.inventDimSetupObject().initFromCaller(); 

да, пробую по стандартному механизму, однако не получается вызывать метод updateDesign в инете формы, так как описано в статье ругается при создании объекта могего класса наследника... т.к. при создании объекта передается только форма(element) а в методе new нужен еще и объект типа InventMovement... где его брать понять не могу...

Последний раз редактировалось sparur; 21.08.2006 в 11:18.
Старый 21.08.2006, 11:21   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Ну если у вас складской журнал, то я бы советовал обратить внимание на существующие реализации.

Например, для формы InventJournalMovement (складские проводки) в методе Init() создается экземпляр класса InventJournalFormTrans_Movement, а дальше вызывается метод этого класса formInitPost() (точнее метод его предка InventJournalFormTrans). В этом методе идет вызов
X++:
this.updateDesign(InventDimFormDesignUpdate::Init);
Это метод реализован в классе InventJournalFormTrans_Movement. В нем создается экземпляр класса InventDimCtrl_Frm_Mov, который и управляет показом полей (метод mustShowGridField() этого класса).
__________________
Axapta v.3.0 sp5 kr2
Старый 21.08.2006, 11:29   #13  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от AndyD
Ну если у вас складской журнал, то я бы советовал обратить внимание на существующие реализации.

Например, для формы InventJournalMovement (складские проводки) в методе Init() создается экземпляр класса InventJournalFormTrans_Movement, а дальше вызывается метод этого класса formInitPost() (точнее метод его предка InventJournalFormTrans). В этом методе идет вызов
X++:
this.updateDesign(InventDimFormDesignUpdate::Init);
Это метод реализован в классе InventJournalFormTrans_Movement. В нем создается экземпляр класса InventDimCtrl_Frm_Mov, который и управляет показом полей (метод mustShowGridField() этого класса).
дело в том, что у меня не совсем форма складских проводок. Моя форма вызывается из формы проводок, поэтому не так просто создать экземпляр класса InventJournalFormTrans_Movement (вызывающий объект у формы другой), надо будет либо переопределять некоторые методы класса, либо исчо как то извращаться, либо вообще создавать своего наследника от класса InventJournalFormTrans
Старый 21.08.2006, 11:32   #14  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от 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  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от 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, иначе, просто, не будет привязки к таблице настроек, а все будет зашито в коде
ага, с этим уже разобрался... теперь другая проблема, так как в стандартном механизме стоит так что сразу после кейса Init выполняется кейс Active ( отсутствует) break,
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  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А почему там ошибка возникает? Ну передается пустой dimGroupId, ну и что? Может быть вам надо добавать
X++:
inventDimFormSetup.formActiveSetup(inventTable.dimGroupId, _movement);
?
И в InventDimFormDesignUpdate::FieldChange тоже
__________________
Axapta v.3.0 sp5 kr2
Старый 21.08.2006, 12:05   #17  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от AndyD
Может быть вам надо добавать
[xpp]
inventDimFormSetup.formActiveSetup(inventTable.dimGroupId, _movement);
ага помогло , сенкс... ща будем разбираться что там получилось с галками... а то чего то активно, а чего то нет
Старый 21.08.2006, 12:16   #18  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Хотелось бы акцентировать внимание вот на чем.

По-моему, для складских журналов работу с аналитиками стоит все-таки реализовывать не на форме, а с использованием класса InventJournalFormTrans_Movement, вызывая метод formInitPost() этого класса в Init() формы. Собственно остальная работа уже реализована в этом классе
__________________
Axapta v.3.0 sp5 kr2
Старый 21.08.2006, 12:32   #19  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от AndyD
Хотелось бы акцентировать внимание вот на чем.

По-моему, для складских журналов работу с аналитиками стоит все-таки реализовывать не на форме, а с использованием класса InventJournalFormTrans_Movement, вызывая метод formInitPost() этого класса в Init() формы. Собственно остальная работа уже реализована в этом классе
Дело в том что моя форма - это не есть складской журнал. Она создана для удобства, а именно вызывается из строк журнала проводка для возможности полного (или частичного) копирования строк уже разнесенных ранее журналов, поэтому класс InventJournalFormTrans_Movement не подходит (или по меньшей мере там надо многое корректировать), т.к. он завязан на вызывающий объект InventJournalTable,

void initJournalFormTable()
{
Object callerForm;
;
callerForm = formRun.args().caller();
journalFormTable = callerForm.journalForm();
journalFormTable.formRunLines(formRun);
}

в моем же случае вызывающий объект - это форма строк и у нее нет методов, которые используются при создании объекта класса InventJournalFormTrans_Movement.
в частности ругается на:

journalFormTable.formRunLines(formRun);

вот поэтому и пришлось немного отступить от стандартов...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
вопрос про дату в range. помогите разобраться. Hans DAX: Программирование 5 24.04.2007 17:52
Помогите плиз отсортировать данные в печатной форме накладной lev DAX: Программирование 8 16.06.2006 18:30
Помогите разобраться с edit-методом mashaSi DAX: Программирование 4 08.06.2006 07:19
Помогите разобраться с полем OprNum в BOM! ravil DAX: Программирование 4 29.07.2003 11:15
Журналы, пакеты... Помогите разобраться! dmit2604 DAX: Функционал 1 07.05.2002 21:53

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

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

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