Здравствуйте!
Версия ТС 3.4.1.191.
Есть карточка с множеством полей, вертикальная полоса прокрутки.
В зависимости от некоторых значений отображаются/скрываются некоторые поля и группы. Проблема в том, что если одна из групп внизу скрывается (по нажатию чек-бокса) - карточка прокручивается в самых верх. То же происходит с полями, если текущее положение в карточке где-то в середине... Подскажите пожалуйста как можно это обойти? 
Пробовала BeginUpdate/EndUpdate в разных вариациях, сброс в начало карточки при отображении группы убрать не смогла. 
Нужна либо блокировка на перемотку, либо получить текущее положение в карточке и после отображения/скрытия группы прокрутить в то же место скриптом, или другие варианты.

Также подскажите пожалуйста, можно ли сделать прокрутку в карточке с помощью колесика мыши?

Нравится

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

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

Может, есть смысл пересмотреть дизайн карточки, чтобы не было прокрутки: растянуть её до размеров экрана, разнеся поля в несколько колонок, либо же разнести поля по смыслу на разные вкладки в карточке.

Зверев Александр,

перемотка в начало происходит уже после 

frmData.EndUpdate(), который я так понимаю перерисовывает карточку. Подходящих событий не нашла. Свойства из разряда Scrolls, ScrollTo, ScrollBy система не распознает, scrollTop, scrollHeight и pageYOffset месседж выдает пустыми, либо неверно их использую. Полей много, вынуждена расположить по высоте карточке. 

Значит, меняйте расположение полей или делайте со вкладками.

Зверев Александр,

пришлось делать через блокировку, а не отображение/скрытие. Спасибо за ответ!

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

Господа, подскажите, где бы подробно почитать про интеграцию Террасофт 3.3.2 с Астерикс?

Нравится

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

Подозреваю, что нигде, поскольку такой интеграции не было. Были отдельные коннекторы к Oktell, Infinity, Cisco и универсальный Terrasoft Call Centre, совместимый с TAPI-драйверами. Были сторонние разработки интеграции с Asterisk, но неизвестно, завершены ли в итоге.

Зверев Александр,

Спасибо.

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

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

ТеррасофтCRM 3.3.2.245.

Возможно ли в DataGrid-е запретить отображение панели итогов? В противном случае при выборке в SelectQuery из табличной функции и включенных итогах в гриде выдается ошибка: "Функции SUM необходимо 1 аргументов". Я пока программно устанавливаю свойство IsSummaryVisible грида в false, но может есть более цивильный способ?

Нравится

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

Включение и отключение строки итогов в реестре сделано на уровне ядра, из конфигурации (в скрипте или в дизайнере страницы) на это свойство можно влиять только через IsSummaryVisible. Вероятно, у Вас итоги не работают именно из-за вызываемой функции вместо колонок в SelectQuery, ведь для неё SUM не имеет смысла.

Спасибо, понятно.

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

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

Имеется TerrasoftCRM 3.3.2.245. Нужно реализовать выборку данных, которую нельзя сделать посредством SelectQuery с передачей параметров в запрос и расчетом итоговой строки.

Почему нельзя использовать SelectQuery? В конструкторе запроса нельзя join-ить с подзапросом и нельзя join-ить более, чем по одному полю.

Вопрос 1: как реализовать расчет итоговой строки? DataGrid умеет считать итоги только в виде суммы, среднего, максимума и минимума колонки переданного набора данных. Я могу записать произвольное значение в область итогов DataGrid? Если не могу, то строку итогов мне придется считать в запросе и потом ее объединять с результатом запроса.

Вопрос 2: как можно получить данные в виде таблицы в обход SelectQuery?

  1. ExecuteCustomSQL - отпадает, так как не может вернуть таблицу (или я чего-то не знаю).
  2. Вызов хранимой процедуры в CustomSql колонке SelectQuery. Вариант в принципе годный. Есть некоторые проблемы с передачей параметров для Include фильтра, но решаемые.
  3. CustomQuery. Непонятный мне зверь. Может ли возвращать таблицу? Можно ли менять текст запроса в runtime или только хардкодить в Администраторе? В конфигурации я примеров использования не нашел, на этом форуме тоже (киньте ссылку, если не жалко).
  4. ADODataset. На первый взгляд тоже годный вариант, но есть свои "но". Хотелось бы, чтобы запрос выполнялся от имени текущего пользователя, со всеми его ограничениями доступа. В случае доменной аутентификации это решаемо, а как быть, если используется аутентификация СУБД? Я вряд ли смогу где-нибудь достать пароль текущего пользователя, могу только показать диалог с запросом пароля и сохранить его в базе.

