====== Описатели полей ======
===== Введение =====
Поля в контроллере источника данных описываются массивом. Получить описатели можно вызвав методы: **getFields($rowType)** и **getField($name, $rowType)**.
===== Описание полей в источнике данных =====
==== Общие описатели ====
* **name** - имя поля, обязательный параметр
* **type** - тип поля в терминах LSS: string, password, status, memo, date, num, check, ref, list, icons, radio, multilist, html
* **caption** - название поля в понятном человеку виде
* **len** - отображаемая ширина поля в символах
* **maxlength** - максимально допустимое кол-во символов в поле
* **stretch** - ширина поля на максимум, по умолчанию false
* **default** - значение поля по умолчанию, при добавлении новой строки
* **notnull** - значение поля должно быть обязательно задано
* **log** - изменение значения поля необходимо логировать
==== Числа ====
* **dec** - кол-во знаков после запятой
==== Справочники ====
Параметры поля type="ref"
* **reftable** - имя источника данных справочника. В терминах LSS **datasource** элемента **ref**
* **refrowtype** - означает, что справочник является деревом. Задает тип узла, из которого можно выбирать значения. В терминах LSS **row.type** элемента **ref**
* **ref.params** - массив, задает значения параметров при вызове справочника. Если значение параметра начинается с **get(** или **getplus(** то значение подставляется в **js_value** и добавляется **skipempty=1**, иначе значение подставляется в **value**. Например:
$fld['reftable']='worker';
$fld['ref.params']=array (
'filter.orgid' => "get('orgid')",
'filter.code' => "QWERT"
);
соответствует LSS описанию:
[
]
параметры начитываемых из справочника полей:
* **refid** - имя поля справочника (type=ref)
* **refname** - имя поля в источнике данных справочника, связанного с текущем полем (по умолчанию name)
* **reftext** - имя поля справочника, отображаемого в диалоге выбора значений, если не задано, то из refname
* **dlgwidth** - ширина диалога выбора значения из справочника
==== Списки: list, radio, icons ====
* **list** - список значений, разделенный ',' или ';'. Возможны варианты:
* список вида: **код**=**значение**;**код**=**значение**;**код**=**значение**. В таком варианте в поле хранится **код**, а отображается **значение**.
* список вида: **значение**;**значение**;**значение**. В таком варианте все зависит от **basetype**. Если **basetype**=**string**, то в поле хранится **значение**. Если **basetype**=**num** то в поле хранится порядковый номер (от 1), а отображается **значение**.
* **basetype** - string или num
==== Права и видимость ====
* **visible** - видимость поля, по умолчанию true
* **readonly** - запрет на правку поля, по умолчанию false
* **js_visible** - выражение JavaScript задающее видимость поля, отрабатывается только на клиенте
* **js_readonly** - выражение JavaScript задающее запрет на правку поля, отрабатывается только на клиенте
==== Взаимодействие клиента с сервером ====
* **save** - при изменении значения поля автоматически вызывать запрос **save**
* **change** - при изменении значения поля автоматически вызывать запрос **change**
* **change.params** - параметры, передаваемые запросу **change**. Аналогично **ref.params**
* **change.clears** - массив имен полей, которые надо очистить при изменении значения поля. Если в списке перечислено поле type="ref" то ссылающиеся на него поля refid указывать необязательно.
==== Серверные ====
* **virtual** - поле виртуальное, в автогенерации SQL запросов не участвует. Для таких полей атрибуты table и alias не используются.
* **hidden** - значение поля не передается на клиент
* **log** - изменение поля надо логировать
* **info** - дополнительная служебная информация в виде массива (ключ=значение). Используется для спецобработки на сервере.
===== Параметры поля в экранной форме "структура БД" =====
В экранной форме "структура БД" описывается таблицы и поля базы данных. По этим описателям генерятся контроллеры источников данных - описатели полей, SQL запросы к таблицам.
==== описатели полей REF ====
* **ref** - параметры, передаваемые запросу для начитки содержимого справочника
filter.mode=РАБ
filter.statusid=get('statusid')
будет построено:
Если значение параметра начинается с: **get(**, **!get(**, **getplus(**, **!getplus(** то это выражение, подставляется в **js_value**, добавляется **skipempty**. Иначе это константа, подставляется в **value**.
* **ref_join** - подстраивает поведение связи при выполнении **join**. Стандартное поведение: подменять ссылки для **restrict** связей и удалять для **cascade**. Если параметр задан, то поведение зависит не от типа связи а от значения этого параметра. Значения 1, r, R означают подмену ссылок, все остальное означает удаление.
* **ref_copy** - подстраивает поведение связи при выполнении **copy**. Стандартное поведение: копировать только для **cascade** связей. Если параметр задан, то поведение зависит не от типа связи а от значения этого параметра. Значения 1, c, C означают копирование.
* **ref_logparent** - при любом изменении в строке отписывать в лог родительской таблицы по этой ссылке. Если значение 1, то имя в логе совпадает с именем таблицы, иначе значение задает имя в логе
* **ref_readonlytest** - при правке у удалении строки проверять признак row.readonly строки связанного источника данных.
==== стандартные описатели ====
* **change** - при изменении поля отсылать запрос change или выполнять очистку полей
при изменении поля посылать запрос change без параметров
1
при изменении поля посылать запрос change с параметрами
field1=get('field1')
field2=get('field2')
при изменении поля очищать значения перечисленных полей
field1=clear
* **save** - 1|0 при изменении значения поля автоматически вызывать запрос save
* **info** - произвольная информация вида cod=значение. Перенесется в описатель поля fld
==== видимость и доступность ====
* **readonly** - 1|0 можно объявить поле readonly
* **js_readonly** - можно объявить поле readonly в зависимости от условия: get('mode_code')=='ОТКЛ'
==== описатели полей MAIN при подключении их в справочник ====
* **reftext** - при подключении поля как справочник задает значение reftext
* **reffind** - при подключении поля как справочник задает значение reffind
* **dlgwidth** - при подключении поля как справочник задает значение dlgwidth
* **refcaption** - 1|0 при подключении поля как справочник брать caption из поля ссылки (type=ref)
==== Расширенный описатель info ====
Описатель info позволяет пополнить описание поля массивом вида имя=значение. Имена могут быть произвольными. Однако, некоторые имена обрабатываются особым образом - подменяют описатели поля. Вот список таких имен:
* refid
* refname
* visible
* js_visible
* default
* hidden
* list
* basetype