не работает карточка редактирования

Добрый день коллеги!
Продолжаю создавать свой первый раздел в 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)
Буду очень признателен.

Нравится

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

нашел вот такой код

{
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.

http://i68.fastpic.ru/big/2014/0815/90/4a5e50285a3e1d88737e763ae33efb90.jpg

На примере ниже при выборе Контрагента в карточке Задачи в поле Заголовок задачи будет помещаться полное название выбираемого Контрагента. По аналогии Вы сможете реализовать свой функционал.

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;
}
...
}

Реализация.

У контрагента Оливия-Фарм есть полное название:

http://i65.fastpic.ru/big/2014/0815/37/4039f6e7b85da705f5278109ea3fff37.jpg

При выборе Контрагента в карточке Задачи полное название Контрагента подставляется в заголовок:

http://i65.fastpic.ru/big/2014/0815/e1/d18b615bdbba1a28275418540441fde1.jpg

"Безродный Андрей" написал:Здравствуйте, Евгений!

Вашу задачу лучше реализовать на событии 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;
.....

Спасибо Большое за терпение и за помощь!!
Теперь все работает!)

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