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

Возникла задача построить график по собственному запросу. Пошел штатным путём: Графики-добавить, обозвал его, выбрал раздел, расположение. Запрос - нужного запроса в предлагаемом списке, конечно, нет, поэтому нажимаю Добавить. В списке таблиц, предлагаемых в качестве Главной, отсутствует та, на основании которой у меня строится запрос - tbl_tasklog. Как до неё добраться?
Возможно, я изначально пошел по неправильному пути. Исходная постановка задачи: хочу видеть сколько задач за выбранный период изменили своё состояние. Показать с группировкой по конечному состоянию.

Нравится

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

Вдогонку. Какие условия должны выполняться, чтобы стала активна кнопка "Ок" в окошке создания нового графика? Только заполнение обязательных полей не включает кнопку сохранения.

Если так и не увидите tbl_tasklog, то можно создать в БД View на основании этой таблицы и на основании этого View - сервис tbl_ в Terrasoft

Таблица не видна из-за условия в запросе:

SELECT DISTINCT TOP 40
	[tbl_Service].[ID] AS [ID],
	[tbl_Service].[Code] AS [Code],
	[tbl_Service].[Caption] AS [Caption],
	NULL AS [NewCode]
FROM
	[dbo].[tbl_Service] AS [tbl_Service]
LEFT OUTER JOIN
	[dbo].[tbl_Workspace] AS [tbl_Workspace] ON [tbl_Workspace].[TableID] = [tbl_Service].[ID]
WHERE(((NOT [tbl_Workspace].[TableID] IS NULL)))
ORDER BY
	3 ASC

этот запрос формируется в сервисе sq_SelectService (не рекомендую его менять) вызываемый источником данных ds_SelectService.

Если Вам необходимо видеть определенную таблицу, в таком случае создайте свой запрос и источник данных на основании уже существующих, и добавьте в условие запроса необходимую фильтрацию. В функции ShowSelectMainTable находящуюся в сервисе wnd_IWTQueryWizardScript, замените передаваемый код сервиса с ds_SelectService на свой, при вызове функции ShowSelectServiceWindow:

	var SelectService = ShowSelectServiceWindow(Services.GetNewItemByUSI('ds_SelectService'), 
		'Caption;Code', 'Caption;Code',	'Code', '', 'Caption', Sender.Value, null,
		'', true, true, '', '', true);
Показать все комментарии

Здравствуйте! Столкнулся со следующей проблемой.
На страницу редактирования контакта добавляю кнопку(при нажатии выводится имя контакта) при помощи такого кода:

define("ContactPageV2", [], function() {
        return {
                entitySchemaName: "Contact",
                details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
                diff: /**SCHEMA_DIFF*/[
        {
                       
                        "operation": "insert",
                       
                        "parentName": "ActionButtonsContainer",
                       
                        "propertyName": "items",
                       
                        "name": "Name",
                       
                        "values": {
                               
                                itemType: Terrasoft.ViewItemType.BUTTON,
                               
                                caption: { bindTo: "Resources.Strings.Name"},
                                click: { bindTo: "getName"},
                               
                                "layout": {
                                        "column": 1,
                                        "row": 6,
                                        "colSpan": 1
                                },
                                style: "red"
                        }
        }
]/**SCHEMA_DIFF*/,
                methods: {
                        getName: function() {
                                var name = this.get("Name");
                                this.showInformationDialog(name);
                        }
                },
                rules: {}
        };
});

Сохраняю схему, делаю очистку кеша и аппаратную перезагрузку, перехожу на страницу редактирования какого-нибудь контакта - кнопки нет. Снова делаю очистку кеша и аппаратную перезагрузку - кнопка появляется и при нажатии выводится имя контакта. Но стоит перейти, например, в другой раздел, потом снова вернуться на страницу редактирования контакта, то кнопки снова нет. И чтобы она появилась нужно сделать очистку кеша и аппаратную перезагрузку.

Может кто-нибудь объяснит в чем проблема. Заранее благодарен.

Нравится

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

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

Воспользуйтесь статьей https://academy.terrasoft.ru/documents/technic-sdk/7-8/kak-dobavit-knop….

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

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

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

В разделе Документы настроены итоги, записи раздела отфильтрованны по быстрому фильтру даты (например выбран Сегодня), при переходе в другой раздел и возврате в раздел Документы итоги отображаються как если бы фильтра по дате не было, если нажать Сегодня итоги обновляться и отображаться верно.

Подскажите пожалуйста, с чем это может быть связанно и что возможно сделать, что бы исправить проблему?

Sales Team Версия 7.7.0.2284

Нравится

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

