Динамическое кол-во полей в browse
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный обитатель
- Сообщения: 175
- Зарегистрирован: 29 июн 2006, 14:39
- Контактная информация:
Динамическое кол-во полей в browse
Товарищи, возникла такая ситуация: необходимо чтобы кол-во полей, отображаемых в browse было динамическим... А еще лучше чтобы пользователь мог сам добавлять колонки в browse или tree... Если у кого-нибудь есть опыт решения данной проблемы, подскажите как это лучше реализовать... Не писать же это в Delphi!!!
-
- Местный житель
- Сообщения: 412
- Зарегистрирован: 28 апр 2005, 11:34
- Откуда: Галактика Млечный Путь
вот например, добавляет по кнопке Ок еще одну колонку в браузер
interface testcfg;
table struct t1
(
p1 : string,
p2 : double,
p3 : double
);
create view from t1;
browse br1;
show at(,,,20);
table t1;
fields
t1.p1 'name field' : [10],protect;
end;
screen scr1
show at(,21,,);
buttons
cmok;
<<
<.ok.>
>>
end;
handleevent
cminit:
{
t1.p1 := 'запись 1';
t1.p2 := 111;
insert current t1;
t1.p1 := 'запись 2';
t1.p2 := 222;
insert current t1;
}
cmok:
{
cfsSetCurrentContainer('testcfg');
var p2self : longint;
cfsCreateObject('Column','BR1','newpole',false,p2self);
cfsSetProp('newpole', 'Title', 'new pole');
cfsSetProp('newpole', 'FieldName','t1.p2');
rescanpanel(#t1);
}
end;
end.
Хочу зачетить ,что в t1 обязательно должна быть запись, для пустой таблицы конфигуратор почему-то не создает объекты
Все использованные ф-ции описаны в документации по галактике.
interface testcfg;
table struct t1
(
p1 : string,
p2 : double,
p3 : double
);
create view from t1;
browse br1;
show at(,,,20);
table t1;
fields
t1.p1 'name field' : [10],protect;
end;
screen scr1
show at(,21,,);
buttons
cmok;
<<
<.ok.>
>>
end;
handleevent
cminit:
{
t1.p1 := 'запись 1';
t1.p2 := 111;
insert current t1;
t1.p1 := 'запись 2';
t1.p2 := 222;
insert current t1;
}
cmok:
{
cfsSetCurrentContainer('testcfg');
var p2self : longint;
cfsCreateObject('Column','BR1','newpole',false,p2self);
cfsSetProp('newpole', 'Title', 'new pole');
cfsSetProp('newpole', 'FieldName','t1.p2');
rescanpanel(#t1);
}
end;
end.
Хочу зачетить ,что в t1 обязательно должна быть запись, для пустой таблицы конфигуратор почему-то не создает объекты
Все использованные ф-ции описаны в документации по галактике.
-
- Постоянный обитатель
- Сообщения: 175
- Зарегистрирован: 29 июн 2006, 14:39
- Контактная информация:
san, большой спасибо за подробный код... Но меня достаточно было только подтолкнуть... Но у меня опять проблема, нашел я мануал по API конфигуратору, нашел список нужных констант... Все вроде, нормально - поля добавляются, но при попытке изменить размер screen'а или при выполнении RescanPanel Галактика вылетает с ошибкой 213 (rtl: выход за границы коллекции)...
-
- Местный житель
- Сообщения: 412
- Зарегистрирован: 28 апр 2005, 11:34
- Откуда: Галактика Млечный Путь
Врятли патчи, эта ф-ность работает и на старых версиях.Надо смотреть что конкретно делается и после чего возникает ошибка.Возможно параметры не того типа передаются или что то еще. В моем примере rescanpanel работает.Galex писал(а):Чуть не забыл, Галактика 8.0 без патчей... Возможно в них проблема?...
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Динамическое кол-во полей в browse
Докомпилировал личную карточку учета СФО. Захожу в неё и получаю ошибку про интерпретацию поля attrval1_vstring.
Хотя первое поле появляется вполне благополучно.
ЧТО делаю не так? Что нужно указать вместо attrval1_vstring в строке создания cfsCreateObject('Column','BRPERSSFO','attrval1_vstring',false, pField2); ?
Хотя первое поле появляется вполне благополучно.
ЧТО делаю не так? Что нужно указать вместо attrval1_vstring в строке создания cfsCreateObject('Column','BRPERSSFO','attrval1_vstring',false, pField2); ?
Код: Выделить всё
#component "F_SFO"
Alter Interface GetPersCard;
Create view as select attrval1.vstring from attrnam attrnam1, attrval attrval1
where((
4008 == attrnam1.wtable
and 'продление носки' == attrnam1.name
and 4008 == attrval1.wtable
and attrnam1.nrec == attrval1.cattrnam
and shperssfo.nrec == attrval1.crec
));
var pField1, pField2 : longint;
Procedure loadColumns;
{
cfsCreateObject('Column','BRPERSSFO','shperssfo_enddate',false, pField1);
cfsSetProp('shperssfo_enddate', 'Title', 'Дата окончания носки');
cfsSetProp('shperssfo_enddate', 'FieldName','SHPERSSFO.ENDDATE');
cfsSetProp('shperssfo_enddate', 'PickButton','False');
cfsSetProp('shperssfo_enddate', 'Protect','True');
cfsCreateObject('Column','BRPERSSFO','attrval1_vstring',false, pField2);
cfsSetProp('attrval1_vstring', 'Title', 'Акт продления');
cfsSetProp('attrval1_vstring', 'FieldName','attrval1.vstring');
cfsSetProp('attrval1_vstring', 'PickButton','True');
cfsSetProp('attrval1_vstring', 'Protect','True');
Rescanpanel(#shperssfo);
}
Window EDITPERSCARD
HandleEvent
cmPick:
{
if (inherited :: handleevent(cmPick)<>heOK) then abort;
if curfield=#attrval.vstring then message('1');
}
end;
end;
HandleEvent
cmInit:
{
if (inherited :: handleevent(cmInit)<>heOK) then abort;
LoadColumns;
}
end;
End.
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Динамическое кол-во полей в browse
при создании объекта
cfsCreateObject('Column','BRPERSSFO','attrval1_vstring',false, pField2);
получаю ошибку cfErrCantCreateObject; (-12)
cfsCreateObject('Column','BRPERSSFO','attrval1_vstring',false, pField2);
получаю ошибку cfErrCantCreateObject; (-12)
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Динамическое кол-во полей в browse
вопрос снят, объявлять надо было вот так:
но только почему... странно. почему не могу написать любую строку?
Код: Выделить всё
cfsCreateObject('Column','BRPERSSFO','Field: ATTRVAL1.VSTRING',false, pField2);