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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.03.2010, 13:46   #1  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
? Настройка DS вызываемой формы.
Возможно это простой вопрос, но.. В вызываемой форме(ФОРМА2) в качестве первой и единственной таблицы в DS указана ВРЕМЕННАЯ таблица. Эта форма вызывается из другой формы(ФОРМА1), в которой эта временная таблица формируется, редактируется, а потом вызывается форма2. Вызов идет программно с передачей args.record = записи сформированной временной таблицы. Как заставить форму2 работать(редактирование полей Grid или в TabPage) с таблицей , сформированной в форме1 ?
Старый 01.03.2010, 14:04   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
после super() в TmpTable_ds.init() вставьте строчку:
TmpTable.setTmpData(_tmpTable);
где _tmpTable - курсор, пришедший через element.args().record()
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: pwp (1).
Старый 01.03.2010, 14:18   #3  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
после super() в TmpTable_ds.init() вставьте строчку:
TmpTable.setTmpData(_tmpTable);
где _tmpTable - курсор, пришедший через element.args().record()
Спасибо, все работает!!
Старый 01.03.2010, 14:20   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Еще момент - обе ваши таблицы должны жить на одной стороне (либо на клиенте, либо на сервере)

Для формы временная таблица создается на клиенте, по-этому и таблицу в классе надо формировать на клиенте
__________________
Axapta v.3.0 sp5 kr2
Старый 01.03.2010, 14:54   #5  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
На этом же принципе работает Обозреватель временных таблиц
__________________
Возможно сделать все. Вопрос времени
Старый 02.03.2010, 11:00   #6  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
после super() в TmpTable_ds.init() вставьте строчку:
TmpTable.setTmpData(_tmpTable);
где _tmpTable - курсор, пришедший через element.args().record()
Хотел немного расширить тему. Да - это работает, как я и говорил раньше. Но.. все изменения, сделанные на форме 2 с TmpTable вообще не отражаются в _tmpTable. В этой таблице всего одна строка (для определенности). Пришлось в методе close ФОРМЫ2 поставить :
// rForm описан в форме2 так же как и _tmpTable
rForm = PSNormsParam_tmpF_DS.cursor(); // курсор с формы2
_tmpTable.data(rForm); // копирование
_tmpTable.update();
Как это объяснить с точки зрения теории ? Вроде после TmpTable.setTmpData(_tmpTable); работа в ФОРМА2 должна была идти с буфером, полученным из формы 1 ?
Старый 02.03.2010, 11:26   #7  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от pwp Посмотреть сообщение
Как это объяснить с точки зрения теории ?
Одно из предположений - что это все-таки РАЗНЫЕ буфера.
К примеру - мы знаем - что если изменить поле постоянной таблицы в коде, то курсор на датасорсе придется перечитывать (если конечно мы меняем не сам курсор) путем вызова методов executeQuery/research/reread. Это и понятно - таблица на сервере, а форма на клиенте.
Но если в обратную сторону для постоянных таблиц буфер датасорса обновляет постоянную таблицу (т.к. у нее нет своего буфера), то тут обновления не происходит.

Впрочем - это лишь попытка предположить...
__________________
Возможно сделать все. Вопрос времени
Старый 02.03.2010, 11:51   #8  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Цитата:
rForm = PSNormsParam_tmpF_DS.cursor(); // курсор с формы2
_tmpTable.data(rForm); // копирование
_tmpTable.update();
а просто
select _tmpTable не помогает?
Старый 02.03.2010, 11:52   #9  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Одно из предположений - что это все-таки РАЗНЫЕ буфера.......
Впрочем - это лишь попытка предположить...
Там еще интересней. Пока я не включил отражение изменений на буфер _tmpTable с формы1(вызывающей) я их там и не видел. Но при входе на форму2 второй раз, все изменения сделанные там при первом входе сохранялись. Т.е. _tmpTable не изменяется а буфер TMPTable в форме2 сохраняет все изменения от вызова к вызову...при работе с формой1.
Старый 02.03.2010, 12:07   #10  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Попробуй сделать в главной форме метод, который возвращал бы табличную переменную. Т.е. взять временную таблицу не из объекта args(), а напрямую из родительской формы

X++:
_
// Метод главной формы
TmpTable getTmpTable()
{
    return tmpTable;
}

// init подчиненной формы
public void init()
{
    Object              callerForm;

    super();

    callerForm          = element.args().caller();
    TmpTable.setTmpData(callerForm.getTmpTable());
}
Старый 02.03.2010, 12:39   #11  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Попробуй сделать в главной форме метод, который возвращал бы табличную переменную. Т.е. взять временную таблицу не из объекта args(), а напрямую из родительской формы
....................................
Ок, попробую, отпишу...
Цитата:
Сообщение от Wamr
а просто select _tmpTable не помогает?
Что то я не понял . Вроде речь идет о переносе изменений из одного буфера в другой.
Старый 02.03.2010, 13:22   #12  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
xRecord.setTmpData
Run on: Server
Description
Sets the buffer it is performed on to use the same physical dataset as the buffer passed as parameter. This method is only applicable on a temporary table buffer using a buffer on a temporary table as parameter. The normal behaviour for temporary tables is that instances of the same table are isolated from each other. This method allows several buffer instances to operate on the same temporary data.
Старый 02.03.2010, 13:31   #13  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от pwp Посмотреть сообщение
Но.. все изменения, сделанные на форме 2 с TmpTable вообще не отражаются в _tmpTable.
Вы точно уверены, что проблема в передаче буфера, а не в прорисовке изменений? Я попытался воспроизвести ваши действия. Всё передаётся. попробуйте для проверки програмно почитать курсор и вывести прочитанные данные в инфолог.
Старый 02.03.2010, 14:31   #14  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Вы точно уверены, что проблема в передаче буфера, а не в прорисовке изменений? Я попытался воспроизвести ваши действия. Всё передаётся. попробуйте для проверки програмно почитать курсор и вывести прочитанные данные в инфолог.
Точно. Выдавал только через Infolog, проверял и на форме2 в методе close и потом по возврату на форме1. Данные в оригинале не изменяются.
Старый 02.03.2010, 15:45   #15  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Прикалываю проект. Вроде бы всё работает. Смотрите разбирайтесь. Может я вас не правильно понял
Вложения
Тип файла: xpo SharedProject_Project_20100302.xpo (6.2 Кб, 250 просмотров)
Старый 02.03.2010, 16:38   #16  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Прикалываю проект. Вроде бы всё работает. Смотрите разбирайтесь. Может я вас не правильно понял
Ваш проект работает. Проблема моя была похоже в том что я не перечитывал запись после возврата из ФОРМА2 (на что вроде и указывал ранее WARM). Запись у меня в таблице одна, вот я ее и не перечитывал, думая что изменения ее будут видны в буфере.(но похоже, если она tmp, то и нужно выдавать select) Это все попытки организовать независимую работу со списком параметров для нескольких клиентов.
При перечитывании(select) работают оба метода передачи и через record и через getTmpTable.Кстати метод передачи адреса таблицы из формы1 через getTmpTable не работает, если я вызываю форму2 не через menuItemButton c формы1, а через init,run,wait c параметром Record. Думаю что эту тему можно закрыть.
Теги
временная таблица

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Настройка формы decoder DAX: Программирование 1 11.02.2009 16:23
Обновление DS формы из дочерней формы breakpoint DAX: Программирование 3 24.12.2008 15:54
Настройка формы WMSJournalTable на чтение Saber DAX: Администрирование 0 27.06.2008 16:18
Соединение с двумя таблицами в DS формы Zepp DAX: Программирование 3 21.04.2006 15:16
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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