Возможно ли увеличить шрифт в администраторе 3.4.1. ? Возможно ли увеличить шрифт записей в реестре в 3.4.1. ?

Нравится

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

По аминистратору. Шрифт скриптов(средняя зона) увеличивается - вопросов нет. Шрифт дерева сервисов(справа-слева) совсем чуть-чуть увеличился, но не достаточно для комфортного просмотра. В окне Grep-поиска также мелкий остается, к сожалению. У меня астигматизм поэтому актуально.:exclaim:

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

Я не знаю что произошло, но и справа-слева шрифт увеличился до приемлемого уровня.

Бывает...

а как изменить шрифт в 3.4.0.130, при разрешениї full hd на ноутбуке 15.6 очень плохо видно

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

Добрый день!
Возможно ли отключить подчеркивание текста в dgdtLookup колонках. Т.е. чтобы текст оставался Lookup, но без нижнего подчеркивания.

Нравится

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

Для этого нужно изменить у колонки в гриде свойство LookupType с dgcltLookup на dgcltGeneral.

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

Чтобы текст стал ссылкой и карточка открывалась — выставите полю свойство LookupType равным dgcltLookup.

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

Например в css нижнее подчеркивание можно отключить так:
a {
text-decoration: none; /* Убираем подчеркивание у ссылок */
}
ссылка уже будет без нижнего подчеркивания:

Мне нужно сделать то же самое. Возможно ли это сделать каким-нибудь образом?

Это можно сделать путём доработки ядра системы, если есть его исходники. Исходники клиентам не предоставляются.

Как всегда все упирается в святая святых - ядро :exclaim: !

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

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

Добрый день !
Подскажите пожалуйста как посмотреть стек вызова функции при отладке ?

Нравится

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

Если используете для отладки Visual Studio, там есть окно «Call Stack». Если оно не открыто, нажмите Ctrl+Alt+C.

спасибо

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

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

Возможно ли напечатать fast report для документов из грида детали workSpace-а ?
см. picture1.jpg

С помощью этой строки:
var ID = ReportPreviewer.ParentWindow.Attributes.Values('DatasetIDs')[0];
получаю ID выбранного документа в основном гриде.

А как получить ID выбранного документа в гриде детали ?
Есть пример ?

Спасибо.

Нравится

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

Картинка не открывается.

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

Да, возможно.

Посмотрите, как реализован вызов отчета в функции ReportMenuItemExecute в скрипте scr_ReportUtils.

Получить ID выбранного документа в основном гриде можно ещё таким образом:

var ID = wndGridData.Window.ComponentsByName('grdData').SelectedIDs[0];

"Марина Карапетян" написал:А как получить ID выбранного документа в гриде детали ?

Не совсем понятно, что Вы имеете ввиду.

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

Если Вы просто хотите из детали получить ID документа, который выбран в данный момент в основном гриде, тогда это можно сделать через окно раздела (Workspace).
При инициализации детали в качестве аттрибута ему можно передать окно основного грида, а потом, получить ID выбранного документа аналогично описанному выше, получив значение из аттрибута.

Почему-то рисунок не прикрепляется.
Попытаюсь без рисунка объяснить.
 
Основной грид имеет деталь_1. 
В детали_1 находятся дочерние документы каждого из документов основного грида соответственно.
При выборе документа в основном гриде, происходит обновление детали_1.
 
    связь Родительский документ : дочерний документ 
                        один    : многие
 
Например: 
основной грид
          Родительский документ_Номер1
          Родительский документ_Номер2 
	  ...
	  Родительский документ_НомерN
 
деталь_1	(если выбран Родительский документ_Номер1)
        Дочерний документ_1_Родительского документа_Номер1
	Дочерний документ_2_Родительского документа_Номер1
	...
	Дочерний документ_N_Родительского документа_Номер1
 
деталь_1	(если выбран Родительский документ_Номер2)
        Дочерний документ_1_Родительского документа_Номер2
	Дочерний документ_2_Родительского документа_Номер2
	...
	Дочерний документ_M_Родительского документа_Номер2		
 
 
