341
Создал раздел на тестовой БД, перенес его на рабочую, скопировал запись из таблицы tbl_Workspace на рабочую БД.
добавил раздел в рабочих местах, создал новою группу в администрировании, заполнил ею поле Группа таблиц в главной таблице нового раздела.
При загрузке ТС и переходе на новый раздел появляется ошибка - разрушительный сбой на строке
wndWorkspace.Window = WorkspaceWindow;
в функции
ShowGroupWorkspace
поставил дебагер, но он ошибки не показал!!!! и до конца функции все отработало хорошо, разрушительный сбой появился аж после окончания функции amiWorkspacesOnExecute.
впервые с такой проблемой стыкаюсь и уже сутки пытаюсь решить ее

Нравится

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

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

Если до добавления раздела всё работало корректно на обеих базах, а после сломалось, то всему виной некорректное добавление раздела. Попробуйте удалить раздел и создать его заново. Для создания можно воспользоваться мастером разделов. Добавлять новые поля в раздел лучше при помощи FieldMaker.

"Зверев Александр" написал: Попробуйте удалить раздел и создать его заново

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

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

простите, был не внимательный, с тестой базы перетащил воркспейс где была активна нерабочая вкладка, в клиенте было на рабочей и все работало отлично, когда перенес - ТС отрывал по умолчанию активную вкладку - нерабочую, отсюда все проблемы...
А тестовая наверно сломалась из-за того, что кеш почистил

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

Добрый день!

Подскажите, как можно автоматически выполнить задачу по процессу в TS 3.X?
Например, стоит задача "проверить оплату". И каждую ночь система проверяет (в базе данных или с вызовом приложения), получена ли оплата.
Если получена, то необходимо закрыть задачу, как выполненную и перейти к следующему шагу процесса.

Нравится

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

Владимир.
Сделать то, что Вы хотите можно прописав все необходимые действия кодом,
который выполнять в нужное время по таймеру. Для TS 3.4 и старше через
раздел JobManager, для более ранних версий, через планировщик Windows,
или какой-то свой крон. В скриптах можно и задачу закрыть, и следующую поставить.
Мы подобное делали, если нужна конкретная помощь, пишите в личку.

"Тимофеев Александр" написал:
Для TS 3.4 и старше

У клиента 3.3.2
Боюсь, upgrade будет слишком трудозатратен

