![]() |
#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)); |
|