Страница 1 из 2
Помогите, пожалуйста, с VIEW представлением
Добавлено: 25 сен 2009, 11:06
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')
;
Добавлено: 25 сен 2009, 11:15
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
Добавлено: 25 сен 2009, 15:04
sildae
((c1p1==katOrg.Name
and katorg.nrec == oborot.kauos[1] ))
у меня эти две строчки не работают вместе. (Support 4.3)
Пишется ошибка "нужен ключ name+nrec для katorg.
Добавлено: 25 сен 2009, 16:15
edward_K
значится ниже еще фильтр по "== katorg.nrec" - ищите.
Добавлено: 29 сен 2009, 10:07
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 внутри представления не ипользуется?
Добавлено: 29 сен 2009, 10:31
edward_K
ну вам же нужно максимальную по 3 счетам. Можно где угодно объявить - зачем она в view?
Добавлено: 29 сен 2009, 10:58
sildae
Спасибо.
Максисум-то я умею находить, я просто подумала, что можно как-то еще ускорить выполнение, используя дату...
Добавлено: 29 сен 2009, 11:19
edward_K
ну можно
wdt<<=oborot.datob
ну и для StrToDate(c0p2,'DD/MM/YYYY') тоже завести переменную.
будет слегка быстрее.
А дальше
#Define _Test_
...
#IFDEF _test_
Logstrtofile(???????? , Timetostr(cur_time,'HH:MM:SS:SSS')+'?????')
#endif
поможет вам понять где еще узкие места.
Re: Помогите, пожалуйста, с VIEW представлением
Добавлено: 02 июл 2014, 13:26
Руслан
Здравствуйте! Есть такая проблемка... Представление в саппорте отрабатывает правильно, но при выводе данных по драг. металлам показывает неверные данные, он выводит две одинаковые записи:
Код: Выделить всё
.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
Re: Помогите, пожалуйста, с VIEW представлением
Добавлено: 02 июл 2014, 13:38
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';
Re: Помогите, пожалуйста, с VIEW представлением
Добавлено: 02 июл 2014, 14:04
Руслан
Ругается на функцию "Ожидалась константа, поле, функция, "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
Re: Помогите, пожалуйста, с VIEW представлением
Добавлено: 02 июл 2014, 14:12
edward_K
А подумать? Я вам привел описание функций - чтобы вы видели как их юзать. Зачем прямо их вставлять в вашу форму? Я сам эти функции не использую уже лет 10 - мне проще временную таблу описать или TempDescr задействовать.
Re: Помогите, пожалуйста, с VIEW представлением
Добавлено: 02 июл 2014, 14:42
Руслан
Сделал циклом по таблице 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
Re: Помогите, пожалуйста, с VIEW представлением
Добавлено: 02 июл 2014, 15:57
edward_K
угу. Цикл по МЦ у вас в одном цикле, а выводите вы теперь вне него. Конечно вы получили драгметалы только по последней МЦ.
Я не просил переносить цикл
, а просто добавить в нем вывод . Вернитесь к прежней форме - там всего то не хватает TblFirst-Next - а уж как их вставить думайте. Готовое решение бесплатно не предлагаю.
Re: Помогите, пожалуйста, с VIEW представлением
Добавлено: 02 июл 2014, 17:22
Руслан
Включил в цикл по таблице 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