Insert ExClassVal ??

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
homak
Постоянный обитатель
Сообщения: 144
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Красноярский Край
Контактная информация:

Insert ExClassVal ??

Сообщение homak »

есть задача в АРД отчете на основе полученных данных (вставить/изменить) значение внешнего классификатора. В опыте читал о стандартных функциях ( http://www.tyumbit.ru/gal_forum/viewtopic.php?t=2799) ... может кто нибудь поделиться функцией для вставки записи в ExClassVal
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

параметры:
wt-код таблицы из словаря
cr-нрек записи из такой таблицы
cc-код классификатора
_value-код сегмента

сама процедура:
procedure SetClass(wt:word; cr:comp; cc:word; _value:string);
{
if(trim(_value)='') exit;
wtEx:=wt;
ccEx:=cc;
_valueEx:=_value;
crEx:=cr;
if getfirst ExClassName where((
wt == ExClassName.wtable and
cc == ExClassName.CLASSCODE
)) = tsOk
{ // есть классификация с нашим именем (cn)
if getfirst ExClassSeg where((
ExClassName.ClassCode == ExClassSeg.ClassCode and
_value == ExClassSeg.Value
)) <> tsOk
{ // нет записи в классификаторе с кодом _value
{
// формирование записей классификатора с помощъю программы
clearbuffer(#ExClassSeg);
ExClassSeg.ClassCode := ExClassName.ClassCode;
ExClassSeg.Value := _value;
ExClassSeg.name := _value;
insert current ExClassSeg;
}
end;
}
{ // есть запись в классификаторе с кодом _value
if getfirst ExClassVal where((
ExClassSeg.ClassCode == ExClassVal.ClassCode and
wt == ExClassVal.wTable and
cr == ExClassVal.cRec
))<>tsOk
{ // нет привязки классификатора к записи таблицы
clearbuffer(tnExClassVal);
ExClassVal.wTable:= wt;
ExClassVal.cRec := cr;
ExClassVal.ClassCode:= ExClassName.ClassCode;
ExClassVal.cClassSeg:= ExClassSeg.NREC;
insert current ExClassVal
}
else
{ //есть привязка классификатора к записи таблицы
// имеется в виду, у записи может быть привязка только
// к одному сегменту классифкатора
ExClassVal.cClassSeg:= ExClassSeg.NREC;
update current ExClassVal;
}
}
}
else
{ // нет классификации с нашим кодом (cc)
}
}
homak
Постоянный обитатель
Сообщения: 144
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Красноярский Край
Контактная информация:

Сообщение homak »

Спасибо !!! :-)
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

interface ExClass_SetClassSegName 'Выбор значения',DoAccept,Cyan;
show at(10,10,70,15);
create view
Var
_ClassCode,
_wTable
: word;
_cRec
: comp;
_Value : string[20];
from
EXCLASSSEG,
EXCLASSVAL
where
((
_ClassCode == ExClassSeg.ClassCode
and ExClassSeg.ClassCode == ExClassVal.ClassCode
and _wTable == ExClassVal.wTable
and _cRec == ExClassVal.cRec
));
parameters _wTable , // номер таблицы
_ClassCode , // Код Класса
_cRec , // номер записи таблицы
_Value; // для установки заданного значения
! Устанавливает значение сегмента класса для заданой записи и коду класса
browse brsetexclass;
table EXCLASSSEG;
fields
EXCLASSSEG.NAME 'Значение' :[40],protect;
EXCLASSSEG.VALUE 'Код' :protect;
end;// brow
Procedure SetVal;
{
if getfirst ExClassVal <>tsOk
{ // нет привязки классификатора к записи таблицы
clearbuffer(#ExClassVal);
ExClassVal.wTable:= _wTable;
ExClassVal.cRec := _cRec;
ExClassVal.ClassCode:= ExClassSeg.ClassCode;
ExClassVal.cClassSeg:= ExClassSeg.NREC;
insert current ExClassVal;
}
else
{ //есть привязка классификатора к записи таблицы
ExClassVal.cClassSeg:= ExClassSeg.NREC;
update current ExClassVal;
}
}
handleevent
cmDefault: SETval;
cmInit:
{
if(_Value<>'')
{
if(getfirst ExClassSeg where((_ClassCode == ExClassSeg.ClassCode and
_Value == ExClassSeg.Value
))=tsOK) SETval;
abort;exit;
}
}
end;// he
end.
Ответить