отчет WORD

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

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

Ответить
korvanakorvana
Местный житель
Сообщения: 429
Зарегистрирован: 24 сен 2008, 11:53

отчет WORD

Сообщение korvanakorvana »

Ребята добры день
Есть у меня отчетик вот никак не могу додуматься ((
как вывести attrval.vstring

Код: Выделить всё

.LinkForm 'NAKL_NSK_091209' Prototype is PRBDOC
.Group 'Продажа'
.NameInList 'Накладная с спецификацией из накладных Новосибирск 091209'
!----------------------------------------
.create view vSpStep
from
 SpStep   (ReadOnly),
 KatParty (ReadOnly)
where
((
           PosNRec == SpStep.nRec   
and  SpStep.cParty == KatParty.nRec
));
.Create view SchKpp
from
 BaseDoc          (ReadOnly),
 KatOrg OrgFrom   (ReadOnly),
 KatOrg OrgTo     (ReadOnly),
 KatOrg OrgPol   (ReadOnly) ,
 Dogovor AppDogovor (ReadOnly)
where
((
           BaseDocNrec == BaseDoc.nRec
       and BaseDoc.corg==OrgTo.nrec
       and BaseDoc.cGrOtpr==OrgFrom.nrec
       and BaseDoc.cGrPol==OrgPol.nrec
       and BaseDoc.cDogovor==Dogovor.nrec
       and BaseDoc.cAppDogovor==AppDogovor.nrec

));
.Create view SchNakl 
as select * From 
StepDoc
,KatSopr
,SpsOpr
,KatMC
,KatParty
,KatOtpEd
,attrval 
,attrnam 
Where 
(( 
BaseDocNrec == StepDoc.cBaseDoc 
and StepDoc.NRec == KatSopr.cStepDoc 
and KatSopr.Nrec == SpsOpr.cSopr
and SpsOpr.cMCUsl == KatMC.nRec
and SpsOpr.cMCUsl == KatUsl.nRec
and SpsOpr.cParty == KatParty.nRec
and SpsOpr.cOtpEd == KatOtpEd.nRec
and word(1411)==attrnam.wtable 
and 'МНН'==attrnam.name

and word(1411)==attrval.wtable 
and katmc.nrec==attrval.crec
and attrnam.nrec==attrval.cattrnam
));

.Create view SchKatSopr  
var KatSoprcStepDoc: comp
as select * From KatSopr 
Where 
(( 
KatSoprcStepDoc == KatSopr.cStepDoc 
));
!-------------------------------------------------------------------
.var 
 SrcCountry,          // Новые графы СФ "Страна происхождения"
 GTDNumber : string;  //                "Номер ГТД"
 AddrDost : string; //  «Адрес доставки»
 skladfio :string; // кладовщик
skladfio1 :string; // ещё фио
skladfio2 :string; // ещё ФИО
doverka:string;//доверенность
doverkadate:string;
gruzdol:string;
skladfio3:string;
dfirma:string;
prikazz:string;//по приказу
.endvar
!-------------------------------------------------------------------
.var
 BdnRec:comp
 pos:integer;
 kolitog:double;
 Akciz : double
 CenaAk : double
 SumAk  : double
 totSumAk : double
.endvar
!-------------------------------------------------------------------
.fields
 post+’  ИНН ’+ innpost+’ Адрес: ’+ adpost+’ Банк: ’+ bpost 
‘ р/c ’+ rspost + ‘ к/c ’+ rspost2 +‘ БИК ’ + mpost
 SchKpp.OrgFrom.okpo
 Skl
 SchKpp.OrgFrom.okonh
 grpol+’  ИНН ’+ inngrpol+’ Адрес: ’+ AddrDost+’ Банк:’+grpolbank
‘ р/c ’+ grpolschet1 + ‘к/c ’+grpolschet2+‘ БИК ’+grpolmfo1
 SchKpp.OrgTo.okpo
 post+’  ИНН ’+ innpost+’ Адрес: ’+ adpost+’ Банк: ’+ bpost
‘ р/c ’+ rspost + ‘ к/c ’+ rspost2 + ‘ БИК ’ + mpost
 SchKpp.OrgFrom.okpo
 pol+’  ИНН ’+ innpol+’ Адрес: ’+ adpol+’ Банк: ’+ bpol
‘ р/c ’+ rspol + ‘ к/c ’+ rspol2 +‘ БИК ’ + mpol
 SchKpp.OrgTo.okpo
 if (SchKpp.Dogovor.nodoc<>'','Договор N '+ SchKpp.Dogovor.nodoc+' от '+ SchKpp.Dogovor.ddoc+'г.',’’) 
 if (SchKpp.AppDogovor.nodoc<>'', ' , cпецификация N '+ SchKpp.AppDogovor.nodoc+' от '+ SchKpp.AppDogovor.ddoc+'г.',’’)
 nomer
 ddoc
 nomer
 ddoc
.endfields
.{
.{table 'SchKpp.BaseDoc'
.}	
#include ..\..\SFBla2vp.frn
.begin
!--------------------------------------
BdnRec:= BaseDocNrec
RunInterface(‘_gt_addr_dost’, grpol , 1, BdnRec, 2,  AddrDost);
!-------------------------------------- 
end.
.{CheckEnter IsBaseFin
.}
.{CheckEnter ISEXCLASS
.}
.{CheckEnter ISGROUP
.}
.{
.}

^ ^^^^
^^^
^ ^^
^ ^^
^^^
^
^
^	
.begin
pos:=0;
kolitog:=0;
TotSumAk := 0
end.
.fields
pos
if (SchNakl.SpsOpr.PrMc=1, SchNakl.KatMC.Name, SchNakl.KatUsl.Name)
SchNakl.attrval.vstring
SchNakl.KatParty.name
SchNakl.KatParty.dgodn
locase(SchNakl.KatOtpEd.Name)
locase(SchNakl.KatOtpEd.Name)
doubletostr(round( SchNakl.SpsOpr.KolFact,2),'666`666`666.88')
doubletostr(round( SchNakl.SpsOpr.Price,2),'666`666`666.88')
If (SchNakl.KatSopr.vHodNal=1,( doubletostr(round(SchNakl.SpSopr.Price* SchNakl.SpSopr.KolFact- SchNakl.SpSopr.SumNDS,2),'666`666`666.88')), doubletostr(round(SchNakl.SpSopr.Price* SchNakl.SpSopr.KolFact,2),'666`666`666.88'))
doubletostr (round( SchNakl.spsopr.sumnds*100/ If (SchNakl.KatSopr.vHodNal=1, SchNakl.SpSopr.Price* SchNakl.SpSopr.KolFact- SchNakl.SpSopr.SumNDS, SchNakl.SpSopr.Price* SchNakl.SpSopr.KolFact),2), '666`666`666')
doubletostr(round(SchNakl.spsopr.sumnds,2),'666`666`666.88')
If (SchNakl.KatSopr.vHodNal=1, doubletostr(round(SchNakl.SpSopr.Price* SchNakl.SpSopr.KolFact,2),'666`666`666.88'), doubletostr(round(SchNakl.SpSopr.Price* SchNakl.SpSopr.KolFact+ SchNakl.SpSopr.SumNDS,2),'666`666`666.88') )
.endfields
.{table ‘SchNakl.StepDoc’;
.{table ‘SchNakl.KatSopr’;
.{table ‘SchNakl.SpsOpr’;
.begin
pos:=pos+1;
kolitog:=kolitog+SchNakl.SpsOpr.KolFact;
Akciz := Ak/kol
CenaAk := cenabez + AkCiz
SumAk  := sbez + Ak
TotSumAk := TotSumAk + SumAk
end.
^	^	^	^	^	^		^			-	^	^	^	^	^	^
.}
.}
.}
......
Что я делаю не так почему attrval.vstring всегда пустой(((
korvanakorvana
Местный житель
Сообщения: 429
Зарегистрирован: 24 сен 2008, 11:53

Re: отчет WORD

Сообщение korvanakorvana »

Нашла вот эти функции

ExAttrFun.sGetAttr(coKatParty, SchNakl.KatParty.nRec, 'ГТД');

А где найти описание как ими пользоваться?
хочу вытащить внешние атрибуты из katmc
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: отчет WORD

Сообщение edward_K »

в форме нужно позиционировать последовательно по каждой табле, ну или запрос простой, то дабавить поле в as select
и делать типа так
if SchNakl.getfirst =0 {}
ну и выводить как описано в as select
иначе
if SchNakl.getfirst katmc=0 {}
if SchNakl.getfirst attrnam=0 {}
if SchNakl.getfirst attrval=0 {}
ну и все что в .{ table нет
А тему то назвали :D
oiko
Местный житель
Сообщения: 417
Зарегистрирован: 29 мар 2005, 17:49

Re: отчет WORD

Сообщение oiko »

цепляем ExtAttr.vih (там есть описание этой ф-ии)
и например содержимое CodeMc.frn
.begin
var piExAttr : iExtAttr;
CodeOtpEd := '';
CodeEd := '';

FROMKATMC.pNrec := comp(спецификацияМЦ_нрек);

if (FROMKATMC.GetFirst SpSopr = tsOk)
{
if (FROMKATMC.GetFirst KatOtpEd = tsOk)
{
if (FROMKATMC.GetFirst KatEd where ((FROMKATMC.KatOtpEd.cKatEd == KatEd.NRec )) = tsOk)
CodeOtpEd := piExAttr.sGetAttr(coKatEd, FROMKATMC.KatEd.NRec, 'è«ñ');
}

if (FROMKATMC.GetFirst KatMC = tsOk)
if (FROMKATMC.GetFirst KatEd where ((FROMKATMC.KatMC.cEd == KatEd.NRec )) = tsOk)
CodeEd := piExAttr.sGetAttr(coKatEd, FROMKATMC.KatEd.NRec, 'è«ñ');
}
end.
korvanakorvana
Местный житель
Сообщения: 429
Зарегистрирован: 24 сен 2008, 11:53

Re: отчет WORD

Сообщение korvanakorvana »

edward_K писал(а):в форме нужно позиционировать последовательно по каждой табле, ну или запрос простой, то дабавить поле в as select
и делать типа так
if SchNakl.getfirst =0 {}
ну и выводить как описано в as select
иначе
if SchNakl.getfirst katmc=0 {}
if SchNakl.getfirst attrnam=0 {}
if SchNakl.getfirst attrval=0 {}
ну и все что в .{ table нет
А тему то назвали :D
что то я не поняла :idea: (((
Ged
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Re: отчет WORD

Сообщение Ged »

korvanakorvana писал(а):
edward_K писал(а):в форме нужно позиционировать последовательно
что то я не поняла :idea: (((
Ну представьте.. Перепили пивка, открываем дверь в подъезд и пытаемся подняться по ступенькам, ну или зайти на экскалатор в метро или бутик.. Надо по любому определиться с дальнейшим шагом. Иначе, в лучшем случае синяк (а в этот с-й бутик больше не пойдем..), в худшем ... (не будем думать)
Так и здесь. для позиционирования на конкретную запись/сущность/объект необходимо
1. Описать реляционное (тока применимо к БД) отношение - Create view as Select у Вас есть (Раскрываем глаза пошире, двигаем головой)
2. Спозиционироваться на запись/сущность/объект (двигаем ногами с учетом обратной связи см. п.1 )

Код: Выделить всё

.LinkForm 'PrbDoc_Wtf_1' Prototype is PrbDoc
.Group 'Продажа'
.Create view v1
As Select
 *
From
 BaseDoc
Where
((
   BaseDocNrec == BaseDoc.Nrec
))
;
.{
.Begin
 Message(BaseDoc.Nrec); // Что то даст, может и правильную (можем и не упасть, но при большом кол-ва пива...) 
 if(GetFirst BaseDoc =tsOk) // <<-- Ориентируемся в пространстве
  Message(BaseDoc.Nrec); // Выдаст правильную запись
End.
.{ CheckEnter IsBaseFin
.}
.{ CheckEnter IsExClass
.}
.{ CheckEnter IsGroup
.}
.{
.}
.if Delimiter
.end
.}
.endform
PS: Просто для себя попробуйте прогнать этот пример
korvanakorvana
Местный житель
Сообщения: 429
Зарегистрирован: 24 сен 2008, 11:53

Re: отчет WORD

Сообщение korvanakorvana »

Ребята доброе утро. Почитала ваши мысли, спасибо за еще несколько уроков.
Сделала с помощью ExtAttr.vih

функция ExAttrFun.sGetAttr(coKatmc, SchNakl.KatMc.nRec, 'МНН');
korvanakorvana
Местный житель
Сообщения: 429
Зарегистрирован: 24 сен 2008, 11:53

Re: отчет WORD

Сообщение korvanakorvana »

Ged писал(а):
korvanakorvana писал(а):
edward_K писал(а):в форме нужно позиционировать последовательно
что то я не поняла :idea: (((
Ну представьте.. Перепили пивка, открываем дверь в подъезд и пытаемся подняться по ступенькам, ну или зайти на экскалатор в метро или бутик.. Надо по любому определиться с дальнейшим шагом. Иначе, в лучшем случае синяк (а в этот с-й бутик больше не пойдем..), в худшем ... (не будем думать)
Так и здесь. для позиционирования на конкретную запись/сущность/объект необходимо
1. Описать реляционное (тока применимо к БД) отношение - Create view as Select у Вас есть (Раскрываем глаза пошире, двигаем головой)
2. Спозиционироваться на запись/сущность/объект (двигаем ногами с учетом обратной связи см. п.1 )

Код: Выделить всё

.LinkForm 'PrbDoc_Wtf_1' Prototype is PrbDoc
.Group 'Продажа'
.Create view v1
As Select
 *
From
 BaseDoc
Where
((
   BaseDocNrec == BaseDoc.Nrec
))
;
.{
.Begin
 Message(BaseDoc.Nrec); // Что то даст, может и правильную (можем и не упасть, но при большом кол-ва пива...) 
 if(GetFirst BaseDoc =tsOk) // <<-- Ориентируемся в пространстве
  Message(BaseDoc.Nrec); // Выдаст правильную запись
End.
.{ CheckEnter IsBaseFin
.}
.{ CheckEnter IsExClass
.}
.{ CheckEnter IsGroup
.}
.{
.}
.if Delimiter
.end
.}
.endform
PS: Просто для себя попробуйте прогнать этот пример

С пивом пример повеселил)))
Ged
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Re: отчет WORD

Сообщение Ged »

korvanakorvana писал(а):С пивом пример повеселил)))
Иногда надо рассмешить людей, чтобы отвлечь их от намерения вас повесить.:)
Б. Шоу

Обращайся.
Ответить