Добрый день! Подскажите, пожалуйста, почему при копировании бюджета (целочисленного значения) из ячейки excel в CRM, система выдает ошибку о том что поле не заполнено (т.е. фактически его не видит). При ручном вводе такой ошибки нет.

Нравится

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

Не получилось повторить:smile:

Может тип данных в ячейке Excel не совпадает с типом данных в поле bpm'online. Какая это версия продукта?

версия 3.3.2.307
такая же проблема с копированием чисел из тхт

Покажите конкретный пример такого числа. Может, там лишние пробелы, точки и запятые не так, как надо?

Прилагаю скрин, где я проверил - никаких пробелов нет

Может, там З вместо 3?

Скорее всего данные не занеслись в Dataset, проверьте логику работы данного поля.

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

Добрый день! Помогите, пожалуйста, исправить ошибку при формировании отчета в Excel

Нравится

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

По сообщению из файла трудно сказать наверняка, что произошло.
Можно поставить отладчик и посмотреть, где конкретно она возникает.
Если не работает только на одном компьютере, то стоит для начала почистить профиль и кеш, перерегистрировать библиотеки, убедиться, что установлен Excel и включена интеграция с ним.

Прикрепил результаты. Версия системы 3.3.2.47

Если присмотреться, свал внутри функции ShowExcelReport. При отладке можно зайти внутрь неё и посмотреть, на какой именно строке валится. Вероятно, при попытке считать или записать какое-то свойство объекта Excel. Но точно можно узнать, если пройти внутри функции пошагово.

Дело в том, что ошибка появляется при вызове любого отчета у любого пользователя

Возможно, дело в этом:
Если у вас используется новая версия Excel, то в скрипте scr_UserReportCommon замените функцию GetExcelObject кодом:

function GetExcelObject() {
                var Excel = new ActiveXObject('Excel.Application');
                var Excel_wb = Excel.Workbooks.Add();
                Excel.Sheets(1).Name = "Данные";
                var SheetsCount = Excel.Sheets.Count;
                for (var i = 2; i <= SheetsCount; i++) {
                               Excel.Sheets(2).Delete();
                }
                Excel.Visible = false;
                return Excel;
}

Большое спасибо, помогло!

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

Описание задачи:

Открыть из Террасофт два файла в режиме сравнения

Описание решения:

В Террасофт есть версионность файлов, но нет возможности сравнения версий. Потому было решено реализовать функционал открытия 2х файлов в режиме сравнения.
Для этого используется метод CompareDocuments(). Описание метода и входных параметров можно посмотреть здесь.
На деталь [Журнал изменений] раздела [Файлы] добавлена кнопка [Сравнить документы]

На событие кнопки:

function btnCompareDocumentsOnClick(Control) {
        var Dataset = dlData.Dataset;
        var RecordID = Dataset('RecordID'); // RecordID – ID родительского файла
        var SelectedIDs = grdData.SelectedIDs; //Получаем массив идентификаторов выделенных файлов
        var SelectedFilesIDs = GetArrayByCollection(SelectedIDs); //Преобразуем его в коллекцию
        var Ln = SelectedFilesIDs.length;

        //Проверяем количество выделенных файлов, файлов должно быть 2
        if (Ln == 2){
                FirstFileID = SelectedFilesIDs[0];
                SecondFileID = SelectedFilesIDs[1];
        }
        else {
        MessageBox(‘Выделите два файла’);
                return;
        }

        //Получаем название первого файла
        var DatasetLog = Services.GetNewItemByUSI('ds_FilesLog');
        ApplyDatasetFilter(DatasetLog, 'RecordID', RecordID, true);
        ApplyDatasetFilter(DatasetLog, 'ID', FirstFileID, true);
        DatasetLog.Open();
        var  FirstFileLink = DatasetLog('Link');
        DatasetLog.Close();
       
        //Получаем название второго файла
        ApplyDatasetFilter(DatasetLog, 'RecordID', RecordID, true);
        ApplyDatasetFilter(DatasetLog, 'ID', SecondFileID, true);
        DatasetLog.Open();
        var  SecondFileLink = DatasetLog('Link');
        DatasetLog.Close();

        // загружаем файлы из бд на диск
        var FirstFileName = LoadFileFromFilesLog(FirstFileID, FirstFileLink, true, RecordID);
        var SecondFileName = LoadFileFromFilesLog(SecondFileID, SecondFileLink, true, RecordID);

        //С помощью COM-объекта добавляем файлы в коллекцию открытых документов
        WordUtils = new ActiveXObject("Word.Application");
        var FirstWordDoc = WordUtils.Documents.Add(FirstFileName);
        var SecondWordDoc = WordUtils.Documents.Add(SecondFileName);

        // получаем документ, который является результатом сравнения исходных файлов
        var WordDocRes = WordUtils.CompareDocuments(FirstWordDoc, SecondWordDoc, 0, 1, true, true, true, true, true, true, true, true, true, true, '', true);  

        // отображаем результирующий документ
        WordDocRes.Application.Visible = true;
        WordDocRes.Activate();
}

Теперь выделяем 2 файла, нажимаем на кнопку «Сравнить документы»:

И получаем результат:

Нравится

Поделиться

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

С 16 июля по 1 сентября 2015 года для пользователей Terrasoft 3.X действуют специальные условия перехода на продукты CRM‑линейки bpm’online.

В зависимости от выбранной модели развертывания bpm’online (в облаке или на собственных серверах компании), а также срока действия контракта, предусмотрены различные скидки.

При переходе с Terrasoft 3.X на продукты bpm’online в облаке скидка может достигать 80% при подписании договора на 3 года.

Узнать детали акции >>

Нравится

Поделиться

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

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

О возможности сохранить бизнес-процесс в виде графического файла зачастую не знают даже опытные пользователи системы. Но она есть.:wink:

Terrasoft 3.X:
3.X
Две кнопки, экспорт в BMP и в WMF.

bpm'online 5.X и 7.X:
5.X
Есть возможность выбрать формат JPEG, BMP или PNG.

Лучше всего выбирать формат BMP или PNG. В изображениях JPG возможны артефакты сжатия, процессы в WMF также выглядят не очень.

process

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

Нравится

Поделиться

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

Добрый день!

Планируем в будущем интеграцию Terrasoft 3.4.0.Х с Call-центром. АТС - Panasonic, СУБД - Oracle.
На данный момент сотрудники техподдержки имеют именные лицензии TS XRM User + SD Agent 3.Х.

Вопросы:
1. Что нам необходимо докупать для того, чтобы сотрудники могли работать с разделами Call-центра?
2. Какие особенности интеграции с АТС Panasonic?
3. Имеется ли руководство по интеграции конкретно с АТС Panasonic?

Нравится

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

Ответы:

  1. 1. Лицензию Terrasoft Call Centre 3.X
  2. 2. Установить на клиентской машине TAPI-драйвер производителя и настроить его на работу с АТС
    1. 2.1. Установить на клиентской машине TAPI-драйвер производителя и настроить его на работу с АТС
    2. 2.2.Заказать лицензии Terrasoft Call Centre 3.X
    3. 2.3.Выполнить настройку подключения Terrasoft к TAPI-драйверу
      1. 2.3.1. Открываем окно [Системные настройки]: [Файл]->[Настройки]->[Системные настройки]
      2. 2.3.2.Находим системную настройку [CallClientType] и устанавливаем значение [TAPI Client]
      3. 2.3.3. Выполняем настройки TAPI: [Файл]->[Настройка]->[Настройка Call center]
  3. 3. Руководство по интеграции с АТС Panasonic нет

Спасибо за ответ!

Подскажите, есть ли возможность посмотреть демо-версию call-центра?

Людмила, ответственный менеджер свяжется с Вами в ближайшее время, в телефонном режиме, и согласует детали

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

Пользователи платформы Terrasoft 3.X, которые начинают готовиться к наступлению нового 2016 года с начала лета, могут заметить, что список лет в календаре системы заканчивается 2015 годом.

есть и другие картинки на эту тему

Сейчас мы узнаем, как его продлить.

1. Запустите программу Администратор Terrasoft (файл TSAdmin.exe) в папке Program Files\Terrasoft\Bin.
2. В программе нажмите Ctrl+F для открытия окна поиска, введите в поиск «enm_years» и нажмите кнопку «найти»:
рис. 1

3. Справа в дереве выберете найденный сервис «enm_Years», кликните по нему дважды. Откроется список годов в системе:

рис. 2

