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

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

С уважением, Дмитрий

Нравится

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

Логика перехода в другой раздел по двойному клику на детали реализована в скрипте страницы wnd_ContactsInAccountGridArea в обработчике события двойного клика по реестру grdDataOnDblClick.
Там происходит вызов функции перехода в раздел с нужными параметрами:

	var ContactID = BaseGridArea.GridDataset.Values('ContactID');
	GotoWorkspace('wnd_ContactsWorkspace', ContactID);

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

На уровне grdDataOnDblClick заработало. Т.е. при двойном клике на любую колонку в реестре попадаю в раздел Контакты.
Я попытался пойти дальше и детализировать на уровне колонок , т.е. чтобы при нажатии на поле(колонку) контакта попадать в раздел Контакты, а на поле(колонку) воздействия попадать в раздел Воздейстсвия. Я отключил обработчик на уровне grdDataOnDblClick и прописал 2 обработчика на уровне колонок.

function colCampaignIDOnDblClick(Control) {
var CampaignID = BaseGridArea.GridDataset.Values('CampaignID');
GotoWorkspace('wnd_CampaignsWorkspace',CampaignID);
}
*/

function colContactIDOnDblClick(Control) {
var ContactID = BaseGridArea.GridDataset.Values('ContactID');
GotoWorkspace('wnd_ContactsWorkspace', ContactID);
}

У меня этот фокус не прошел - выдаются ошибки. Где нарушена логика? Вообще можно ли на уровне колонок дифференцировоть переходы?

Лучше завязаться на событие OnLookupColumnClick у реестра, туда параметром передаётся и нажатая колонка. Смотрите, тут глобально по всем разделам делают примерно то, что Вам нужно (плюс ещё проверка нажатия Ctrl).

Там другое, там Кравчук предлагает левый клик вообще отменить что смысла не имеет, а параметры нажатой колонки переносятся если она нажата через ctr(для перехода в раздел, просто клик карту поднимает).
Я то хотел, чтобы двойной клик(без всякого SHIFT) открывал раздел Контакты если по колонке контакт, и
чтобы двойной клик (без всякого SHIFT) по аналогии открывал раздел Воздействия если по колонке воздействие. Вот моя деталь:

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

и соотв. для воздействия

Я прописал на этом уровне(см. код в пост №2), но ошибка (пытается при этом коде открыть окно карточки редактирования function ShowEditWindowEx) .
Что касается ctr + клик , то это у меня прекрасно работает и окрывает lookup- овский раздел.
Но хочется чтобы и двойной клик точно также работал на каждом lookup у которого есть раздел.

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

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

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

Например, если это был раздел Контакты , то должна быть октрыта та же самая страница реестра контактов , ну например 7-я. Курсор в реестре должен стоять на том же самом контакте что и при закрытии. Если Контакт был отфильтрован при переходе с детали Контакты какого-либо Контрагента , то должен открывался тот же самый Контакт (с тем же самым фильтром) и т.д.

Если это был раздел Контрагенты, то должна быть октрыта та же самая страница реестра контрагентов, допустим 17-я , курсор должен стоять на том же самом контрагенте на котором стоял при выходе а курсор групп соответственно на последней выбранной статической(динамической) группе. Ну и т.д. для других разделов.

А вообще, где сохраняется последнее состояние окон и курсоров?

С уважением, Дмитрий
ТS CRM 3.2.0.83

Нравится

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

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

Последнее состояние окон сохраняется в профиле пользователя - в зависимости от настроек хранится либо в папке Profile (%AppData%\Terrasoft\<Ваша версия>\Profile), либо в базе данных.

В главном окне wnd_Main сохранение настроек происходит в обработчике события OnClose. В более поздних версиях появилась такая пользовательская настройка, которая позволяет пользователю указывать, какой раздел открывать при старте: по умолчанию, последний активный или указанный. Не уверенна, что такая функциональность есть в версии 3.2.0.83.

Вот код обработчика этого события:

