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

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

Нравится

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

Обязательность проверяется функцией CheckRequiredDataControl(scr_BaseDBUtils) для всех окон унаследованных от BaseDBEdit.

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

может нажатие на кнопку "Ок" переопределяли без вызова базовой функции?

точно...
спсб...

Показать все комментарии
Dataset состояние?
Скрипты
Разработка

Подскажите. Как узнать открыт Dataset или нет?
Может есть функция позволяющая увидеть его состояние?

Нравится

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

Добрый день.

Проблема в Terrasoft CRM 3.0.4

На форме добавил фрейм, на него добавляю компоненту DataGrid - выбивает ошибку "Разрушительный сбой". Такую ошибку стало выбивать когда до этого было создано окно с компонентами похожими на окно wnd_TasGridArea, т.е. названия компонент я не меняла в новом окне. И сейчас когда я удалила свое созданное окно - стало выбивать эту ошибку.

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

Подскажите как решить проблему?

Нравится

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

Попробовал повторить Вашу ситуацию, но не получилось. Возможно Вы описали не все детали или не все проделанные действия.
Для более детального анализа нужен сервис окна (если оно нестандартное, то также и все связанные сервисы), на котором происходит ошибка при добавлении грида. Предоставьте, пожалуйста, его в службу поддержки (support@tscrm.com), я рассмотрю. Включите также отладчик и посмотрите, в каком именно месте в коде происходит ошибка.

Стоян Виталий, Terrasoft Support Team

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

Если в сервисе SelectQuery поле не используется для сортировки, можно ли каким-то образом в скрипте эту сортировку туда вставить?
Проблема - у двоих пользователей почему-то стала выпадать ошибка о невозможности сортировки по полю типа image, что конечно же верно, но в сервисе сортировка явно не задана, да и не могла быть задана учитывая тип поля... Профайлер показывает в запросе ORDER BY, откуда он мог там взяться ума не приложу... У других пользователей такого не наблюдается.

Нравится

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

Сортировку можно включить в реестре, если колонка в него вынесена. Либо скриптом (свойства OrderType и OrderPosition колонки реестра, поля датасета или запроса):

Column.OrderPosition = 1;
Column.OrderType = otDesc;
Dataset.DataFields('Name').OrderType = 1;
Dataset.DataFields('Name').OrderPosition = 1;

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

delete from tbl_ProfileData
where UserID = <ID пользователя>

Спасибо, помогла очистка профиля в БД... но хотелось бы понять - что они могли там такое сделать, чтобы появился этот левый ORDER BY?

Посмотрите, вынесена ли в реестр колонка, соответствующая полю с типом image. Возможно, была включена сортировка по этой колонке.

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

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

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

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

Версия: Terrasoft XRM 3.3.1.134 MS SQL

Нравится

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

Я думаю в Вашем случае было бы удобнее сделать 3 датасета и 3 окна редактирования.

"Глова Сергей" написал:Я думаю в Вашем случае было бы удобнее сделать 3 датасета и 3 окна редактирования.

Хорошая идея, спасибо за совет.

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

"Лучкив Александр" написал:Возможно вашу задачу решит использование пользовательских полей

Александр, дело в том, что механизм пользовательских полей не позволяет использовать события полей в окне редактирования. Например, мне нужно отфильтровать значения при выборе в справочном поле. Как это сделать с пользовательскими полями? Вот и приходиться думать о вкладках и т.п.

Тогда вариант с 3мя датасетами и окном с 3мя вкладками (3 разными окнами) будет оптимальнее

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

Почему ж не позволяет? Создайте поля и в событии OnDatasetBeforeLookupDatasetOpen для dlData фильтруйте LookupDataset на здоровье!

"Александр Кудряшов" написал:Почему ж не позволяет? Создайте поля и в событии OnDatasetBeforeLookupDatasetOpen для dlData фильтруйте LookupDataset на здоровье!

Спасибо, не знал об этой возможности :)

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

Вставил на форму ActiveX-компонент и при заполнении поля ActiveXGUID Вышло сообщение "Интерфейс не поддерживается", затем поменял значение поля ActiveXGUID на GUID другого ActiveX, сохранил, закрыл окно, при этом также вышло сообщение,что Интерфейс не поддерживается.
Теперь при попытке открыть эту форму (wnd_InvoicesWorkspace) поисходит та же ошибка.
Думал сохранить это окно в xlm и в блокноте удалить этот злополучный ActiveX-компонент, но при попытке сделать это ситуация повторяется. При использовании утилиты TSMergeServices выгружаются все сервисы кроме этого.
Нашел в БД в tbl_Service данные этого окна, сохранил их в файл, но они в сжатом виде.
Подскажите пожалуйста каким образом можно это Окно открыть, выгрузить или распаковать то , что я смог выгрузить из таблицы tbl_Service.