Нужно получить ID дочернего документа, который выбран в детали_1.
 
Но получить ID нужно в скрипте fast report-а в событии OnPreview, чтобы задать как параметр ADODataset - у, а там уже с помощью SQL запроса запрашиваются нужные данные.
 
Спасибо.

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

Вы можете передавать нужное значение ID документа через атрибут ReportPreviewer.

Так, например, как атрибут ReportPreviewer, передается объект Report в функции ShowSelectedRecordsReport.

А определять ID, как мы обсуждали в предыдущих комментариях к этому посту.

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

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

что это за поле и что означает деталь связана с основной таблицой документов?

Спасибо.

Здравствуйте, Марина.

Если мы говорим о стандартной связке основной раздел - деталь, то обычно они связаны по полю ID записи основного раздела связью один ко многим.

То есть, если это раздел [Документы] и какая-то деталь этого раздела, то в датасете, запросе на выборку и таблице детали есть поле DocumentID, которое заполнено значением поля ID из таблицы документов.

В окно грида детали это значение передается через атрибут 'ParenItemtID'.

Таким образом получить значение поля DocumentID в окне грида детали, можно так: Self.Attributes('ParentItemID').

Если мы говорим о стандартной связке основной раздел - деталь, то обычно они связаны по полю ID записи основного раздела связью один ко многим.

Да, у меня есть такая связь.

То есть, если это раздел [Документы] и какая-то деталь этого раздела, то в датасете, запросе на выборку и таблице детали есть поле DocumentID, которое заполнено значением поля ID из таблицы документов.

Это раздел [Заявки физ. лиц.]. В датасете, запросе на выборку и таблице детали есть соответствующее поле, которое заполнено значением поля ID из таблицы заявок.

В окно грида детали это значение передается через атрибут 'ParenItemtID'.

Это тоже сделала.

Таким образом получить значение поля DocumentID в окне грида детали, можно так: Self.Attributes('ParentItemID').

Но мне нужно получить не DocumentID (где записан ID записи основного грида) а ID именно записи детали. Ведь надо напечатать конкретную запись детали.

То есть, нажав на конкретную запись в основном гриде, в детали получаю соответствующие записи.
Далее нажимая на конкретную запись детали, надо напечатать ее с помощью fast report-а.
Спасибо

Получить ID выбранной записи грида можно так:

var ID = Window.ComponentsByName('grdData').SelectedIDs[0]

где Window - это название окна грида, его можно ещё заменить на Self

Так как я пишу в скрипте fast report-а, то Self в этом скрипте = "FastReport"
поэтому попыталась получить Window так:

var Window = Services.GetNewItemByUSI('wnd_XXXGridArea'); // где wnd_XXXGridArea - имя окна

var ID = Window.ComponentsByName('grdData').SelectedIDs[0];

и получаю undefined.

Посмотрела debugger-ом

Window.ComponentsByName('grdData').SelectedIDs
{...}
    CoClassGUID: "{D143A918-4CBE-48F9-AEB5-E373F6D6679D}"
    CommaText: ""
    Connector: {...}
    Count: 0
    InstanceID: "{83BD163D-9070-4543-9A89-A2A8FF3218BE}"
    IsCaseSensitive: false
    IsSorted: false
    IsUnique: false
    Items: Invalid number of parameters.
    ObjectState: 0
    Text: ""
Window.ComponentsByName('grdData').SelectedIDs[0]
undefined

Спасибо.

Вам нужно получить ID записи раньше, а потом передать его через атрибуты ReportPreviewer (выше я уже об этом писала).

Если писать так, как Вы, то получается, что обращение идет к другому экземпляру окна, а не к тому, которое является окном реестра в детали. Соответственно, что и никакие записи в нём не выбраны.

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