function wnd_MainOnClose(Window) {
if (Assigned(Main.UserSettingsWindow) &&
!Main.UserSettingsWindow.Attributes('DenySerializeToProfile')) {
var UserSettings = Main.UserSettingsWindow.Attributes('UserSettings');
var ActiveWorkspaceItem = GetActiveWorkspaceItem();
if (Assigned(ActiveWorkspaceItem)) {
if (UserSettings.StartMenuItemAction == 'rbLastActive') {
UserSettings.StartMenuItemTag =
ActiveWorkspaceItem ? ActiveWorkspaceItem.Tag : '';
}
if (UserSettings.StartMenuItemAction != 'rbByDefault') {
if (!IsEmptyValue(UserSettings.StartMenuItemTag)){
var StartedActionMenu =
GetActionMenuItemByTag(amWorkspace,
UserSettings.StartMenuItemTag);
var GroupCode = StartedActionMenu.ParentItems.Tag;
UserSettings.StartMenuGroupTag =
StartedActionMenu ? GroupCode : '';
} else {
UserSettings.StartMenuItemAction = 'rbLastActive';
}
}
}
Services.SerializeItemToProfile(Main.UserSettingsWindow, EmptyStr);
}
CloseMainForm();
}

Насчет сохранения страницы и позиции в реестре - это тоже можно доработать и сохранять эту информацию в профиль пользователя при вызове обработчика OnProfileSerialize окна. В таком случае нужно ещё реализовать обработчик события OnProfileDeserialize, который будет эту информацию вычитывать из профиля пользователя и обрабатывать.
Однако, с точки зрения производительности работы приложения при старте не рекомендуется реализовывать переход на n-ю страницу с m-ной позицией.

Добрый день, Алла!
Спасибо за пост!

"Савельева Алла" написал:хранится либо в папке Profile (%AppData%\Terrasoft\<Ваша версия>\Profile)

Такой папки у меня вообще нет.
Есть папка AppData\Roaming\Terrasoft CRM\3.2.0\Profile\F714003C6A014E0187CDFBA4B89B2D13
Там много файлов с расширением .dat , но это , кажется Cache.

"Савельева Алла" написал:В более поздних версиях появилась такая пользовательская настройка, которая позволяет пользователю указывать, какой раздел открывать при старте: по умолчанию, последний активный или указанный. Не уверенна, что такая функциональность есть в версии 3.2.0.83.

К сожалению, нет такой функциональности нет, по крайней мере в процессе работы не сталкивался. Где это сидит?

Моя коробочная функция лишь:
function wnd_MainOnClose(Window) {
CloseMainForm();
}

Вставил новую функцию , при закрытии приложения выдается ошибка(Предполагается наличие объекта) на строке:
var ActiveWorkspaceItem = GetActiveWorkspaceItem();

Что нужно изменить сделать?

"Кудинов Дмитрий Станиславович" написал:Есть папка AppData\Roaming\Terrasoft CRM\3.2.0\Profile\F714003C6A014E0187CDFBA4B89B2D13

Это и есть папка, в которой хранятся профили пользователей.
Cache хранится здесь же, но в папке Cache :smile:

"Кудинов Дмитрий Станиславович" написал:К сожалению, нет такой функциональности нет, по крайней мере в процессе работы не сталкивался. Где это сидит?

Эта функциональность реализована в версии 3.4.1 и находится она в настройках пользователя на вкладке [Общие].

"Кудинов Дмитрий Станиславович" написал:Вставил новую функцию , при закрытии приложения выдается ошибка(Предполагается наличие объекта) на строке:
var ActiveWorkspaceItem = GetActiveWorkspaceItem();

Что нужно изменить сделать?

Ошибка возникает из-за того, что у Вас не реализована функция GetActiveWorkspaceItem().
Её код ниже:
function GetActiveWorkspaceItem() {
for (var i = 0; i < amWorkspace.Count; i++) {
var GroupActionMenuItem = amWorkspace.Items(i);
if ((GroupActionMenuItem.IsVisible) && (GroupActionMenuItem.IsChecked)) {
for (var j = 0; j < GroupActionMenuItem.Count; j++) {
var ActionMenuItem = GroupActionMenuItem.Items(j);
if ((ActionMenuItem.IsVisible) && (ActionMenuItem.IsChecked)) {
return ActionMenuItem;
}
}
}
}
return null;
}

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

