01.03.2010, 13:46 | #1 |
Участник
|
Настройка DS вызываемой формы.
Возможно это простой вопрос, но.. В вызываемой форме(ФОРМА2) в качестве первой и единственной таблицы в DS указана ВРЕМЕННАЯ таблица. Эта форма вызывается из другой формы(ФОРМА1), в которой эта временная таблица формируется, редактируется, а потом вызывается форма2. Вызов идет программно с передачей args.record = записи сформированной временной таблицы. Как заставить форму2 работать(редактирование полей Grid или в TabPage) с таблицей , сформированной в форме1 ?
|
|
01.03.2010, 14:04 | #2 |
Administrator
|
после super() в TmpTable_ds.init() вставьте строчку:
TmpTable.setTmpData(_tmpTable); где _tmpTable - курсор, пришедший через element.args().record()
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: pwp (1). |
01.03.2010, 14:18 | #3 |
Участник
|
|
|
01.03.2010, 14:20 | #4 |
Участник
|
Еще момент - обе ваши таблицы должны жить на одной стороне (либо на клиенте, либо на сервере)
Для формы временная таблица создается на клиенте, по-этому и таблицу в классе надо формировать на клиенте
__________________
Axapta v.3.0 sp5 kr2 |
|
01.03.2010, 14:54 | #5 |
Administrator
|
На этом же принципе работает Обозреватель временных таблиц
__________________
Возможно сделать все. Вопрос времени |
|
02.03.2010, 11:00 | #6 |
Участник
|
Цитата:
// 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 |
Administrator
|
Одно из предположений - что это все-таки РАЗНЫЕ буфера.
К примеру - мы знаем - что если изменить поле постоянной таблицы в коде, то курсор на датасорсе придется перечитывать (если конечно мы меняем не сам курсор) путем вызова методов executeQuery/research/reread. Это и понятно - таблица на сервере, а форма на клиенте. Но если в обратную сторону для постоянных таблиц буфер датасорса обновляет постоянную таблицу (т.к. у нее нет своего буфера), то тут обновления не происходит. Впрочем - это лишь попытка предположить...
__________________
Возможно сделать все. Вопрос времени |
|
02.03.2010, 11:51 | #8 |
----------------
|
Цитата:
rForm = PSNormsParam_tmpF_DS.cursor(); // курсор с формы2
_tmpTable.data(rForm); // копирование _tmpTable.update(); select _tmpTable не помогает? |
|
02.03.2010, 11:52 | #9 |
Участник
|
Там еще интересней. Пока я не включил отражение изменений на буфер _tmpTable с формы1(вызывающей) я их там и не видел. Но при входе на форму2 второй раз, все изменения сделанные там при первом входе сохранялись. Т.е. _tmpTable не изменяется а буфер TMPTable в форме2 сохраняет все изменения от вызова к вызову...при работе с формой1.
|
|
02.03.2010, 12:07 | #10 |
Участник
|
Попробуй сделать в главной форме метод, который возвращал бы табличную переменную. Т.е. взять временную таблицу не из объекта 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 |
Участник
|
Цитата:
Цитата:
Сообщение от Wamr
а просто select _tmpTable не помогает?
|
|
02.03.2010, 13:22 | #12 |
----------------
|
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 |
Участник
|
Вы точно уверены, что проблема в передаче буфера, а не в прорисовке изменений? Я попытался воспроизвести ваши действия. Всё передаётся. попробуйте для проверки програмно почитать курсор и вывести прочитанные данные в инфолог.
|
|
02.03.2010, 14:31 | #14 |
Участник
|
Точно. Выдавал только через Infolog, проверял и на форме2 в методе close и потом по возврату на форме1. Данные в оригинале не изменяются.
|
|
02.03.2010, 15:45 | #15 |
Участник
|
Прикалываю проект. Вроде бы всё работает. Смотрите разбирайтесь. Может я вас не правильно понял
|
|
02.03.2010, 16:38 | #16 |
Участник
|
Цитата:
При перечитывании(select) работают оба метода передачи и через record и через getTmpTable.Кстати метод передачи адреса таблицы из формы1 через getTmpTable не работает, если я вызываю форму2 не через menuItemButton c формы1, а через init,run,wait c параметром Record. Думаю что эту тему можно закрыть. |
|