Добавил новые условия фильтрации в группу Задачи в разделе Контакты. Фильтры видны только у администратора у остальных пользователей не работают. В чем может быть проблема? Terrasoft Sale 3

Нравится

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

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

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

Здравствуйте. Помогите пожалуйста разобраться.

Передаю dlData.Dataset.ValAsDateTime('CreatedOn') как параметр sql функции.
Тип параметра sql функции-datetime.
Посмотрела запрос с передаваемыми параметрами в SQL Profiler.

передается в формате: ‘WED MAR 15 14:02:42 UTC+0400 2017’

Возможно ли конвертировать CreatedOn для передачи в качестве параметра в формате datetime (‘2017-03-15 14:02:42.000’)?

Версия 3.2.0.90

Спасибо.

Нравится

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

У меня вызов процедуры с параметром-датой работает так:

	var DepartmentID = edtDepartment.Value;
	var DateFrom = dlDatePeriod.Dataset('DateFrom');
	var DateTo = dlDatePeriod.Dataset('DateTo');
	var SpecialityID = dlSpeciality.Dataset('ID');
	RefreshAchievmentBoardRSETable(ContactIDs,	DepartmentID, SpecialityID,	
		DateFrom, DateTo);
//...
 
function RefreshAchievmentBoardRSETable(ContactIDs,	DepartmentID, SpecialityID,	
	DateFrom, DateTo){
   	var Params = System.CreateObject('TSObjectLibrary.Parameters');
	AddParameter(Params, pdtUnicodeString, ContactIDs).Name = 'ContactIDs';
	AddParameter(Params, pdtGUID, DepartmentID).Name = 'DepartmentID';
	AddParameter(Params, pdtGUID, SpecialityID).Name = 'SpecialityID';
	AddParameter(Params, pdtDateTime, DateFrom).Name = 'DateFrom';
	Params.ItemsByName('DateFrom').DateTimeKind = dtkDate
	AddParameter(Params, pdtDateTime, DateTo).Name = 'DateTo';
	Params.ItemsByName('DateTo').DateTimeKind = dtkDate
	var SQL = 'exec dbo.tsp_PrepareAchievmentBoardRSE :ContactIDs, :DepartmentID, :SpecialityID, :DateFrom, :DateTo ';
	Connector.DBEngine.ExecuteCustomSQL(SQL, Params);	
}

Здравстсуйте Алексанр.

У меня тоже есть(работающий) пример процедуры.
Есть ли пример table-valued функции ?

Есть ли функции конвертации дат, как в SQL?

Спасибо.

Марина, для работы с функциями можно использовать переделанный sq.

О работе с датами см. тут.

Здравствуйте Александр.

"О работе с датами см. тут." - очень помогло. Работает.
"переделанный sq." - этот вариант тоже попробую.

Спасибо !

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

Добрый день.
На сервис sq_OpportunityLog добавил доп условия в WHERE (чтоб деталь логирования показывала не все записи) принудительные галки на условие поставил, чтоб всегда были включены. Но программа игнорирует мои доп условия и использует условия, те что заложенны в типовом варианте.
Не понятно, почему не работает. По трейсу в Провайлере запрос идет в туже таблицу tbl_OpportunityLog

Нравится

10 комментариев

Сервис «sq_Opportunity» относится к основной таблице раздела «tbl_Opportunity», а не к таблице «tbl_OpportunityLog».

Это я описался, я поправил именно сервис sq_OpportunityLog

Будьте внимательнее.:wink:

