Добрый день коллеги!
Продолжаю создавать свой первый раздел в Terrasoft
Теперь после создания Раздела и Реестра
дошло дело до Карточки редактирования
в принцbпе карточку создал унаследовал от wnd_BaseDBEdit
добавление записи получается, а вот с редактированием не могу разобраться(((
окно появляется но компоненты без данных,
Пробовал так
scr_BaseGridArea.EditGridAreaData(Self, BaseGridArea); этот код результата не дает
с этим тоже не получается
var Attributes = new ActiveXObject('Scripting.Dictionary');
var RecordID = Attributes.Add(RecordID, 'ID');
ShowEditWindowEx('wnd_LisingEdit', Attributes);
Может быть есть простой пример кода карточки редактирования с описание основных действий
при нажатии на кнопку Изменить в Реестре (wnd_BaseGridArea)
Буду очень признателен.
Нравится
нашел вот такой код
{
var EditWindowUSI = 'wnd_LisingEdit';
var AccountID = dlData.Dataset.Values('ID');
var Attributes = GetNewDictionary();
Attributes.Add('RecordID', AccountID);
Attributes.Add('NotifyObject', null);
ShowEditWindowEx(EditWindowUSI, Attributes);
}
но увы, карточка данными не заполняются и поля на карточке не активные,
хотя на добавление работают нормально
Здравствуйте, Евгений.
Проверьте, пожалуйста, установлено ли у Вашего грида свойство TemplateWindowUSI = wnd_BaseGridArea?
"Безродный Андрей" написал:Здравствуйте, Евгений.
Проверьте, пожалуйста, установлено ли у Вашего грида свойство TemplateWindowUSI = wnd_BaseGridArea?
да установлено
Евгений,
причина может быть в том, что были переопределены базовые функции (например, OnPrepare), а родительские не вызываются при этом.
прошу приложить сервисы созданного Вами раздела, реестра и карточки редактирования, а также сообщить используемую Вами версию Terrasoft.
Андрей прикладываю созданные сервисы раздела
версия 3.3.2.294
"Безродный Андрей" написал:версия 3.3.2.294
версия 3.3.2.294
Евгений,
приложите также сервисы tbl_District, sq_District, ds_Disctrict.
Без этих сервисов не удается загрузить tbl_lising_article
"Безродный Андрей" написал:Евгений,
приложите также сервисы tbl_District, sq_District, ds_Disctrict.
Без этих сервисов не удается загрузить tbl_lising_article
прикладываю сервисы
Евгений,
причина, вероятно, в том, что у Вас в сервисе запроса нет фильтра сравнения с параметром:
[URL=http://fastpic.ru/][IMG]http://i68.fastpic.ru/big/2014/0814/b8/819214ad…]
[URL=http://fastpic.ru/][IMG]http://i65.fastpic.ru/big/2014/0814/49/754f3462…]
Спасибо Вам!
Действительно установил фильтр и карточка работает.
Видимо при создании раздела вручную не все предусмотрел.
Андрей добрый день!
у меня еще вопрос есть. Теперь по поводу работы с полями,
каким образом можно сделать чтобы при выборе значения в LookupDaatControl
допустим Наименование клиента
в другой компонент TextDataControl выводилось значение его ИИН
Во первых не нашел у LookupDaatControl события OnChange к тому же на начальном уровне не совсем
еще овладел синтаксисом Jscript
Буду очень благодарен за помощь!
Здравствуйте, Евгений!
Вашу задачу лучше реализовать на событии OnDatasetDataChange датасета карточки, в которой содержится LookupDataControl.
На примере ниже при выборе Контрагента в карточке Задачи в поле Заголовок задачи будет помещаться полное название выбираемого Контрагента. По аналогии Вы сможете реализовать свой функционал.
function SelfOnDatasetDataChange(DataField) { ... if (Name == 'AccountID') { //при изменении поля AccountID в датасете задач var AccountID = DataField.Value; //получаем ID выбранного контрагента var AccountDataset = Services.GetNewItemByUSI('ds_Account'); //получаем датасет контрагентов ApplyDatasetFilter(AccountDataset, 'ID', AccountID, true); //фильтруем датасет по ID выбранного контрагента AccountDataset.Open(); //открываем датасет var INN = AccountDataset.Values('OfficialAccountName'); //получаем нужное значение нового контрагента AccountDataset.Close(); //закрываем датасет Dataset.Values('Title') = INN; //присваиваем полученное значение в одно из полей текущего датасета задач return; } ... }
Реализация.
У контрагента Оливия-Фарм есть полное название:
При выборе Контрагента в карточке Задачи полное название Контрагента подставляется в заголовок:
"Безродный Андрей" написал:Здравствуйте, Евгений!Вашу задачу лучше реализовать на событии OnDatasetDataChange датасета карточки, в которой содержится LookupDataControl.
Андрей добрый день
Сделал у себя все как вы рекомендовали , по примеру,
но у меня выходит ошибка((.
Скрин ошибки прилагаю.
Евгений,
а Вы уверены, что поле Контрагент в Вашем датасете "Предметы Лизинга" называется AccountID?
Евгений, вооружитесь отладчиком. Так Вы сможете намного быстрее понять, в чем проблема.
"Безродный Андрей" написал:Евгений,
а Вы уверены, что поле Контрагент в Вашем датасете "Предметы Лизинга" называется AccountID?
Евгений, вооружитесь отладчиком. Так Вы сможете намного быстрее понять, в чем проблема.
Да Вы правы поле называется по другому, но даже уже когда поменял тоже не работает
а картинку скинул еще до своего варианта
Но ошибка все равно не исчезает(((
if (Name == 'BorrowerId') { //при изменении поля AccountID в датасете задач
var AccountID = DataField.Value; //получаем ID выбранного контрагента
var AccountDataset = Services.GetNewItemByUSI('ds_Account'); //получаем датасет контрагентов
ApplyDatasetFilter(AccountDataset, 'ID', AccountID, true); //фильтруем датасет по ID выбранного контрагента
AccountDataset.Open(); //открываем датасет
var INN = AccountDataset.Values('Code'); //получаем нужное значение нового контрагента
AccountDataset.Close(); //закрываем датасет
dlData.Dataset.Values('BIN') = AccountID //'INN34324'; //присваиваем полученное значение в одно из полей текущего датасета задач
return;
Евгений,
смотрите детали ошибки и поставьте отладчик:
http://www.microsoft.com/ru-ru/download/details.aspx?id=40787
После установки установите значение параметра JITDebug в реестре равным 1 (параметр находится по пути:
HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings)
При возникновении ошибки будет сразу понятно, на каком участке кода происходит свал.
Евгений, почему Вы в итоге присваиваете значению поля BIN AccountId?
Возможно, необходимо присваивать INN?
var INN = AccountDataset.Values('Code'); //получаем нужное значение нового контрагента
AccountDataset.Close(); //закрываем датасет
dlData.Dataset.Values('BIN') = AccountID //'INN34324'; //присваиваем полученное значение в одно
Также,
Вы уверены, что в датасете контрагентов у Вас присутствует поле Code?
AccountDataset.Values('Code')
"Безродный Андрей" написал:Вы уверены, что в датасете контрагентов у Вас присутствует поле Code?
AccountDataset.Values('Code')
Андрей я тут уже пробовал присвоить хоть какое то значение этому полю)
даже просто делал строку dlData.Dataset.Values('BIN')= 'vdfsxvdf' все равно ошибка
Поле которое меня интересует точно Code
сейчас заметил что ошибка выходит именно вот когда выполняется эта строка
Dataset.Values('BIN') =INN; //присваиваем полученное значение в одно из полей текущего атасета задач
т е если ее за комментировать то ошибки нет
тип полей совпадают
Устанавливал Vstudiо затем установил Micrisoft Debuger с сайта скачивал отсюда,
но он не заработал, теперь в итоге нет отладчика- Vstudio тоже перестал работать
Евгений, выполните описанные мною Ваше изменения в реестре для корректной работы отладчика:
http://www.community.terrasoft.ru/forum/topic/10836#comment-49104
"Безродный Андрей" написал:Евгений, выполните описанные мною Ваше изменения в реестре для корректной работы отладчика:
http://www.community.terrasoft.ru/forum/topic/10836#comment-49104
вот что показывает отладчик
Евгений,
в самом начале скрипта пропишите:
function SelfOnDatasetDataChange(DataField) { if (DataField == null) { return; } var Dataset = DataField.ParentDataFields.ParentDataset; var Name = DataField.Name; .....
Спасибо Большое за терпение и за помощь!!
Теперь все работает!)