onSaveButtonButtonTap: function(){
var modelConfig = Terrasoft.ApplicationConfig.getModelConfig("Activity");
var requiredModels = modelConfig.RequiredModels;
Terrasoft.StructureLoader.loadModels({
modelNames: requiredModels,
success: function(){this.createCallActivity(function(){
var arrangeActivityToggle =this.getArrangeActivityToggle();
var toArrange = arrangeActivityToggle.getValue();
var record =this.record;this.back();if(toArrange){
setTimeout(function(){
var config ={
defaultRecordData:{}};if(Ext.isString(this.activityLinkColumnNames)){
config.defaultRecordData[this.activityLinkColumnNames]= record;}else{for(var i =0, ln =this.activityLinkColumnNames.length; i < ln; i++){
var linkColumnNameConfig =this.activityLinkColumnNames[i];
var columnName = linkColumnNameConfig.activityColumnName;
var columnValue = record.get(linkColumnNameConfig.parentColumnName);
config.defaultRecordData[columnName]= columnValue;}}
Terrasoft.util.openEditPage("Activity", config);}.bind(this), 500);}}.bind(this));},
scope:this});},
В процессе администрирования базы данных возникла необходимость определить причину возникновения ошибки. Определенный объём информации импортируется в базу данных, с которым далее пользователи работают. В процессе заполнения определенного набора полей автоматически высчитывалась итоговая сумма в поле «Итого». Но в определённый промежуток времени использования продукта начали появляться ошибки, связанные с несоответствием значения поля «Итого» сумме полей из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Так как ошибку не получалось явно повторить, необходимо было разработать механизм для решения данной проблемы.
Естественно самой реальной и первой причиной возникновения такой ошибки приходила идея о сбоях в работе событий полей окна редактирования (то есть значения в полях изменялись, а события данных полей(-я) не срабатывали).
В основу решения было положено создание двух таблиц в базе данных для ведения логов, что происходят с записью набора данных. Первая таблица WindowLog, а вторая TriggerLog.
Первая таблица WindowLog включает в себя поля «Дата создания»(CreatedOn), «Идентификатор записи» (RecordID), «Ответственный» (WindowsUser), «Имя поля породившего событие»(FieldName), «Итого» и поля из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Для наполнения таблицы было использованы события невизуального компонента окна dlData: dlDataOnDatasetDataChange, dlDataOnDatasetBeforePost и dlDataOnDatasetAfterPost. В скрипте в событиях была создана функция, которая формировала SQL запрос к таблице WindowLog базы данных с фиксацией информации по указанным полям на момент срабатывания события.
Вторая таблица TriggerLog включает в себя поля «Дата создания»(CreatedOn), «Идентификатор записи» (RecordID), «Состояние» (до изменения записи и после), «SystemUser», «Итого» и поля из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Для заполнения данной таблицы был создан триггер на инструкцию UPDATE проблемной таблицы с двумя запросами вставки значений в таблицу. В одном запросе вставлялись значения до изменений, а во втором после.
Запрос №1:
INSERTINTO TriggerLog (*набор полей*) SELECT(*набор полей*) FROM deleted
Запрос №2:
INSERTINTO TriggerLog (*набор полей*) SELECT(*набор полей*) FROM inserted
Результатом использования данного решения на основе анализа таблицы WindowLog было установлено, что срабатывают все события окна редактирования, влияющие на вычисление значения поля «Итого». В процессе использования окна редактирования и после сохранения записи значения поля «Итого» были корректны.
Проанализировав записи в таблице TriggerLog было установлено, что в результате выполнения инструкции UPDATE было внесено некорректное значение. Сопоставив даты создания записей в таблице TriggerLog и WindowLog было установлено, что инструкция UPDATE была вызвана не в результате манипуляций с окном редактирования, а иным источником. На основании поля «SystemUser» таблицы TriggerLog было установлено что изменения были внесены с помощью импортера данных.
Таблицу TriggerLog возможно расширить, добавив в нее поля, которые помогут ускорить процесс обнаружение источника изменений записи базы данных. Список дополнительных полей может выгладять следующим образом: ApplicationName, LoginName, HostName.
PS: Принимаю предложения на доработку вашей конфигурации!!! Для более детальной информации можно связаться по следующему e-mail адресу: providnui@ukr.net !!!
В случае возникновения дополнительных вопрос по теме могу поделиться более детальной информацией.
есть окно редактирования(wnd_BaseDBEdit), в нем в windowcontainer окно (wnd_BaseGridArea), в этом гриде есть справочник, в котором можно выбрать значения не заходя в окно редактирования, на основании выбранного значения в справочнике, меняются остальные поля на этом гриде. Как правильно обновлять этот грид? Если делаю просто RefreshDataset, то обновляет и через секунду закрывается с ошибкой.
Доброго времени суток! Возникла проблема. Иногда при работе с разделом Контрагенты, при открытии карточки редактирования, размеры окна этой карточки становится настолько малы, что видно только часть заголовка. На сколько часто это происходит сказать не могу. С чем это может быть связано? Жду ваших мнений.
Укажите, пожалуйста, используемую Вами версию бинарных файлов, а также выгрузите и предоставьте сервис карточки редактирования контрагентов (wnd_AccountEdit) для анализа.
С сервисом карточки все хорошо.
Попробуйте обновится на более новую версию бинарных файлов и протестировать работу. Ссылку на скачивание отправил Вам в личном сообщении.
Была поставлена задача руководством прикрепить к карточке контрагентов дополнительные поля (около 40 шт различного типа), редактирование которых было бы возможно при указании типа контрагента - "клиент". что сделал:
создал таблицу с необходимыми полями (tbl_AddAccInfo), запрос на выборку (sq_AddAccInfo), датасет(ds_AddAccInfo).
к карточке контрагентов добавил второй датасет на странице не визуальных свойств и дополнительную область с вкладками куда разместил данные поля.
что получилось:
при открытии карточки редактирования контрагента открывается измененная карточка, однако все поля серые кроме bool data conrol`ов. Насколько я понимаю это от того, что в скрипт не добавлена инициализация второго датасета. Однако во всех примерах инициализации датасетов они прикреплены к окну как dlData, мой же прикреплен к окну контрагентов как dlAddData (так как dlData - стандартный). В связи с чем непонятно как реализовать работу с данным датасетом не сильно влезая в другие скрипты системы?
Заранее спасибо.
PS. версия системы TSXCRM 3.3.111. С реагированием на изменение типа контрагента пока не возился, хотелось бы сначала что бы просто работало, а потом уже остальные рюшечки.
"Черных Руслан" написал:А не проще было добавить джойн в запрос sq_Account на свою табличку и оттуда выбрать нужные поля в датасете ds_Account?
Спасибо что откликнулись, я думал над этим, но тогда не совсем ясно как активировать поля ввода данных по смене типа контрагента, т.к. насколько я понимаю при такой реализации после загрузки карточки редактирования контрагента будут активны на изменения сразу все поля... хотя возможно я что то не до конца понимаю и был бы признателен если Вы подскажете где можно почитать про изменение свойства полей (активно/неактивно) при помощи скрипта.
Ну как вариант самый простой я б предложил сделать все поля как пользовательские стандартным методом.
При этом элемент fgUserFields вместе с содержимым выкинул бы на отдельную новую закладку в карточке наподобие закладки "финансы".
Данный функционал действительно проще всего реализовать через стандартные пользовательские поля (меню "Файл" - "Настройки" - "Пользовательские поля"), указав для этих полей тип контрагента = Клиент, и вынести их на отдельную закладку.
Инна Безверхняя,
II линия службы поддержки Terrasoft.
"Александр Кудряшов" написал:Черных Руслан пишет:
А не проще было добавить джойн в запрос sq_Account на свою табличку и оттуда выбрать нужные поля в датасете ds_Account?
+1
и не бойтесь большого количества полей в таблицах, запросах и датасете
Хм...хотя конечно 40 полей еще к датасету прикрутить...наверное много :-)
"Bezverkhnia Inna" написал:Данный функционал действительно проще всего реализовать через стандартные пользовательские поля (меню "Файл" - "Настройки" - "Пользовательские поля"), указав для этих полей тип контрагента = Клиент, и вынести их на отдельную закладку.
Спасибо за совет, был приятно удивлен тем, что пользовательские поля могут проявляться по условию.
Однако идея подобной реализации была, основным камнем преткновения стала невозможность указать в качестве источника значений для пользовательского поля иной раздел кроме справочников. Например хотелось бы прикрепить данные о ИФНС в которую сдаются отчетности какого либо контрагента, что бы при выборе этой ИНФС из списка контактов подгружались ее специалисты с контактной информацией. Наиболее полно этим требованиям отвечает уже существующая система прикрепления контактов к определенным контрагентам. Можно конечно реализовать подобное через систему справочников, однако городить лишнее не сильно хочется. Буду благодарен за описание более легкого способа реализации подобной задумки.
Здравствуйте, Сергей.
Учитывая описанные Вами требования к функционалу, реализовывать его нужно действительно не через пользовательские поля, а через TS Admin.
На карточке контрагента создаете все необходимые поля (для удобства и наглядности их все же лучше вынести на отдельную закладку карточки).
Данные о ИНФС можно заносить в поле типа LookupDataControl, источником данных для которого является датасет контрагентов, отфильтрованный, например, по определенному типу контрагента (Тип = Налоговая служба).
Аналогичным образом информация по специалистам этой ИНФС тоже будет заноситься в поле типа LookupDataControl, источником данных для которого является датасет контактов, отфильтрованный по контрагенту для контактов (Контрагент = ИНФС (из соответствующего поля)).
Фильтр на датасет можно накладывать на событии OnPrepareSelectWindow данного поля.
Инна Безверхняя,
II линия службы поддержки Terrasoft.
Доброе время суток! У меня возникла проблема на конфигурации TSCRM 3.3.0.42
При добавлении продукта в Документе при установленной галочке "строчное" (я добавил булевкое поле строчное которое делет поле Мемо видимым в контроле МЕМО работает скрипт на подсчет слов, действие OnDatasetDataChange)если
сфокусировать другое окно происходит подвисание окна(оно постоянно мерцает) до тех пор
пока не уберешь признак(булевское) "строчное"
Спасибо
К сожалению, информации, предоставленной Вами, недостаточно для идентификации причин возникновения проблемы.
Уточните, пожалуйста, на какой именно версии приложения Terrasoft CRM воспроизводится данная проблема. А также пришлите, пожалуйста, сервисы или коды, которые Вы изменяли для реализации необходимого Вам функционала.
Я загружу их на версии приложения, аналогичной Вашей, попытаюсь воспроизвести проблему и выяснить в чем именно заключается причина возникновения проблемы.