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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.06.2008, 13:03   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Документооборот
Привет всем! Как сэмулировать документооборот? Есть форма в которой строки таблицы SalesLine. Нужно добавить кнопку на форму, по которой будут открываться документы (Форма DocuView), c привязанными к текущему SalesId. Пробовал программировать, запуская форму DocuView c аргументом в виде найденной по SalesId записи таблицы SalesTable - форма запускается, но строк в ней нет, хотя если запускать из формы SalesTable по этому SalesID, то прикрепленные документы есть. Может кто уже делал?
Старый 05.06.2008, 13:24   #2  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Вызовите на вызванной форме "Настройка" и посмотрите закладку запрос. Узел "range" одинаковый на вашей форме и на форме SalesTable ?
Старый 05.06.2008, 13:42   #3  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Вам нужно каким-нибудь образом заполнить переменные actualCompaniId, actualTableId и actualRecId в форме DocuView из вашего курсора SalesTable.
За это сообщение автора поблагодарили: Eldar9x (1).
Старый 05.06.2008, 14:30   #4  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Шикарно! Заработало. Огромное спасибо.
Запускаю форму теперь так:
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  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
Вариант без модификации формы DocuView
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Вам нужно каким-нибудь образом заполнить переменные actualCompaniId, actualTableId и actualRecId в форме DocuView из вашего курсора SalesTable.
Достаточно перектыть метод docCursor() на Вашей форме и возвращать курсор из нужного источника данных формы. Документообороту этого будет достаточно. Что-то в таком духе:

X++:
public Common docCursor()
{
    ;
    salesTable.data( salesLine.salesTable().data() ) ;
    return salesTable ;
}
Старый 06.06.2008, 15:47   #6  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от petergunn Посмотреть сообщение
Достаточно перектыть метод docCursor() на Вашей форме и возвращать курсор из нужного источника данных формы. Документообороту этого будет достаточно. Что-то в таком духе:

X++:
public Common docCursor()
{
    ;
    salesTable.data( salesLine.salesTable().data() ) ;
    return salesTable ;
}
Тогда вы сломаете стандартный документооборот для этого источника данных.
Старый 06.06.2008, 16:15   #7  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Проблема в том, что при вызове метода Run формы, вызываются метод reSearch класса Docu, в котором переменные actualCompaniId, actualTableId и actualRecId переписываются значениями из главного датасорса формы. Необходимо как-то выйти из метода, до того момента.
Старый 06.06.2008, 16:49   #8  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Тогда вы сломаете стандартный документооборот для этого источника данных.
Зависит от формулировки задачи которая была изначально поставлена (сохранение штатного поведения документооборота обговорено в задаче?).

Для примера можно посмотреть формы InventTable, RouteInventProd - определены на sys слое (DAX 4.0) и docCursor()'ом 'ломают' стандартный документооборот.
Старый 06.06.2008, 16:54   #9  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Как вариант, при котором сохраняется стандартный функционал:
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  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
"...согласно здравому смыслу его надо сохранить"
Цитата:
Сообщение от 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();


не обговорено, и именно поэтому согласно здравому смыслу его надо сохранить.
Что произойдет если открыть форму документооборота описанным способом и не закрывая ее перейти в форму из которой она вызвана?
Или сменить текущее положение курсора источника данных навигацией по гриду к примеру?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Поменяли сервер, перестал работать документооборот. wef2000 DAX: Функционал 3 18.09.2008 15:14
Word в PDF из Х++ через документооборот custtable DAX: Программирование 4 22.07.2008 18:37
Про документооборот andreynikolai DAX: Программирование 30 06.10.2006 09:34
Документооборот. Создание файла по шаблону. NJD DAX: Программирование 4 11.05.2005 10:52
Кто нибудь пытался релизовать ДОКУМЕНТООБОРОТ в Аксапта? edd DAX: Функционал 10 21.07.2003 15:48

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

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

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