Запись значений из окна MultiSelectData в поле Lookup в виде строки String через запятую
Рассмотрим задачу: необходимо реализовать множественный выбор, а именно, данные записываются из окна MultiSelectData в поле Lookup в виде строки String через запятую. Затем при открытии окна MultiSelectData - эти данные из строки отображаются в окне в виде списка StringList.
Наиболее правильным решением поставленной Вами задачи будет следующий алгоритм:
1) Создать 2 поля с типом строка, в которой необходим множественный выбор, в одном хранить IDs (ExtraOfferingIDs), в другом Имена (ExtraOfferingName).
2) В окне редактирования записи создать управляющий элемент (контрол) с типом LookupControl, например edtExtraOfferingName.
3) При инициализации окна (например, функция Initialize), необходимо считывать данные из Датасета и записывать их в созданный управляющий элемент, например:
edtExtraOfferingName.Text = Dataset.ValAsStr('ExtraOfferingName');
4) На событии управляющего элемента OnPrepareSelectWindow необходимо этому окну передавать следующие атрибуты – KeyValues, DisplayFieldValues:
Self.Attributes('DisplayFieldValues') = Dataset.ValAsStr('ExtraOfferingName');
5) В окне MultiSelectData хранятся значения типа StringList (список). Следовательно, заполнение Вашего окна полученными значениями предусматривает предварительного создания функции, которая будет преобразовывать строку (с несколькими данными, приписанных например через запятую) в список. Иначе в окно MultiSelectData Вы не сможете поместить никаких значений.
В том случае если подобной функции Вы не реализовывали, то ниже высылаю Вам пример подобной функции. Реализовать необходимую Вам функцию Вы можете по аналогии с предоставленным примером:
var StringsList = System.CreateObject('TSObjectLibrary.StringsList');
if (CommaString != null) {
var StringDataArray = CommaString.split(',');
for (var i in StringDataArray) {
var StrData = StringDataArray[i];
StringsList.Add(StrData);
}
}
return StringsList;
}
6) На событии OnNotify необходимо обработать полученные из wnd_MultiSelectData значения, и записать их в таблицу. Примерный программный код приведен ниже:
KeyValuesStr = KeyValues.CommaText;
DisplayFieldValues = Sender.Attributes('DisplayFieldValues');
DisplayFieldValuesStr = DisplayFieldValues.CommaText;
Dataset.Values('ExtraOfferingIDs') = KeyValuesStr;
Dataset.Values('ExtraOfferingName') = DisplayFieldValuesStr;
edtExtraOfferingName.Text = DisplayFieldValuesStr;
Желаю удачи!
С уважением,
Мельникова Екатерина