Алла, покорнейше благодарю за новую порцию кода!

Да, когда вставил GetActiveWorkspaceItem() ошибка исчезла.
Поведение приложения не изменилось - все по старому, отрывает только с раздела Контрагент.

"Савельева Алла" написал:Также обратите внимание на то, что, если Вы хотите использовать этот функционал в таком виде, в котором он есть в коробке, Вам нужно ещё реализовать интерфейсную часть.


Очень хочу реализовать функционал! Как и с какой целью реализовать интерфейсную часть?

(P.S. : Иногда, для визуальной информативности хотелось бы вставить рисунок, но у меня что-то не получается. Когда нажимаю на иконку *Вставить\изменить изображение* появляется окно со странной геометрией(буква Г упала вперед). Там три позиции для ввода , но названия полей обрезаны. Раньше такого бага не было , вставлял без проблем. У Вас получится отправить рисунок? Видимо в какое-то из трех (сверху вниз) необходимо вводить путь к рисунку на жестком? В какое? )

"Кудинов Дмитрий Станиславович" написал:Поведение приложения не изменилось - все по старому, отрывает только с раздела Контрагент.

Логично, так как для того, чтобы данная функциональность работала нужно:
1) указывать настройки того, какой раздел отображать (для этого нужно реализовать интерфейсную часть в окне пользовательских настроек);
2) в обработчике события OnPrepare для wnd_Main вызывать функцию InitializeUserSettings, которая выполняет десериализацию настроек пользователя:
function InitializeUserSettings(InitializeWhenMainWindowPrepare) {
Main.UserSettingsWindow = Services.GetNewItemByUSI('wnd_UserSettings');
Main.UserSettingsWindow.Attributes('InitializeWhenMainWindowPrepare') =
InitializeWhenMainWindowPrepare;
Main.UserSettingsWindow.Prepare();
Services.DeserializeItemFromProfile(Main.UserSettingsWindow, '');
}

"Кудинов Дмитрий Станиславович" написал:Очень хочу реализовать функционал! Как и с какой целью реализовать интерфейсную часть?

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

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

"Кудинов Дмитрий Станиславович" написал:(P.S. : Иногда, для визуальной информативности хотелось бы вставить рисунок, но у меня что-то не получается. Когда нажимаю на иконку *Вставить\изменить изображение* появляется окно со странной геометрией(буква Г упала вперед). Там три позиции для ввода , но названия полей обрезаны. Раньше такого бага не было , вставлял без проблем. У Вас получится отправить рисунок? Видимо в какое-то из трех (сверху вниз) необходимо вводить путь к рисунку на жестком? В какое? )

Информацию передала в отдел, который занимается поддержкой работы Community.

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

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

"Кудинов Дмитрий Станиславович" написал:Пытался восстановить последнюю backUp - копию , тоже не удается . Выдается ошибка что база используется, хотя проверил в диспетчере - запущенных террасофтовских файлов нет.

Бекап базы данных не относится к 'террасофтовским файлам' - это часть, за работу которой отвечает СУБД (например, MS SQL).

Вот что оказывается произошло :biggrin:. После того как я поставил галочку в чекбокс, в окне входа вместо supervisor встало мое имя пользователя в моей машине. Я был невнимателен и только потом увидел такое безобразие...:idea:

В Terrasoft есть 2 способа авторизации в базу: по логину и паролю и из-под пользователя домена, под которым работаете в Windows. В окне логина это определяет соответствующая галочка.

У меня на событие OnPrepare уже вызывается функция:

function wnd_MainOnPrepare(Window) {
ReadSystemSettings();
InitializeUserSettings();
InitializeCallCentreClientWindow();
Initialize();

FillReferencesDictionary();
CheckAnniversary();
var WorkspaceUSI = GetGroupAllowedWorkspaceUSI();
try {
if(IsEmptyValue(WorkspaceUSI)) {
var Message = "Текущий пользователь не имеет достаточно прав для просмотра данных";
throw Message;
}
}
catch (e) {
CatchException(e);
return;
}
IntitializeTimer();
PrepareTimer();
ShowTimerWindow();
}

