09.11.2009, 13:12 | #1 |
Участник
|
Как сделать доступными для редатирования поля на форме CustInvoiceJournal?
Добавили некоторые свои поля на таблицу CustInvoiceJour, создали для них новую вкладку на форме и теперь хотим чтобы они были доступны для редактирования. Пробовали просто разрешить AllowEdit на датасорсе, но форма всё-таки остаётся недоступна для редактирования целиком. Пробовали добавить клонированный датасорс с той же таблицы, в котором AllowEdit - Yes и с него накидать поля на форму, всё равно. не помогает.
|
|
09.11.2009, 13:25 | #2 |
Member
|
Допишите ваши поля в методе initDesign_W() на форме.
__________________
С уважением, glibs® |
|
|
За это сообщение автора поблагодарили: tolstjak (1), S.Kuskov (1), rusalaudinov (1). |
09.11.2009, 14:42 | #3 |
Участник
|
эм.. А что за метод такой и где его брать? на форме есть метод updateDesign, но как туда дописывать поля что-то непонял. простое
X++: iPost1.allowEdit(true); iPost1.enabled(true); |
|
09.11.2009, 15:16 | #4 |
Участник
|
Цитата:
В методе init формы прописать: X++: ... super(); CustInvoiceJour_ds.allowEdit(true); Global::allowEditFieldsOnFormDS_W(CustInvoiceJour_DS, false); CustInvoiceJour_ds.object(fieldNum(CustInvoiceJour, InvoiceAccount)).allowEdit(true); ... Код метода allowEditFieldsOnFormDS_W приведен ниже (его нужно поместить в класс Global) - данный метод устававливает доступ ко всем полям датасорса. X++: client static public void allowEditFieldsOnFormDS_W(FormDataSource _dataSource, boolean _allowEdit) { DictTable dictTable = new DictTable(_dataSource.table()); DictField dictField; FormDataObject dataObject; int cx, idx; for(cx = 1; cx <= dictTable.fieldCnt(); cx ++) { dictField = dictTable.fieldObject(dictTable.fieldCnt2Id(cx)); if(! dictField.isSystem()) { for(idx = 1; idx <= dictField.arraySize(); idx++) { dataObject = _dataSource.object(fieldId2Ext(dictField.id(), idx)); if (dataObject) { dataObject.allowEdit(_allowEdit); } } } } }
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: rusalaudinov (1). |
09.11.2009, 16:51 | #5 |
Участник
|
Спасибо за развернутый ответ, но к сожалению и он не помог...
|
|
09.11.2009, 17:06 | #6 |
Member
|
У вас локализованная версия?
__________________
С уважением, glibs® |
|
09.11.2009, 17:16 | #7 |
Участник
|
|
|
09.11.2009, 17:26 | #8 |
Участник
|
Если я правильно понял вопрос, то кажется что да, локализованная.
Пользователь - он же девелопер обладает правами на всё. поля вообще никакие не редактируются. то есть ни мои, ни не мои. Решение нашлось в том, чтобы установить свойство AllowEdit - Yes на двух датасорсах(Jour и Trans). Почему так - непонятно. Сейчас пытаюсь понять, ведь мои поля относились только к таблице Jour |
|
09.11.2009, 17:59 | #9 |
Роман Долгополов (RDOL)
|
Цитата:
Сообщение от rusalaudinov
Если я правильно понял вопрос, то кажется что да, локализованная.
Пользователь - он же девелопер обладает правами на всё. поля вообще никакие не редактируются. то есть ни мои, ни не мои. Решение нашлось в том, чтобы установить свойство AllowEdit - Yes на двух датасорсах(Jour и Trans). Почему так - непонятно. Сейчас пытаюсь понять, ведь мои поля относились только к таблице Jour |
|
|
За это сообщение автора поблагодарили: tolstjak (1), denny (1), S.Kuskov (1), SRF (1). |
11.11.2009, 04:53 | #10 |
китайский стажер
|
Абсолютно точно.
__________________
Может быть выйдет, а может не-е-е-ет... Новая песня вместо штиблет.. |
|
08.12.2009, 09:50 | #11 |
Участник
|
Сам сейчас воспользовался советами из этой темы. Всё работает. Конкретно по этой форме ещё добавлю, что после открытия на редактирование CustInvoiceTrans, стала редактируемой складская аналитика. Т.е. нужно изменить свойство allowEdit ещё и на InventDim.
Вот что у меня получилось: X++: void initDesign_W() { custInvoiceJour_DS.allowEdit(true); allowEditFieldsOnFormDS_W(custInvoiceJour_DS, false); // -->> custInvoiceTrans_DS.allowEdit(true); allowEditFieldsOnFormDS_W(custInvoiceTrans_DS, false); InventDim_ds.allowEdit(false); // fix custInvoiceJour_DS.object(fieldNum(custInvoiceJour, newField)).allowEdit(true); // <<-- this.initDesign_LV(); this.initDesign_LT(); this.initDesign_RU(); } |
|
08.12.2009, 11:07 | #12 |
Участник
|
пользуюсь таким вариантом, последний необязательный аргумент - список полей, которые нужно оставить редактируемыми.
X++: //Установить AllowEdit = _allowEdit для всех полей исключая _fieldListExclude static void setFieldsAllowEdit(FormDataSource _formDataSource, boolean _allowEdit, container _fieldListExclude = connull()) { FormDataObject fdo; FormObjectSet fos; DictTable dictTable = new DictTable(_formDataSource.table()); DictField dictField; int fieldCount = dictTable.fieldCnt(); int i; int j; FieldId fieldId; boolean allowEdit; ; fos = _formDataSource; for (i = 1; i <= fieldCount; i++) { dictField = new DictField(dictTable.id(), dictTable.fieldCnt2Id(i)); for (j = 1; j <= dictField.arraySize(); j++) { fdo = fos.object(fieldId2ext(dictField.id(), j)); allowEdit = confind(_fieldListExclude, dictField.id()) ? ! _allowEdit : _allowEdit; if (fdo) { fdo.allowEdit(allowEdit); } } } } |
|
|
|