поправил то я ошибку в описании (на форуме) а в программе у меня правильно был доработан sq_OpportunityLog. но не работает
Вопрос остаеться открытым(((

Алексей, а как именно он был «правильно доработан». Может, дело в этом?

Добавил параметры и уcловия к запросу, вот так он выглядит если смотреть на просмотр (в конфигураторе). :

SELECT
[tbl_OpportunityLog].[ID] AS [ID],
[tbl_OpportunityLog].[RecordID] AS [RecordID],
[tbl_OpportunityLog].[ActionID] AS [ActionID],
[tbl_OpportunityLog].[CreatedOn] AS [CreatedOn],
[tbl_OpportunityLog].[CreatedByID] AS [CreatedByID],
[CreatedBy].[Name] AS [CreatedByName],
[tbl_OpportunityLog].[CustomerName] AS [CustomerName],
[tbl_OpportunityLog].[CustomerID] AS [CustomerID],
[tbl_OpportunityLog].[ChannelName] AS [ChannelName],
[tbl_OpportunityLog].[ChannelID] AS [ChannelID],
[tbl_OpportunityLog].[StageStage] AS [StageStage],
[tbl_OpportunityLog].[StageID] AS [StageID],
[tbl_OpportunityLog].[TypeOpportunityType] AS [TypeOpportunityType],
[tbl_OpportunityLog].[TypeID] AS [TypeID],
[tbl_OpportunityLog].[OwnerName] AS [OwnerName],
[tbl_OpportunityLog].[OwnerID] AS [OwnerID],
[tbl_OpportunityLog].[ContactName] AS [ContactName],
[tbl_OpportunityLog].[ContactID] AS [ContactID],
[tbl_OpportunityLog].[Revenue] AS [Revenue],
[tbl_OpportunityLog].[EstimatedRevenue] AS [EstimatedRevenue],
[tbl_OpportunityLog].[EstimatedStartDate] AS [EstimatedStartDate],
[tbl_OpportunityLog].[EstimatedCloseDate] AS [EstimatedCloseDate],
[tbl_OpportunityLog].[DateConfirm] AS [DateConfirm],
[tbl_OpportunityLog].[AlliasName] AS [AlliasName],
[tbl_OpportunityLog].[AlliasID] AS [AlliasID],
[tbl_OpportunityLog].[IsTender] AS [IsTender],
[tbl_OpportunityLog].[EstimatedRevenueTo] AS [EstimatedRevenueTo],
[tbl_OpportunityLog].[AlliasSHName] AS [AlliasSHName],
[tbl_OpportunityLog].[AlliasSHID] AS [AlliasSHID]
FROM
[dbo].[tbl_OpportunityLog] AS [tbl_OpportunityLog]
LEFT OUTER JOIN
[dbo].[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_OpportunityLog].[CreatedByID]
WHERE([tbl_OpportunityLog].[RecordID] = :RecordID AND
(EXISTS
(SELECT
[tbl_ContactDepartment].[ID] AS [ID]
FROM
[dbo].[tbl_ContactDepartment] AS [tbl_ContactDepartment]
WHERE([tbl_ContactDepartment].[ContactID] = '{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}' AND
[tbl_ContactDepartment].[DepartmentID] =
(SELECT TOP 1
[tbl_Opportunity].[ChannelID] AS [ChannelID]
FROM
[dbo].[tbl_Opportunity] AS [tbl_Opportunity]
WHERE([tbl_Opportunity].[ID] = :RecordID)))) OR
'{EAB3D8EC-5400-4A26-8634-ACA9203EEB8E}' IN
(SELECT
[tbl_AdminUnit].[ID] AS [ID]
FROM
[dbo].[tbl_AdminUnit] AS [tbl_AdminUnit]
WHERE([tbl_AdminUnit].[UserIsAdmin] = :Is AND
[tbl_AdminUnit].[UserIsEnabled] = :Is))))

ORDER BY
4 DESC

Запрос рабочий если подставить параметры . Но при тестировании в трейсе Провайлера все равно с типовым условием , запрос как будто видит старый сервис.

А с правами доступа всё в порядке?

Да вроде норм, что под админом что просто под пользователем трейс ведет себя одинаково странно: при первом переходе на вкладку детали журнал изменения:
1) отрабатывает мой запрос (который я поправил),
2) а следом идет старый запрос:
exec sp_executesql N'SELECT TOP 40
[tbl_OpportunityLog].[ID] AS [ID],
[tbl_OpportunityLog].[RecordID] AS [RecordID],
[tbl_OpportunityLog].[ActionID] AS [ActionID],
[tbl_OpportunityLog].[CreatedOn] AS [CreatedOn],
[CreatedBy].[Name] AS [CreatedByName],
[tbl_OpportunityLog].[CustomerName] AS [CustomerName],
[tbl_OpportunityLog].[ChannelName] AS [ChannelName],
[tbl_OpportunityLog].[StageStage] AS [StageStage],
[tbl_OpportunityLog].[TypeOpportunityType] AS [TypeOpportunityType],
[tbl_OpportunityLog].[OwnerName] AS [OwnerName],
[tbl_OpportunityLog].[ContactName] AS [ContactName],
[tbl_OpportunityLog].[Revenue] AS [Revenue],
[tbl_OpportunityLog].[EstimatedRevenue] AS [EstimatedRevenue],
[tbl_OpportunityLog].[EstimatedStartDate] AS [EstimatedStartDate],
[tbl_OpportunityLog].[EstimatedCloseDate] AS [EstimatedCloseDate],
[tbl_OpportunityLog].[DateConfirm] AS [DateConfirm],
[tbl_OpportunityLog].[AlliasName] AS [AlliasName],
[tbl_OpportunityLog].[IsTender] AS [IsTender],
[tbl_OpportunityLog].[EstimatedRevenueTo] AS [EstimatedRevenueTo],
[tbl_OpportunityLog].[AlliasSHName] AS [AlliasSHName]
FROM
[dbo].[tbl_OpportunityLog] AS [tbl_OpportunityLog]
LEFT OUTER JOIN
[dbo].[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_OpportunityLog].[CreatedByID]
WHERE([tbl_OpportunityLog].[RecordID] = @P1)
ORDER BY
4 DESC',N'@P1 varchar(8000)','{073780C3-F023-4CC9-B3A6-00036BFA6A30}'

, и если перейти к следующей записи, то уже только 2-ой запрос работает.

Функция RefreshChangesLogDetail в scr_BaseWorkspace вызывает RefreshDetailData из scr_DB, а та запускает функцию RefreshDetailDataByParentID.

RefreshDetailDataByParentID(ParentFieldValue, ChildDataset, ChildFilterName, false);

А в ней происходит отключение всех фильтров при помощи:

EnableDatasetFilters(ChildDataset, false);

Чтобы фильтры не отключались, нужно вызывать эту функцию RefreshDetailDataByParentID с последним параметром DoNotDisableAllFilters, равным true.

Вы можете внести доработку, чтобы эта функция запускалась со включенными фильтрами конкретно для нужной детали или для всех, в зависимости от потребностей. Понять внутри функции, что за деталь, можно по ChildDataset.SelectQuery.Caption равному "sq_OpportunityLog".
Получится вроде:

RefreshDetailDataByParentID(ParentFieldValue, ChildDataset, ChildFilterName, (ChildDataset.SelectQuery.Caption == 'sq_OpportunityLog'));

Спасибо, теперь все получилось.

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

Доброго времени суток, коллеги.
Клиент TerrasoftCRM 3.3.2.245
Такая проблема: на основании данного форума я сделал сервис SelectQuery:

SELECT
        1 AS [a] INTO #tmp
DROP TABLE #tmp

EXEC GetMissingDocuments
/*  AS [FakeHeader],
         AS [DocNumber],
         AS [TaskID],
        */

IF 1=0
SELECT 1 AS [FakeFooter]
FROM
        [dbo].[tbl_DatabaseInfo] AS [tbl_DatabaseInfo]

и вызывал через него хранимую процедуру. Вызывал так:
[js]
var SelectQuery = GetSingleItemByCode('sq_GetMissingDocuments', 'GetMissingDocumentsTasks');
var Result = SelectQuery.Open();
[/js]
Пока база работала на MS SQL Server 2005 все было нормально. После перехода на SQL Server 2008 R2 при вызове SelectQuery.Open() получаю ошибку "Ошибка открытия источника данных "".
Оригинальное сообщение об ошибке: Неопознанная ошибка". Причем если выполнить этот запрос в SSMS, то он выполняется корректно. В SQL Server Profiler ошибок тоже нет. На клиентском компьютере установлена версия SQL Native Client 2008 R2. Куда еще можно копнуть?

Нравится

5 комментариев

Можно переделать логику чисто на скрипт, без сервиса. Как тут.

"Зверев Александр" написал:Можно переделать логику чисто на скрипт, без сервиса.

Моя хранимая процедура возвращает таблицу. Ее можно завернуть в выходной параметр хранимой процедуры?

Можно процедуру в функцию переделать, с функциями в 2008 проблем не было. Также см. обсуждение, там тоже под новую версию переделывали.

"Зверев Александр" написал:Можно процедуру в функцию переделать

Попробую конечно, но все равно не понятно. У меня в базе есть еще одна аналогичная конструкция. Отличается тем, что ХП в ней получает параметры и результат достается через Dataset и отображается на форме. И она прекрасно работает.

Подобные способы использования что процедуры, что функции являются «хаком» и обходом стандартного поведения сервиса sq, их работа всегда и везде не гарантируется. Возможно, в 2008 что-то изменилось в движке работы с БД.

"Riptor" написал:И она прекрасно работает.

Это хорошо.:cool:

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

Добрый день!

Никто не сталкивался с такой проблемой:

Есть на форме контрол LookupDataControl. В свойствах Dataset-а связанного с контролом, стоит признак "Отображать как выпадающий список в карточках", что несоменно, удобно, если значений немного.

Есть необходимость в скрипте вызвать метод UnPrepareDropDownList() (чтобы при следующем открытии выпадающего списка сработало событие OnPrepareSelectWindow)
Но штука в том, что тут же автоматически вызывается событие OnPrepareSelectWindow()...
Если сбросить флаг "Отображать как выпадающий список в карточках" в свойствах датасета - событие перестает вызываться, но хотелось бы выпадающий список оставить на форме.

Спасибо!

Версия 3.3.2.313

Нравится

5 комментариев

А в чём необходимость вызывать событие OnPrepareSelectWindow позже, а не сразу?

Хотел попробовать это:
http://www.community.terrasoft.ru/blogs/2232
чтобы при смене значения в контроле форма при показе новых контролов не так сильно передергивалась...

Чтобы не передёргивалось, нужно использовать BeginUpdate и EndUpdate.

Это понятно, вопрос в том когда и где вызвать эти методы. Непосредственно перед показом/скрытием контролов BeginUpdate и после показа/скрытия контролов EndUpdate... это вроде помогает, но все равно эффект передёргивания есть. + это бы распространить на прорисовку разделов...

Эти методы вызываются перед и после тех операций, которые меняют видимость.

Стоит также учесть, что в версии 3.4.0 и выше по сравнению с 3.3.2 был переработан графический движок. При неизменности API он стал работать лучше, плюс добавились новые возможности дизайна страниц.

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

Подскажите пожалуйста, если лендинг создан в специальном сервисе создания посадочных страниц вроде Платформа LP, Тильда, LP Generator или Флексби, где исходный код формы изменить нельзя (там где нужно добавить onSubmit="createObject(); return false") то интеграция невозможна?

Так же в исходном коде для полей формы нет ID, а классы для всех полей одинаковые (разные только значения value), как быть в таком случае?

К примеру:

Это вообще предусмотрено?

Нравится

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

Добрый день, Катерина.

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

Готового решения для добавления кода в нерадактируемые формы нет.

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

доброго времени суток!
webitel 1.3 не видит регистраций телефонов("нет регистраций/ожидание").
может что упустил при установке сервера?
буду признателен за любую мысль по этом поводу

Нравится

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

Здравствуйте, Владимир!

Для решения вопросов настройки программного продукта webitel обратитесь, пожалуйста, за консультацией к разработчику данного ПО - компании Webitel (ссылка на портал их техподдержки: https://my.webitel.com/servicedesk/customer/user/login?destination=port…).

Здравствуйте, Алла!
я надеялся на не коммерческую помощь, а так как у webitel нет своего community, я думал ваш для этого и создан.

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

Добрый день!

Как можно создать отчет, включающий контрагента и его описание? Что бы можно было выбирать по контрагентам и ответственным лицам.

в CRM 3.3.2.313

http://prntscr.com/ecss60

Спасибо!
Хайдар

Нравится

6 комментариев

Вы можете создать отчет одним из двух способов:
1. Отчет в формате MS Word с доработкой под вывод содержимого детали [Описание].
Пример реализации есть здесь
2. Отчет в формате FastReport.
На форуме можно найти множество примеров. Дополнительно во вложении прилагаю ориентировочный пример реализации (инструкция подготовлена для версии ниже, но принцип реализации не изменился).

Добрый день, Наталия.

Я все сделал по инструкции "Создание отчета", в результате показывает так:

Подскажите, в чем может быть причина?

http://prnt.sc/edwwg0

Спасибо!
Хайдар

Судя по скриншоту, в отчёте пытается вывести обычным текстом содержимое RTF-поля. Возможно, в дизайнере отчёта неверно выбран тип контрола (пункт инструкции 22) или что-то неверно сделано с этой колонкой при создании SQ и DS-сервисов.

22. На бэнд MasterData нужно добавить поле RichTextObject. Укажите для этого контрола поле Description.

Можете объяснить по картинками как этот пункт делать?
спасибо!

Вот оно. Выбираете, размещаете на форме, затем задаёте датасет и поле.
rich text

Всем спасибо!
Работает нормально

Хайдар

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

Можно ли добавить свой пункт в контекстное меню правой кнопки мыши карточки редактирования ?

Нравится

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

Здравствуйте, Дмитрий!

Так как данная функциональность реализована на уровне ядра, доступными пользовательскими средствами этого сделать нельзя.

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

"Зверев Александр" написал:можно сделать новое пользовательское меню средствами разработки конфигурации

Это интересно. А где-нибудь примеры кода есть?

К сожалению, готовых примеров нет.
Меню с пунктами создаётся в дизайнере карточки как невизуальный компонент и крепится к полю ввода.
menu
tree

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

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

На редактируемом окне добавила поле "состояние". Тип поля в датасете - 'Поле справочника'.
При попытке открыть список значений этого поля на окне, выдает следующее сообщение:

Невозможно загрузить список для "edtState".ds_XXXState.ключевое поле данных не определено.

Можете подсказать где искать ошибку ?

Нравится

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

Видимо, при создании справочника не определили ключевое поле.
Должно быть так:
ds

Работает. Спасибо большое!

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