Есть ли еще какие-либо варианты получения табличных данных?

Нравится

8 комментариев
Лучший ответ

Зверев Александр,

Так в 3-ке, насколько помню, можно и представление реализовать нужное со всем набором колонок.

Думаю, что в данном случае (имею ввиду, приджойнить таблицу по нескольким колонкам), это самый оптимальный вариант.

Хотя SelectQuery в конфигурации все же прийдется реализовать.

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

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

Зверев Александр,

Так в 3-ке, насколько помню, можно и представление реализовать нужное со всем набором колонок.

Думаю, что в данном случае (имею ввиду, приджойнить таблицу по нескольким колонкам), это самый оптимальный вариант.

Хотя SelectQuery в конфигурации все же прийдется реализовать.

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

Да, с представлением тоже можно. Но тогда нужно будет не только SelectQuery, но и сервис таблицы с таким же названием и набором полей задизайнить, а потом при его сохранении сказать «нет» на вопрос об изменении в БД.

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

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

Благодарю за помощь. Реализовал через табличную функцию.

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

Почему не подойдет?

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

Алла, видимо, речь о том, что если внутри view вся логика сделана не select, а кодом или вызовом функции с параметрами, пробросить внутрь условия фильтра, наложенные на view снаружи, нетривиально.

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

Добрый вечер!

После переустановки ОС на Win 10, в CRM не работает часть функционала.

1. Не отображаются данные пользователя в верхнем, левом углу системы.

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

3. При использовании функции «Глобальный поиск», нет возможности перейти ни к одному из найденных пунктов. Система выдает предупреждение.

Изображение удалено.

 

4. При попытке открыть меню Файл-Настройки-Системные настройки, CRM выдает ошибку .

 

