Здравствуйте! Написал запрос с использованием OUTER APPLY, а как его можно реализовать в црмке не пойму... ( Вот собственно сам запрос. Если можно его как то сделать по другому... то было бы отлично)
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}'
Нравится
Николай, сразу скажу, что запрос типа 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 необходимо оставить незаполненным. Количество колонок должно быть равным количеству колонок в Вашей выборке. Более подробно - во второй части этого комментария и в остальных комментариях указанных тем.
Олег, спасибо за объяснения. Мне в принципе и нужно фиксированное, это я так.. На основе этого запроса, мне нужно создать отчет.. Вот как бы лучше это сделать не ясно..
Николай, как вариант, сделать вью на сервере с вашим запросом, а в конфигурации создать сервис таблицы с таким же именем и набором колонок как во вью. При сохранении такого сервиса не сохранять/создавать его в БД.
Александр, спасибо за совет!) буду пробовать