Описание источника данных

Материал из GB wiki
Перейти к: навигация, поиск

Использование

Описание источника данных служит для создания элементов управления в виде списка значений, который не может быть получен стандартным способом.

Описание источника данных задается в строке описания элемента управления параметром Constraints='...', и может встречаться в параметрах колонок таблицы, в текстовых описаниях форм, отчетов, в функции QUERYPARAMS.

Структура

Состоит из элементов, разделенных ;

  • Src = выражение, возвращающее датасет.
вариант 1: GB_GET(тип, код, `поле`)
Например, GB_GET(0,:CurrentFirm,`Stocks`)
вариант 2: OpenDataSet(`процедура`,`параметры`,`src`),src.$data
вместо OpenDataSet может быть и более сложный скрипт, формирующий нужный датасет
Important yellow.png Внимание!
Поскольку символ ; является разделителем элементов, в скрипте его использование недопустимо! вместо него нужно использовать 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 (на момент создания элементов управления датасет еще не активен и полей в нем еще нет)