filter set
select query
представление реестра
Технические вопросы
Разработка

Доброго времени суток, коллеги!

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

Т.е. работают 4 фильтра в наборе объединенные оператором AND:
1) Проверяется, что статус ≠ выполнена;
2) Проверяется, что поле “Документ” не пусто;
3) Проверяется существование указанном в задаче документе наличие положительной визы руководителя направления;
4) Проверяется отсутствие в данном документе виз с пустым полем “Установил” или неположительным результатом визирования.

Представление недостоверно показывает список задач. Экспериментальным путем выяснилось, что:

а) Включены все фильтры – кол-во записей в представлении 14;
б) Включены фильтры 1 и 2 и 3 – кол-во записей в представлении 14;
в) Включены фильтры 1 и 2 и 4 – кол-во записей в представлении 20;
г) В ситуации, когда включен только 3 фильтр - кол-во записей в представлении 0 (НОЛЬ!);

И это при указанном в наборе фильтров параметре AND. Т.е. получается, что мы смягчаем условия поиска, а получаем меньшее кол-во записей.

Может кто-то сталкивался с подобным и сможет подсказать, в чем дело.

Нравится

1 комментарий

Думаю, проще будет понять непосредственно текст запросов, так как что там у вас написано непосредственно в параметрах и запросе из скрина естественно не видно.
Делайте превью и смотрите запрос, либо профайлером ловите.

Показать все комментарии
select query
запрос
Сумма
фильтрация по датам
Технические вопросы
Разработка

Добрый день.
Мне нужно создать сложный запрос на подсчет количества свободных продуктов в карточке Продукт в продаже с помощью сервиса Select Query. Теперь подробнее, у меня есть доработанная карточка Продукт в продаже в которой есть стандартные поля Quantity (Количество) и OfferingID (Продукт), а также 2 новых поля StartTime (Время начала бронирования) и StopTime (Время окончания бронирования). С помощью этих полей нужно сформировать запрос, который подсчитывал бы количество всех забронированных в промежуток с Времени начала бронирования по Время окончания бронирования продуктов одного вида при создание новой записи в детали Продукт в продаже в версии Terrasoft 3.3.1.104. Каким образом можно это реализовать?

Нравится

1 комментарий

Здравствуйте!
Вам будет проще воспользоваться фильтрацией датасета по этим полям, используя фильтры сравнения .
Т.е. создаем два фильтра - (StartDate < Параметр.значение_даты) И (DueDate > Параметр.значение_даты) и далее:

//пролучаем Dataset
var Dataset = Services.GetNewItemByUSI(ds_Dataset);
//фильтруем
ApplyDatasetFilter(Dataset, 'StartDateFilterName', StartDate, true);
ApplyDatasetFilter(Dataset, 'DueDateFilterName', DueDate, true);
Dataset.Open();
var ItemsInDS = Dataset.RecordsCount;

В переменной ItemsInDS и будет количество записей удовлетворяющим условию.

Показать все комментарии
select query
запрос
программно
Технические вопросы
Разработка

Добрый день.
Подскажите пожалуйста, где можно посмотреть как создать запрос SelectQuery программно? Особенно интересует полностью программное создание join-ов по нескольким полям.

TerrasoftCRM 3.3.2
Спасибо.

Нравится

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

Здравствуйте, Петр.

Динамически запрос SelectQuery создается приблизительно следующим образом:

var sq = CreateSelectQuery("Common\\" , 'sq_MySelect');
var FromTable = Services.GetNewItemByUSI('tbl_MyTable');
var Select = CreateSelectQuerySelect(sq, FromTable, 'MySelect');
var Join = CreateJoin(Select, LeftField, RightField, ParentJoin);
Join.JoinType = 0;
/*
jtInner = 0x00000000;
jtLeftOuter = 0x00000001;
jtRightOuter = 0x00000002;
jtFullOuter = 0x00000003;
*/
AddColumn(Select, FromTable.Fields('ID'));
AddColumn(Select, FromTable.Fields('Namus'));

Ознакомиться с программным создание join'ов по нескольким полям можно по ссылке: http://www.community.terrasoft.ua/blogs/5494

Спасибо, Дмитрий, очень помогло.

И еще вопрос. У меня на одном экземпляре MS SQL Server работаю две базы: Terrasoft(TS_Original) и база от другой системы (Warehouse). Есть ли возможность из скрипта базы TS_Original делать запросы на вставку и удаление в базу Warehouse?

Здравствуйте Петр!

Такая возможность существует. Вам нужно создать ADOCommand:

добавление компонента происходит (как и для других сервисов)при щелчке правой кнопкой мыши и выборе его из списка.
Компоненту присваивается осмысленное название, например adc_ExportData.
В окне редактирования сервиса есть такие значения, как Строка соединения(можно создать строку соединения без использования существующих
соединений, созданных в компонентах ADOConnection) и Соединение(можно выбрать созданное ранее посредством сервиса ADOConnection соединение).
В поле Текс SQL прописывается команда, например exec ExportData :GroupID, :GroupID - параметр, добавленный в список параметров сервиса.
В скрипте

//получение сервиса
var Command = GetSingleItemByCode('adc_ExportData');
//где 'adc_ExportData' - название сервиса ADOCommand
// установка параметров
SetParameterValue(Command.Parameters, 'GroupID', GroupID);
//запуск на исполнение
Command.Execute();

Подробнее с детальной инструкцией и примерами, Вы можете ознакомиться по ссылке:
http://www.community.terrasoft.ua/forum/topic/2576

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

Здравствуй многоуважаемый All!
Подскажите каким образом в SelectQuery выбрать запись, измененную последней.
Реализовать запрос типа:

SELECT top 1 *
FROM [tablename]
WHERE ...ID = :ID
ORDER BY ModifiedOn DESC

Нравится

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

Навскидку так: ставим в запросе Итог = Максимум для поля ModifiedOn. Возвращает одну запись.

 

Валерий Валерьянович,

SELECT * 
FROM [tablename] 
WHERE [ModifiedOn] = (SELECT MAX([ModifiedOn]) FROM [tablename])

Я специально убрал top 1 так как таких записей может быть несколько.

Спасибо, за помощь!

Показать все комментарии
select query
UPPER
Технические вопросы
Разработка

Вопрос такой - при создании в сервисе Select query элемент подзапроса (subquery), в нём выбранное поле возвращается в UpperCase (в просмотре sql для этого поля вызывается UPPER). Ещё функция UPPER добавляется в условие Where строковым параметрам, но не всегда. Я не могу найти, как это убрать. Подскажите?

Нравится

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

Здравствуйте!

Дмитрий, дело в том, что описанная Вами ситуация зависит от используемой версии Terrasoft CRM и СУБД.
Уточните пожалуйста, версию приложения и СУБД.

Terrasoft Support Team

3.1.1.38
Oracle 10g

Добрый день!
в subquery если поле строковое применяэться Upper
ето зашыто в ядре и средствами конфигурации не исправляеться
если Вам надо использовать колонку без Upper
нужно использовать CustomSQLColumn (Колонка с тектом SQL)

но нужно помнить о разделении прав

если таблица администрируеться то для нее создаеться предаставление (view)
например для таблицы tbl_Account представление vw_Account
для пользователя с правами админстратора в запрос подставляеться "tbl_Account"
для пользователя без прав админстратора в запрос подставляеться "vw_Account"
а таблицу не админ не видит из-за етого возникает ошыбка
ORA-00942 таблица или представление не сущетвует...
поетому в CustomSQLColumn нужно использовать вюхи
их видит и админ и пользователь

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