А функция InitializeUserSettings в моем варианте похожа ту которую прислали Вы , но покороче и без аргумента в круглых скобках. Имеет вид:

function InitializeUserSettings() {
Main.UserSettingsWindow = Services.GetNewItemByUSI('wnd_UserSettings');
Main.UserSettingsWindow.Prepare();
Services.DeserializeItemFromProfile(Main.UserSettingsWindow, '');
}

Как быть?

И что?

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

И что?


Пожалуйста, конкретезируйте свой вопрос:smile:

Эти отличия в коде могут быть вызваны более старой версией конфигурации. У Вас 3.2, а интересующие Вас механизмы появились в более поздних. Если хотите перенести все доработки новой версии в старую, придётся приобрести лицензии на 3.3.2 (а скорее всего, 3.4.0, 3.4.1), где есть нужная логика, развернуть рядом и сравнивать содержимое одинаковых функций. Или же заказать такие работы в качестве проекта.

Можно и без лицензии:) если просто раздобыть дистрибутив демо или боевой дистрибутив соответствующих версий. Админка прекрасно работает под супервизором и система послужит донором
Дистрибутив думаю не откажется дать поддержка ;)

Ну, или под Supervisor. Судя по инструкции, в 3.4.0 уже есть такое окно.
user settings

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

Если хотите перенести все доработки новой версии в старую, придётся приобрести лицензии на 3.3.2 (или 3.4.0, 3.4.1), где есть нужная логика, развернуть рядом и сравнивать содержимое одинаковых функций. Или же заказать такие работы в качестве проекта.


У меня рабочая 3.2.0.83 . Сделано много доработок. Есть ли смысл покупать лицензию на 3.4 чтобы сравнивать содержимое одинаковых функций ? Перенести все новое из 3.4 в 3.2 может быть и возможно, но будет затратно, хотя бы даже по времени... уж тогда лучше сразу на 7-ку переходить.
Но пока не хочу. А в 3.2 есть некоторые критичные вещи которые уже просто достали.

Сейчас мало у кого есть версия 3.2. У большинства пользователей 3.Х — либо 3.3.2, либо 3.4.
Специально переносить все новые доработки в 3.2 уже никто не будет. Кроме того, часть из пожеланий в самом верхнем сообщении (выбранная запись на непервой странице) нет вообще нигде, это нужно делать с нуля.

Смысла переходить действительно больше уже на 7.Х, но она полностью другая. Есть бесплатный триал на 2 недели, можете зарегистрироваться и посмотреть.

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

Можно и без лицензии:) если просто раздобыть дистрибутив демо или боевой дистрибутив соответствующих версий. Админка прекрасно работает под супервизором и система послужит донором

Дистрибутив думаю не откажется дать поддержка ;)

Даст ли дистрибутив поддержка, это еще вопрос.
Главные преимущества и недостатки 3.Х против 7.Х мы уже обсуждили в созданной мной теме.
*Есть ли какие-нибудь плюсы у Terrasoft CRM 3.xxx по сравнению с BPMonline 7.x *?

"Кудинов Дмитрий Станиславович" написал:Даст ли дистрибутив поддержка, это еще вопрос

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

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

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

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

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

"Савельева Алла" написал: можно сделать, запросив дистрибутив более поздней версии 3.4.1, в которой данная функциональность реализована

Добрый день, Алла!

Код который Вы опубликовали в этой теме из какой версии?

"Савельева Алла" написал: можно сделать, запросив дистрибутив более поздней версии 3.4.1, в которой данная функциональность реализована

Добрый день, Алла!

Код который Вы опубликовали в этой теме из какой версии?

Я Вам показал какой код у меня. Он расходится с вашим кодом cущественно.
Функции сериализации\десериализации у меня пустые.

function wnd_MainOnProfileDeserialize(Window, Node) {
}

function wnd_MainOnProfileSerialize(Window, Node) {
}
Чего мне на данный момент не хватает чтобы открытие, хотя-бы, было в раздел из которого был выход?
Мне даже не нужно в настройках пользователя опции выбора стартого раздела. Мне было бы достаточно
захардкодить.Примерно в каком направлении двигаться? Видимо в этих функциях что-то прописать? Для входа в последний открытый раздел эти функции задействуются? Можете пример кода который есть у Вас? Что означает второй параметр Node? Сообщие , пожалуйста, в тех.службу, пусть проверят скрипт уведомления опубликования нового поста. Приходит сразу от 2 до 4 писем.:exclaim:

