Цитата:
Сообщение от
stalker25
Добрый день, есть такая проблема:
Есть:
---------------------------------
Table1.field1(Enum:NoYesId)
---------------------------------
Forma1
DataSource
Table1
InitValue():
X++:
Table1.Field1 = NoYes::Yes;
Table1_ds.object(fieldNum(Table1, Field1)).modified();
----------------------------------
Form1
DataSource
Table1
Fields
Field1
Methods
modified():
X++:
NoYes noYes = this.getValue();
------------------------------------
открываем форму, инициализируем значение field1, выполняется modified(), на getValue(), axapta падает, а вот getValue(1) работает ... не подскажете почему?
1. Для выполнения каких либо действий по изменению какого либо поля, лучше перекрывать метод modifiedField() на самой таблице, а не на поле формы. В этом случае использование бизнес логики расширяет свои горизонты на всю систему, и её можно использовать откуда угодно. + Все что вы напишите на форме будет вызываться на клиенте, что скажется на производительности.
2. В initValue() таблицы Вы уже проинициализировали поле Field1 значением, поэтому в методе modified() на поле датасорса формы можно это поле и использовать. Т.е. можно написать вот такой код (и мне кажется это более нагляным вариантом):
X++:
NoYes noYes = Table1.Field1;
В таком варианте точно аксапта не "упадет"

3. Метод getValue() возвращает значение поля, в котором он (метод) вызывается. У этого поля есть параметр _rowIndex (тип Integer по умолчанию = 0), который указывает системе номер строки датасорса формы, из которой вернуть значение поля. В случае нулевое значение этого параметра, возвращается значение этого поля из последней строки датасорса. Если строк в датасорсе на форме нет, то этот метод
ничего не возвращает, более того аксапта просто валится (это воспроизводится только для полей с типом Enum, для поля с типом String не воспроизвелось). Так как в вашем случае строка ещё не создана, то этот метод Вам использовать
не надо. Для того, что бы определить какое значение проставлено в поле Field1 воспользуйтесь способом из второго пункта.
P.S. старайтесь как можно меньше программировать на форме, только в крайних случаях. В данном вашем случае, лучше воспользуйтесь моим советом из первого пункта.
P.S1. А лучше опишите задачу, возможно, она решается как то более просто (уж больно странно в методе initValue() проинициализировать поле, потом вызвать его метод modified() и в этом методе получать его же значение...).