// scr_BaseWorkspace
function ReportMenuItemOnExecute(ActionMenuItem)
{
...
ChildIDs = Self.ComponentsByName('wndDetail1Grid').Window.ComponentsByName('grdData').SelectedIDs.CommaText;
// где Self-окно workspace-а(wnd_ContactCreditWorkspace) , wndDetail1Grid - деталь окна
ReportMenuItemExecute(ActionMenuItem, GridDataset, DataGrid, ExtractUSICodeEx(Self.USI), ChildIDs);
}

// scr_ReportUtils
function ReportMenuItemExecute(ActionMenuItem, GridDataset, DataGrid, WorkspaceName, ChildIDs)
{
...
ShowSelectedRecordsReport(ReportCode, FilteredDatasetCode, SelectedIDs, FilterForm, ChildIDs);
...
}

// scr_ReportUtils
function ShowSelectedRecordsReport(ReportCode, FilteredDatasetCode, GridDatasetIDs, FilterForm, ChildIDs)
{
...

SetAttribute(ReportPreviewer, 'ChildDatasetIDs', ChildIDs);
...
}

И все работает. Спасибо большое!!!
Может мой вопрос покажется глупым, но объясните пожалуйста, что такое окно реестра?

Окно реестра — это страница, на которой находится грид. Обычно название таких страниц заканчивается на «GridArea». В Вашем случае есть основное окно реестра в разделе и по одному для каждой детали.

Хорошо, спасибо.

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

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

Кнопки *Добавить* и *Удалить* отрабатывают без проблем.
Проверка MessageBox(Dataset.State); в обработчике выдает почему-то: 1.
На других, нормально работающих в режиме изменения записи, деталях такая-же проверка выдает 2 , т.е. dstEdit. Где могло произойти нарушение логики?

Нравится

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

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

Для решения данной проблемы установите debugger и отладьтесь, чтобы понимать в каком месте происходит свал.

Алла, добрый день!
В какую часть кода установить debugger ? Видимо туда, где сразу начинается выполняться код после нажатия *Изменить* ? В администраторе видно что на кнопку btnEdit обработчик btnEditOnClick выставлен, но он не обрабатывается в wnd_MyDetailGridAreaScript. A где тогда?

