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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.03.2011, 09:34   #21  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
А чем так не устраивает отдельный запрос, что ради этого стоит переписывать кучу форм? Ну да, должностные лица - не самое удачное решение, но вы уверены, что в итоге переписывания у вас получится решение, лучше существующего?

На OfficialsTrans_RU есть специальный метод nameChanged(), который подставляет должность. Если тормозит выборка по EmplTable, создайте индекс по полю Name. И не насилуйте ни себя, ни Аксапту.

ПС: У нас в справочнике сотрудников около 20 тыс. записей, и работает практически мгновенно.
__________________
Dynamics AX Experience
Старый 18.03.2011, 09:55   #22  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Вы, может, проблему не поняли? Без доработки - никак.
Если есть два сотрудника с одинаковым ФИО, то nameChanged() подставит должность первого попавшегося сотрудника, что неверно.

Насчет переписывания - уверен. Стандартная функциональность - убогая. Как минимум, нужно добавлять разрез склада / сайта и ведение доверенностей на подпись. О чем, кстати, говорилось MS не раз, они даже обещали подумать про доверенности.
__________________
Ivanhoe as is..
Старый 18.03.2011, 10:39   #23  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Вы, может, проблему не поняли? Без доработки - никак.
Если есть два сотрудника с одинаковым ФИО, то nameChanged() подставит должность первого попавшегося сотрудника, что неверно.
Виноват, не заметил проблему в пылу дискуссии.
Тогда, пожалуй, соглашусь с вашим решением - отдельное поле в OfficialsTrans_RU. Поле вытащить на формы и обработать modified() - минимум модификаций.

Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Насчет переписывания - уверен. Стандартная функциональность - убогая. Как минимум, нужно добавлять разрез склада / сайта и ведение доверенностей на подпись. О чем, кстати, говорилось MS не раз, они даже обещали подумать про доверенности.
Ну кто бы спорил, что MS'у надо бы переписать это барахло. Мой ответ был касательно конкретного клиента, использующего Аксапту, у которого, как правило, и без переписывания должностных лиц проблем с Аксаптой хватает.

И вроде как в OfficialsTable_RU есть связь со складом.
__________________
Dynamics AX Experience
Старый 18.03.2011, 10:52   #24  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
В стандарте связь со складом только для складских документов. А зачастую и фактуры, и накладные подписываются на складе по доверенности - соответственно на разных складах это разные люди.
__________________
Ivanhoe as is..
Старый 18.03.2011, 14:22   #25  
in.dc is offline
in.dc
Участник
 
29 / 53 (2) ++++
Регистрация: 09.04.2009
? извлечение через FormRun?
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Скорее всего имелся в виду самый обычный lookup c гридом из нескольких полей. Если так то ответ нет, стандартно такое сделать не получиться. Стандартный механизм работы c lookup окнами не предаставляет доступ программисту к процессу получения значения из lookup формы. Можно запрограммировать передачу значения, но вот запрограммировать получение этого значения на основной форме не выйдет.
Позволю себе не согласиться с данным утверждением.
Если речь идет об обычном lookup - то получить значения курсора выбранной в lookup позиции в вызывающей форме в большинстве случаев все-же возможно, для этого нужно лишь получить экземпляр FormRun этой lookup формы, а дальше извлечь из него текущий курсор необходимого источника данных.

Попробую схематично набросать то что имелось в виду:
1. В classDeclaration определяется переменная для сохранения дескриптора lookup формы:
X++:
public class FormRun extends ObjectRun
{
    FormRun             lookupFormRun ;
}
2. Перекрывается метод performFormLookup нужного поля в котором сохраняем экземпляр вызываемой lookup' формы
X++:
public void performFormLookup(FormRun _form, FormControl _formControl)
{
    super(_form, _formControl);
    lookupFormRun = _form ;
}
3. в modified производится анализ:
X++:
    Common    lookupCursor ;
    ;
    ...
    super()   ;
    
    if( lookupFormRun &&
        lookupFormRun.closedOk() )
    {   // выбор из lookup формы
        lookupCursor = lookupFormRun .dataSource().cursor() ;
        ...
        // обработка данных извлеченного курсора
        ...
    }
    else { // 'ручной' ввод
    ...
    }
    ...
    lookupFormRun = null ;
__________________
Dynamics AX 4.0 SP2
За это сообщение автора поблагодарили: kitty (1), S.Kuskov (1), Player1 (2), Cardagant (1), SuperStar88 (1).
Старый 18.03.2011, 15:51   #26  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Я, собственно, имел в виду, что механизм получения значения, зашит в недрах метода performFormLookup и к нему у программиста действительно нет доступа. Событие modified это последствие изменения значения, возникающее уже после того, как отработает механизм получения значения. В прочем как вы показали это не мешает в некоторых случаях реализовать задуманное. А можно ли назвать такой способ стандартным - это уже другой вопрос
Старый 24.04.2013, 13:15   #27  
kitty is offline
kitty
Участник
 
367 / 26 (1) +++
Регистрация: 24.05.2005
Спасибо за предложенное работающее решение.
Возник такой вопрос:
Метод performFormLookup() вызывается только если лукап перекрыт, тк это метод класса SysTableLookup.

Если же лукап стандартный(автоматически созданный аксаптой по relation на таблице), можно ли как-то добраться до выбранной в нем записи?
Старый 05.07.2013, 15:22   #28  
anna413 is offline
anna413
Участник
 
1 / 11 (1) +
Регистрация: 05.07.2013
Важное замечание при перекрытии performFormLookup()

в лукапе необходимо его правильно вызвать:

X++:
public void lookup(FormControl _formControl, str _filterStr)
{
SysTableLookup          sysTableLookup = SysTableLookup::newParameters(tablenum(EmplTable), _formControl);
;

<...>

this.performFormLookup(sysTableLookup.formRun(), _formControl);
}
сама сегодня напоролась - еле додумалась(
За это сообщение автора поблагодарили: SuperStar88 (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
PatrickChua: Change the combobox options in RunbaseBatch class Blog bot DAX Blogs 0 04.05.2009 14:05
Самоблокировка ComboBox контролла Delfins DAX: Программирование 2 17.01.2008 00:17
PatrickChua: Change the combobox options in RunbaseBatch class Blog bot DAX Blogs 0 28.10.2006 18:14
Fred Shen: Change the combobox options in RunbaseBatch class Blog bot DAX Blogs 0 28.10.2006 16:40
ComboBox и Enum ArturK DAX: Программирование 1 01.03.2004 16:19
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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