GdcBase.TgdcBase.GetFromClause

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

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

Комментарии в запрос добавлены нами.

Со второй частью задачи дело обстоит несколько сложнее. Как видно, в запросе нет связанной таблицы для того, чтобы извлечь имя директора. Придется добавить ее вручную.

См. также

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты