бизнес-процесс
продажи
шаблон
Бизнес-процессы
Разработка

Разрабатывается процесс по поиску клиентов (активные продажи), до момента расчета сметы. Далее, нужно будет их описать с учетом TS.
Возникла проблема с разбиением процесса на мелкие (некая декомпозиция) и описание границ процессов. Может кто-нибудь поделиться, какие у кого процессы в программе? Особых секретов не прошу...

Нравится

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

В базовой коробке XRM есть стандартный набор процессов. Они дают общее представление, как можно организовать простые бизнес-действия в автоматизированный процесс.

Показать все комментарии
Технические вопросы
Разработка

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

Нравится

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

Олег, добрый день, используйте код :

var Shell = System.CreateObject('WScript.Shell');  
var DesktopPath = Shell.SpecialFolders("Desktop");

В DesktopPath будет хранится путь к Рабочему столу
Пример работы: "C:\Documents and Settings\User\Рабочий стол"

Показать все комментарии
fb
MS SQL Server
сервер
Установка и Администрирование
Разработка

Возник вопрос выбора сервера БД для работы с приложением с расчетом на будущие расширения.
Скорее всего нужно будет организация подключения к БД удаленно из другого города.
Поэтому, хотелось бы понять, что для этого нужно и что выбрать, какой сервер.
MS SQL Server стоит от 4 000 до 250 000 рублей, много версий. Какой из них нужно будет покупать, я не могу понять.
То ли Firebird ставить, она и бесплатная и более простая в установке.
Подскажите, пожалуйста, что выбрать и что еще потребуется для подключения из другого города к базе в плане доп.оборудования, работ программиста и т.п.
Компьютеры подключены через шлюз к ПК, который уже через VPN выходит в инет через провайдера.
IP иногда меняется, но редко.
Как вариант, я думаю, что, если использовать FB, то можно с помощью программы (не помню название) создать статичный адрес и его уже использовать.

Нравится

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

Ставьте MS SQL Server Express - он бесплатный.

Сколько активных пользователей? Насколько широкий канал интернета?

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

"Глова Сергей" написал:Ставьте MS SQL Server Express - он бесплатный.

это то да, бесплатный. Но есть ограничения, вроде как по объему базы.
"Доленко Юрий" написал:Сколько активных пользователей? Насколько широкий канал интернета?

Пользователей не более 10. Скорость до 512 Кб.

"sorokinmp" написал:это то да, бесплатный. Но есть ограничения, вроде как по объему базы.

Для 2005 4 Гб, для SQL 2008R2 Express - 10 ГБ, но его можно обойти с помощью attach database.

"Раловец Ольга" написал:Для 2005 4 Гб, для SQL 2008R2 Express - 10 ГБ, но его можно обойти с помощью attach database.

а какие размеры может иметь база? У сайтов я знаю размеры баз, а вот у ТС не могу знать... 10Гб большие возможности и на сколько хватит?
Если покупать, то какую версию нужно?

"Раловец Ольга" написал:для SQL 2008R2 Express - 10 ГБ, но его можно обойти с помощью attach database.

Слышал, что в новых версиях это уже невозможно. Зато возможно хранить неструктурированные данные (видео, слышио, документы, ...) за пределами этих 10Gb

Затрудняюсь ответить по поводу среднестатистических размеров базы, работала с пустыми, например, исходных размер базы 332 порядка 1.5 Гб.

Получается, что на 10Гб год-другой работы с сотрудниками до 50 человек?
Чего-то вопрос все упускают :)
Подскажите, пожалуйста,какую все таки версию сервера нужно брать, чтобы не переплачивать, кто какую покупал? А не то их много и цены разнятся?

Здравствуйте.
В приципе, работать база Террасофт будет на любом продукте MS SQL Server. Конкретно что-то советовать, достаточно, проблематично. Ситуация зависит от предполагаемого использования той или иной функциональности SQL (Server Agent - выполнение действий по расписанию, Analysis Services - работа с разделом OLAP и т.д.) и аппаратного обеспечения сервера. Если, как Вы писали, предполагается работа до 10-ти пользователей, то по началу можно обойтись и MS SQL Server Express или приобрести Workstation Edt с правом обновления при необходимости (тогда оплачивается разница в стоимости).
Terrasoft Support Team.
P.S.: А вообще то более подробно об этом можно проконсультироваться в службе технической поддержки компании Microsoft.

И как-то тишина вокруг Firebird... :smile:

"Александр Кудряшов" написал:И как-то тишина вокруг Firebird...

согласен. Тоже интересует, почему-то никто ничего не написал про FB. Проблем много с такой базой или чего ожидает?

Здравствуйте.
Что касается использования FireBird, то эта СУБД включена в соответсвующие сборки (нет необходимости искать отдельно). Мы официально поддерживаем работу с FireBird 2.0. В принципе, можно использовать и FireBird, но MS SQL Server более гибок в плане масштабирования, обладает более широким спектром разнообразного инструментария для выполнения операций над базами данных. В общем, выбор конкретной СУБД в конечном счёте остаётся за пользователем потому, что каждый вариант имеет право на существование и обладает своими плюсами и минусами.
Terrasoft Support Team.

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

Здравствуйте.
Могут возникнуть самые разные проблемы. Их серьёзность обратно пропорциональна квалификации обслуживающего персонала (выше квалификация - меньше проблемы). Повторюсь, что конечный выбор остаётся за Вами, а мы, просто, предоставляем консультации, что бы было проще определиться с выбором. В Вашей ситуации можно остановиться на Firebird или MS SQL Server 2008 Express.
Terrasoft Support Team.

Показать все комментарии
Бизнес-процессы
Разработка

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

Нравится

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

А как Вам вариант установки флажка в параметр диаграммы? Например, на OnBeforeExecute задачи (или перед этим элементом "Скрипт") для второго пользователя устанавливать некий параметр в 1. Затем после самой задачи в элементе "Скрипт" устанавливать параметр в 0. При этом задача уже точно будет выполнена, иначе процесс не пойдет дальше по ветке "Выполнена". Соответственно для первого пользователя проверять значение созданного параметра и если он 1, то не разрешать закрывать задачу.
В Вашем случае могу посоветовать проверять значение IsFinish (если в TaskAction.OnExecute) или IsComplete (в обработчиках OnAfterExecute задачи). Возможен вызов дважды, один из которых и дает некорректный результат.
При корректно отработанном запросе нужно искать проблему в самом запрете на перевод задачи в "разрешен".

насколько понял, IsComplete меняет значение на true, достаточно поздно, поэтому не могу понять когда, а главное где, прописать блокировку закрытия задачи.
а если прописывать в ActionItem, то он будет всегда обращаться к параметру диаграммы, который будет только у одного процесса. Хотя у меня сейчас проверка дергается из обработчика нажатия кнопки ок окна задачи.
можно попробовать прописать в OnAfterExecute проверку параметра диаграммы, после чего скрывать кнопку ок и выдавать окно с сообщением. сейчас попробую, может подойдет, но может есть еще идеи?

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

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

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

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

Из элемента диаграммы, точнее из его скрипта происходит формирование значений по умолчанию, которые передаются в карточку редактирования. Уже по ее закрытию вновь выполняется OnExecute для элемента, где уже заполненные значения считываются и сохраняются в параметры диаграммы.
Таким образом "блокировать" карточку задачи можно из скрипта scr_TaskEdit. В скрипте элемента нет еще сформированной карточки. Есть вариант на OnExecute элемента передавать через атрибуты признак блокировки задачи и зависимо от него делать неактивной кнопку "ОК". Как вновь активировать ОК - есть несколько путей. Возможно не совсем красивый - сохранить в атрибутах коннектора карточку задачи и уже по завершению второй задачи обратиться к первой и активировать кнопку.

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

var Finance = '{...}';
var SelectQuery2 = GetSingleItemByCode('sq_CheckTaskFinance');
 
ApplySelectQueryFilter(SelectQuery2, 'Workflow', CurrentWFID, true);
ApplySelectQueryFilter(SelectQuery2, 'Finance', Finance, true);
 
var Dataset124 = SelectQuery2.Open();
if (!Dataset124.IsEmpty) {
  MessageBox(Dataset124.RecordsCount);
  var FinStat = Dataset124.Values('StatusID');
...

таким образом, он проверяет, есть ли у другого пользователя задачи связанные с данным экземпляром бп (а у этого пользователя могут быть задачи только одного типа), и потом проверяет их статус
так вот, при проверке запроса sq_CheckTaskFinance записи о текущих задачах отображаются корректно, в данном скрипте отключил фильтр на выполненные задачи, так как их всего возникнет 2 и строчка

MessageBox(Dataset124.RecordsCount);

вполне однозначно покажет, сколько записей найдено, когда их должно быть две
так вот - из администратора при проверке скрипта (в ручную указываю значения фильтра) - находит 2 задачи, а из бп (из скрипта задачи при проходе по бп) - только 1 (это когда их уже должно быть две)
вопрос - выборка по запросам хранится где-то в кэше? потому что другой причины я не вижу, и как бы этот кэш отключить?

Перепишите получение запроса на

var SelectQuery2 = Services.GetNewItemByUSI('sq_CheckTaskFinance');

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

Показать все комментарии
Отчёты
Разработка

Столкнулся с тем, что в существующий отчет вставил subreport. Подотчет упорно не отображается. Для теста создал новый отчет, поместил туда один текстовый элемент. Он отображается, если не входит в бэнд. Стоит добавить бэнд MasterData1 и поместить туда этот текстовый элемент - отображается чистая страница. Если добавить подотчет с единственным текстовым элементом, он тоже отображаться не будет. Никакие манипуляции со свойствми не помогают.

Нравится

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

Предлагаю в начале разобраться с тестом.
"Для теста создал новый отчет, поместил туда один текстовый элемент." На сколько я понимаю SubReport вы также добавили, добавляем в новой вкладке, которая называется Subreport бенд MasterData, если на главной странице (Page1) вы уже создавали MasterData, то новый элемент по умолчанию будет называться MasterData2, ассоируем его с DataSet'ом (если названия не изменялись: TSDataset1), добавляем Text Object в облась MasterData2 выделяем область для Text Object, откроется окно Memo, в нем следует нажать Insert Expression, далее выделите конкретное поле (к примеру [TSDataset1."Name"]), во кладке Subreport1 в области на странице MasterData2 в Text Object должно появиться название поля ( к примеру [TSDataset1."Name"]). Сохраняемся, жмем Предпросмотр.
Должны отобразиться все поля с DataSeta

В MasterData2 у меня поле с постоянным текстом, а вот DetailData2 привязан к Dataset и поля заданы. По крайней мере постоянный текст должен отбразиться. Subreport вообще не отображается.

Для примера выведем названия Контрагентов и поле Средство связи 1 (в Subreport )
У меня получились такие результаты, просьба посмотреть вложения.

Я не рассмотрел, какие бэнды у тебя в основном отчете и в subreport?

Кидаю еще более простой отчет с subreport, только с постоянным текстом - та же история.

Владимир, по данному вопросу заведен инцидент 086498, сегодня в течение дня вам будет выслано на почту видео, решения тестовой задачи которую вы описали.
К данному сообщению будет прикреплена ссылка на файлообменник с видео.

В данном видео создается отчет в FastReport, на главной странице указываются имена контагентов, в Subreport а MasterData отображается текст, в DetailData отображаются информация Средства связи 1. Итог работы, отображается в предпросмотре.

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

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

Существует задача, есть контрагент 1 и контрагент 2, по ним есть ссылки в других таблицах(проекты, Задачи...) вдруг поняли что это одинаковые контрагенты(такое часто бывает), и нужно чтоб контрагент 2 стал тоже контрагентом 1 (слился). Есть поиск дублей функция Terrasoft с помощь которой можно руками все поправить, а вот если не руками, а автоматически у нас от внешней системы придут параметры о задвоении (процедура SQL) "параметр сливаемого"=контрагент 2 и "параметр на кого перекидывать ссылки (в кого сливаем)"=контрагент 1. Перед удалением ненужного котрагента (сливаемого), нужно все ссылки по нему привязать на другово контрагента как это можно реализовать?

Нравится

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

В конфигурации слияние дублей реализовано в скрипте scr_MergeDuplicates в функции DoMerge().
Вы можете использовать ее же, но передав параметры те, которые Вам нужны. Функция Merge в конфигурации вызывается по нажатию на кнопку ОК в обработчике btnMergeOnClick того же скрипта. Вы можете сделать подготовку параметров и вызвать ее же в автоматическом режиме.

Показать все комментарии
Установка и Администрирование
Разработка

Здравствуйте. Возник такой вопрос.Когда пользователь создает инцидент, он может в поле owner указать кого то, а в поле group тоже указать группу.В результате этот инцидент появится у всех кто есть в этой группе.Получается они все его могут менять?Или модифицировать.Что если они будут делать это одновременно?Я так понимаю, что конечные значения будут те кто их отредактировал последним?Как остальные члены группы поймут что инцидент уже взят на обработку другим пользователем.
И еще такой вопрос когда инцидент отображается у другого пользователя, например который в указан в группе, у него права доступа полные на этот инцидент. Как мне сделать так, чтобы у тех кто в группе не было бы права удаления инцидента?спасибо

Нравится

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

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

По поводу Вашего вопроса:
Как мне сделать так, чтобы у тех кто в группе не было бы права удаления инцидента?

Вы это хотите сделать для всех инцидентов или для выборочных?

Для выборочных. А как группа поймет кто именно взялся за данный инцидент? Можно ли как нибудь добавить такой функционал? Ведь работу над инцидентом может начать и не ответственный?
Спасибо.

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

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

Показать все комментарии
детали
Технические вопросы
Разработка

Хотелось бы для руководства добавить такой сервис - как оперативная информация о кол-ве записей на детали, без обязательного ее открытия. Т.е. чтоб пользователь переключившись на раздел Контакты видел информацию в заголовке детали - Средства связи(3), Знаменательные события(1) и т.д.Чтоб информация обновлялась при перемещении по гриду основного раздела, естественно. Возможен такой вариант отображения информации. Ну или хотя б выделение цветом заголовков заполненных деталей.

Нравится

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

Возможны оба варианта, НО это скажется на быстродействии системы, ведь при каждом переходе на запись основного реестра в базу будет посылаться на х запросов в базу больше, чем обычно, где х это количество деталей. Стоит ли оно того?
http://community.terrasoft.ua/ideas/3456

Спасибо за ссылку ... как я понимаю приемлемый вариант это только триггерная логика и вспомогательная таблица....count при каждом рефреше детали и раздела не рациональное решение...

Видимо да, какая-то таблица вроде ContactDetailsRecordsCount и 3 колонки: название детали, количество записей, контакт, изначально заполнить ее текущими данными, а потом включить триггеры на каждую таблицу, которая содержит данные детали и инкрементировать/декрементировать значение в ней при добавлении/удалении записей. Но есть еще нюанс, что на детали могут быть отображены данные из нескольких таблиц, например, "История" содержит объединение записей из таблиц задачи, документы и других, это нужно учесть. Кроме того, даже при таком варианте при каждом переходе с одной записи на другую Вы будете посылать те же 30 запросов в базу на получение количества, запросы будут легче, но будут, а еще умножьте на количество пользователей. Если будете реализовывать, то хотя бы ставьте условие на вхождение текущего пользователя в группу "Руководство", чтобы каждый пользователь не слал в базу лишние 30 запросов.
А вообще, может, лучше отталкиваться от задачи, которые Вы таким способом хотите решить? Сама по себе информация о том, что у контакта 1 знаменательное событие на детали, по-моему, не несет никакой информации, полезно может быть сведение о том, что у него нет знаменательных событий или их больше, чем х, но тогда, чтобы найти контактов, у которых не проставлены дни рождения, к примеру, проще настроить фильтр по этой детали, чем проходиться по всем записям последовательно и смотреть количество записей на детали. Но это так пример. Какую цель Вы хотите достичь?

Показать все комментарии
Установка и Администрирование
Разработка

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

Почему то исчезла.Прикрепляю файл.Как исправить?Спасибо.

Нравится

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

Возможно вы не являетесь системным администратором

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

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

Алекс, мой способ подошел? :wink:

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

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

Нет эти кнопки были там на 100%.Я видел их собственными глазами.

Алекс, внезапное исчезновение кнопок - интересный вопрос для технической поддержки, давайте подождем их комментарий! :biggrin:

Давайте))
По руководству по ссылке получилось сделать.А можно ли так сделать, чтобы выбирать уже существующие контакты а не добавлять новые?Спасибо.

Добрый день!

Подтверждаю слова Юрия - кнопки действительно нет. Что бы убедиться в этом, Вы можете протестировать данный факт на всех демо версиях нашего продукта перейдя по ссылке http://community.terrasoft.ru/usr/demo

Что касается выбора уже существующих контактов, то я советую выполнять добавление контактов (уже созданных) к контрагенту в разделе Контакт в карточке контакта или на детали Карьера.

Хм странно.Я следую инструкции-кнопки появились.Но когда я добавляю туда запись, то хотелось бы, чтобы в поле account автоматически вставлялось бы значение того аккаунта для которого я добавляю контакта.Можно ли так сделать?Спасибо.

Либо чтобы можно было бы добавлять уже существующих пользователей.
Спасибо.

Алекс, по ссылке http://community.terrasoft.ua/forum/topic/6226#comment-27003 можно почитать, как реализовать автозаполнение.

Да действительно)
А как можно реализовать дополнение уже существующих контактов?Если и это вохмонжо то это вообще...супер.

Отобразить окно выбора контактов можно так:

	var Dataset = Services.GetNewItemByUSI('ds_Contact');
	var SelectDataWindow = GetSingleItemByCode('wnd_SelectData', 'Contacts');
	SetAttribute(SelectDataWindow, 'Dataset', Dataset);
	SetAttribute(SelectDataWindow, 'DisplayFieldNames', 'Name');
	SetAttribute(SelectDataWindow, 'SearchFieldNames', 'Name');
	SetAttribute(SelectDataWindow, 'KeyFieldName', 'ID');
	SetAttribute(SelectDataWindow, 'SearchFieldName', 'Name');
	SetAttribute(SelectDataWindow, 'NotifyObject', Self);
	SetAttribute(SelectDataWindow, 'IsReadOnly', true);
	SelectDataWindow.Tag = 'SelectContact';
	SelectDataWindow.Prepare();
	SelectDataWindow.Show();

В функции OnNotify текущего скрипта нужно обработать выбранный контакт: добавить условие

	if ((Message == 'MSG_OK') && (Sender.Tag == 'SelectContact')) {
	    var SelectedContacts = GetAttribute(Sender, 'KeyValues');
	    //здесь дальнейшая обработка выбранных контактов. ID находится в SelectedContacts 
	    return;
	}
Показать все комментарии
Технические вопросы
Разработка

Как в левый грид данного окна добавить еще одно поле для фильтрации?

Нравится

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

сам допетрил

var DataGridColumn = Self.CreateComponent('DataGridColumn', 'colFieldName');
DataGridColumn.DataFieldName = 'FieldName';
gvData.Add(DataGridColumn);

Да, как вариант :)

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