Быстрый фильтр вроде начал сохраняться при переходах только с 7.8

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

Исправлено в более поздних версиях. Поведение связано с тем, что установленный в разделе фильтр не не отработал по причине асинхронности запросов.

Рекомендуем обновиться на 780.

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

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

Системный администратор видит группы всех пользователей. В схеме "Группа контрагента" включено администрирование по записям. Насколько я понял системный администратор игнорирует администрирование по записям.

Что нужно сделать что бы системный администратор видел только свое группы(что бы для него работали права на схему "Группа контрагента")?

Нравится

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

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

Запретите доступ системным администраторам к операции с кодом CanSelectEverything. В результате на роль "Системные администраторы" будут распространятся права на чтение записей согласно распределению прав.

Алексей, вначале убрал галочку для системного администратор в операции CanSelectEverything. Сис. админ перестал видеть все записи в разделах, но группы по прежнему видит все, хотя у них права только на пользователя создавшего их.
Удалил запись из операции CanSelectEverything, но ничего не изменилось.

Подскажите в чем дело?

Администрирование по записям, для объекта тестируемой группы включено.

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

Проверьте запросом права на группы:

select * from Sys[Object]FolderRight /*[Object] - объект раздела, в котором создаются группы*/

Скорее всего у системного администратора есть права на группу, либо пользователь (системный администратор) наследует эти права у своего подчиненного, у которого есть право на просмотр этих групп.

Алексей спасибо, разобрался.
Подскажите пожалуйста где хранятся данные о том что *Группа руководителей является группой руководителей для обычной группы? Все группы руководителей создавались через признак "Существует роль руководителей", теперь нужно эти группы руководителей сделать обычными группами.
Можно убрать признак и создать группы заново и наполнить их, но хотелось бы сделать это через SQL? т.к. групп очень много.

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

Добрый день.

У меня такой вопрос, можно ли функционал календаря, который находится в разделе активностей перенести в другой раздел?

Нравится

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

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

У раздела "Активности" создано отдельное представление. Реализацию Вы можете посмотреть в ActivitySectionV2.
Код, который рисует календарное представление:

				{
					"operation": "insert",
					"name": "Schedule",
					"parentName": "DataViewsContainer",
					"propertyName": "items",
					"values": {
......................../*много букв*/...............................
					}
				},

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

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

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

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

Как добавить поля в карточку быстрого создания задачи например поле описание задачи, а так же как можно сделать это поле видимым только при выборе категории "Выполнить".

Нравится

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

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

Для добавления поля Вам необходимо заместить мини-карточку активности. Операция замещения не отличается от операции замещения обычной страницы редактирования. Для добавления нового поля используйте операцию INSERT. Пример создания мини-карточки Вы можете найти по ссылке (Вам нужно взять часть кода из этой инструкции_:
https://academy.terrasoft.ru/documents/technic-sdk/7-8/sozdanie-mini-ka…
Код, который добавит поле:

            {
                "operation": "insert",
                "name": "Notes",
                "parentName": "MiniPage",
                "propertyName": "items",
                "values": {
                    "labelConfig": {
                        "visible": false
                    },
                    "isMiniPageModelItem": true,
                    "layout": {
                        "column": 0,
                        "row": 1,
                        "colSpan": 24
                    }
                }
            }

Обратите внимание, что структуру схемы мини-карточки необходимо сохранить.
Для решения Вашей задачи с видимостью поля Вы можете использовать бизнес-правила:
https://academy.terrasoft.ru/documents/technic-sdk/7-8/biznes-pravila-i…

Демьяник Алексей, а можете скинуть md файл с примером замещения мини карточки?

Добрый день!
Пример замещающей страницы мини-карточки лида во вложении.
leadminipage.txt

Зарицкий Олег, спасибо получается я все правильно сделал, а как выполнить регистрацию мини-карточки в базе данных?

выполнил скрипт после чего министраница вовсе перестала отображаться и в консоли появились ошибки

Дмитрий, нужно проводить отладку. Либо напишите в службу поддержки для восстановления мини-карточки по умолчанию.

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

Добрый день.
Подскажите как при добавлении Дополнение к договору сделать автозаполнение поля Договор(справочник)(необходимо подставить договор)?
Добавил скриншот(договор 999007 )

Нравится

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

Можно на PageLoadComplete карточки проверять, если IsNew или IsCopy, то заполнять поле.
Или же настроить в свойствах детали в «Рабочих местах» ещё одну связь типа «Значение по умолчанию» с нужным полем.

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

Добрый день.

У меня такая проблема:
Пользователь добавил договор, после договор был изменен. Через некоторое время его не оказалось и как было видно было из журнала он был удален этим пользователем, хотя у него нет прав на удаление и кнопка "Удалить" не активна. Вот скриншот:

В чем может быть проблема?

Нравится

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

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

Ещё раз проверьте настройку прав доступа для данного пользователя:
1) права доступа на группу таблиц [Договоры];
2) права доступа по умолчанию на группу таблиц [Договоры].

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

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

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