4. Нажмите слева кнопку «Новый» -> «Значение перечисления»:

рис. 3

5. Создастся новый год. В нём во всех трёх полях введите «2016» вместо того, что там есть:

рис. 4

6. Повторите пункты 4-5 для нужного числа лет.
7. Обязательно в конце сохраните правки (Ctrl+S), закройте TSAdmin (Администратор Terrasoft) и перезапустите TSClient (сама система Terrasoft).
8. Год должен появиться:

рис. 5

Нравится

Поделиться

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

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

Нравится

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

Мне кажется, для начала нужно почистить профиль и кэш:

  • Закрыть Terrasoft
  • Удалить содержимое папки %appdata%\Terrasoft\3.4.0\Profile\
  • Удалить содержимое папки %appdata%\Terrasoft\3.4.0\Cache\
  • Запустить Terrasoft

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

Мне кажется, для начала нужно почистить профиль и кэш:

  • Закрыть Terrasoft
  • Удалить содержимое папки %appdata%\Terrasoft\3.4.0\Profile\
  • Удалить содержимое папки %appdata%\Terrasoft\3.4.0\Cache\
  • Запустить Terrasoft

выполнено, не помогает

А что будет, если не запускать отладчик, а продолжить выполнение? До открытия главного окна дойдёт?

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

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

Рабочее место "Задачи" имеет в правой части список контактов, чьи задачи можно было бы оперативно выбрать. Видимо, где-то спрятано ограничение на количество контактов в этом списке, т.к. больше 10 сделать не удаётся, а надо мне 13 (пока, возможно увеличение). Кто знает, где изменить/отменить ограничение?

Нравится

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

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

Не оно. Это место тоже находил - не помогло. Сейчас ради интереса вставил перед выделенным фрагментом выдачу в лог текущего значения NewContactList.length - а оно не выдаётся. Значит сюда мы вообще не попадаем.

виноват, невнимателен)
добавьте цвета в TaskUtils

Вот это оно!
Вообще забанил кусок
// if (Color == 0xFFFFFFFF) {
// return;
// }
ибо чуть ниже у нас реализована доработка по подсветке задачи в соответствии с "личным" цветом ответственного, и GetFreeColor в этом месте стал не актуальным.
Спасибо за помощь!

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

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

Совершаю первые попытки использования бизнес-процессов, поэтому прошу сильно не пинать.
Задача. При изменении состояния инцидента на определённое значение и неизменении этого состояния в течение n-ного количества времени, необходимо сформировать напоминалку ответственному и создателю.
Моё видение решения.
Через "Автоматический запуск процесса" настраиваю запуск моего процесса по изменению данных в источнике данных Инцидент если новое значение состояния соответствует такому-то фильтру. Как гасить уже висящий процесс при смене состояния на другое пока не придумал, возможно через другой бизнес-процесс, в котором скриптом прописать окончание предыдущего.
Создаём бизнес-процесс, содержащий всего два действия:
1. Задержка на n-ное количество времени
2. чтение/запись данных, "запись значений параметров в базу данных", "создать новую запись" с источником данных "напоминание". В п.5 заполняю поля будущего напоминания: "Описание = текст напоминания", "Тип объекта = Инцидент", "Время = как указать текущее + 1-2 минуты?" И вопрос с п.4: указать взаимосвязь ключевого поля с параметром диаграммы. Видимо, здесь нужно указать, к какому инциденту будет прицеплено новое уведомление. Откуда заполучить номер? И ID ответсвенного и создателя инцидента как поймать?

Нравится

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

1. Через "Автоматический запуск процесса" настраиваем запуск БП через каждые M-минут (зависит от n и здравого смысла)
2. В БП:
- берем все инциденты, подходящие по признакам ("неизменении этого состояния в течение n-ного", для учета последнего изменения надо либо сделать поле, куда писать текущее время при изменении, либо включить историю)
- проверяем для выбранных инцидентов - нет ли уже напоминалок/вместо проверки можно просто удалять созданные ранее (по какому-то признаку + ИД инцидента)
- добавляем и/или обновляем напоминалки для выбранных инцидентов
Так у вас будут всегда (с промежутком в M-минут) актуальные напоминалки

Как вариант, можно сделать это в виде задания Агента-SQL.

