Добрый день! передо мной стоит задача внести изменения в карточку добавления контрагента, а именно настроить средства связи так чтобы уже автоматически стояли в заданном порядке.
Реализовать данную функциональность можно следующим образом.
1. В TSAdmin найти карточку редактирования контрагента.
2. Вызвать обработчик OnDatasetAfterAppend датасета даталинка.
3. В нём прописать значения средств связи в виде:
Dataset('Communication1TypeID') = <Значение 1>;
Dataset('Communication2TypeID') = <Значение 2>;
Dataset('Communication3TypeID') = <Значение 3>;
Dataset('Communication4TypeID') = <Значение 4>;
Dataset('Communication5TypeID') = <Значение 5>;
где <Значение 1> - это ID требуемой записи из таблицы tbl_CommunicationType (в Вашем случае [Мобильный]), для остальных значений аналогично.
Возможно кто-то сталкивался с проблемой, симптомы которой я сейчас попробую описать.
1. Версия Terrasoft CRM 3.2.0.86;
2. ОС - XP, 8;
3. MS SQL Server 2012;
Симптомы следующие.
Разедел с какого-то времени перестал открываться. Судя по внешнему виду не загрузилось окно раздела, а сообщение говорит о недопустимости конвертации одного типа в другой.
Что пытался делать.
У меня есть возможность получить удаленный доступ (благодаря VPN) к локальной сети, поэтому первое, что я попытался сделать, это сгенерировать ошибку у себя. Однако, оказалось, что на моей стороне ошибка не генерируется для тех же логина и пороля. IT-ик заказчика с которым я сотрудничаю тоже не смог воспроизвести проблему на другом копьютере. На "проблемном" компьютере под другой учеткой раздел открылся.
Исходя из этого можно сделать вывод, что проблема где-то в кэше, но удаление папки Cache не дает никаких результатов.
Добрый день.
Исходя из описания, проблема скорее всего кроется в профиле пользователя на текущей машина. Очистите профиль и загрузитесь заново под проблемным логином.
Необходимо учесть один нюанс, что слетят пользовательские настройки реестров, а также настройки разделов.
В таком случае необходимо выполнять отладку загрузки раздела, начиная с события OnPrepare с заходом в каждую вызывающуюся функцию.
Возможно где-то в коде находится логическая ошибка.
Добрый день! Необходимо добавить доп колонку с определенными условиями в результаты глобального поиска. Добавили в датасет mds_GlobalSearchResult доп поле и в окно wnd_GlobalSearchResults доп колонку, подаскажите, пожалуйста, где нужно прописать код для отображения после поиска нужных нам данных в этой колонки?
Данные с результатами поиска в колонки датасета добавляются в функции AppendResultString скрипта scr_GlobalSearch. Она вызывается для каждого результата в функции DoSearch.
Еще подскажите, пожалуйста, каким образом можно кодом у всех пользователей поставить умолчательно выбранные параметры поиска в настроках поиска (т.е даже при чистке кеша должны быть установленны определенные параметры - выбранные чекбоксы по умолчанию)?
Это датасет для уже найденных результатов, параметры поиска передаются в других функциях того же скрипта, которые вызываются раньше из функции DoSearch и вызывающей её StartSearch. См. InitializeSearchSettings, AddFiltersBySearchWordsArray и др. функции в скрипте scr_GlobalSearch.
Хорошо, тогда такой пример: где прописано условие, что поле FieldValue получает значение в зависимости от поля "тип объекта" SubjectType, по которому был найден результат? В одном случае в FieldValue - это название контрагента, а в другом - название проекта.
В карточку звонка добавил два LookupDataControl. В зависимости от того, какое значение выбрано в LookupDataControl1, значения в LookupDataControl2 меняются. Фильтрацию делал в с помощью:
function edtTypeOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
var TypeID = dlData.Dataset('TypeID');
var LookupDataset = edtResult.DataField.LookupDataset;
ApplyDatasetFilter(LookupDataset, 'CallTypeID', TypeID,
!IsEmptyGUID(TypeID));
}
Фильтр работает нормально. Без Unprepare работает тоже нормально. Может ли это быть от частого запуска "edtResult.UnprepareDropDownList()"? Просто когда убрал строки edtResult.UnprepareDropDownList() из функции dlDataOnDatasetDataChange, отрабатывает без ошибок.
Может, дело в том, что у Вас dlDataOnDatasetDataChange(DataField) срабатывает при изменении любого поля, а не только поля «Тип», по которому фильтруется? А если добавить дополнительную проверку и делить Unprepare только когда действительно нужно?
Да, срабатывает не только когда фильтрую по данному полю. А как можно отловить изменение именно этого поля? Добавил в функцию function edtTypeOnEnter(Control) стало отрабатывать нормально, без ошибок, но хотелось бы узнать, как можно отловить изменение именно в dlDataOnDatasetDataChange(DataField)?
У Вас в функцию dlDataOnDatasetDataChange передаётся параметр DataField. Это и есть то поле, что поменялось. Смотрите у него значение Name.
function dlDataOnDatasetDataChange(DataField){
var DataFieldName = DataField.Name;switch(DataFieldName){case('TypeID'):
edtResult.UnprepareDropDownList();break;}}
Пытаюсь решить одну проблему и столкнулся со странным поведением системы.
В нашей системе часто используется функционал загрузки данных из Excel. Наши клиенты присылают нам разнообразные данные, от банка приходит выписка в таком формате.
Загрузка данных с чтением из каждой ячейки - это медленный процесс, особенно если ячеек много.
Существует возможность сохранить диапазон листа Excel в массив и потом уже работать с массивом, что значительно ускоряет процесс. Но к сожалению, массив получается какой то странный и нормально обратиться к нему не получается. Кто нибудь сталкивался с подобной проблемой и есть ли решение?
Код примерно такой:
var ExlApp =new ActiveXObject("Excel.Application"); var WorkBook = ExlApp.Workbooks.Open(FileName); var Sheet = WorkBook.Sheets(1); var BankData = Sheet.UsedRange.Value; // Вот здесь BankData и есть тот самый массив, но обратится к нему проблематично // var Value = BankData[2][2] выдает ошибку о том что объект есть null или не является объектом // да и BankData имеет тип Unknown. Хотя в студии его структура видна и данные как бы есть.
Добрый день!
Это не мессив. В MSDN есть вся информация.
Sheet.UsedRange возвращает тип Range Здесь все об этом типе
Такие вещи очень хорошо поискать снача в MSDN, а после можно найти решение на Stackoverflow
Я не писал что Sheet.UsedRange это массив.
А вот Sheet.UsedRange.Value возвращает массив, с которым чудесно можно работать в Delphi например. Быстрая обработка данных Excel в Delphi
Благодарю за ссылку на MSDN :)
Я создаю шаблон счёт-фактуры, мне необходимо подсчитывать сумму с НДС и округлять сумму в каждой строке. На примере шаблонов других документов я хочу использовать OnDatasetCalcFields, который даёт возможность менять уже выбранные из БД значения. Например так:
var Value = Dataset.ValAsFloat('BasicTotalAmount');
ShowInformationDialog("Value before = "+ Value); var NDS = Value /100*18;
ShowInformationDialog("NDS = "+ NDS); var Totally = System.Round(NDS + Value,2);
Dataset.Values('BasicTotalAmount')= Value;
Проблема в том, что событие OnDatasetCalcFields не срабатывает в принципе. В других документах всё нормально. Пытался найти отличия от уже существующих Dataset-ов и шаблонов, но ни к чему не пришёл.
Как быть? Как заставить событие отрабатывать.
Здравствуйте! Понадобился редактор html для редактирования и записи данных в БД в формате html.
Скачал и установил lite версию html редактора XStandard (ActiveXControl).
Подскажите, как получить свойство Value? (для записи в БД).
По документации (http://xstandard.com/en/documentation/xstandard-dev-guide/api/) точного ответа не нашел.
Добрый день,! Появилась такая проблема: при интеграции с другой внутренней системой в базе данных создаются проекты в обход клиента. При создании, каждому новому проекту присваивается номер на 1 больше текущего максимального. Проблема в том, что при создании проектов на клиенте игнорируются номера присвоенные проектам при создании через бд. Можно ли как то обойти эту проблему?
Например, завязаться на событие OnPrepare страницы главного окна wnd_Main. То есть в функцию wnd_MainOnPrepare дописать вывод своей функции, которая вычисляет актуальный номер и пишет в системную настройку.
Читать значение настройки можно функцией GetSystemParameterValueEx, писать — SetSystemParameterValue.
Штатно вычисляется текущий номер и сразу увеличивается на 1 при помощи функции GenerateSystemNumber, можете посмотреть пример работы с системными настройками и там.
Если интеграция с другой системой идёт в момент, когда не запущен Terrasoft и сделана на уровне БД, можно просто менять значение записи в БД в таблице tbl_SystemSetting.
Добрый день. есть таблица на 15000 записей
при обращении к ней из под админ пользователя выполнение занимает не более 1 сек.
при обращении обычным пользователем более 5ти минут
из-за чего может быть проблема?
Добрый день! Возникла такая ситуация. При входящем звонке со срытого номера, зависает карточка в большинстве случаев. Номер определяется как 007.
Из за чего может зависать звонок? И быть может есть способ подменить номер вместо этого номера?
Может кто сталкивался?
Причину зависания звонка можно определить в процессе отладки на Вашей конфигурации.
Илья, в этом случае Вам необходимо обратится письменно в техническую поддержку Terrasoft, сообщив дополнительную информацию:
- Версию Terrasoft
- Продукт Terrasoft
- Интеграцию с какой телефонией используете и по каким протоколам
- Ваши контактные данные
- Параметры подключения к Вашей конфигурации
Скорей всего что номер 007 подставляет Ваша АТС и необходимо вносить изменения в настройки АТС чтобы она передавала тот или иной CallerID (входящий номер).