Доброго времени суток, коллеги.
Имеется TerrasoftCRM 3.3.2.245. Нужно реализовать выборку данных, которую нельзя сделать посредством SelectQuery с передачей параметров в запрос и расчетом итоговой строки.
Почему нельзя использовать SelectQuery? В конструкторе запроса нельзя join-ить с подзапросом и нельзя join-ить более, чем по одному полю.
Вопрос 1: как реализовать расчет итоговой строки? DataGrid умеет считать итоги только в виде суммы, среднего, максимума и минимума колонки переданного набора данных. Я могу записать произвольное значение в область итогов DataGrid? Если не могу, то строку итогов мне придется считать в запросе и потом ее объединять с результатом запроса.
Вопрос 2: как можно получить данные в виде таблицы в обход SelectQuery?
- ExecuteCustomSQL - отпадает, так как не может вернуть таблицу (или я чего-то не знаю).
- Вызов хранимой процедуры в CustomSql колонке SelectQuery. Вариант в принципе годный. Есть некоторые проблемы с передачей параметров для Include фильтра, но решаемые.
- CustomQuery. Непонятный мне зверь. Может ли возвращать таблицу? Можно ли менять текст запроса в runtime или только хардкодить в Администраторе? В конфигурации я примеров использования не нашел, на этом форуме тоже (киньте ссылку, если не жалко).
- ADODataset. На первый взгляд тоже годный вариант, но есть свои "но". Хотелось бы, чтобы запрос выполнялся от имени текущего пользователя, со всеми его ограничениями доступа. В случае доменной аутентификации это решаемо, а как быть, если используется аутентификация СУБД? Я вряд ли смогу где-нибудь достать пароль текущего пользователя, могу только показать диалог с запросом пароля и сохранить его в базе.
Есть ли еще какие-либо варианты получения табличных данных?
Нравится
Зверев Александр,
Так в 3-ке, насколько помню, можно и представление реализовать нужное со всем набором колонок.
Думаю, что в данном случае (имею ввиду, приджойнить таблицу по нескольким колонкам), это самый оптимальный вариант.
Хотя SelectQuery в конфигурации все же прийдется реализовать.
Но этот вариант не подойдет, если нужно в режиме ран тайм, что-то изменить.
Можно реализовать весь свой запрос в хранимой функции, а затем её вызвать при помощи нескольких CustomSql-колонок в SelectQuery. Так можно будет передать параметры и получить результат в табличной форме.
Зверев Александр,
Так в 3-ке, насколько помню, можно и представление реализовать нужное со всем набором колонок.
Думаю, что в данном случае (имею ввиду, приджойнить таблицу по нескольким колонкам), это самый оптимальный вариант.
Хотя SelectQuery в конфигурации все же прийдется реализовать.
Но этот вариант не подойдет, если нужно в режиме ран тайм, что-то изменить.
Да, с представлением тоже можно. Но тогда нужно будет не только SelectQuery, но и сервис таблицы с таким же названием и набором полей задизайнить, а потом при его сохранении сказать «нет» на вопрос об изменении в БД.
Riptor пишет:
В моем случае представление не подойдет, так как в представление нельзя передать параметры чтобы уменьшить размер выборки.
Почему не подойдет?
В сервисе SelectQuery Вы можете настроить нужные фильтры, но не включать их в дизайнере, а включать потом программно, тогда, когда нужно.
Алла, видимо, речь о том, что если внутри view вся логика сделана не select, а кодом или вызовом функции с параметрами, пробросить внутрь условия фильтра, наложенные на view снаружи, нетривиально.