Версия TSXRM+Press 3.3.2.103

Нравится

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

Попробуйте использовать TSMergeServices с указанием параметра usimask:

TSMergeServices.exe /cfg=... /usr=... /pwd=... /usimask="*\wnd_InvoicesWorkspace" ...

"Лабьяк Олег Игоревич" написал:Попробуйте использовать TSMergeServices с указанием параметра usimask:

Не получилось!

Information: Extracting service 'wnd_InvoicesWorkspace'
Information: Error processing service 'Invoices\General\Main Grid\wnd_InvoicesWorkspace', type YES to continue and else for cancel operation:

Information: Operation canceled
Information: 0 services successfully extracted.
Press Enter to exit...

Скините пожалуйста исходники на Delphi ActiveX компонент, у которого интерфейс будет поддерживаться, я его зарегистрирую с тем же GUID и у меня откроется окно или расшифруйте пожалуйста скрипт, который я выдергнул из БД и я в XML удалю этот компонент из окна.

Решил проблему!!!
Создал в Delphi Active Form до компиляции поменял GUID, зарегистрировал и форма открылась!!!

Возникло 2 пожелание и идея:
1. Сделать невозможным сохранение форма с некорректным ActiveX компонентом или сделать возможным открытие формы несммотря на эту ошибку.
2. Добавить в TSMergeServices параметр, который бужет выгружать сервисы, не контролируя наличие ошибок в них.

3. Сделать триггер на таблицу tbl_Service которвый сохраняет историю ее изменений. Это позволит сделать откат изменений сервиса, в случае, если он рухнул.

Можно еще сделать так
1. Создаете собственное SQ_ServicrTemp на tbl_Service в котором прописываете поля ID, Code, XMLData и филтр по полю Code.
2. Создаете скрипт и добавляете строки

function Main (){
	var ServiceCode = 'wnd_AccountEdit';
	var PathToSave = 'c:\\Temp\\';
	var sq_ServiceTemp = Services.GetNewItemByUSI('sq_ServiceTemp');
	ApplySelectQueryFilter (sq_ServiceTemp,'Code',ServiceCode, true);
	var ds = sq_ServiceTemp.Open()
	if (ds.IsEOF) return;
	ds.DataFields.ItemsByName('XMLData').SaveToFile(PathToSave);
	ds.Close();
}

3. Меняете значения переменных ServiceCode и PathToSave и добавляете связь со скриптом scr_DB.
4. Запускаете по F9.
5. Возможный но не обязательный пункт. Могут быть ошибки в скрипте :)
Нужный Вам сервис будет в папке PathToSave.

Да, есть еще более простой способ.
Попытайтесь просто "отрегистрировать" вашу библиотеку "regsvr32 -u MyLib.dll"
При открытии форма поругается но откроется.
Предыдущий вариант как резервный

"Евгений Либин" написал:Да, есть еще более простой способ.
Попытайтесь просто "отрегистрировать" вашу библиотеку "regsvr32 -u MyLib.dll"
При открытии форма поругается но откроется.
Предыдущий вариант как резервный

Спасибо конечно, но после "отрегистрации" форма ругалась и также не открывалась

"Евгений Либин" написал:Можно еще сделать так
1. Создаете собственное SQ_ServicrTemp на tbl_Service в котором прописываете поля ID, Code, XMLData и филтр по полю Code....

Данные из скрипта действительно сохраняются, но в сжатом виде (у нас версия 3.3.2.103).
Я практически сразу их нашел и вытащил при помощи Delphi.

Спасибо за участие.

Вы уверены что ds.DataFields.ItemsByName('XMLData').SaveToFile(PathToSave);
выгружает в зжатом виде?
Я нет, т.к. таким способом выгружаю и загружаю сервисы при инсталляции почтового клиента.

"Евгений Либин" написал:Вы уверены что ds.DataFields.ItemsByName('XMLData').SaveToFile(PathToSave);
выгружает в зжатом виде?
Я нет, т.к. таким способом выгружаю и загружаю сервисы при инсталляции почтового клиента.

У Вас какая версия TS CRM?

Вся линейка, начиная от 3.0.4 и до 3.3.2.

Прошу меня простить за некорректно поставленный вопрос, не знал, что Вы разработчик :)
Однако в том, что данные выгрузились криво я убедился очно, причем дважды (не поленился и попробовал Ваш способ,хотя проблема уже решена) и о сжатии данных для линейки 3.3.2 я узнал
из сообщения Александра Кравчука

Прочитал вашу ссылку.
Вы чуть-чуть запутались.
Да, действительно, начиная с версии 3.3.2 сервис скриптов ТЕКСТ СКРИПТА хранит в незжатов виде. Это означает что открыв полученный xml файл через редактор (или любой вьювер, например IE) вы сможете увидеть текст скрипта. Ранее текст скрипта бы в бинарнов сиде. Но это касается только скриптов, остальные же сервисы храняться в виде обычного xml. Да могли поменяться названия атрибутов или порядок элементов, но они доступнф для просмотра и редактирования.

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

