И хотя уважаемый
S.Kuskov уже ответил на Ваш вопрос всё же приведу
пару дополнений, которые могут быть полезны новичку для понимания:
1.) Чтобы заполнить Set значениями Вам нужно будет в цикле перебрать все записи, которые на данный момент выбраны по активному запросу на форме, то есть, через актуальную на данный момент quеry. Вот так примерно будет выглядеть метод, заполняющий Set (для начала почитайте о том, как работать с Query и QueryRun, хотя бы на той же аксаптапедии)
X++:
QueryRun currentQueryRun;
CustTable customer;
;
currentQueryRun = CustTable_DS.queryRun();
while (currentQueryRun.next())
{
if (currentQueryRun.changed(tablenum(CustTable)))
{
customer = currentQueryRun.get(tablenum(CustTable));
selectedCustomers.add(customer.RecId);
}
}
Здесь вы сначала получаете ссылку на QueryRun объект
главного(если их несколько) источника данных, потом в цикле перебираете все возвращаемые данным QueryRun записи. Метод queryRun.changed обеспечивает проверку того, что найдена новая уникальная запись именно интересующей Вас таблицы(в моем примере это CustTable), в случаях, когда у вас один источник данных её можно опустить, в случаях же со связанными источниками данных(join) она необходима, так как общее количество итераций цикла будет равняться сумме комбинаций записей из всех связанных таблиц для каждой записи главной таблицы. Например, если у нас в запросе формы имеем ещё и CustTrans(кастомерские проводки), объедененную join"ом с CustTable, то для одной и той же записи CustTable мы попадем в цикл столько раз, сколько проводок у кастомера, и если не реализовать выше указанную проверку добавим в Set один и тот же RecId кастомера столько раз, сколько у него проводок.
2.) Для всех отобранных по активному запросу на форме записей аксаптовский движок отрисовует записи на гриде, если контрол грида завязан на поле записи - его значение берется напрямую из записи, если на метод(через свойство dataMethod), то данный метод(display или edit) выполняется с значением записи(или точнее ссылкой на текущую, отобранную запись) в качестве параметра. Edit метод(в нашем случае) лезет в Set и проверяет, находится ли в нем RecId данной записи. И возвращает NoYes::No или NoYes::Yes, в зависимости от значения, которое вернул опрошенный движком edit метод, движок отображает чекбокс отмеченным(если метод вернул true) или нет. Так работает логика в случае отображения, то есть для edit метода в режиме отображения или для display метода, который предназначен исключительно для отображения(контролы, завязанные за display метод всегда read-only). Если посмотреть на сигнатуру edit метода, видно, что первый параметр логического типа и имеет название set, этот параметр дает понять для каких целей исполняется метод - для чтения или для изменения(записи). В случаях, когда система только отображает запись метод выполняется с значением set = false. В случаях, когда пользователь меняет значение в контроле, завязанном на edit метод(в Вашем случае - checkbox), движок аксапты исполняет данный метод с значением set = true и 3ьим параметром(в случае с edit-методами на уровне таблицы активная запись не передается и параметр значения - второй), который передает состояние контрола - то есть, введенное\установленное в нем значение(базовый тип этого параметра, равно как и тип возвращаемого значения метода, должен совпадать с типом допустимого контента связанного контрола, в нашем случае это чекбокс и возвращает он enum - NoYes). Так вот, в случае изменения значения контрола edit метод вызывается с set = true и значением NoYes типа, установленным в контроле. Edit метод проверяет, что он вызван на запись и добавляет в Set значение, если чекбокс был отмечен или убирает значение из Set, если галка на чекбоксе была снята(то есть, в зависимости от 3ьего параметра, параметра состояния NoYes типа). Ну и возвращает значение, чтобы отобразить состояние контрола.