Здравствуйте! Написал запрос с использованием OUTER APPLY, а как его можно реализовать в црмке не пойму... ( Вот собственно сам запрос. Если можно его как то сделать по другому... то было бы отлично)

SELECT o.*, fm.DATE, fm.TypeID
FROM tbl_Offering o
OUTER apply (SELECT MIN(m.DATE) DATE, m.TypeID
                         FROM tbl_OfferingMovement m
                         JOIN tbl_OfferingInMovement h
                              ON h.OfferingMovementID = m.ID
                              AND o.id = h.OfferingID GROUP BY m.TypeID) fm
            WHERE TypeID = '{DABF31DA-9636-4EC1-9FA3-E694A38BBE9D}'

Нравится

4 комментария

Николай, сразу скажу, что запрос типа select * from ... стандартными средствами в Terrasoft CRM реализовать нельзя. В запросе (сервисе SelectQuery) должно быть фиксированное количество колонок. Обходной вариант - определять в скрипте количество полей в таблице, на основании которой строится запрос, и для каждого поля динамически создавать колонку в запросе. На практике реализовать это достаточно сложно, к тому же реализация замедлит работу системы, особенно если таблица содержит много полей.

Допустим, Вы зафиксировали набор нужных полей из таблицы. Тогда есть два способа реализации.

Первый - использовать метод ExecuteCustomSQL объекта Connector.DBEngine, а также функции, описанные в примерах использования. В рамках этого способа можно создать хранимую процедуру, которая возвращает нужный Вам набор данных путём выполнения запроса, и вызывать её с помощью Connector.DBEngine.ExecuteCustomSQL. Ограничения этого способа: его можно использовать, начиная с версии Terrasoft 3.2.0. В более ранних версиях метод ExecuteCustomSQL не воспринимал исходящие параметры.

Второй способ - использовать сервис SelectQuery, содержащий только CustomSQL-колонки. Первая из них содержит текст запроса и дополнительный текст для комментирования всего последующего текста запроса. Например, в Вашем случае SQL-текст первой колонки будет такой:

1 as [a] into #tmp
drop table #tmp
 
SELECT <список колонок из tbl_Offering>, fm.DATE, fm.TypeID
FROM tbl_Offering o
OUTER apply (SELECT MIN(m.DATE) DATE, m.TypeID
                         FROM tbl_OfferingMovement m
                         JOIN tbl_OfferingInMovement h
                              ON h.OfferingMovementID = m.ID
                              AND o.id = h.OfferingID GROUP BY m.TypeID) fm
            WHERE TypeID = '{DABF31DA-9636-4EC1-9FA3-E694A38BBE9D}'
 
/*

У всех остальных колонок свойство SQL необходимо оставить незаполненным. Количество колонок должно быть равным количеству колонок в Вашей выборке. Более подробно - во второй части этого комментария и в остальных комментариях указанных тем.

Олег, спасибо за объяснения. Мне в принципе и нужно фиксированное, это я так.. На основе этого запроса, мне нужно создать отчет.. Вот как бы лучше это сделать не ясно..

Николай, как вариант, сделать вью на сервере с вашим запросом, а в конфигурации создать сервис таблицы с таким же именем и набором колонок как во вью. При сохранении такого сервиса не сохранять/создавать его в БД.

Александр, спасибо за совет!) буду пробовать

Показать все комментарии