Описание источника данных
Материал из GB wiki
Версия от 09:48, 26 августа 2020; Alexey (обсуждение | вклад)
Использование
Описание источника данных служит для создания элементов управления в виде списка значений, который не может быть получен стандартным способом.
Описание источника данных задается в строке описания элемента управления параметром Constraints='...', и может встречаться в параметрах колонок таблицы, в текстовых описаниях форм, отчетов, в функции QUERYPARAMS.
Структура
Состоит из элементов, разделенных ;
- Src = выражение, возвращающее датасет.
- вариант 1: GB_GET(тип, код, `поле`)
- Например, GB_GET(0,:CurrentFirm,`Stocks`)
- вариант 2: OpenDataSet(`процедура`,`параметры`,`src`),src.$data
- вместо OpenDataSet может быть и более сложный скрипт, формирующий нужный датасет
Внимание! Поскольку символ ; является разделителем элементов, в скрипте его использование недопустимо! вместо него нужно использовать Char(59),например: opendataset(`partners_get`,`Ids,S="`+DataSet.Partner+`"|Props,S="`+char(59)+`Stocks`+char(59)+`"`, ...) |
- KeyField = название ключевого поля в датасете
- ListField = выражение, значение которого будет отображаться в выбиралке. Может быть как именем поля в датасете, простым выражением типа Id.Name, либо более сложным выражением, с обязательным именем поля, например, SName[@,fmName+100]=Heap.@Number+` `+AbateDate
- Filter = выражение для фильтрации датасета. Буду отображаться только те записи, для которых результат вычисления = Истина.
- Order = выражение для сортировки датасета.
- DependsOn = выражение, от которого зависит список значений.
Примеры
Список серий для товара, заданного в поле MyArt:
QueryParams( `Articul['Товар']=MyArt,Certificate['Серия']=MyCert{Constraints='Src=gb_get(1,DataSet.?MyArt,"Passports");KeyField=Id;ListField=Id.Name;DependsOn=DataSet.?MyArt'}`
Список записей из справочника (пример для команды):
gbobject136:Item{Constraints='Src=OpenDataSet( "gbobjects_list",[ "Type,I" : 136,"Node,I" : 0 ],"dsR" ),dsR.$data;KeyField=Id;ListField=Id.Name'} )
?MyArt приходится писать из-за специфики работы функции QueryParams (на момент создания элементов управления датасет еще не активен и полей в нем еще нет)