Да, запросите версию 3.4.1.

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

В основном фильтре раздела "Контакты" можно создавать условия фильтрации,
учитывая значения полей которые находятся в карточке "Контрагент" , например поле "Отрасль".
К сожалению, здесь(см. рисунок) присутсвуют только три поля из карточки "Контрагент"(группу контрагентов в счет не берем): Виды деятельности, Контрагент, Отрасли.
A как сюда, в этот основной фильтр раздела "Контакты", можно еще добавлять поля которые находятся в карточке "Контрагент" ?

С уважением,
Дмитрий

Нравится

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

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

Для того чтобы добавить новую фильтрацию в группу [Контрагент], необходимо запустить приложение Администратор Terrasoft (TSAdmin.exe), после чего найти сервис sq_Contact и открыть его двойным кликом для редактирования.

Затем создать необходимый фильтр, аналогичный фильтру [Отрасли]

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

Подскажите пожалуйста, как можна скрыть фрейм с кнопками в детали в зависимости от записи в основном реестре. Знаю, что это нужно сделать на событие OnDatasetAfterPositionChange. Но как достучаться к frmButtons.IsVisible?

Нравится

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

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

Приведу пример кода из конфигурации:

function dlAccountsOnDatasetAfterPositionChange(Dataset) {
	if (Dataset.Attributes('IsNew') != true) {
		RefreshDetails();
	}
	Dataset.Attributes('IsNew') = false;
}
function RefreshDetails() {
..
	if (pcDetails.ActivePage.Name == pgMailMessagesDetail.Name) {
	    SetAttribute(wndMailMessagesDetail.Window, 'HideButtonsFrame', true);
		RefreshCommonDetail(BaseWorkspace, wndMailMessagesDetail, 
			'AccountID', 'AccountID');
...
}

Спасибо за ответ. Но я реализовал это следующим образом:

function dlOfferingOnDatasetAfterPositionChange(Dataset) {
 
...	
var wndConfirmationDetail = Self.ComponentsByName('wnd_Confirmation').Window;
 
  if (DestinationID == '{1D5BE797-DFE0-477C-AE28-978D2C3L1E3K}') {
	wndConfirmationDetail.ComponentsByName('frmButtons').IsVisible = true;	
  } else {
	wndConfirmationDetail.ComponentsByName('frmButtons').IsVisible = false;
  }
 
}
Показать все комментарии

Новая задачка. Был раздел Продажи, его никто давно не запускал и не пользовался долгие годы. Сейчас его задействовали и оказалось что деталь продуктов в продаже не работает. Дебагер не появляется, вместо него:

Решил проверить в админке, запускаю сервис, такая ошибка(в логе отображается):

(E)     Невозможно редактировать сервис 'Opportunities\Details\Offerings\wnd_OfferingInOpportunityDetailEdit'. Window 'wnd_OfferingInOpportunityDetailEdit'. Компонент с именем 'edtQuantity' уже существует «Call Stack»

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

Нравится

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

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

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

Укажите какой продукт используете (CRM, XRM, Sales ...), а также прикрепите файл сервиса (сервис окна и сервис скрипта) который вызывает данную проблему.

XRM, при выгрузке сервиса выбивает ошибка

(E)     Невозможно редактировать сервис 'Opportunities\Details\Offerings\wnd_OfferingInOpportunityDetailEdit'. Window 'wnd_OfferingInOpportunityDetailEdit'. Компонент с именем 'edtQuantity' уже существует «Call Stack»

Прикрепил сервисы для продукта Terrasoft XRM версии 3.4.130

Хочу обратить внимание, что окно wnd_OfferingInOpportunityDetailEdit наследуется от окна wnd_OfferingDetailEdit.

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

"Терещук Павел" написал:Возможно в окне wnd_OfferingInOpportunityDetailEdit был удален компонент edtQuantity, а затем добавлен, что привело к изменению ID компонента и появлению проблемы с окном редактирования.

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

В архиве присутствует два сервиса окна, загрузите их оба.
Сначала откройте сервис окна wnd_OfferingDetailEdit, затем сервис окна wnd_OfferingInOpportunityDetailEdit

"Терещук Павел" написал:Сначала откройте сервис окна wnd_OfferingDetailEdit, затем сервис окна wnd_OfferingInOpportunityDetailEdit

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

Сохраните свои сервисы wnd_OfferingDetailEdit, src_OfferingDetailEdit. После чего загрузите мои прикрепленные сервисы. Если после этого проблема исчезнет, значить проблема находится в сервисе wnd_OfferingDetailEdit.

Может в сервисе wnd_OfferingDetailEdit изменился идентификатор компонента, и по этой причине окно сервиса _OfferingDetailEdit не открывается.

Ооо, проблема решена, изменил местоположение поля edtQuantity(переместил на старое место в блок итогов), на старое место и сервис wnd_OfferingInOpportunityDetailEdit начал работать без ошибок

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

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

Здравствуйте!
В последнем обновлении детали ОПИСАНИЕ при сохранении был сбой и теперь база виснет при отображении данной детали. В тоже время её можно посмотреть в журнале изменений.
Как можно удалить/пересохранить последнее обновление не заходя в деталь описание?

Нравится

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

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

Можете обнулить (удалить) значение данного поля с помощью sql запроса.
Пример запроса:

UPDATE tbl_Account SET [Description] = NULL WHERE ID = 

Деталь [Описание] всегда хранит последнее изменение. Перед обнулением данных, необходимо учесть, что возможности восстановить назад значения уже не будет.

Деталь [Описание] не рекомендую логировать, т.к. колонка Description, именно на это поле ссылается деталь в любом из разделов, имеет тип image - приводит к росту БД и к замедлению работы приложения.

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

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

Здравствуйте. Использую Terrasoft 3.3.2.196. Пока только учусь и возник ряд вопросов.
1. Как создавать поле. Нашел инструкции. Эта слишком муторная без объяснений почему должны именно так называться те или иные пункты https://community.terrasoft.ua/forum/topic/8463
Вот тут уже ближе «к народу». https://community.terrasoft.ua/blogs/7955#comment-64003
Но есть проблема. Три файла вставились, а на wnd_FieldMaker.xml ошибка. "Информация по сервису '{B9E648F2-72AC-4BB0-B11B-728DE3C0FDA2}' не найдена.
2. Как добавлять в поля выпадающий список ( например тип поля в детали документы)
3. Как добавлять/удалять действия
4. Как создаются в ПО интеграцию, через «добавить шаблон» и оно заработает?

Нравится

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

1. Вот недостающий четвёртый файл, загрузите сначала его.
2. Чтобы сделать поле выпадающитм списком — поставить в FieldMaker самую нижнюю галку.
3. Вручную, путём добавления пунктов меню.
4. Общие принципы интеграции платформы Terrasoft с другими приложениями.

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

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

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

Также уточните, какую телефонию Вы используете.

Телефония Oktell

Можете показать на скриншотах, что Вы делали?

Со скриншотами может позже. В карточки клиентов добавлены новые номера. Каждому номеру присвоен корректный тип для записи, типа "мобильный". Список телефонов был добавлен в Октелл, путем sql запросов

delete from [Work].[dbo].[CallList]

и

insert [Work].[dbo].[CallList]
([TaskID], [Priority], [Digits], [CommunicationTypeID],
[DebtID], [BankAccountID], [ContactID], [Task])
select d.[TaskID], g.[Priority], g.number, g.CommunicationTypeID,
t.ID, t.BankAccountID, t.ContactID, td.NumberOktell
from [192.168.30.10].[Terrasoft].[dbo].[tbl_Telemarketing] a
join [192.168.30.10].[Terrasoft].[dbo].[tbl_Operator] b on b.[ID]=a.[OperatorID]
join [192.168.30.10].[Terrasoft].[dbo].[tbl_Contact] c on c.[ID]=b.[ContactID]
join [192.168.30.10].[Terrasoft].[dbo].[tbl_Staff] td on td.[ContactID]=c.[ID]
join [192.168.30.10].[Terrasoft].[dbo].[tbl_TelemarketingAudience] d on d.[TelemarketingID]=a.[ID]
join [192.168.30.10].[Terrasoft].[dbo].[tbl_Task] k on k.[ID]=d.[TaskID]
join [192.168.30.10].[Terrasoft].[dbo].[tbl_Contact] h on h.[ID]=d.[ContactID]
join [192.168.30.10].[Terrasoft].[dbo].[tbl_ContactCommunication] g on g.[ContactID]=h.[ID]
join [192.168.30.10].[Terrasoft].[dbo].[tbl_Debt] t on t.[ID]=k.DebtID
where t.CategoryID<>'FF22F02E-201F-4B0F-B5FE-5F0464893AC5'
and convert(date,a.[DueDate])=CONVERT(date, getdate())
and k.[StatusID]='FB10FCB1-DE0E-446D-81E8-A0C456E2C3AB'
and (g.[Blocked]='0' or g.[Blocked] is null)
and g.number LIKE '%[0-9]%'
and g.number not LIKE '%[a-z]%'
and LEN(g.[number])<12

Данные запросы делал не я. Но человек который раньше этим занимался, сказал что добавляются номера именно так. Раз в сутки это происходит в автоматическом режиме. 192.168.30.10 это сервер Террасофта и базой SQL. Так вот номера появились в списке обзвона, и в нормальном режиме при наборе номера должна открываться карточка клиента. Обычно так и происходит, но в данном случае окно карточки открывается, но данных никаких нету.
Вот такая же проблема http://www.community.terrasoft.ru/forum/topic/17967

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

Я заметил, что у контактов в средствах связи, есть дубли одного и тоже же телефона, только с разными описанием. Например Мобильный:11111111, Рабочий:11111111. Возможно в этом проблема?

Александр,

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

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

В Terrasoft есть логгирование данных, но администратор сам настраивает, для каких именно таблиц нужно логгирование. Это можно сделать в разделе [Журнал изменений БД].

Не исключено, что проблема возникает на стороне Oktell. Не лишним будет проверить корректно ли работает обзвон на стороне Oktell.

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

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

Добрый день.
Такая проблема. В террасофте 3.3.2, при входе есть возможность увеличить количество записей в наборе данных, по умолчанию - 40, я меняю например на 100. При этом количество строк в разделе действительно меняется на 100, но если делать какое либо действие, оно распространяется все равно только на 40 записей, а не на 100. Как это исправить ?
Спасибо.

Нравится

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

Установка параметра FetchRecordsCount для Dataset происходит как в конфигурации, так и в ядре.
Возможно в сервисе на выборку данных стоит ограничение на количество записей равное 40.

Тут необходимо рассматривать каждую операцию в отдельности.

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

Добрый день.
Такой вопрос: Террасофт CRM интегрирован с Октелл. При дозвоне открывается карточка звонка и Терарсофт должен заполнять данные если номер есть в базе Контактов, но карточка не всегда заполняется. С чем это может быть связано ? Периодически открываются пустые карточки хотя номер в базе есть и привязан к контакту.
Где в коде этот механизм заполнения данных карточки можно найти и посмотреть?
Спасибо.

Нравится

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

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

Поиск номера телефона [Контакта] так и для [Контрагента] производится на детали [Средства связи].
При этом должен быть указан корректный тип для записи ([Мобильный] или [Телефон]).
Инициализация запроса на выборку номера телефона производится в функции GetCallSubjectCommunicationDataset сервиса scr_OktellUtils.

Посмотрите функцию FillSubjectInfoByOutgoingPhone размещенной в сервисе scr_CallClientUtils.

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

Примерно каждые 10-15 минут получаю сообщение

"Ваша сессия работы с приложением Outlook была завершена сервером из-за превышения интервала бездействия системы"

Как лечится ?

Нравится

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

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

увеличьте интервал для конкурентных сессий:[Файл]->[Настройки]->[Системные настройки]->[UpdateActiveSessionPeriod]

Как пример, можете увеличить интервал до 15 мин.

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