Прочитала на community (https://community.terrasoft.ru/questions/obnovlenia-win10-i-terrasoft-34) , что в версии 3.3.4 можно удалить обновление KB4074588, но к сожалению, такой технической возможности у нас в компании нет. Подскажите, пожалуйста, как можно решить эти проблемы? Спасибо!

Нравится

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

Под Windows 10 не работают полноценно ни 3.3.2, ни 3.4.0. Нужно обновляться с 3.3.2 на 3.4.1: скачивать новые файлы программы, менять номер версии в базе в tbl_DatabaseInfo и покупать заново лицензии. Либо же продолжать использовать предыдущие версии Windows.

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

Зверев Александр, Александр, спасибо за ответ! К сожалению, обновиться до версии 3.4.1 нет возможности, по политике компании.
Всё дело в том, что на первых ПК с обновленной ОС, CRM работал корректно, как и на Win 7.

Но на ПК, которые ставим сейчас, CRM работает не корректно. Сравнили версии ОС, они разные. Обратились сейчас в наш тех.отдел. Чтобы они попытались понять в чем разница, между версиями на ОС Win 10. Ждем от них ответа.

Так в том и дело, что Win10 перестала нормально работать с 3.3.2 и 3.4.0 начиная с одного из её обновлений около года назад.

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

Доброго времени суток, коллеги.
Есть перечень Сервисов, упакованных в Сервисные договора. Создаём Инцидент, выбираем Контрагента - автоматически подставляется соответствующий основной Сервисный договор. Далее выбираем Сервис из списка доступных согласно Пакета сервисов в данном Сервисном договоре. И вот тут мне нужно автоматически выставить нужный Тип инцидента. Условно говоря, в моём бизнес-процессе Тип инцидента - это группировка Сервисов по сути: IT, организационное, техническое и т.п. Соответственно, по Типу инцидент пойдёт в решение в разные подразделения.
Подскажите, пожалуйста, где нужно поковыряться для реализации? Начну с того, что в справочнике Сервисов добавлю выбор Типа инцидента, которому этот Сервис соответствует. Далее надо в окне редактирования Инцидента при смене Сервиса подставлять Тип инцидента. Как это сделать?

Нравится

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

Это можно сделать либо в скрипте карточки в обработчике dlDataOnDatasetDataChange, либо в скрипте датасета на SelfOnDatasetDataChange.

Итак.
В Сервисы через штатный механизм добавил справочник Типов инцидента. Заполнил справочник.
В sq_Incident добавил поле ServiceIncidentTypeID из уже подцепленной tbl_ITService.IncidentTypeID
Прописал это поле в ds_Incident
Теперь в скрипт. Пошел по первому пути.
function dlDataOnDatasetDataChange(DataField) {
    DataChange(DataField);
    SmartLookupOnDataChange(DataField);
}
Проваливаюсь в DataChange, нахожу там обработку изменения ITServiceID
    if (Name == 'ITServiceID') {
       // получаем ID типа инцидента по сервису
        var iIncidentTypeID = Dataset.Values('ServiceIncidentTypeID');
        // меняем тип инцидента
        Dataset.Values('IncidentTypeID') =iIncidentTypeID;
        ProcessChangeITServiceID(Dataset);
        return;
    }
Не падает, но при изменении Сервиса контрол Тип инцидента оказывается пустым. На каком шаге мог ошибиться?

Попробуйте отладиться, чтобы на каждом шаге видеть значения переменных. Вообще, для получения значения tbl_ITService.IncidentTypeID проще было бы не добавлять поле в sq и ds инцидента, а воспользоваться функцией GetDatasetFieldValueByID('ds_ITService', ITServiceID, 'IncidentTypeID');

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

Добрый день.

Во вложенном файле карта заказа, как она должна выглядеть по заданию. Подсветка групп (в окне слева - "напитки", "чипсы") нарисована в графическом редакторе. Сейчас этого нет, в этом и заключается задание. Список групп может быть длинным. Клиенты могут сами начать заказ снизу или из середины. Идти по группам по порядку не получается. Иногда операторы упускают какие-то группы, и продажи теряются. Надо подкрасить группы, по которым прошлись при набивании заказа. У Вас  это стандартная конфигурация - группы и записи, входящие в группу. Я подумал, что может быть что-то похожее (по событиям в окне с записями группы меняется вид записей в окне групп) уже есть. Если это так, не могли бы Вы дать мне ссылку?

Прикрепленные файлы

Нравится

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

Дерево групп — это обычный DataTreeGrid со своей логикой, реализованной в скрипте scr_Groups окна wnd_Groups. Окраску можно сделать в обработчике функции grdDataOnGetRowDrawInfo, передав изнутри значение в параметр Color. Сейчас там только выбирается иконка папки. Как работают со цветом, видно в скрипте scr_TasksGridArea реестра задач.

То есть Вам будет нужно либо модифицировать scr_Groups, либо создать своё окно, унаследованное от него, и в его скрипте сделать нужную логику в grdDataOnGetRowDrawInfo (не забыв вызвать базовую). И в окне для групп использовать его.

PS: Йог жив, перс-абр, Чудо!surprise

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

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

Есть два поля "Категории", "Суб-категории". Оба типа LookupControl и оба wnd_MultiSelectData.
После выбора значений "Категории", фильтрую значения поля "Суб-категории", так, чтобы запрос возвращал только те Суб-категории, для которых выбранные категории являются родительскими.
Если после того как выбраны суб-категории, удалить одно из значений категории, и снова открыть суб-категории, фильтр работает, но остаются прежние выбранные значения(в TargetDataset).

Вопрос: Как удалить значения из TargetDataset (в MultiSelectData) ?

Нравится

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

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

Зверев Александр,
Я не нашла ни wnd_ReportCurrentSituation,  ни wnd_ReportFinanceResult. Версия Terrasoft 3.2.0.90
Есть какие-то другие примеры? Или, если Вам не сложно, можете отправить фрагмент кода ?

У Вас очень старая версия, многое из более новых может не работать. Вот схемы карточки и скрипта. Если не получится загрузить в систему, смотрите скрипт в блокноте.

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

Мне нужно раскрасить ячейки разным цветом. Последняя колонка во вложенном файле cellDraw. У меня такое получилось в окне заказа (см. второе вложение).

function dgOfferingOrderOnGetCellDrawInfo(DataGrid, Column, Color) {   
    if(dgvOfferingOrder.Items(Column).DataFieldName == "OutOfTerms"  && dgvOfferingOrder.Items(Column).DataField.IsEnabled == true) {       
       var DataFieldValue = dgvOfferingOrder.Items(Column).DataField.Value;
       if (DataFieldValue == 1)
         Color.Value = clRed;
       if (DataFieldValue == 2)
         Color.Value = clGreen; 
       if (DataFieldValue == 3)
         Color.Value = clYellow; 
    }
    if(dgvOfferingOrder.Items(Column).DataFieldName == "RecomendedQuantity"  && dgvOfferingOrder.Items(Column).DataField.IsEnabled == true) {
                       Color.Value = clSkyBlue;
    }
}

В разделе контрагентов попробовал сделать по подобию. Событие  OnGetCellDrawInfo там есть. Но ничего не происходит. Думал, что-то неправильно в условиях. Но проверил точкоц останова, программа туда даже не попадает:

function grdDataOnGetCellDrawInfo(DataGrid, Column, Color) {
      debugger; // ???????????????????????????????????
  if(System.GetLocalComputerName() == 'PEUWUD14431') {
           debugger;
    if(gvAll.Items(Column).DataFieldName == "Category"  && gvAll.Items(Column).DataField.IsEnabled == true) {       
       var DataFieldValue = gvAll.Items(Column).DataField.Value;
       if (DataFieldValue == 'I')
         Color.Value = clRed;
       if (DataFieldValue == 'II')
         Color.Value = clGreen; 
       if (DataFieldValue == 'III')
         Color.Value = clYellow; 
       if (DataFieldValue == 'IV')
         Color.Value = clBlue; 
    }

  }
}

Буду признателен, если поможете советом.

 

С уважением,

Владлен Зенюков

Прикрепленные файлы

Нравится

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

Возможно, в свойствах грида просто не включены в дизайнере HasCustomDraw и HasCustomCellDraw. Сравните с тем, что в гриде на той странице, где работает.

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

Версия ТС - 3.4.0.191

Здравствуйте! 
Подскажите пожалуйста, мне нужно реализовать отправку почты из террасофта. Для работы с текстом письма использую компонент RichDataControl. Проблема в том, что я не могу корректно преобразовать его в html (нужно сохранить форматирование). Может быть есть готовые решения или хотя бы наброски? Без разницы на js или sql.
Нужно все провернуть без использования MS Outlook и (желательно) без ms word на компьютере. Изучала https://community.terrasoft.ua/questions/pole-opisanie-na-e-mail и https://community.terrasoft.ua/questions/rtf-v-html, вопрос решить не смогла :( Также находила сырую процедуру для такой конвертации на ms sql, пробовала дорабатывать, но оформление текста по большей части все равно теряется, предполагаю чтобы прописать туда все возможные варианты - понадобится много времени (могу ошибаться, сильно далеко не копала).
Заранее спасибо!

Нравится

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

В последних версиях ядра 3.4.1 добавили поддержку выгрузки детали описания в HTML. Для этого нужны новые файлы и добавление параметра в настройках RunSettings.xml. После этого в JS-коде содержимое в HTML получают так:

var HTMLTemplateBegin = '<html lang="ru" encoding="UTF-8"?><head><title data-cke-title=""></title> '+
	'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>' +
	'<meta http-equiv="Content-Style-Type" content="text/css"/></head>' +
	'<body contenteditable="true" class="cke_editable cke_editable_themed cke_contents_ltr cke_show_borders" spellcheck="true"><div>';
var HTMLTemplateEnd = '</div></body></html>';
Body = HTMLTemplateBegin + edtDescription.GetHTMLBody() + HTMLTemplateEnd;
Body = Body.replace(/[\n\r]/g, '');// удаление _x000D_ в MS Office - http://stackoverflow.com/questions/36167807/access-newline-becoming-x000d

 

 

Зверев Александр,

ругается на строку edtDescription.GetHTMLBody() и в коде, и в форме для конвертации на кнопку "Конвертировать". Пишет что объект не поддерживает свойство или метод. В окне Save As - строка с выбором HTML не появилась

 

Значит, в Вашей версии ещё не было поддержки. Она появилась только в 3.4.1.

а как-нибудь возможно именно этот метод внедрить в нашу версию? Либо другие варианты решения... Где-то на форуме читала про htmlbody..

Нет, нужно обновляться. Либо сами чисто программно формируйте нужный HTML, а шаблоны верстайте отдельно.

Зверев Александр,

Подскажите пожалуйста, что нужно для обновления? Переход платный? Также заинтересовал вопрос - https://community.terrasoft.ru/questions/svaz-s-microsoft-office-2013. В 3.4.1 поддерживается 64х битный офис. Там про бинарники тоже писали, но ссылки на них нет (отправляли на почту задавшему вопрос) 

Лучше использовать 32-битный. А по поводу обновления, для этого нужны новые файлы, сменить значение версии в базе и, если потребуется, что-то может быть нужно исправить в конфигурации (ту же поддержку новых Office). Для этого будет нужен пакет поддержки, свяжитесь с менеджером.

Зверев Александр,

Спасибо!

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