Помогите, пожалуйста, с VIEW представлением

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

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

sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Помогите, пожалуйста, с VIEW представлением

Сообщение sildae »

Хочу поставить дату последней опрации из Oborot.
c1p1,c0p2 - из потока. Ужасно медленно работает :(.
Может, я неправильно строю view представление?
.Create view TData
from Oborot (ReadOnly),katorg (ReadOnly),KatBank (ReadOnly),KatCity (ReadOnly)
where
((oborot.kauos[1]==Katorg.nrec
and
Katorg.Nrec==KatBank.Corg
and
Katorg.ccity==Katcity.Nrec
))
and
c1p1=KatOrg.Name
and
(oborot.datob<=StrToDate(c0p2,'DD/MM/YYYY'))
and
(oborot.SchetO='362'
or
oborot.SchetO='376'
or
oborot.SchetO='360')
;
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

еще бы.
надо бы завести переменную
и просканировать oborot 3 раза используя индекс OBOROT21
where ((
wsch == oborot.SchetO
and c1p1==katOrg.Name
and katorg.nrec == oborot.kauos[1]
and StrToDate(c0p2,'DD/MM/YYYY') >>=oborot.datob
)) ;
..
wdt:=date(0,0,0)
set TData.wsch:='362'
if TData.getlas oborot=0
if wdt<TData.oborot.datob wdt:=TData.oborot.datob
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Сообщение sildae »

((c1p1==katOrg.Name
and katorg.nrec == oborot.kauos[1] ))

у меня эти две строчки не работают вместе. (Support 4.3)
Пишется ошибка "нужен ключ name+nrec для katorg.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

значится ниже еще фильтр по "== katorg.nrec" - ищите.
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Сообщение sildae »

Так и сделала, стало работать в разы быстрее. Только про дату непонятно.
where ((
...
and StrToDate(c0p2,'DD/MM/YYYY') >>=oborot.datob ))
...
wdt:=date(0,0,0)
set TData.wsch:='362'
if TData.getlas oborot=0
if wdt<TData.oborot.datob wdt:=TData.oborot.datob

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

Сообщение edward_K »

ну вам же нужно максимальную по 3 счетам. Можно где угодно объявить - зачем она в view?
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Сообщение sildae »

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

Сообщение edward_K »

ну можно
wdt<<=oborot.datob
ну и для StrToDate(c0p2,'DD/MM/YYYY') тоже завести переменную.
будет слегка быстрее.
А дальше
#Define _Test_

...
#IFDEF _test_
Logstrtofile(???????? , Timetostr(cur_time,'HH:MM:SS:SSS')+'?????')
#endif
поможет вам понять где еще узкие места.
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Помогите, пожалуйста, с VIEW представлением

Сообщение Руслан »

Здравствуйте! Есть такая проблемка... Представление в саппорте отрабатывает правильно, но при выводе данных по драг. металлам показывает неверные данные, он выводит две одинаковые записи:

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

.linkform ’KartStor_dm’ prototype is ’KartStor’
.group ’belform’
.NameInList ’КАРТОЧКА СКЛАДСКОГО УЧЕТА  РБ ( с ДМ )’
.var
 ItogoSummaNDE : double
 ItogoSummaVal : double
NRec : comp
sch_2, x_2:integer; //для вывода на печать
N_ckdr : comp;
N_kol : double;
T_Spec   : longint;   // Таблица реализации
NT_ckdr : word;
NT_kol : word;
Au: double     // золото
Ag: double     //серебро
Pt: double      // платина
Ptgr: double  //платиновая группа
Pd: double     // палладий
.endvar
.begin
NRec := TOVAR_NRec
End.

.CREATE VIEW  vDrag  
!AS SELECT  *
!FROM naldrag, katdrag
! where 
!((  
!Comp(TOVAR_NRec) ==  naldrag .ckatos (noindex)
!And naldrag.ckatdrag == katdrag.nrec
!));
As select
     Katdrag.nrec,  naldrag.kol, naldrag.*
FROM
   Katmc
  left join  naldrag on ((katmc.nrec==naldrag.ckatos (noindex)))
  left join katdrag  on ((naldrag.ckatdrag==katdrag.nrec))
WHERE
 Katmc.nrec = comp(Tovar_nrec);

.fields
TOVAR_BarKod
sGetTune(’MyOrg’)
V2
V3
TOVAR_NAME 
TOVAR_BarKod
TOVAR_Ed_Izm
.endfields    
Утверждено учётной  политикой ОАО  “Керамин”        
Код ТМЦ	^
^
наименование организации
^
наименование структурного подразделения
^
материально-ответственное лицо

КАРТОЧКА  СКЛАДСКОГО  УЧЕТА 

Наименование материала:  ^ ,       ^
Единица измерения:   ^
Марка, сорт, профиль, размер и т.д.: 
.var
prih: double
rash: double
itog: double
n: integer
itogIN: double
ItogOUT: double
.endvar
.fields
DoubleToStr(kol, KolForm) // входящий остаток
DoubleToStr(srPrice, PriceR)
n 
field2   // дата
field5   //номер наклад
field1   // номер ордера
field6 field6_MOL// поставщик получат
DoubleToStr(prih, KolForm)
DoubleToStr (rash, KolForm)
DoubleToStr (itog, KolForm)
DoubleToStr(field11, PriceR)
field_m12
.endfields
.begin
Itog:= double(kol);
End.

№	Дата 
записи	Номер накладной	Номер
ордера	Место хранения	От кого получено 
или кому отпущено	Приход	Расход	Остаток	Цена	Норма запаса
				стеллаж	ячейка						
1	2	3	4	5	6	7	8	9	10	11	12
Входящий остаток	^	^	
.{
.begin
case field3 of
’Приход’:
{
prih := field10;
rash := 0;
itog := itog + prih;
itogIN := itogIN + prih;
}
’Расход’:
{
rash := field10;
prih := 0;
itog := itog - rash;
itogOUT := itogOUT + rash;
}
end;
n:=n+1
end.
^	^	^	^			^ ^	^	^	^	^	^
.}
.fields
DoubleToStr(itogIN, KolForm)  // итого приход
DoubleToStr(itogOUT, KolForm) // итого расход 
DoubleToStr(kolIsh, KolForm) // исходящий остаток
DoubleToStr(SrPriceIsh, PriceR)
.endfields
Итого обороты	^	^			
Исходящий остаток			^	^	

.begin 
!Au := 0 ;       // золото
!Ag := 0;       //серебро
!Pt := 0;         // платина
!Ptgr := 0;     //платиновая группа
!Pd := 0;       // палладий
T_Spec     := TblInitNew(1,1);              // создаем таблицу драг. металлов
 NT_ckdr      := TblNewField(T_Spec,12);
TblEndKey(T_Spec);                           // строим индекс
NT_Kol       := TblNewField(T_Spec,12);
end.
.{ table ‘Vdrag’
.begin
TblSfString(T_Spec, NT_ckdr, vdrag.naldrag.ckatdrag);
 if(TblGetEqual(T_Spec))                        // Запись есть
        {
TblSfDouble(T_Spec,NT_kol, TblGfDouble(T_Spec,NT_kol) + vdrag.naldrag.kol);
TblUpDateCurrent(T_Spec);
        }
      Else
        {
        TblSfDouble(T_Spec,NT_kol, vdrag.naldrag.kol);
        TblInsertCurrent(T_Spec);
        }
End.
.}
!.begin
!Au := If (vDrag.naldrag .ckatdrag=comp(’000100000000000Bh’), kolIsh * vDrag.naldrag.Kol,0);  // золото 
!Ag := If (vDrag.naldrag.ckatdrag=comp(’0001000000000010h’), kolIsh * Double(vDrag.naldrag.Kol),0);  // серебро
!Pt := If (vDrag.naldrag.ckatdrag=comp(’0001000000000015h’), kolIsh *vDrag. naldrag.Kol,0);  //  платина
!Ptgr := If (vDrag.naldrag.ckatdrag=comp(’0001000000000016h’) or vDrag.naldrag.ckatdrag=comp(’000100000000001Fh’),  Ptgr  + kolIsh * !vDrag.naldrag.Kol,0); 
!Pd := If (vDrag.naldrag.ckatdrag=comp(’000100000000001Ah’), kolIsh * vDrag.naldrag.Kol,0);
!End.
.fields
N_ckdr
DoubleToStr(Au, ‘\4p666 666.8888’)
DoubleToStr(Ag, ‘\4p666 666.8888’)
!DoubleToStr((If (vDrag.naldrag.ckatdrag=’0001000000000010h’, kolIsh * Double(vDrag. naldrag.Kol),0)), ‘\4p666 666.8888’)
!If (vDrag.naldrag.ckatdrag=comp(’0001000000000010h’), DoubleToStr(kolIsh * vDrag.naldrag.Kol, ‘\4p666 666.8888’),0)
DoubleToStr(Pt, ‘\4p666 666.8888’)
DoubleToStr(Ptgr, ‘\4p666 666.8888’)
DoubleToStr(Pd, ‘\4p666 666.8888’)
V3
.endfields
.begin
sch_2:= TblRecords(T_Spec)-1;
 x_2:=0;
End.
Содержание драгоценных металлов
Наименование	Масса, г.
.{ while (x_2<=sch_2)
.begin
N_ckdr:=TblGfString(T_Spec,NT_ckdr);
N_kol:=TblGfDouble(T_Spec,NT_kol);
Au := If (N_ckdr =comp(’000100000000000Bh’), kolIsh * N_kol,0);  // золото 
Ag := If (N_ckdr =comp(’0001000000000010h’), kolIsh *N_kol,0);  // серебро
Pt := If (N_ckdr =comp(’0001000000000015h’), kolIsh * N_kol,0);  //  платина
Ptgr := If (N_ckdr =comp(’0001000000000016h’) or N_ckdr=comp(’000100000000001Fh’),  Ptgr  + kolIsh * N_kol,0); 
Pd := If (N_ckdr =comp(’000100000000001Ah’), kolIsh * N_kol,0);
End.
^
.{?Internal; N_ckdr = comp(’000100000000000Bh’)
Золото	^
.}
.{?Internal; N_ckdr = comp(’0001000000000010h’)
Серебро	^
.}
.{?Internal; N_ckdr = comp(’0001000000000015h’)
Платина	^
.}
.{?Internal; N_ckdr = comp(’0001000000000016h’)
Платиновая  группа	^
.}
.{?Internal; N_ckdr = comp(’000100000000001Ah’)
Палладий	^
.}
.begin
x_2:=x_2+1;
end.
.}
Подпись материально-
ответственного лица                                       		
		^
				Фамилия И.О.
.endform

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

Re: Помогите, пожалуйста, с VIEW представлением

Сообщение edward_K »

Угу. И ка сие вообще компилятор проглотил? Что то слабо вериться, что атлантис наконец то стал соотв. по синтаксису обычному SQL
Надо как то так

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

FROM
   Katmc
,  naldrag,katdrag  
WHERE
((   comp(Tovar_nrec) == Katmc.nrec 
and 3 == naldrag.tidk
and katmc.nrec==naldrag.ckatos
and naldrag.ckatdrag==katdrag.nrec
))
;
Ну и в выводе вы чего то перемудрили.
сделайте вывод в цикле по table vdrag
и не увидел этого
перед циклом
function TblGetFirst (LongInt) : boolean; external 'G_Common.dll';
в конце программного блока в цикле
function TblGetNext (LongInt) : boolean; external 'G_Common.dll';
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Помогите, пожалуйста, с VIEW представлением

Сообщение Руслан »

Ругается на функцию "Ожидалась константа, поле, функция, "IF" или "CASE" (стр.136, поз.1 в D:\NET\VIP\TEST\09_0068\09_0068\SRC\KARTSTOR_DM.RTF)
│ function TblGetFirst (LongInt) : boolean; external 'G_Common.dll';"

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

.linkform ’KartStor_dm’ prototype is ’KartStor’
.group ’belform’
.NameInList ’КАРТОЧКА СКЛАДСКОГО УЧЕТА  РБ ( с ДМ )’
.var
 ItogoSummaNDE : double
 ItogoSummaVal : double
NRec : comp
sch_2, x_2:integer; //для вывода на печать
N_ckdr : comp;
N_kol : double;
T_Spec   : longint;   // Таблица реализации
NT_ckdr : word;
NT_kol : word;
Au: double     // золото
Ag: double     //серебро
Pt: double      // платина
Ptgr: double  //платиновая группа
Pd: double     // палладий
.endvar
.begin
NRec := TOVAR_NRec
End.

.CREATE VIEW  vDrag  
!AS SELECT  *
!FROM naldrag, katdrag
! where 
!((  
!Comp(TOVAR_NRec) ==  naldrag .ckatos (noindex)
!And naldrag.ckatdrag == katdrag.nrec
!));
As select
     Katdrag.nrec,  naldrag.kol, naldrag.*
FROM katmc, naldrag, katdrag
where
((comp(Tovar_nrec) == Katmc.nrec 
and 3 == naldrag.tidk
and katmc.nrec==naldrag.ckatos
and naldrag.ckatdrag==katdrag.nrec
));
.fields
TOVAR_BarKod
sGetTune(’MyOrg’)
V2
V3
TOVAR_NAME 
TOVAR_BarKod
TOVAR_Ed_Izm
.endfields    
Утверждено учётной  политикой ОАО  “Керамин”        
Код ТМЦ	^
^
наименование организации
^
наименование структурного подразделения
^
материально-ответственное лицо

КАРТОЧКА  СКЛАДСКОГО  УЧЕТА 

Наименование материала:  ^ ,       ^
Единица измерения:   ^
Марка, сорт, профиль, размер и т.д.: 
.var
prih: double
rash: double
itog: double
n: integer
itogIN: double
ItogOUT: double
.endvar
.fields
DoubleToStr(kol, KolForm) // входящий остаток
DoubleToStr(srPrice, PriceR)
n 
field2   // дата
field5   //номер наклад
field1   // номер ордера
field6 field6_MOL// поставщик получат
DoubleToStr(prih, KolForm)
DoubleToStr (rash, KolForm)
DoubleToStr (itog, KolForm)
DoubleToStr(field11, PriceR)
field_m12
.endfields
.begin
Itog:= double(kol);
End.

№	Дата 
записи	Номер накладной	Номер
ордера	Место хранения	От кого получено 
или кому отпущено	Приход	Расход	Остаток	Цена	Норма запаса
				стеллаж	ячейка						
1	2	3	4	5	6	7	8	9	10	11	12
Входящий остаток	^	^	
.{
.begin
case field3 of
’Приход’:
{
prih := field10;
rash := 0;
itog := itog + prih;
itogIN := itogIN + prih;
}
’Расход’:
{
rash := field10;
prih := 0;
itog := itog - rash;
itogOUT := itogOUT + rash;
}
end;
n:=n+1
end.
^	^	^	^			^ ^	^	^	^	^	^
.}
.fields
DoubleToStr(itogIN, KolForm)  // итого приход
DoubleToStr(itogOUT, KolForm) // итого расход 
DoubleToStr(kolIsh, KolForm) // исходящий остаток
DoubleToStr(SrPriceIsh, PriceR)
.endfields
Итого обороты	^	^			
Исходящий остаток			^	^	

.begin 
!Au := 0 ;       // золото
!Ag := 0;       //серебро
!Pt := 0;         // платина
!Ptgr := 0;     //платиновая группа
!Pd := 0;       // палладий
T_Spec     := TblInitNew(1,1);              // создаем таблицу драг. металлов
 NT_ckdr      := TblNewField(T_Spec,12);
TblEndKey(T_Spec);                           // строим индекс
NT_Kol       := TblNewField(T_Spec,12);
end.
.{ table ‘Vdrag’
.begin
function TblGetFirst (LongInt) : boolean; external 'G_Common.dll';
TblSfString(T_Spec, NT_ckdr, vdrag.naldrag.ckatdrag);
 if(TblGetEqual(T_Spec))                        // Запись есть
        {
TblSfDouble(T_Spec,NT_kol, TblGfDouble(T_Spec,NT_kol) + vdrag.naldrag.kol);
TblUpDateCurrent(T_Spec);
        }
      Else
        {
        TblSfDouble(T_Spec,NT_kol, vdrag.naldrag.kol);
        TblInsertCurrent(T_Spec);
        }
function TblGetNext (LongInt) : boolean; external 'G_Common.dll';
End.
.}

!.begin
!Au := If (vDrag.naldrag .ckatdrag=comp(’000100000000000Bh’), kolIsh * vDrag.naldrag.Kol,0);  // золото 
!Ag := If (vDrag.naldrag.ckatdrag=comp(’0001000000000010h’), kolIsh * Double(vDrag.naldrag.Kol),0);  // серебро
!Pt := If (vDrag.naldrag.ckatdrag=comp(’0001000000000015h’), kolIsh *vDrag. naldrag.Kol,0);  //  платина
!Ptgr := If (vDrag.naldrag.ckatdrag=comp(’0001000000000016h’) or vDrag.naldrag.ckatdrag=comp(’000100000000001Fh’),  Ptgr  + kolIsh * !vDrag.naldrag.Kol,0); 
!Pd := If (vDrag.naldrag.ckatdrag=comp(’000100000000001Ah’), kolIsh * vDrag.naldrag.Kol,0);
!End.
.fields
N_ckdr
DoubleToStr(Au, ‘\4p666 666.8888’)
DoubleToStr(Ag, ‘\4p666 666.8888’)
!DoubleToStr((If (vDrag.naldrag.ckatdrag=’0001000000000010h’, kolIsh * Double(vDrag. naldrag.Kol),0)), ‘\4p666 666.8888’)
!If (vDrag.naldrag.ckatdrag=comp(’0001000000000010h’), DoubleToStr(kolIsh * vDrag.naldrag.Kol, ‘\4p666 666.8888’),0)
DoubleToStr(Pt, ‘\4p666 666.8888’)
DoubleToStr(Ptgr, ‘\4p666 666.8888’)
DoubleToStr(Pd, ‘\4p666 666.8888’)
V3
.endfields
.begin
sch_2:= TblRecords(T_Spec)-1;
 x_2:=0;
End.
Содержание драгоценных металлов
Наименование	Масса, г.
.{ while (x_2<=sch_2)
.begin
N_ckdr:=TblGfString(T_Spec,NT_ckdr);
N_kol:=TblGfDouble(T_Spec,NT_kol);
Au := If (N_ckdr =comp(’000100000000000Bh’), kolIsh * N_kol,0);  // золото 
Ag := If (N_ckdr =comp(’0001000000000010h’), kolIsh *N_kol,0);  // серебро
Pt := If (N_ckdr =comp(’0001000000000015h’), kolIsh * N_kol,0);  //  платина
Ptgr := If (N_ckdr =comp(’0001000000000016h’) or N_ckdr=comp(’000100000000001Fh’),  Ptgr  + kolIsh * N_kol,0); 
Pd := If (N_ckdr =comp(’000100000000001Ah’), kolIsh * N_kol,0);
End.
^
.{?Internal; N_ckdr = comp(’000100000000000Bh’)
Золото	^
.}
.{?Internal; N_ckdr = comp(’0001000000000010h’)
Серебро	^
.}
.{?Internal; N_ckdr = comp(’0001000000000015h’)
Платина	^
.}
.{?Internal; N_ckdr = comp(’0001000000000016h’)
Платиновая  группа	^
.}
.{?Internal; N_ckdr = comp(’000100000000001Ah’)
Палладий	^
.}
.begin
x_2:=x_2+1;
end.
.}
Подпись материально-
ответственного лица                                       		
		^
				Фамилия И.О.
.endform

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

Re: Помогите, пожалуйста, с VIEW представлением

Сообщение edward_K »

А подумать? Я вам привел описание функций - чтобы вы видели как их юзать. Зачем прямо их вставлять в вашу форму? Я сам эти функции не использую уже лет 10 - мне проще временную таблу описать или TempDescr задействовать.
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Помогите, пожалуйста, с VIEW представлением

Сообщение Руслан »

Сделал циклом по таблице vdrag, выводит только одну запись...

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

.linkform ’KartStor_dm’ prototype is ’KartStor’
.group ’belform’
.NameInList ’КАРТОЧКА СКЛАДСКОГО УЧЕТА  РБ ( с ДМ )’
.var
 ItogoSummaNDE : double
 ItogoSummaVal : double
NRec : comp
sch_2, x_2:integer; //для вывода на печать
N_ckdr : comp;
N_kol : double;
T_Spec   : longint;   // Таблица реализации
NT_ckdr : word;
NT_kol : word;
Au: double     // золото
Ag: double     //серебро
Pt: double      // платина
Ptgr: double  //платиновая группа
Pd: double     // палладий
.endvar
.begin
NRec := TOVAR_NRec
End.

.CREATE VIEW  vDrag  
!AS SELECT  *
!FROM naldrag, katdrag
! where 
!((  
!Comp(TOVAR_NRec) ==  naldrag .ckatos (noindex)
!And naldrag.ckatdrag == katdrag.nrec
!));
As select
     Katdrag.nrec,  naldrag.kol, naldrag.*
FROM katmc, naldrag, katdrag
where
((comp(Tovar_nrec) == Katmc.nrec 
and 3 == naldrag.tidk
and katmc.nrec==naldrag.ckatos
and naldrag.ckatdrag==katdrag.nrec
));
.fields
TOVAR_BarKod
sGetTune(’MyOrg’)
V2
V3
TOVAR_NAME 
TOVAR_BarKod
TOVAR_Ed_Izm
.endfields    
Утверждено учётной  политикой ОАО  “Керамин”        
Код ТМЦ	^
^
наименование организации
^
наименование структурного подразделения
^
материально-ответственное лицо

КАРТОЧКА  СКЛАДСКОГО  УЧЕТА 

Наименование материала:  ^ ,       ^
Единица измерения:   ^
Марка, сорт, профиль, размер и т.д.: 
.var
prih: double
rash: double
itog: double
n: integer
itogIN: double
ItogOUT: double
.endvar
.fields
DoubleToStr(kol, KolForm) // входящий остаток
DoubleToStr(srPrice, PriceR)
n 
field2   // дата
field5   //номер наклад
field1   // номер ордера
field6 field6_MOL// поставщик получат
DoubleToStr(prih, KolForm)
DoubleToStr (rash, KolForm)
DoubleToStr (itog, KolForm)
DoubleToStr(field11, PriceR)
field_m12
.endfields
.begin
Itog:= double(kol);
End.

№	Дата 
записи	Номер накладной	Номер
ордера	Место хранения	От кого получено 
или кому отпущено	Приход	Расход	Остаток	Цена	Норма запаса
				стеллаж	ячейка						
1	2	3	4	5	6	7	8	9	10	11	12
Входящий остаток	^	^	
.{
.begin
case field3 of
’Приход’:
{
prih := field10;
rash := 0;
itog := itog + prih;
itogIN := itogIN + prih;
}
’Расход’:
{
rash := field10;
prih := 0;
itog := itog - rash;
itogOUT := itogOUT + rash;
}
end;
n:=n+1
end.
^	^	^	^			^ ^	^	^	^	^	^
.}
.fields
DoubleToStr(itogIN, KolForm)  // итого приход
DoubleToStr(itogOUT, KolForm) // итого расход 
DoubleToStr(kolIsh, KolForm) // исходящий остаток
DoubleToStr(SrPriceIsh, PriceR)
.endfields
Итого обороты	^	^			
Исходящий остаток			^	^	

.begin 
!Au := 0 ;       // золото
!Ag := 0;       //серебро
!Pt := 0;         // платина
!Ptgr := 0;     //платиновая группа
!Pd := 0;       // палладий
T_Spec     := TblInitNew(1,1);              // создаем таблицу драг. металлов
 NT_ckdr      := TblNewField(T_Spec,12);
TblEndKey(T_Spec);                           // строим индекс
NT_Kol       := TblNewField(T_Spec,12);
end.
!.{ table ‘Vdrag’
.begin
Vdrag._loop katmc
{
!function TblGetFirst (LongInt) : boolean; external 'G_Common.dll';
TblSfString(T_Spec, NT_ckdr, vdrag.naldrag.ckatdrag);
 if(TblGetEqual(T_Spec))                        // Запись есть
        {
TblSfDouble(T_Spec,NT_kol, TblGfDouble(T_Spec,NT_kol) + vdrag.naldrag.kol);
TblUpDateCurrent(T_Spec);
        }
      Else
        {
        TblSfDouble(T_Spec,NT_kol, vdrag.naldrag.kol);
        TblInsertCurrent(T_Spec);
        }
!function TblGetNext (LongInt) : boolean; external 'G_Common.dll';
}
End.
!.}

!.begin
!Au := If (vDrag.naldrag .ckatdrag=comp(’000100000000000Bh’), kolIsh * vDrag.naldrag.Kol,0);  // золото 
!Ag := If (vDrag.naldrag.ckatdrag=comp(’0001000000000010h’), kolIsh * Double(vDrag.naldrag.Kol),0);  // серебро
!Pt := If (vDrag.naldrag.ckatdrag=comp(’0001000000000015h’), kolIsh *vDrag. naldrag.Kol,0);  //  платина
!Ptgr := If (vDrag.naldrag.ckatdrag=comp(’0001000000000016h’) or vDrag.naldrag.ckatdrag=comp(’000100000000001Fh’),  Ptgr  + kolIsh * !vDrag.naldrag.Kol,0); 
!Pd := If (vDrag.naldrag.ckatdrag=comp(’000100000000001Ah’), kolIsh * vDrag.naldrag.Kol,0);
!End.
.fields
N_ckdr
DoubleToStr(Au, ‘\4p666 666.8888’)
DoubleToStr(Ag, ‘\4p666 666.8888’)
!DoubleToStr((If (vDrag.naldrag.ckatdrag=’0001000000000010h’, kolIsh * Double(vDrag. naldrag.Kol),0)), ‘\4p666 666.8888’)
!If (vDrag.naldrag.ckatdrag=comp(’0001000000000010h’), DoubleToStr(kolIsh * vDrag.naldrag.Kol, ‘\4p666 666.8888’),0)
DoubleToStr(Pt, ‘\4p666 666.8888’)
DoubleToStr(Ptgr, ‘\4p666 666.8888’)
DoubleToStr(Pd, ‘\4p666 666.8888’)
V3
.endfields
.begin
sch_2:= TblRecords(T_Spec)-1;
 x_2:=0;
End.
Содержание драгоценных металлов
Наименование	Масса, г.
.{ while (x_2<=sch_2)
.begin
N_ckdr:=TblGfString(T_Spec,NT_ckdr);
N_kol:=TblGfDouble(T_Spec,NT_kol);
Au := If (N_ckdr =comp(’000100000000000Bh’), kolIsh * N_kol,0);  // золото 
Ag := If (N_ckdr =comp(’0001000000000010h’), kolIsh *N_kol,0);  // серебро
Pt := If (N_ckdr =comp(’0001000000000015h’), kolIsh * N_kol,0);  //  платина
Ptgr := If (N_ckdr =comp(’0001000000000016h’) or N_ckdr=comp(’000100000000001Fh’),  Ptgr  + kolIsh * N_kol,0); 
Pd := If (N_ckdr =comp(’000100000000001Ah’), kolIsh * N_kol,0);
End.
^
.{?Internal; N_ckdr = comp(’000100000000000Bh’)
Золото	^
.}
.{?Internal; N_ckdr = comp(’0001000000000010h’)
Серебро	^
.}
.{?Internal; N_ckdr = comp(’0001000000000015h’)
Платина	^
.}
.{?Internal; N_ckdr = comp(’0001000000000016h’)
Платиновая  группа	^
.}
.{?Internal; N_ckdr = comp(’000100000000001Ah’)
Палладий	^
.}
.begin
x_2:=x_2+1;
end.
.}
Подпись материально-
ответственного лица                                       		
		^
				Фамилия И.О.
.endform

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

Re: Помогите, пожалуйста, с VIEW представлением

Сообщение edward_K »

угу. Цикл по МЦ у вас в одном цикле, а выводите вы теперь вне него. Конечно вы получили драгметалы только по последней МЦ.
Я не просил переносить цикл :-P , а просто добавить в нем вывод . Вернитесь к прежней форме - там всего то не хватает TblFirst-Next - а уж как их вставить думайте. Готовое решение бесплатно не предлагаю.
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Помогите, пожалуйста, с VIEW представлением

Сообщение Руслан »

Включил в цикл по таблице vdrag вывод полей. Так выводит все записи как надо. Только теперь выводит одну лишнюю запись, последнюю запись повторяет и задваивает количество...

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

.linkform ’KartStor_dm’ prototype is ’KartStor’
.group ’belform’
.NameInList ’КАРТОЧКА СКЛАДСКОГО УЧЕТА  РБ ( с ДМ )’
.var
 ItogoSummaNDE : double
 ItogoSummaVal : double
NRec : comp
sch_2, x_2:integer; //для вывода на печать
N_ckdr : comp;
N_kol : double;
T_Spec   : longint;   // Таблица реализации
NT_ckdr : word;
NT_kol : word;
Au: double     // золото
Ag: double     //серебро
Pt: double      // платина
Ptgr: double  //платиновая группа
Pd: double     // палладий
.endvar
.begin
NRec := TOVAR_NRec
End.

.CREATE VIEW  vDrag  
As select
     Katdrag.nrec,  naldrag.kol, naldrag.*
FROM katmc, naldrag, katdrag
where
((comp(Tovar_nrec) == Katmc.nrec 
and 3 == naldrag.tidk
and katmc.nrec==naldrag.ckatos
and naldrag.ckatdrag==katdrag.nrec
));
.fields
TOVAR_BarKod
sGetTune(’MyOrg’)
V2
V3
TOVAR_NAME 
TOVAR_BarKod
TOVAR_Ed_Izm
.endfields    
Утверждено учётной  политикой ОАО  “Керамин”        
Код ТМЦ	^
^
наименование организации
^
наименование структурного подразделения
^
материально-ответственное лицо

КАРТОЧКА  СКЛАДСКОГО  УЧЕТА 

Наименование материала:  ^ ,       ^
Единица измерения:   ^
Марка, сорт, профиль, размер и т.д.: 
.var
prih: double
rash: double
itog: double
n: integer
itogIN: double
ItogOUT: double
.endvar
.fields
DoubleToStr(kol, KolForm) // входящий остаток
DoubleToStr(srPrice, PriceR)
n 
field2   // дата
field5   //номер наклад
field1   // номер ордера
field6 field6_MOL// поставщик получат
DoubleToStr(prih, KolForm)
DoubleToStr (rash, KolForm)
DoubleToStr (itog, KolForm)
DoubleToStr(field11, PriceR)
field_m12
.endfields
.begin
Itog:= double(kol);
End.

№	Дата 
записи	Номер накладной	Номер
ордера	Место хранения	От кого получено 
или кому отпущено	Приход	Расход	Остаток	Цена	Норма запаса
				стеллаж	ячейка						
1	2	3	4	5	6	7	8	9	10	11	12
Входящий остаток	^	^	
.{
.begin
case field3 of
’Приход’:
{
prih := field10;
rash := 0;
itog := itog + prih;
itogIN := itogIN + prih;
}
’Расход’:
{
rash := field10;
prih := 0;
itog := itog - rash;
itogOUT := itogOUT + rash;
}
end;
n:=n+1
end.
^	^	^	^			^ ^	^	^	^	^	^
.}
.fields
DoubleToStr(itogIN, KolForm)  // итого приход
DoubleToStr(itogOUT, KolForm) // итого расход 
DoubleToStr(kolIsh, KolForm) // исходящий остаток
DoubleToStr(SrPriceIsh, PriceR)
.endfields
Итого обороты	^	^			
Исходящий остаток			^	^	

.begin 
!Au := 0 ;       // золото
!Ag := 0;       //серебро
!Pt := 0;         // платина
!Ptgr := 0;     //платиновая группа
!Pd := 0;       // палладий
T_Spec     := TblInitNew(1,1);              // создаем таблицу драг. металлов
 NT_ckdr      := TblNewField(T_Spec,12);
TblEndKey(T_Spec);                           // строим индекс
NT_Kol       := TblNewField(T_Spec,12);
end.
Содержание драгоценных металлов
Наименование	Масса, г.
.{ table ‘Vdrag’
.begin
!Vdrag._loop katmc
!{
!function TblGetFirst (LongInt) : boolean; external 'G_Common.dll';
TblSfString(T_Spec, NT_ckdr, vdrag.naldrag.ckatdrag);
 if(TblGetEqual(T_Spec))                        // Запись есть
        {
TblSfDouble(T_Spec,NT_kol, TblGfDouble(T_Spec,NT_kol) + vdrag.naldrag.kol);
TblUpDateCurrent(T_Spec);
        }
      Else
        {
        TblSfDouble(T_Spec,NT_kol, vdrag.naldrag.kol);
        TblInsertCurrent(T_Spec);
        }
!function TblGetNext (LongInt) : boolean; external 'G_Common.dll';
!}
End.
.fields
!N_ckdr
DoubleToStr(Au, ‘\4p666 666.8888’)
DoubleToStr(Ag, ‘\4p666 666.8888’)
!DoubleToStr((If (vDrag.naldrag.ckatdrag=’0001000000000010h’, kolIsh * Double(vDrag. naldrag.Kol),0)), ‘\4p666 666.8888’)
!If (vDrag.naldrag.ckatdrag=comp(’0001000000000010h’), DoubleToStr(kolIsh * vDrag.naldrag.Kol, ‘\4p666 666.8888’),0)
DoubleToStr(Pt, ‘\4p666 666.8888’)
DoubleToStr(Ptgr, ‘\4p666 666.8888’)
DoubleToStr(Pd, ‘\4p666 666.8888’)
V3
.endfields
.begin
sch_2:= TblRecords(T_Spec)-1;
 x_2:=0;
End.
.{ while (x_2<=sch_2)
.begin
N_ckdr:=TblGfString(T_Spec,NT_ckdr);
N_kol:=TblGfDouble(T_Spec,NT_kol);
Au := If (N_ckdr =comp(’000100000000000Bh’), kolIsh * N_kol,0);  // золото 
Ag := If (N_ckdr =comp(’0001000000000010h’), kolIsh *N_kol,0);  // серебро
Pt := If (N_ckdr =comp(’0001000000000015h’), kolIsh * N_kol,0);  //  платина
Ptgr := If (N_ckdr =comp(’0001000000000016h’) or N_ckdr=comp(’000100000000001Fh’),  Ptgr  + kolIsh * N_kol,0); 
Pd := If (N_ckdr =comp(’000100000000001Ah’), kolIsh * N_kol,0);
End.
.{?Internal; N_ckdr = comp(’000100000000000Bh’)
Золото	^
.}
.{?Internal; N_ckdr = comp(’0001000000000010h’)
Серебро	^
.}
.{?Internal; N_ckdr = comp(’0001000000000015h’)
Платина	^
.}
.{?Internal; N_ckdr = comp(’0001000000000016h’)
Платиновая  группа	^
.}
.{?Internal; N_ckdr = comp(’000100000000001Ah’)
Палладий	^
.}
.begin
x_2:=x_2+1;
end.
.}
.}
Подпись материально-
ответственного лица                                       		
		^
				Фамилия И.О.
.endform

Ответить