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

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

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

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

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

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

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

Нравится

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

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

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

Добрый день.
Мне нужно создать сложный запрос на подсчет количества свободных продуктов в карточке Продукт в продаже с помощью сервиса 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 и будет количество записей удовлетворяющим условию.

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

Добрый день.
Подскажите пожалуйста, где можно посмотреть как создать запрос 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

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

Здравствуй многоуважаемый 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 элемент подзапроса (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 нужно использовать вюхи
их видит и админ и пользователь

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