Вопрос

Добрый день!

Данные:
клиент версии 3.3.2.275
база ms sql 2005

Задачи
1. Удалить все письма (всех пользователей) из БД.
2. Удалить логи.
3. Уменьшить размер БД другими способами – если есть какой-то способ (кроме шринка).

По первой задаче - В тестовой базе скл запросом удалили данные в таблицах dbo.tbl_MailMessage, dbo.tbl_MailMessageLog, dbo.tbl_MailMessageRight – но на сколько это правильно вопрос…
По второй задаче - если поступить также скл запросом - вопрос какие таблицы чистить?

Есть варианты правильного решения указанных задач (может штатные средства террасофт)?

У меня такой же вопрос

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

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

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

Ещё для уменьшения размера БД можно очистить таблицу процессов и их элементов (если процессы использовались).

Также можно посмотреть, что содержится в таблице История и удалить лишнее.

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

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

Логи в других разделах устроены аналогично, плюс tbl_DatabaseLog для записей самого раздела логов.

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

Вообще, для быстрого поиска, куда делось место, можно воспользоваться стандартным отчётом «Disk Usage by Top Tables» в Management Studio:

 

Алла Савельева 

 Спасибо,   sql-профайлер посмотрю 

Зверев Александр пишет:
При удалении записей таблицу прав отдельно чистить не нужно, там каскадная связь и записи о правах удалятся вслед за записями основной таблицы сами.

Т.е.  если SQL запросом удаляю только dbo.tbl_MailMessage,  то dbo.tbl_MailMessageRight очистится сама?
Не понимаю как это работает... на уровне запуска клиента под супервизором запускается какой-то скрипт?

«Disk Usage by Top Tables»  так и нашел dbo.tbl_MailMessage

В TSAdmin у связи в таблице прав стоит галка «каскадная связь». На уровне базы удаление в связанных таблицах работает при помощи триггера tr_tbl_MailMessage_ID и аналогичных для каждого раздела.

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

Ясно , спасибо

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

Здравствуйте.
Всем кто работал с 3x
TS 3.4.0.130 || Outlook 2010
Есть blob поле в котором хранится текст формата rtf.
Дано его текстовое представление(в прикрепленном файле). 
Сейчас используется только обычный текст который оборачивается в html(или без этого) и передается с помощью базового функционала в Outlook.
Как можно перегнать данный rtf в html, со стилями редактирования, а не только текстом?
Идеи, предложения?

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

У меня такой же вопрос

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

В последней сборке 3.4.1.191 добавили возможность конвертации детали «Описание» в HTML. Нужно обновляться, а потом внести правки в RunSettings.xml. Дописать там параметры EnableExportRichDataToHTML="True" InlineImageInHTML="True" в тег SystemSettings. После этого при сохранении в файл этой детали кроме RTF и RVF появится третий формат HTML.

Также в этой версии конвертировать RTF-поля можно будет в скрипте, см. пример тут.

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

Спасибо

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

Здравствуйте!
Версия ТС 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');

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

Добрый день.

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

Прикрепленные файлы
order_card.png230.66 КБ

У меня такой же вопрос

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
Есть какие-то другие примеры? Или, если Вам не сложно, можете отправить фрагмент кода ?

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

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