18.03.2011, 09:34 | #21 |
MCTS
|
А чем так не устраивает отдельный запрос, что ради этого стоит переписывать кучу форм? Ну да, должностные лица - не самое удачное решение, но вы уверены, что в итоге переписывания у вас получится решение, лучше существующего?
На OfficialsTrans_RU есть специальный метод nameChanged(), который подставляет должность. Если тормозит выборка по EmplTable, создайте индекс по полю Name. И не насилуйте ни себя, ни Аксапту. ПС: У нас в справочнике сотрудников около 20 тыс. записей, и работает практически мгновенно.
__________________
Dynamics AX Experience |
|
18.03.2011, 09:55 | #22 |
Участник
|
Вы, может, проблему не поняли? Без доработки - никак.
Если есть два сотрудника с одинаковым ФИО, то nameChanged() подставит должность первого попавшегося сотрудника, что неверно. Насчет переписывания - уверен. Стандартная функциональность - убогая. Как минимум, нужно добавлять разрез склада / сайта и ведение доверенностей на подпись. О чем, кстати, говорилось MS не раз, они даже обещали подумать про доверенности.
__________________
Ivanhoe as is.. |
|
18.03.2011, 10:39 | #23 |
MCTS
|
Цитата:
Тогда, пожалуй, соглашусь с вашим решением - отдельное поле в OfficialsTrans_RU. Поле вытащить на формы и обработать modified() - минимум модификаций. Цитата:
И вроде как в OfficialsTable_RU есть связь со складом.
__________________
Dynamics AX Experience |
|
18.03.2011, 10:52 | #24 |
Участник
|
В стандарте связь со складом только для складских документов. А зачастую и фактуры, и накладные подписываются на складе по доверенности - соответственно на разных складах это разные люди.
__________________
Ivanhoe as is.. |
|
18.03.2011, 14:22 | #25 |
Участник
|
извлечение через FormRun?
Цитата:
Сообщение от S.Kuskov
Скорее всего имелся в виду самый обычный lookup c гридом из нескольких полей. Если так то ответ нет, стандартно такое сделать не получиться. Стандартный механизм работы c lookup окнами не предаставляет доступ программисту к процессу получения значения из lookup формы. Можно запрограммировать передачу значения, но вот запрограммировать получение этого значения на основной форме не выйдет.
Если речь идет об обычном lookup - то получить значения курсора выбранной в lookup позиции в вызывающей форме в большинстве случаев все-же возможно, для этого нужно лишь получить экземпляр FormRun этой lookup формы, а дальше извлечь из него текущий курсор необходимого источника данных. Попробую схематично набросать то что имелось в виду: 1. В classDeclaration определяется переменная для сохранения дескриптора lookup формы: X++: public class FormRun extends ObjectRun { FormRun lookupFormRun ; } X++: public void performFormLookup(FormRun _form, FormControl _formControl) { super(_form, _formControl); lookupFormRun = _form ; } 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 |
Участник
|
Я, собственно, имел в виду, что механизм получения значения, зашит в недрах метода performFormLookup и к нему у программиста действительно нет доступа. Событие modified это последствие изменения значения, возникающее уже после того, как отработает механизм получения значения. В прочем как вы показали это не мешает в некоторых случаях реализовать задуманное. А можно ли назвать такой способ стандартным - это уже другой вопрос
|
|
24.04.2013, 13:15 | #27 |
Участник
|
Спасибо за предложенное работающее решение.
Возник такой вопрос: Метод performFormLookup() вызывается только если лукап перекрыт, тк это метод класса SysTableLookup. Если же лукап стандартный(автоматически созданный аксаптой по relation на таблице), можно ли как-то добраться до выбранной в нем записи? |
|
05.07.2013, 15:22 | #28 |
Участник
|
Важное замечание при перекрытии performFormLookup()
в лукапе необходимо его правильно вызвать: X++: public void lookup(FormControl _formControl, str _filterStr) { SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(EmplTable), _formControl); ; <...> this.performFormLookup(sysTableLookup.formRun(), _formControl); } |
|
|
За это сообщение автора поблагодарили: SuperStar88 (1). |