Мы пользовались программой nnCron (https://ru.wikipedia.org/wiki/NnCron).
Ее версия Lite бесплатна, но обеспечивает все необходимое и ставится как сервис.
Скрипты запускаются через WSH в командной строке. Прописываем коннект к конфигурции
и выполнение скриптов. Примеры есть в SDK. В nnCron есть логи, видно когда и что запускалось.
Можно настроить выполнение скриптов без отображения. Только надо установить параметр
AsLoggedUser OFF в ini файле и запускать сервис от системного пользователя, чтобы запускались
скрипты из командных файлов.
Больше "хитростей" нет.
Если не получится, напишите, я поищу в архивах работающий пример.

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

Можно реализовать эту функциональность на уровне базы данных в триггере.

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

Найти элемент задачи можно по полю WorkflowItemID в tbl_Task, а искать в tbl_WorkflowItem. В tbl_WorkflowItem определить WorkflowID для следующего элемента, который нужно создать (так в базовой версии, в Вашей версии могут быть отличия).

"Савельева Алла" написал:Можно реализовать эту функциональность на уровне базы данных в триггере

Наверное, на уровне БД параметры процесса не поменять...

"Владимир Соколов" написал:Наверное, на уровне БД параметры процесса не поменять...

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

В некоторых случаях можно.

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

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

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

Добрый день!
При удалении инцидента появляется ошибка "ParentDataset - есть null или не является объектом"
Отладчик ссылается на строчку var Dataset = DataFields.ParentDataset; скрипта ds_IncidentScript

function DataChange(DataField){
        if (DataField == null) {
                return;
        }      
        var DataFields = DataField.ParentDataFields;
        var Dataset = DataFields.ParentDataset;
        if (Dataset.Attributes('IsUpdating')) {
                return;
        }
        var Name = DataField.Name;
                            ...

При создании и редактировании инцидентов никаких ошибок не происходит, все прекрасно работает. Ошибка появляется только при удалении. Причем после закрытия ошибки запись удаляется.
Если кто-нибудь может подсказать в чем может быть проблема, буду крайне благодарен!

Нравится

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

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

Если это какая-то доработка, можно добавить в скрипт дополнительные проверки на null или обернуть в try.

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

Добрый день.

Стоит задача.
Есть сайт. Пользователь сайта, кликая по кнопке на сайте, должен инициировать определенное событие в CRM. Например, должна появиться новая задача (новая запись в таблице Задачи).

Вариант, когда сайт напрямую обращается к БД нашей CRM не подойдет.
Как еще можно реализовать подобную функциональность?

Спасибо.

Нравится

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

Например, можно запустить из командной строки TSClient с нужными аргументами командной строки, который выполнит нужное и закроется (как тут).
Учтите, что запуская с сайта exe-файл нужно будет соблюдать осторожность, чтобы не получилась уязвимость запуска чего угодно.

Александр, здравствуйте.
Думаю, что такой вариант нам не подойдет. Для его реализации у каждого пользователя сайта должен быть установлен TS клиент, если я правильно Вас поняла. А пользователь сайта - это не сотрудник компании, а наш клиент.

Вопрос в том, как из сторонних систем, сайтов и пр. "стучаться" в CRM, кроме как напрямую в БД?

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

Как передать произвольные параметры через командную строку — см. тут.

"Зверев Александр" написал:Речь о запуске программы на сервере.

на сервере сайта?

Да, на сервере сайта. Но с осторожностью.

Александр, спасибо. Идея в целом понятна. Каждый раз получая от пользователя сайта нужную команду, на сервере сайта запускаем клиента Террасофт, например, с определенного окна и с набором атрибутов. А на событии OnPrepare() этого окна будет отрабатывать вся необходимая нам логика.

Этот вариант хорош, если нужно разово реализовать подобную функциональность.
Но у нас в скором времени таких вот модификаций данных в срм "извне" планируется много (и не только с сайта, но и из других систем). Потому нужен какой то более гибкий, надежный и безопасный инструмент.

Более гибкий, надёжный и безопасный инструмент — это bpm'online 7.Х. Там есть возможность создавать свои веб-сервисы или запускать БП извне.

:smile: но увы у нас Terrasoft CRM 3.3.2.

На сколько я понимаю настройка веб сервиса доступна и на 3.X?
Здесь нашла примеры работы с веб сервисом из внешних приложений.

Не знаете, насколько это вообще реализуемо на тройке? И стоит ли браться?

Можно попробовать и так, как по ссылке.
Подобным образом работает веб-форма портала самообслуживания в Service Desk 3.Х.

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

Добрый день.
Помогите пожалуйста в решении такой задачи:
На событии OnKeyUp проверяется некое условие, если оно верно, то в поле нужно вставить строку и продолжыть ввод текста с клавиатуры. Но при вставке строки, курсор оказывается в начале строки, а нужно чтобы он был в конце. Можно ли это реализовать? Можно ли вызвать событие то же событие, что выполняется при нажатии на кнопку END?
Terrasoft 3.4.0.130

Нравится

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

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

Для решения проблемы рекомендую Вам обновиться до последней версии 3.4.1.

Для того, чтобы получить файлы обновления на эту версию, обратитесь, пожалуйста, в службу поддержки Terrasoft - напишите электронное письмо на адрес: support@terrasoft.ru.

И как мне это поможет?

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

Я предположила, что в последней версии 3.4.1, данное событие отрабатывает иначе, чем в 3.4.0.130, но, к сожалению, в этой версии поведение курсора аналогичное.

Решить данную задачу можно таким образом.

Вместо контрола Edit используйте MemoControl. В обработчике OnKeyUp пропишите такой код:

function edtMemoControl1OnKeyUp(Control, Key, Shift) {
var saveValue = Control.Value;
Control.Value = "";
Control.SelectedText = "@" + saveValue;
}

Для того, чтобы в MemoControl не срабатывал переход на новую строку в свойстве WordWrap установить значение False и в обработчике события OnKeyPress написать код:

function edtMemoControl1OnKeyPress(Control, Char) {
if (Char.Value == 13) {
Char.Value = 0;
}
}

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

Хочу добавить картинку в ImageList.

ImageL = Services.GetSingleItemByUSI('il_TDpics');
var FileName = System.CreateObject('TSObjectLibrary.Value');
if (!(System.OpenDialog(FileName, '*.jpg|*.jpg', EmptyStr, EmptyStr, EmptyStr))) {
return;
}
var ImageItem = ImageL.CreateImage();
ImageItem.ImageType = 2;
ImageItem.LoadFromFile(FileName);

Выдает ошибку. См. присоединенный файл. Просьба подсказать решение.
Вручную рисунки добавляются. Такой код работает

var part1 = 'C:\\Program Files\\Terrasoft\\Res\\';
var part2 = dlData.Dataset.DataFields('DeliveryPointID').Value;
var Final_5 = part1 + part2 + '5.jpg';
if (fso.FileExists(Final_5)) {
var ImageList = Services.GetNewItemByUSI('il_CommunicationActionSmartTag');
var ImageItem = ImageList.CreateImage();
ImageItem.LoadFromFile(Final_5);

Нравится

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

Если картинка лежит где-то в файловой системе — нужно получить строку с её адресом. У Вас в работающем примере в функцию LoadFromFile передаётся строковая константа. А в первом — какой-то объект, возвращаемый из диалогового окна. Попробуйте в отладчике посмотреть, что передаётся в переменную FileName и в чём отличие от работающего примера.

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

Спасибо от ошибки избавился. Но завершить работу не получается. Вот код:

var ImageList = Services.GetNewItemByUSI('il_DPpics');
var FileName = System.CreateObject('TSObjectLibrary.Value');
if (!(System.OpenDialog(FileName, '*.jpg|*.jpg', EmptyStr, EmptyStr, EmptyStr))) {
return;
}
var ImageItem = ImageList.CreateImage();
ImageItem.ImageType = 2;
imgTDp1.ImageList = ImageList;
ImageItem.LoadFromFile(FileName.Value);
ImageList.Add(ImageItem);
imgTDp1.ImageList = ImageList;
imgTDp1.ImageName = dlData.Dataset.DataFields('DeliveryPointID').Value + '1';

Все вроде бы работает. В отладчике я виж, что число изображений в ImageList увеличилось с 3 до 4, вижу правильные размеры картинки. Потом уже из ImageList заполняю imgTDp1 и вижу картинку на форме. Но после того, как я закрываю карточку редактирования, введенная картинка исчезает из ImageList. Методов Open / Save для ImageList я не нашел. Как правильно все закрыть, чтобы результаты работы сохранились? Подробности в присоединенном файле.

Вы меняете объект в памяти, а GetNewItemByUSI берёт его сериализированное представление из базы, где оно хранится вместе с другими сервисами.

Для сохранения сервиса делается:

Services.SaveItem(ImageList, sdoaSave);

См. пример реализации в мастере разделов, в скрипте wnd_LoadWorkspaceIconScript.

Спасибо. Уже почти у цели (см. вложение). Может подскажете, как удалить ImageItem из ImageList
Пробовал, что пришло в голову: Remove(), Delete(), ImageList.Items(i) = ImageList.Items(i + 1)? но не вышло. Может быть, менять Name, это возможно?

Увидеть названия всех методов, которые есть у объектов ImageList и ImageItem, можно прямо в отладчике. Если таких методов нет — простым способом удалить не получится.

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

Нужно отфильтровать операции по состоянию связанной с операцией продажи.

В разделе продажи есть, например, вот такой фильтр по отрасли контрагента:

Мне нужно что-то похожее. Каким образом это сделать?
Спасибо!

Нравится

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

Такие фильтры делаются в TSAdmin. В частности, «отрасль» настроена в сервисе «sq_Opportunity».
фильтр «отрасль»
Вам нужно создать свой фильтр аналогично.

"Зверев Александр" написал:

Такие фильтры делаются в TSAdmin. В частности, «отрасль» настроена в сервисе «sq_Opportunity».

Вам нужно создать свой фильтр аналогично.


Александр, спасибо!

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

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

Возможно ли реализовать в б-п переход на следующий элемент по таймеру?
Например, прошло 5 минут, если не исполнился элемент, мы переходим на следующий. Пытались сделать через "Исключающее ИЛИ по событиям", которое разветвлялось бы на таймер и необходимое событий, но всегда отрабатывает по ветке таймера, опуская само событие.

Нравится

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

Анастасия, добрый день!

У каждого элемента есть условия, при которых он считается выполненным. “Перескочить” элемент через определенное время не получится. У вас верный подход к решению:
1. Элемент [Исключающее ИЛИ по событиям]. Из элемента выходят 2 потока перехода.
2. Первый поток – элемент [Таймер].
3. Второй поток - элемент [Обработка сигнала]. Ожидает изменения целевой записи.

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

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

Добрый день!

Мы используем СРМ версии 3.3.1.163.
И еще бывают (опять же только у него) черные полосы (см. скриншот во вложении).

С чем связаны эти проблемы и как их можно решить?

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

Нравится

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

По сообщению, атрибут «IsWorkspace» присваивается в нескольких скриптах главной страницы и базовой страницы раздела, а затем вычитывается в скрипте детали графиков. Можно попробовать отладиться и посмотреть, почему значение не присвоилось.

Ранее такая проблема наблюдалась один раз на ещё более старой версии 3.2.1, тогда вопрос решили очисткой профиля с кешем или обновлением бинарных файлов.

тогда вопрос решили очисткой профиля с кешем или обновлением бинарных файлов.
можете сказать как это делать?

Спасибо!

Для очистки нужно ему удалить содержимое нескольких папок:
Очистить кеш: %AppData%\Roaming\Terrasoft\3.3.1\Cache.
Если после чистки кеша программы проблема останется, то попробуйте ещё удалить профиль: %AppData%\Roaming\Terrasoft\3.3.1\Profile.

Если не поможет, стоит провести на этом компьютере отладку.

Не помогло.
Скажите, пожалуйста, как можно сделать переиндексацию?... может это поможет.

Нет, переиндексация тут не должна влиять.
А как выглядят чёрные полосы?

Так

Полосы больше похожи на проблемы с видеокартой.
Попробуйте всё же провести отладку в скриптах scr_GraphUtils и wnd_GraphDetailScript в тех местах, где идёт обращение к «IsWorkspace».

"Полосы больше похожи на проблемы с видеокартой."

Ну если захожу под другим пользователи, не покажут чёрные Полосы
И про чёрные Полосы не так важно как именно этот пользователь вкидывает часто с программы
Может можно удалить пользователь и еще раз создать?

А может полосы из-за того, что пользователь, который выслал Вам скриншот, специально зацензурил?

По поводу пользователя, проблема наблюдается под ним на разных компьютерах?
Вы используете в разделе деталь графиков?

"А может полосы из-за того, что пользователь, который выслал Вам скриншот, специально зацензурил?"
Нет, это даже я зашел и так показывает

Наша CRM установлена на сервере на Windows 2003 R2. Все пользователи подключаются одинаково - через RDP

А с графиками как, работаете?

не используем эту функции

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

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

Да, этот способ — очистка профиля и кеша. Если Вы делали и не помогло, то сначала проверьте, действительно ли очистились эти папки. Также в настройках подключения к базе (открываются из окна логина) может быть указано в «Дополнительных параметрах», что профиль хранится не локально, а в базе, в таблице tbl_ProfileData, в записях с нужным UserID.

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

На скриншоте ничего не видно.
Если там tbl_ProfileData, то нужно SQL-запросом удалить записи с нужным UserID. Перед удалением лучше сделайте бекап базы.

Параметры здесь:
дополнительные параметры

можете тут посмотреть, пожалуйста?

http://prntscr.com/dghxis

тут все записи, какие надо удалить?

Удалить те, у кого UserID соответствует ID записи в tbl_AdminUnit, которая относится к нужному пользователю.

Доброе утро!

Доброе утро!

Я удалил UserID соответствующий ID записи в tbl_AdminUnit
И все равно показывает и ошибку, и чёрные полосы.

Может есть какой то другой способ отчистить кэш пользователя?

http://prnt.sc/dgrljy

http://prnt.sc/dgrl33

http://prnt.sc/dgrler

Спасибо!

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

Для решения проблемы с возникающей ошибкой Вам необходимо.

1. Зайти на машину под пользователем с правами администратора и сделать перерегистрацию библиотек Terrasoft.
2. Для всех пользователей, которые работают по RDP нужно на этой машине дать полные права на чтение папок TS (Bin, Res и Settings), в том числе и пользователя, у которого возникают проблемы.
3. Также данная ошибка может возникать в следствие некорректных доработок в Вашей конфигурации TS. Уточните, пожалуйста, выполнялись ли какие-либо доработки?

По поводу проблемы с черными полосами - рекомендуем обновиться до последней версии 3.3.2 - файлы для обновления и инструкцию можно получить, написав e-mail на адрес службы поддержки Террасофт support@terrasoft.ru.

Добрый день!

про
1. сделать перегистрацию библиотек Terrasoft.

можете сказать как это делать?

и про
2. Для всех пользователей, которые работают по RDP нужно на этой машине дать полные права на чтение папок TS (Bin, Res и Settings).

сделал

Спасибо!

Хайдар, проще всего перерегистристрировать так:
Переименовать папку Terrasoft (например, в Terrasoft1), запустить TSClient.exe из неё. Он будет запускаться дольше, чем обычно. Когда запустится, закрыть и переименовать папку назад. Снова запустить TSClient.exe.

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

Но сначала проверьте, помогла ли выдача прав.

все равно (

http://prntscr.com/dgtvd9

А если зайти в Terrasoft под этим пользователем, при этом работая в Windows под админом — то та же ошибка?

Да!

Для ускорения решения данной проблемы есть ли возможность у Вас организовать удаленное подключение, например, по Team Viewer?

Если такая возможность есть, то пришлите, пожалуйста, нам параметры подключения на support@terrasoft.ru.

Отправил

Доброе утро!

скажите когда сможете подключить ?
Я еще раз отправил TeamViewer параметры
Спасибо!

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

Уточните, пожалуйста, с какого адреса Вы отправляли письмо и время отправки, также желательно укажите тему?

с haider@euronord.by

время отправки(по Минск) 9:09
тему: TeamViewer параметры

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

Проблема была решена в ходе удаленного подключения.

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

Для решения проблемы рекомендовано обновиться до последней версии 3.3.2.

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

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

Как реализовать бизнес-процесс, при запуске которого будет открываться страница с проводником. В проводнике на ПК выбирается файл (txt , xls, xml). В результате появляется на странице содержимое файла.

Интересует программная реализация

BPMOnline 7.7

Нравится

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

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

Использование бизнес-процесса для решения данной задачи будет не самым оптимальным варинантом. Рекомендую Вам смотреть в сторону использования JavaScript кода для вызова "окна выбора" файла, саму же обработку файла реализовать в вэб сервисе.

Пример реализации Вы можете посмотреть в коде детали "Файлы и ссылки" (FileDetailV2). Так же обратите внимание на сервис FileApiService и схему FileUploader.

Если же данный функционал необходимо встроить в бизнес-процесс/, рекомендую Вам воспользоваться элементом бп "Преднастроенная страница".

"Мотков Илья" написал:

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

Использование бизнес-процесса для решения данной задачи будет не самым оптимальным варинантом. Рекомендую Вам смотреть в сторону использования JavaScript кода для вызова "окна выбора" файла, саму же обработку файла реализовать в вэб сервисе.

Пример реализации Вы можете посмотреть в коде детали "Файлы и ссылки" (FileDetailV2). Так же обратите внимание на сервис FileApiService и схему FileUploader.

Если же данный функционал необходимо встроить в бизнес-процесс/, рекомендую Вам воспользоваться элементом бп "Преднастроенная страница".


Здравствуйте.
Спасибо большое.

Подскажите, в коде детали "Файлы и ссылки" (FileDetailV2) есть строки :
/**
* Обработчик события нажатия кнопки "Добавить файл".
* @private
*/
onAddFileClick: Terrasoft.emptyFn,

Не совсем понятно что здесь происходит. А где конкретно описывается обработчик кнопки "Добавить файл" ? Чтобы я мог использовать листинг обработчика для своей кнопки.

Код onAddFileClick: Terrasoft.emptyFn добавляет заглушку (пустую функцию). Это нужно для того, что бы событие onClick кнопки не отрабатывало.

Обратите внимание на строки

"fileUpload": true,
"filesSelected": {"bindTo": "onFileSelect"},

в описании элемента AddRecordButton.

Первая добавляет окно вызова файла при клике, filesSelected - отрабатывает после выбора файла.

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