Пример позволяет добавить значение внешнего атрибута к спецификации накладной в содержание проводки.
Код: Выделить всё
/*
Модификация содержания проводки
*/
#Component "F_TxoApi"
#include TxoApi.vih
VipInterface Txo_SoderProv implements ObjTxoIdentPlugin
#ifdef ATL51
licensed (FREE)
#endif
;
Interface Txo_SoderProv cacheable;
var
i: longint ;
w_table:word;
tp_form:word;
create view vTxo_PlPorAvizo
var
CurSoprHoz : comp;
CurSoprDoc : comp;
CurDatOb : date;
curTidk :longint ;
MyPlansNo:comp ;
wattr_table :word ; // для вывода атрибутов по таблице
wattr_nrec : comp ;
w_cattr :comp;
as select katsopr.nrec
from
katsopr,spsopr
,attrnam
,attrval
,planssch
,katmc,katusl
where
((
CurSoprDoc == Katsopr.nrec
and katsopr.nrec == spsopr.csopr
and spsopr.cmcusl == katusl.nrec
and spsopr.cmcusl == katmc.nrec
//======================
and MyPlansNo == planssch.nrec // план счетов
and CurSoprHoz == oborot.csoprhoz
and MyPlansNo == oborot.cplanssch
//=== для вывода анешних атрибутов по таблицам
and w_cattr == attrnam.nrec
and wattr_nrec == attrval.crec
and wattr_table == attrval.wtable
and attrnam.nrec ==attrval.cattrnam
));
Const
idVipInfo = '&VIP[Obj:"SoderProv"]';
idVipTag = 'PlPorAvizo';
end;
//**************************Наименование интерфейса
function GetInfo : string;
{
GetInfo := 'Изменение содержания проводки';
}
//**************************выбор параметров
function ParamGen : string;
{ var s : String;
s:='' ;
s:='[ТБЛ:'+string(w_table)+']'
s:=s+'[ТИП:'+string(tp_form)+']'
if w_cattr>0
{ s:=s+'[АТТР:'+string(w_cattr)+']'
}
ParamGen := s;
}
//**************************Разбор параметров при обработке в ТХО
procedure ParamParser(hTxo : longint);
var
! s : String;
i : Longint;
{ w_table:=0;w_cattr:=0;tp_form:=0;
for(i:=1; i<=TxoParamCount(hTxo); i:=i+1)
{
case TxoParamName(hTxo,i) of
'ТБЛ' : w_table :=word(TxoParamValue(hTxo,i)) ;
'ТИП' : tp_form :=word(TxoParamValue(hTxo,i)) ;
'АТТР' : w_cattr :=comp(TxoParamValue(hTxo,i)) ;
end ;
}
Rereadrecord ;
} //procedure ParamParser(hTxo : longint);
//**************************Окно Фейса
Window winParam 'Параметры идентификатора' (,,sci13Esc) EscClose, DoAccept;
Show at (10,1,90,28);
tabbedsheet top tabsMain;
Screen scInfo 'Параметры';
table attrnam;
Fields
w_table:noprotect,pickbutton;
tp_form: [list 0 'По сумме без ндс','По сумме c ндс','По ндс'],protect;
attrnam.name :protect,pickbutton;
buttons
cmOk, default,, '',,;
cmCancel,,, '',,;
<<
Таблица .@@@@@@@@@@@@@@@@
Тип .@@@@@@@@@@@@@@@@
Атрибут .@@@@@@@@@@@@@@@@@@@@@@@@@
<.~П~родолжить.> <.Отмена.>
>>
End;
Screen scRejim 'Информация';
<<
Включать в послденей проводке *0
В основных проводках в содержании следует использовать ключ kauref
Для режимов по спецификации в основных проводках
необходимо заполнить наименованием МЦ или услуг
>>
end;//Screen scInfo 'Режимы';
end; //tabbedsheet top tabsMain;
//===================
HandleEvent
cmIdle:
SetWindowTitle(winParam, 'Параметры'+idVipInfo+ParamGen);
cmInit :
{
SetWindowTitle(winParam, 'Параметры'+idVipInfo+ParamGen);
RescanPanel(#attrnam) ;
MyPlansNo:=0 ;
}
cmDelonProtect:
{ case curfield of
#Attrnam.name :
{ w_cattr:=0;
}
end;
RescanPanel(#attrnam) ;
}
cmPick:
{ case curfield of
#w_table:
{ runinterface(C_EXTCLASS::PICKTABLE,w_table)
}
#Attrnam.name :
{
runinterface(C_EXTCLASS::PICKATTRNAM, w_cattr , w_table ) ;
} //#Attrnam.name : {
end;
RescanPanel(#attrnam) ;
}
cmOk :
{ MyPlansNo:=1
closewindow(winParam) ;
}
End;
End; //Window winParam 'Параметры идентификатора' (,,sci13Esc) EscClose, DoAccept;
//**************************Мастер параметров
function ParamMaster : string;
{ ParamMaster := '';
if( RunWindowModal(winParam)=cmDefault ) or MyPlansNo=1
{ //PackFields;
ParamMaster := ParamGen;
}
}
//**************************ОСНОВНАЯ ПРОЦЕДУРА ОБРАБОТКИ ТХО
procedure StoreCycles(hTxo : longint; buf : TTxoApiInfoDoc);
var
wstr,wstr1:string ;
wsu :double ;
{
set CurSoprDoc := buf.cSoprDoc;
set CurSoprHoz := buf.cSoprHoz;
set CurDatOb := buf.DatOb;
set CurTidk := buf.TidkGal;
set MyPlansNo:= buf.cplanssch ;
ParamParser(hTxo);
TxoAllowRecallStoreCycles(hTxo);
TxoDebugMsg(hTxo, 'SodProv','tp_form='+string(tp_form))
TxoDebugMsg(hTxo, 'SodProv','w_table='+string(w_table))
TxoDebugMsg(hTxo, 'SodProv','w_cattr='+string(w_cattr))
wattr_table:=w_table
case w_table of
coSpSopr:
{ if getfirst katsopr=0 {}
if getfirst attrnam=0 {}
TxoDebugMsg(hTxo, 'SodProv','w_cattr='+attrnam.name)
_loop spsopr
{ if spsopr.prmc=1
{ wstr:=if(getfirst fastfirstrow katmc=0,katmc.name,'')
}
if spsopr.prmc=2
{ wstr:=if(getfirst fastfirstrow katusl=0,katusl.name,'')
}
wsu:=0
case tp_form of
0: //спец. сумма без налога
{ wsu:=SPSOPR.kolfact*spsopr.price-if(katsopr.vhodnal=1,spsopr.sumnds,0)
}
1: //спец. сумма c налога
{ wsu:=SPSOPR.kolfact*spsopr.price+if(katsopr.vhodnal<>1,spsopr.sumnds,0)
}
2: //спец. сумма c налога
{ wsu:=spsopr.sumnds;
}
end;
TxoDebugMsg(hTxo, 'SodProv','позиция ='+wstr+', сумма '+string(wsu,0,2))
wstr1:=''
if w_cattr>0
{ wattr_nrec:=spsopr.nrec;
if getfirst attrval=0
{ wstr1:=attrval.vstring;
}
}//if w_cattr>0
TxoDebugMsg(hTxo, 'SodProv','позиция ='+wstr+', сумма '+string(wsu,0,2)+',атрибут '+wstr1)
_loop fullcache oborot where
(( CurSoprHoz == oborot.csoprhoz
and MyPlansNo == oborot.cplanssch
and ( pos(wstr,OBOROT.SODPR)>0 )
))
{
TxoDebugMsg(hTxo, 'SodProv','оборот ='+OBOROT.SODPR+', сумма '+string(OBOROT.Sumob,0,2))
if trunc(wsu,0) <=oborot.sumob
and trunc(wsu,0)+1 >=oborot.sumob
{ update current oborot set OBOROT.SODPR:=OBOROT.SODPR+' '+wstr1;
}
} //
} //_loop spsopr
} //coSpSopr:
end;
} //procedure StoreCycles(hTxo : longint; buf : TTxoApiInfoDoc);
HandleEvent
cmCheckField :
{
SetWindowTitle(winParam, 'Параметры'+idVipInfo+ParamGen);
RescanPanel(#attrnam) ;
}
cmIdle:
{ SetWindowTitle(winParam, 'Параметры'+idVipInfo+ParamGen);
RescanPanel(#attrnam) ;
}
end ;
end. //Конец основной процедуры