|  16.01.2008, 21:02 | #1 | 
| Участник | Как поменять значение комбобокса из кода ? 
			
			Собственно сабж selection и setEditText ничего не делают, изменение самого поля таблицы не пересчитывает данные в других полях .. форма CustOpenTrans, combo CustTransOpen_UseCashDisc1 .. хочу поменять во всех строках по нажатию кнопки спасибо (DAX4) 
				__________________ _databaseTransDelete ... bl@$ ! | 
|  | 
|  17.01.2008, 10:03 | #2 | 
| Moderator | 
			
			Странный вопрос. Если я все правильно понял, то нужно всего лишь выполнить программное обновление поля в нужных записях запросом и потом вызвать research() на datasource...
		 
				__________________ Андрей. | 
|  | 
|  17.01.2008, 13:01 | #3 | 
| Участник | Цитата: Если меняешь вручную в гриде значение комбобокса, все обновляется. Под комбобоксом никаких методов нет, в modifiedField этого поля тоже нет. Решил сьемулировать ручную смену комбобокса, так как с обновлением поля все видимые мне варианты исчерпал .. 
				__________________ _databaseTransDelete ... bl@$ ! | 
|  | 
|  17.01.2008, 13:47 | #4 | 
| Участник | 
			
			Да ну... Может стоит посмотреть последовательность вызовов методов при ручном изменении значения вашего комбобокса,брейкпоинт на модифай методе и вперёд,а потом - тоже самое при изменении значения комбобокса из кода.Посмотрите,какие именно методы апдейтят вашу таблицу,проверьте,вызываются ли они при изменении комбобокса из кода,если нет - то нужно вызвать.
		 Последний раз редактировалось Eugene Murka; 17.01.2008 в 15:18. | 
|  | 
|  17.01.2008, 13:59 | #5 | 
| Участник | 
			
			Возможно код присутствует на write источника данных? или на update/insert таблицы?
		 | 
|  | 
|  17.01.2008, 14:51 | #6 | 
| Moderator | 
			
			Да, есть такая тема - значения комбобоксов программно "как пользователь" менять. Разглагольствовать сейчас не буду - можно будет позже отдельную тему организовать. Сейчас только практика. У меня есть джоб для служебного (админского) пользования. Пока не до конца оформившийся идеологически, но уже вполне сносно работающий. Предназначен для создания строк "как пользователь" в журнале главной книги (форма LedgerJournalTransDaily). Покажу ввод значения в комбобокс "Тип счета" в гриде. Алгоритм примерно следующий (на всякий случай - у меня Axapta 3.0 SP4, 2-хзвенка): 1. Берем курсор от датасорса - получаем прямой доступ к лежащей в основании таблице. 2. Меняем значение в поле таблицы, соответствующем полю нашего датасорса (контрола). 3. На контроле (поле) принудительно вызываем всю последовательность методов (по возможности) - от контрола до поля таблицы. Код примерно такой: X++: FormRun                     formRun;
FormComboBoxControl         fcComboBox;
LedgerJournalTrans          LedgerJournalTrans;
FormDataSource              formDataSource;
FormDataObject              datasourceField;
    ...................................................
    formDataSource = formRun.dataSource('LedgerJournalTrans');
    LedgerJournalTrans = formDataSource.cursor();
    fcComboBox = formRun.design().controlName('LedgerJournalTrans_AccountType');
    datasourceField = formDataSource.object(fieldNum(LedgerJournalTrans, AccountType));
    // задаем новое значение комбобокса
    LedgerJournalTrans.AccountType = LedgerJournalACType::Bank; 
    // Следующую последовательность вызовов можно в принципе сократить,
    // если есть время разобраться, что реально надо, а что нет.
    // Довольно часто (в простых случаях, когда ничего не перекрыто) 
    // можно вообще ничего не вызывать.
    fcComboBox.leave();
    fcComboBox.validate();
    fcComboBox.modified();
    datasourceField.validate();
    LedgerJournalTrans.validateField(fieldNum(LedgerJournalTrans, AccountType));
    datasourceField.modified();
    LedgerJournalTrans.modifiedField(fieldNum(LedgerJournalTrans, AccountType)); | 
|  | 
|  17.01.2008, 17:09 | #7 | 
| Участник | 
			
			Это потому что поверху надеты классы: ledgerJournalEngine journalFormTrans и в них есче вызывается AxLedgerJournalTrans и вот то они портят всы погоды, так как при обновлениях курсорам данные берут из кеша. Там много чего надо ковырать и понять как всё работает. Но проверенный метод: X++: LedgerJournalTrans LedgerJournalTransBuffer = LedgerJournalTrans::find(_update = true)
LedgerJournalTransBuffer .Field ...
LedgerJournalTransBuffer.update();
LedgerJournalTrans.data(LedgerJournalTransBuffer); | 
|  |