09.02.2007, 13:21 | #1 |
Участник
|
Добавление поля в диалог разноски складского журнала.
Axapta 3.0 SP4, 3-х уровневая, SQL.
Задача: добавить поле в диалог, вызываемый при нажатии на кнопку "Разноска" в журналах переноса. Сделано: попыталась сделать по аналогии с флажком "Строки с ошибками в новый журнал" (переменная transferErrors класса JournalCheckPost). Изменяла класс JournalCheckPost - в ClassDeclaration объявление переменных, в dialog добавлено поле, в getFromDialog переменной присваиваю значение поля. Значение пременной мне нужно где-нибудь в run, runInit. Но в этих методах значение - 0. Хотя в getFromDialog переменной присваивается правильное значение. Даже в getFromDialog наследников значение правильное. Например, в getFromDialog класса InventJournalCheckPost_Movement. Тем не менее, значение той же переменной transferErrors используется в методах runCheck() и методе createJournalTransfer() класса JournalCheckPost. Кроме того, в процессе возник вопрос: где используется метод \Classes\JournalCheckPost\parmTransferErrors? Инкрементную компиляцию и глобалную перекомпиляцию сделала. Не помогло. Кроме того, пыталась поместить код в наследниках JournalCheckPost. Тоже не помогло. Что можете посоветовать? |
|
09.02.2007, 13:29 | #2 |
Banned
|
|
|
|
За это сообщение автора поблагодарили: Кирен (1). |
09.02.2007, 13:35 | #3 |
Moderator
|
|
|
09.02.2007, 13:43 | #4 |
Участник
|
Метод используется в наследниках (например в LedgerJournalCheckPost). Сама переменная используется в createJournalTransfer класса JournalCheckPost, кстати там в SP3 есть ошибка при переносе строк в складских журналах (не меняется в складских проводках ссылка на журнал), в более поздних сервис-паках может быть уже исправили, а может и нет.
|
|
09.02.2007, 14:20 | #5 |
Moderator
|
|
|
09.02.2007, 14:42 | #6 |
Участник
|
Спасибо, EVGL, помогло!
Хотя не совсем поняла почему в данном случае требуется упаковка. Можете объяснить? |
|
09.02.2007, 15:20 | #7 |
Banned
|
Потому что Вы работаете, очевидно, в 3-х уровневом окружении. Диалог исполняется на клиенте под управлением копии объекта, а сам объект - на сервере. Аксапта не умеет самостоятельно сериализовывать все переменные объекта, но вызывает для этого методы .pack() и .unpack() класса, подразумевая, что класс реализовывает интерфейс SysPackable. В этих методах нужно сериализовать все переменные, требующиеся для запуска выполнения задания в .run().
|
|
|
За это сообщение автора поблагодарили: kashperuk (1). |
09.02.2007, 15:33 | #8 |
Moderator
|
Попробую ответить чуть проще:
Если класс с диалогом вызывается на сервере, происходит упаковка параметров и передача их на клиента, так как контролы диалога добавляются все таки на форму Dialog, а формы выполняются на клиенте. А упаковываются именно те переменные, которые перечислены в CurrentList. 2EVGL: Поправьте меня если неверно сформулировал.
__________________
С уважением, kvan. |
|
09.02.2007, 16:10 | #9 |
Участник
|
|
|
09.02.2007, 17:06 | #10 |
Участник
|
Да, спасибо. Теперь понятнее.
|
|
09.02.2007, 18:41 | #11 |
Moderator
|
2Raven Melancholic:
Согласен, просто гораздо проще и изящнее включить переменную в CurrentList
__________________
С уважением, kvan. |
|
12.02.2007, 05:19 | #12 |
Участник
|
Цитата:
ЕСЛИ добавляете переменную в CurrentList, ТО увеличивайте номер версии (см. пример в BestPractice) И не забывайте дописать код, который правильно распаковывает старые версии в unpack. Дело в том, что пока вы дорабатываете, пользователи уже могут поработать и запомнить старые параметры в sysLastValue. Если старые параметры будут считаны в новый список без соответствующей обработки, то скорее всего произойдет ошибка (в этом случае часто советуют удалить Используемые данные в параметрах пользователя) |
|