05.06.2008, 13:03 | #1 |
MCTS
|
Документооборот
Привет всем! Как сэмулировать документооборот? Есть форма в которой строки таблицы SalesLine. Нужно добавить кнопку на форму, по которой будут открываться документы (Форма DocuView), c привязанными к текущему SalesId. Пробовал программировать, запуская форму DocuView c аргументом в виде найденной по SalesId записи таблицы SalesTable - форма запускается, но строк в ней нет, хотя если запускать из формы SalesTable по этому SalesID, то прикрепленные документы есть. Может кто уже делал?
|
|
05.06.2008, 13:24 | #2 |
Участник
|
Вызовите на вызванной форме "Настройка" и посмотрите закладку запрос. Узел "range" одинаковый на вашей форме и на форме SalesTable ?
|
|
05.06.2008, 13:42 | #3 |
Участник
|
Вам нужно каким-нибудь образом заполнить переменные actualCompaniId, actualTableId и actualRecId в форме DocuView из вашего курсора SalesTable.
|
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
05.06.2008, 14:30 | #4 |
MCTS
|
Шикарно! Заработало. Огромное спасибо.
Запускаю форму теперь так: X++: Args args = new Args(); Object formRun; SalesTable salesTableLocal = SalesTable::find(SalesLine.SalesId); ; super(); args.name(formstr(DocuView)); args.caller(element); args.record(salesTableLocal); formRun = new FormRun(args); formRun.init(); formRun.setActualCompanyId('vrt'); formRun.setActualTableId(tablenum(SalesTable)); formRun.setActualRecId(salesTableLocal.RecId); formRun.run(); formRun.wait(); |
|
06.06.2008, 15:12 | #5 |
Участник
|
Вариант без модификации формы DocuView
Цитата:
X++: public Common docCursor() { ; salesTable.data( salesLine.salesTable().data() ) ; return salesTable ; } |
|
06.06.2008, 15:47 | #6 |
Участник
|
Цитата:
Сообщение от petergunn
Достаточно перектыть метод docCursor() на Вашей форме и возвращать курсор из нужного источника данных формы. Документообороту этого будет достаточно. Что-то в таком духе:
X++: public Common docCursor() { ; salesTable.data( salesLine.salesTable().data() ) ; return salesTable ; } |
|
06.06.2008, 16:15 | #7 |
MCTS
|
Проблема в том, что при вызове метода Run формы, вызываются метод reSearch класса Docu, в котором переменные actualCompaniId, actualTableId и actualRecId переписываются значениями из главного датасорса формы. Необходимо как-то выйти из метода, до того момента.
|
|
06.06.2008, 16:49 | #8 |
Участник
|
Цитата:
Для примера можно посмотреть формы InventTable, RouteInventProd - определены на sys слое (DAX 4.0) и docCursor()'ом 'ломают' стандартный документооборот. |
|
06.06.2008, 16:54 | #9 |
MCTS
|
Как вариант, при котором сохраняется стандартный функционал:
X++: Args args = new Args(); Object formRun; SalesTable salesTableLocal = SalesTable::find(salesLine.SalesId); ; args.name(formstr(DocuView)); args.caller(element); args.record(salesTableLocal); formRun = new SysSetupFormRun(args); formRun.init(); formRun.setCompanyId('vrt'); formRun.setTableId(tablenum(SalesTable)); formRun.setRecId(salesTableLocal.RecId); infolog.setLastActivatedForm(formRun); formRun.run(); formRun.wait(); Цитата:
сохранение штатного поведения документооборота обговорено в задаче?
Последний раз редактировалось Eldar9x; 06.06.2008 в 17:00. |
|
07.06.2008, 09:25 | #10 |
Участник
|
"...согласно здравому смыслу его надо сохранить"
Цитата:
Сообщение от Eldar9x
Как вариант, при котором сохраняется стандартный функционал:
X++: Args args = new Args(); Object formRun; SalesTable salesTableLocal = SalesTable::find(salesLine.SalesId); ; args.name(formstr(DocuView)); args.caller(element); args.record(salesTableLocal); formRun = new SysSetupFormRun(args); formRun.init(); formRun.setCompanyId('vrt'); formRun.setTableId(tablenum(SalesTable)); formRun.setRecId(salesTableLocal.RecId); infolog.setLastActivatedForm(formRun); formRun.run(); formRun.wait(); не обговорено, и именно поэтому согласно здравому смыслу его надо сохранить. Или сменить текущее положение курсора источника данных навигацией по гриду к примеру? |
|