GdcBase.TgdcBase.GetFromClause
From gdcBase.pas
function GetFromClause(const ARefresh: Boolean = False): String; virtual;
Unit: gdcBase
Type: function
Visibility: protected
Member Of: TgdcBase
Описание
Функция возвращает секцию FROM SQL запроса бизнес-объекта. Если параметр ARefresh имеет значение True, значит идет формирование запроса для обновления данных записи бизнес-объекта. Из метода GetFromClause вызывается обработчик события OnGetFromClause.
Пример
На эталонной базе данных без загруженных прикладных настроек откроем Исследователь и из раздела Справочники выберем команду Справочник ТМЦ. Задвинем вертикальную разделительную полосу до упора влево (чтобы избавиться от условия ограничения по выбранной группе ТМЦ). Установим курсор в таблицу и нажмем F10. Запрос бизнес-объекта на соответствующей вкладке диалогового окна выглядит следующим образом:
SELECT Z.ID, Z.GROUPKEY, Z.NAME, Z.ALIAS, Z.SHORTNAME, Z.DESCRIPTION, Z.BARCODE, Z.VALUEKEY, Z.TNVDKEY, Z.ISASSEMBLY, Z.RESERVED, Z.DISCIPLINE, Z.DISABLED, Z.EDITIONDATE, Z.EDITORKEY, Z.AFULL, Z.ACHAG, Z.AVIEW, T.NAME AS TNVD, V.NAME AS VALUENAME, Z.CREATORKEY, Z.CREATIONDATE FROM GD_GOODGROUP GG JOIN GD_GOOD Z ON Z.GROUPKEY = GG.ID LEFT JOIN GD_VALUE V ON V.ID = Z.VALUEKEY LEFT JOIN GD_TNVD T ON T.ID = Z.TNVDKEY WHERE Z.ID = :ID
Пусть перед нами стоит задача создать для товара атрибут Производитель и вывести в результате запроса наименование компании производителя и ФИО ее директора. Первая часть задачи решается достаточно просто. В разделе Исследователь-Сервис-Атрибуты открываем окно Домены и создаем новый объект:
- Название типа поля: USR$DMANUFACTURERKEY
- Локализованное название типа поля: Производитель
- Тип данных: Ссылка
- Ссылка на таблицу: gd_contact
- Поле таблицы для отображения: name
- Условие выбора значений: contacttype = 3
Нажимаем Ок. Появится окно выполнения SQL команд, которое закрываем, и из того же раздела Исследователя открываем окно Таблицы. Находим GD_GOOD и в нижней части добавляем новое поле:
- Название поля на английском: USR$MANUFACTURERKEY
- Локализованное название: Производитель
- Краткое название: Производитель
- Тип поля: выбираем в списке созданный ранее тип USR$DMANUFACTURERKEY
Нажимаем Ок. Закрываем появившееся окно выполнения SQL команд и переподключаемся к базе данных. Сразу после переподключения будут созданы необходимые структуры данных, информация о которых появится все в том же окне выполнения SQL команд.
SELECT Z.ID, Z.GROUPKEY, Z.NAME, Z.ALIAS, Z.SHORTNAME, Z.DESCRIPTION, Z.BARCODE, Z.VALUEKEY, Z.TNVDKEY, Z.ISASSEMBLY, Z.RESERVED, Z.DISCIPLINE, Z.DISABLED, Z.EDITIONDATE, Z.EDITORKEY, Z.AFULL, Z.ACHAG, Z.AVIEW, T.NAME AS TNVD, V.NAME AS VALUENAME, Z.CREATORKEY, Z.CREATIONDATE, /* поля атрибута Производитель */ Z.USR$MANUFACTURERKEY, Z_USR$MANUFACTURERKEY.NAME AS Z_USR$MANUFACTURERKEY_NAME</b> FROM GD_GOODGROUP GG JOIN GD_GOOD Z ON Z.GROUPKEY = GG.ID LEFT JOIN GD_VALUE V ON V.ID = Z.VALUEKEY LEFT JOIN GD_TNVD T ON T.ID = Z.TNVDKEY /* связанная таблица атрибута Производитель */ LEFT JOIN GD_CONTACT Z_USR$MANUFACTURERKEY ON Z_USR$MANUFACTURERKEY.ID = Z.USR$MANUFACTURERKEY
Комментарии в запрос добавлены нами.
Со второй частью задачи дело обстоит несколько сложнее. Как видно, в запросе нет связанной таблицы для того, чтобы извлечь имя директора. Придется добавить ее вручную.