Ну а в обработчик кнопки *Оk* карточки редактирования датасет уже в неправильном состоянии приходит:
function btnOKOnClick(Control) {
var Dataset = dlData.Dataset ;
MessageBox(Dataset.State); // Здесь на экран выводится 1

Что означает Dataset.State == 1 ?

Алла, добрый день!
В какую часть кода установить debugger ? Видимо туда, где сразу начинается выполняться код после нажатия *Изменить* ? В администраторе видно что на кнопку btnEdit обработчик btnEditOnClick выставлен, но он не обрабатывается в wnd_MyDetailGridAreaScript. A где тогда?

Ну а в обработчик кнопки *Оk* карточки редактирования датасет уже в неправильном состоянии приходит:
function btnOKOnClick(Control) {
var Dataset = dlData.Dataset ;
MessageBox(Dataset.State); // Здесь на экран выводится 1

Что означает Dataset.State == 1 ?

Алла, добрый день!
В какую часть кода установить debugger ? Видимо туда, где сразу начинается выполняться код после нажатия *Изменить* ? В администраторе видно что на кнопку btnEdit обработчик btnEditOnClick выставлен, но он не обрабатывается в wnd_MyDetailGridAreaScript. A где тогда?

Ну а в обработчик кнопки *Оk* карточки редактирования датасет уже в неправильном состоянии приходит:
function btnOKOnClick(Control) {
var Dataset = dlData.Dataset ;
MessageBox(Dataset.State); // Здесь на экран выводится 1

Что означает Dataset.State == 1 ?

Установите debugger на обработчик OnPrepare карточки редактирования и посмотрите, в каком состоянии находится датасет.

Если для карточки редактирования обработчик OnPrepare не переопределен, тогда установите debugger в обработчик OnPrepare родительской карточки редактирования (она указана в свойстве TemplateWindowUSI самого окна карточки редактирования).

"Кудинов Дмитрий Станиславович" написал:В администраторе видно что на кнопку btnEdit обработчик btnEditOnClick выставлен, но он не обрабатывается в wnd_MyDetailGridAreaScript. A где тогда?

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

"Кудинов Дмитрий Станиславович" написал:Что означает Dataset.State == 1 ?

Это означает, что датасет находится в состоянии просмотра.
Для того, чтобы добавить данные в датасет, он должен находится в состоянии 2 (редактирования) или 3 (вставки).

Алла, не подскажете как от этого назойливого окна избавится ?

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

В справке написано:

Запуск JIT-отладки в случае возникновения ошибки
В диалоговом окне "JIT-отладка" в списке Доступные отладчики выберите пункт Новый экземпляр Visual Studio 2015 или выберите уже работающий экземпляр Visual Studio.
Чтобы автоматически использовать Visual Studio для всех будущих сбоев, выберите команду Использовать выбранный отладчик по умолчанию.
Если нужно выбрать типы кода для отладки, нажмите кнопку Выбрать отладчики вручную. Если этого не сделать, Visual Studio автоматически выбирает отладчики, подходящие для типа кода в приложении.
Нажмите кнопку ОК.

Если Visual Studio работает не так, стоит обратиться в службу поддержки Microsoft.
Также см. обсуждение похожего вопроса тут.

Все происходит в scr_BaseDBEditUtils между этими двумя функциями(см.ниже):

function OpenDatasetWithRecordID(Dataset, ID) { // здесь еще 0
Dataset.Close();
ApplyDatasetIDFilter(Dataset, ID, true);
Dataset.Open(); // здесь еще 0

А здесь уже 1 на входе:

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

Дмитрий,

в таком случае Вам нужно проверить, что происходит в обработчиках OnDatasetBeforeOpen и OnDatasetAfterOpen у датасета детали.

A можно самому переопределить с 1 на 2 ?
Если :
Dataset.State = 2;
тогда ошибка .

"Савельева Алла" написал: OnDatasetBeforeOpen и OnDatasetAfterOpen у датасета детали.

А куда debugger втыкать? Обработчики у датасета явно не определены.

Не нужно. Изменение состояния Dataset-а происходит автоматически при выполнении его методов.

"Зверев Александр" написал:Не нужно.

Уточните что делать не нужно. Не нужно проверять, что происходит в обработчиках OnDatasetBeforeOpen и OnDatasetAfterOpen или не нужно самому переопределять с 1 на 2 ?

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

В датасете не были проставлены галочки *Генерировать запрос на обновление* , *Редактирование*.
Александр, спасибо что обратили мое внимание на датасет!

Дмитрий, понятно. Вчера тоже думал об этих галочках, но не был уверен, что дело именно в них.

function edtContactIDOnPrepareSelectWindow(LookupDataControl, SelectWindow) {

var AccountID = Self.Attributes('ParentItemID');
if (AccountID){
var LookupDataset = LookupDataControl.DataField.LookupDataset;
ApplyDatasetFilter(LookupDataset, 'AccountID', AccountID, true); //фильтруем контактов по текущему контрагенту-родителю
LookupDataset.Attributes('DontFilter') = true;
debugger;
}
}


1.Что делает строка: LookupDataset.Attributes('DontFilter') = true; ? Для чего это?
2. Где в дебаггере VS можно посмотреть эти .Attributes ? Допустим, мне налету нужно проанализировать значение: Self.Attributes('ParentItemID')

Это какая-то доработка, в коробке «DontFilter» нигде не упоминается.
В отладчике для этой цели есть окно «Watch».

Получается что в Watch значение поля 'ParentItemID' у Self.Attributes нет ? Где значения всех этих атрибутов?

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

Обычно значение аттрибута 'ParentItemID' присваивается при инициализации детали.

Для примера посмотрите как инициализируются детали раздела [Контрагенты].

Инциализация происходит в окне раздела в функции RefreshDetails().

Если мы говорим о разделе [Контрагенты], то в качестве значения атрибута 'ParentItemID' присваивается ID текущей записи контрагента.

"Кудинов Дмитрий Станиславович" написал:Где значения всех этих атрибутов?

Вам нужно самостоятельно в строке окна Watch прописать строчку Self.Attributes('ParentItemID').

Допустим на датасет наложили фильтр:

ApplyDatasetFilter(CampaignDataset, 'CampaignID', CampaignID , true); // apply filter

Можно ли Watch увидеть какое число записей осталось в CampaignDataset после наложения фильтра?
Где это свойство подсмотреть?

Dataset.RecordsCount

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

Например, таким образом:

Dataset.Open();
while (!Dataset.IsEOF) {
var AccountID = Dataset('AccountID');
Dataset.GotoNext();
}
Dataset.Close();

Где можно отключить вывод *названия воздействия* в верхней части карточки редактирования воздействия?

В скрипте scr_BaseDBEditUtils есть функция SetEditWindowCaption, которая его заполняет. Нужно внести доработки, чтобы она в нужном случае ничего не делала. К примеру, в скрипте карточки воздействия на OnPrepare присваивать окну какой-то атрибут, а в этой функции его проверять.

Каким образом можно отключить подчеркивание текста в dgdtLookup колонках. Т.е. чтобы текст оставался Lookup, но без подчеркивания.

Дмитрий,

по этому вопросу открыт другой топик - вот ссылка на него:
http://www.community.terrasoft.ru/forum/topic/25026

"Савельева Алла" написал:по этому вопросу открыт другой топик - вот ссылка на него:
http://www.community.terrasoft.ru/forum/topic/25026


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

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

Определил метод OnGetProfileKey:

                public void OnGetProfileKey(IWindow Window, Value Key) {
                        if (ScrUtils.Assigned(dlData.Dataset)) {
                                Key.Value = __global.System.ExtractUSICode(dlData.Dataset.USI);
                        }
                }

В результате на одно окно сохраняется несколько профилей.

НО. при загрузке окна выполняется запрос без фильтрации по ключу и ВСЕГДА применяется первый профиль из выборки.

exec sp_executesql N'SELECT
        [tbl_ProfileData].[ID] AS [ID],
        [tbl_ProfileData].[XMLData] AS [XMLData]
FROM
        [tbl_ProfileData] AS [tbl_ProfileData]
WHERE
        ([tbl_ProfileData].[UserID] = @P1 AND
        [tbl_ProfileData].[ServiceID] = @P2)'
,N'@P1 varchar(38),@P2 varchar(38)','{42708305-508B-4975-B92D-2E7A695A82FA}','{43E4D9B2-2EC8-48EA-A1FE-0E1C1842E307}'

Нравится

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

Денис, о чём вообще речь? Где задаётся этот код и на каком языке он написан?
Можете описать свою задачу и вопрос подробнее?

В окне SelectData необходимо несколько профилей.
Сделал в соответствии с этим http://www.community.terrasoft.ru/developer/advice/3258, Профиль окна

Скрипт окна пишем на C#.

При открытии окна отловил запрос SqlProfiler'ом и увидел, что ключ не влияет на запрос.

И окно по факту не работает с несколькими профилями, хотя они нормально сохраняются в tbl_ProfileData.

P.S. UseProfile установлен в true

В Terrasoft 3.X не используется язык C#. Скрипты пишутся на JScript, а ядро написано на Delphi.

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

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

как это сделать? Я сделал в соответствии с руководством. Однако не работает.

Вот пример с руководства:

Также предусмотрена возможность хранения нескольких профилей для одного окна. Данная возможность необходима для универсальных окон, которые используются для различных целей. Примером такого окна может быть окно wnd_SelectData, которое предназначено для выбора значений из любых справочников, и должно "помнить" свои настройки для каждого справочника. Для реализации этого механизма используется событие OnGetProfileKey окна, в котором разработчик может определить код профиля, с которым в данный момент должно работать окно.

Пример – Работа с несколькими профилями:

function wnd_WindowOnGetProfileKey(Window, Key) {
 
      if (Window.Tag = '') {
 
            Key.Value = 'ProfileKey1';
 
      }
 
      else {
 
            Key.Value = 'ProfileKey2';
 
      }
 
}

Я в качестве ключа использую USI Dataset'a

В руководстве не предусмотрена работа с C#.

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

Добрый день.
Такой вопрос. В Террасофт 3.Х бизнес процессы реализованы под задачи, каким образом Процессы привязать к Звонкам, к результатам?

Нравится

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

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

Для решения описанной задачи Вам нужно реализовать новый WorkflowAction по аналогии с wa_TaskAction (это WorkflowAction для работы с задачами по процессу).

Более подробное описание, как это сделать, Вы можете найти в руководстве администратора п. 6.6.2 по ссылке:

http://ftp.bpmonline.com/support/downloads/Doc&Manuals/Terrasoft3X_Docu…

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

Добрый день. В версии Terrasoft 332 создаю новый раздел с помощью мастера разделов. Все вроде бы создалось корректно, ошибок при создании не было. Но при открытии в клиентском приложении все поля карточки неактивны (серые), заполнить карточку никак нельзя. работают только поля с выпадающими списками, и то выбор в поле не появляется. в разделе доступ я установила права доступа. Проверяла все созданные элементы , используя инструкцию https://community.terrasoft.ru/developer/advice/4576, ошибок не нашла. Петесоздала раздел дважды безцспешно.
раздел делаю не в первый раз, но такая проблема впервые. как это исправить?"

Нравится

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

Виктория, причины могут быть разные.

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

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

Добрый день.
Я захожу под администратором.
Логика базовой карточки действительно страдала, карточка не закрывалась. Я указала родительским окно базовое окно, проблема ушла. Но проблема неправильного открытия осталась.
В дизайнере в карточке указан правильный датасет, и все поля, в запросе и в датасете все нормально, их исполнение в дизайнере ошибок не выдает
Длинное название это сколько букв? Я создавала раздел два раза, как ServiceProject и ServiceClient. Это длинно?

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

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

Добрый день!

Подскажите, можно ли активировать выгрузку реестра в xls-файл (и соответствующую кнопку) при отсутствии Excell в системе?

Terrasoft XRM 3.4.0.114 установлен на виртуальной машине на windows 10 в Parallels Desktop

Excell установлен на хостовой машине с MAC OS 10, на которой установлен Parallels Desktop 12.1.2. Файлы xls из виртуальной машины открываются при помощи Excell for MacOS

Спасибо!

Нравится

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

Логика выгрузки реестра в Excel реализована на уровне ядра и использует COM-объект Excel. Соответственно, если на компьютере нет установленного Excel, то выгрузка работать не будет.

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

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

Здравствуйте!
В версии 3.4.0.38 появилась задача почистить дубли по контрагентам и контактам, их очень много. Читала, что в BPMonline есть возможность поиска дублей, но здесь только ручной поиск и ручное объединение записей, так как системная функция поиска находит только несколько записей (наименование у дублей могут быть на разных языках, а полное наименование заполнены по разному у одних и тех же КА например)

Подскажите пожалуйста как лучше решить данный вопрос.

Нравится

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

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

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

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

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

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

Для того, чтобы установить причину, проверьте следующее:

1) подключили ли Вы свою хранимую процедуру (проверить можно в окне настройки правил поиска дублей), так как если Вы внесли изменения в базовую процедуру поиска дублей, то они могли перезаписаться назад, например, при пересохранениии таблицы.
2) запустите SQL Profiler и посмотрите, какая хранимая процедура отрабатывает и какой у неё текст.

Спасибо! Эту часть уже сделала, нужно было изменить фильтры для связи. Незнаю как здесь удалить опубликованные(( Тормознулась на подсчете количества, Вы мне ответили в другом топике http://www.community.terrasoft.ru/forum/topic/24760.

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

Относительно Вашего вопроса, попробуйте установить точку останова в функции PrepareSearchResults() скрипта wnd_ViewSearchResultScript и выполнить пошаговую отладку именно этой функции.

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