Простите препутал ссылку вот необходимая: "Александр Кравчук пишет: Действительно, для 3.3.2 так не получится. В tbl_Service в поле XMLData теперь данные хранятся в сжатом виде."

Да Валерий, действительно. Век живи .....
Но я обнаружил в этом кое-что интересное. По сути в базе лежит ZIP (или ему подобный)архив. Т.е если выгрузить сервис описанным выше способом но в файл с расширением ZIP то в архиве мы увидим интересующий нас XML сервис.
О как.

Только это, судя по свему, не zip(при переименовании в zip и windows, и 7Zip отказались его открывать). Открыл при помощи 7zip увидел там одноименный файл с пустым расширением и он действительно открылся! Тип файла GZip.

Будем иметь ввиду на будущее.
Спасибо!

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

Меня зовут Влад я представляю группу компаний EXE
При инмпорте базы данных 1С в Террасофт столкнулись с проблемой.
Неможем правильно привязать ИНН и КПП контрагента так как в 1С v8.1
КПП и ИНН находятся непосредственно в контрагенте а в Террасофт в платежных реквизитах
Пробовали разные схемы, а также делали все по руководству администратора, но ничего невышло. Жду от вас ответа.

Нравится

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

Здравствуйте.Требуется лицензировать 15 пользователей на Terrasoft XRM 3.3.2.61.Какие мне понадобятся лицензии для этих пользователей?И еще среди них будет еще один администратор-какие лицензии нужно выписать ему?Спасибо!И понадобится ли делать лицензии на Supervisor?Наверно нет-так как у него уже есть лицензия на подключение?Спасибо...Срочно нужен ответ!

Нравится

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

15 именных лицензий вам в помощь. Лицензия на администратора нечем не отличается от лицензии на обычного пользователя, администратором вы его сделаете сами.
На Supervisor лицензия вам не нужна, но пользоваться им после загрузки пакета купленных лицензий вы не сможете.

спасибо!А как будут называться эти лицензии? Наверно просто Terrasoft XRM? То есть мне надо заказать одинаковые лицензии и для администратора и для обычных пользователей?Спасибо!

Да, одинаковые(Операции - добавление продуктов - Terrasoft XRM).А какой пользователь является администратором - нужно указать в разделе администрирование (в менджере лицензий отображается жирным шрифтом).

огромное спасибо...и название лицензии Terrasoft XRM????

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

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

Добрый день!

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

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

Добрый день! Появилась задача создания некоторого отчета который бы выгружался в документ Word. Подскажите есть ли возможность строить отчет который можно будет фильтровать по определенным полям. Например построить отчет по таблицы договоры и отфильтровать таблицу договоры по дате заключения договора??

Нравится

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

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

Олег фильтры в запросе это конечно хорошо) Но постоянно придется менять запрос при изменении каких либо требований к фильтрации запроса. Есть ли возможность сделать фильтры на подобие Fast Report?

Иван, не совсем понятен Ваш вопрос. Мне показалось, что задача следующая: есть отчёт в формате Word, который строится на основании пользовательского запроса. В пользовательском запросе есть возможность настроить фильтрацию, как постоянную (не зависящую от пользователя), так и фильтры для предварительной фильтрации (по аналогии с отчётами Fast Report, перед запуском отчёта появляется базовое окно фильтрации). Именно вторую фильтрацию я имел в виду в своём предыдущем ответе:

Спасибо Олег я даже не знал что можно так устанавливать фильтры!)

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

Объясните пожалуйста, как работает данный сервис.
Столкнулся с ним в разработанном другим программистом разделе. Я понимаю смысл и назначение его свойств и событий, но мне не понятно на каком основании он визуализирует значение конкретного поля из прикрученного к нему Dataset-а...

Нравится

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

"SSV" написал:но мне не понятно на каком основании он визуализирует значение конкретного поля из прикрученного к нему Dataset-а...

В свойстве ILookupDataField::Value хранится значение глобального уникального идентификатора записи справочника (ILookupDataField::LookupDataset). Отображаемое значение (ILookupDataField::DisplayValue) берется из поля (IGeneralColumn::Field) соответствующей записи таблицы справочника. (c) SDK

если я правильно понял, то IGeneralColumn::Field - это "Первичное поле для отображения" в сервисе Dataset?

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

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

Неправильно Вас понял. Обычно, когда спрашивают по LookupControl ввиду имеют LookupDataControl. То есть, в LookupDataControl мы может выбирать какое из полей набора данных отображать в контроле. В LookupControl - используется "первичное поле для отображения" датасета, как Вы и сказали выше.

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