Но на сам деле надо сделать по-другому)) При изменении состояния инцидента на нужное - ставить напоминалку через n-времени. При изменении состояния с нужного - стирать ее. И Все)

"Андросов Дмитрий" написал:Как вариант, можно сделать это в виде задания Агента-SQL

Если все ж надумаете делать именно регулярно выполняемые задания - всячески плюсую этот вариант!

Ставить напоминалку - это работа ручками, а именно её и хочется исключить, т.к. в этом случае в процесс вклинивается человеческий фактор. Сейчас у народа есть фильтр по заданному состоянию инцидента, и на него им лень перейти и проверить не появилось ли там что-нибудь.
В целом, мысль понял и принял. На самом деле, наверно в джобик SQL это засунуть проще будет.
1. Выбираю все инциденты в нужном статусе из tbl_Incident
2. Из tbl_IncidentLog вытягиваю max(CreatedOn) для данного инцидента. Если эта дата отличается от текущей более чем на N, проверяю наличие/отсутствие в tbl_Reminding строчки для этого инцидента. Если нет, инсертю её.
Теоретически, должно получиться. Пошел кодить.

"Булат Андрей Борисович" написал:Ставить напоминалку - это работа ручками, а именно её и хочется исключить

Имелся ввиду скрипт на сохранение объекта Инцидент. Кодом написать генерацию напоминания, работать будет автоматом

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

Ставить напоминалку - это работа ручками, а именно её и хочется исключить

Имелся ввиду скрипт на сохранение объекта Инцидент. Кодом написать генерацию напоминания, работать будет автоматом


Тоже вариант.
Остаётся вопрос: как убивать неиспользованные напоминания, если инцидент из неправильного состояния переведён раньше наступления часа Х. Там-же в скрипте отслеживать? Всё-таки, вариант с периодическим заданием/джобиком эту логику отработает правильнее.

"Булат Андрей Борисович" написал:как убивать неиспользованные напоминания...Там-же в скрипте отслеживать? Всё-таки, вариант с периодическим заданием/джобиком эту логику отработает правильнее.

реализовать скриптом проще.

после сохранения инцидента (DatasetAfterPost):
- если состояние изменилось с другого на неправильное - поставить напоминалку на текущее время + n
[когда наступит время Х - напоминалка отрабоается (удалится или переставится) вручную тем, на кого она ставится, если час Х не наступит то:]
- если состояние поменялось с неправильного на другой - удалить напоминалку, если она есть

состояние для дальнейшего сравнения в качестве "того, которое было до редактирования" лучше сохранять в переменную на AfterOpen

Реализовал таки через джобик SQL, ибо TSQL мне больше знаком :-) Вроде работает. Но... Напоминалку пользователь увидит только если запустит программу. У нас не все постоянно сидят в системе: не требуется это.
Отсюда вылезло продолжение задачи. Формировать не напоминалку а письмо. Тоже средствами MSSQL это возможно, или возвращаемся к первому сообщению - формирование бизнес-процесса?

"Булат Андрей Борисович" написал:Тоже средствами MSSQL это возможно, или возвращаемся к первому сообщению - формирование бизнес-процесса?

оба варианта рабочие, но БП лучше т.к. логика не выносится за рамки системы

ой нет, это же 3х)))
по-моему, лучше сделать джоб на отправку е-мейла)

"Андросов Дмитрий" написал:

ой нет, это же 3х)))

по-моему, лучше сделать джоб на отправку е-мейла)


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

сформулируйте еще раз задачу с учетом того, что это е-мейл, а не напоминание

При нахождении инцидентов, находящихся в состоянии YY более заданного времени (селека соответствующая уже готова), необходимо отправить письмо ответственному и автору инцидента. Адрес берём из соответствующих контактов. Тема письма - простой текст. В тело письма неплохо было бы затолкать номер инцидента, наименование контрагента и "признаки" инцидента.

письмо отправлять средствами сервера SQL (sp_send_dbmail) или через ОС сервера (плохо представляю как)
я бы отправлял одно письмо на одного адресата (с информацией на все инциденты, касающиеся адресата)
в Террасофт письма, естественно, не сохранятся (да и не надо)

Дмитрий, спасибо! Счастье наступило!
Слепил через sp_send_dbmail. В кучу собирать не стал: один инцидент - одно письмо, чтобы не перелопачивать логику предыдущего джоба.

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