Скажите, почему в полях CreatedOn и ModifiedOn записей таблицы Activity есть разница во времени при создании новой записи без модификации? Неужели после Insert происходит Update ModifiedOn и зачем это сделано? BPM 78
См. рисунок.

Нравится

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

Посмотрел профайлером - и правда через некоторый интервал после insert самой активности и связанных событий (права, например) выполняется запрос

exec sp_executesql N'
UPDATE [dbo].[Activity]
SET
	[ModifiedOn] = @P2
WHERE
	[Id] = @P1',N'@P1 uniqueidentifier,@P2 datetime2(7)',@P1='22500B7C-DD4D-449A-AD6D-48EBE7A18B02',@P2='2016-08-19 07:38:11.5640924'

Откуда он инициируется не знаю :)

Если не секрет, какую цель преследуете, просто интерес + понять намного глубже события "под капотом"? Вроде мелочь это, но странная соглашусь.

А вот откуда вызов идет
Объект ActivityParticipant (пакет Base), его процесс.
Там есть обработка события ActivityParticipantInserting. Вызывается элемент скрипт с оригинальным названием ScriptTask1.
В его коде находим:

Update update = new Update(UserConnection, "Activity")
	.Set("ModifiedOn", Column.Parameter(DateTime.UtcNow))
	.Where("Id").IsEqual(Column.Parameter(Entity.GetTypedColumnValue<Guid>("ActivityId"))) as Update;
update.Execute();

А зачем оно - типа при добавлении участника в задачу, мы должны отработать это как изменение самой задачи, что по сути правильно :cool:

Просто заметил такую странность. Лишний запрос - создает лишнюю нагрузку на сервер.
Как можно выяснить откуда и зачем он инициируется? Чтобы если что убрать его.

А можно сделать, чтобы при Insert записи Активности этой модификации не было бы?
А уже при повторном добавлении участника - было бы?

"Alex GF" написал:Как можно выяснить откуда и зачем он инициируется? Чтобы если что убрать его.

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

"Alex GF" написал:А можно сделать, чтобы при Insert записи Активности этой модификации не было бы?

Видимо можно, только овчинка не стоит выделки...
В 3х просто отключали события, а здесь надо как то подумать чтобы это событие не отрабатывало, например - переписать заполнение участников в sql запрос (а не через объект) и вызывать его по факту создания задачи, при этом обращение к объекту ActivityParticipant не будет и соответственно его события задействованы не будут. Копать процесс на объекте Activity (событие типа Inserted)

"Александр Кудряшов" написал:

А вот откуда вызов идет

Объект ActivityParticipant (пакет Base), его процесс.

Там есть обработка события ActivityParticipantInserting. Вызывается элемент скрипт с оригинальным названием ScriptTask1.

В его коде находим:


Александр, пока осваиваю БПМ, подскажите как правильно сделать:
Хочу с помощью замещающего объекта убрать из обработки события ActivityParticipantInserting Update поля ModifiedOn:
Создал замещающий объект ActivityParticipant (пакет Custom).
Как теперь в нем убрать Update ModifiedOn?

Я так понимаю назначить обработчик на событие Inserting в новом объекте (событие перед добавлением), далее в процессе после стартового сообщения поставить элемент скрипт с новым содержимым и далее элемент завершения процесса. Примерно так
ps - в оригинале завершения нет, можно значит и без него.
pps - не забудьте дать уникальные имена всем новым элементам на схеме процесса (включая "стрелочку"), чтобы ни в коем случае они не пересеклись с существующими в родителе, в 7.6 это приводило к обрушению при компиляции

ppps - еще тонкость есть, сейчас опишу
Чтобы отключить выполнение родительского кода, после реализации своего обработчика добавьте такой код, например в еще одном элементе сценария

if (ActivatedEventElements.Contains("ActivityParticipantInserting")) {
ActivatedEventElements.Remove("ActivityParticipantInserting");
}
return true;

Это отключит родительский обработчик

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

Здравствуйте!
Подскажите, как подключить SQL Server Profiler к конкретной BPMOnline 7.8, чтобы посмотреть какие запросы в базе происходят при, к примеру создании новой Продажи?

Нравится

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