Цитата:
Сообщение от
stalker25
Добавил проект.
Артём, спасибо за предложенные альтернативы, но меня смущает именно текущая проблема getValue(), и вот собственно откуда это пришло:
\Forms\LedgerJournalTransVendInvoice\Data Sources\LedgerJournalTrans\Fields\AccountType\Methods\modified
(кстати не понятно зачем использовать getValue, если можно вызвать ledgerJournalTrans.AccountType, при чём в локализации добвленнный код как раз таки и использует ledgerJournalTrans.AccountType, кстати в 2012 getValue так же используется)
LedgerJournalACType ledgerJournalACType = this.getValue();
если при инициализации новой линии журнала, мы хотим задать определённый тип журанала:
\Classes\LedgerJournalEngine_VendInvoice\initValue
X++:
ledgerJournalTrans.AccountType = newAccountType;
ledgerJournalTrans_ds.object(fieldNum(LedgerJournalTrans, AccountType)).modified();
кстати для типа Инт дакс тоже валится.
так что на данный момент меня интересует почему getValue() не работает, а getValue(1) работает?
почему не выходит ошибка, что object not initialized или что-нить в этом духе, а сразу падает дакс

Ответ на вопрос "Почему падает?", это просто так написано ядро системы, видимо внутри него возникает критическая ошибка, которая приводит к остановке приложения.
как я уже писал, судя по тестам, которые я вчера вечером проводил, метод getValue()
не делает того, что от него хотят.
Судя по контексту кода напрашивается вывод, что в методе modified() нужно получить значение определенного поля (с типом Enum) текущей, создаваемой строки.
Но метод getValue() НЕ ВОЗВРАЩАЕТ значение поля ИЗ ТЕКУЩЕЙ, СОЗДАВАЕМОЙ строки, а возвращает значение этого поля из УЖЕ СУЩЕСТВУЮЩИХ строк в таблице, которые ОТОБРАЖАЮТСЯ на датасорсе формы (по крайней мере так он работает, возможно задумывалось по другому). Если ему (методу getValue()) не передали никаких параметров (т.е. _indexRow = 0), то по умолчанию возвращается значение из ПОСЛЕДНЕЙ строки, отображаемой на датасорсе формы (если строк нет, то приложение падает, это, как я уже писал, косяк ядра). Если параметр передан, то система пытается найти нужную строку, и если не находит, то просто ничего не возвращает (не падает).
Я не знаю, что на самом деле там задумывали разработчики в этом методе, так же не знаю почему они его используют. Но что то мне подсказывает, что в методе modified() поля AccountType нужно переписать строку с:
X++:
LedgerJournalACType ledgerJournalACType = this.getValue();
на:
X++:
LedgerJournalACType ledgerJournalACType = ledgerJournalTrans.AccountType;
Если это не так, то сведущие в этом плане люди меня поправят.
З.Ы. сейчас подумал, возможно разработчики расчитывали, что метод вернет значение из СОЗДАВАЕМОЙ строки, если не передать параметр, так как по идее она последняя. Но либо метод как то косячно написан, либо ещё чего, но он возвращает значения только уже СОЗДАННЫХ строк