отчет на прототипе. Галактика 5.
Модераторы: m0p3e, edward_K, Модераторы
отчет на прототипе. Галактика 5.
Всем привет. Проблема такая. В галактике 5 на основе книги бух.проводок сделала отчет:выгрузка даты проводок,суммы оборота,организации,договора,до. Это все из прототипа. Необходимо мат.ценности достать из спецификации накладной. Запрос рабочий след.:
.var
Sp:string;
.endvar
.create view spnak
Var obnrec:comp;
As select oborot.*,katsopr.*,spsopr.*,katmc.*
From katmc,spsopr,katsopr,oborot
Where((obnrec/==oborot.nrec and oborot.csoprdoc/==katsopr.nrec and katsopr.nrec==spsopr.csopr and spsopr.cmcusl==katmc.nrec));
.{//цикл из прототипа на вывод данных
.begin
Spnak.obnrec:=spnak.oborot.nrec;
End.
.{table 'spnak.oborot'
.begin
Spnak.sp:=spnak.katmc.name;
End.
.}
^^^^^^^^
.}
Данные из прототипа выводит,данные по моему запросу,название мц,не выводит...
.var
Sp:string;
.endvar
.create view spnak
Var obnrec:comp;
As select oborot.*,katsopr.*,spsopr.*,katmc.*
From katmc,spsopr,katsopr,oborot
Where((obnrec/==oborot.nrec and oborot.csoprdoc/==katsopr.nrec and katsopr.nrec==spsopr.csopr and spsopr.cmcusl==katmc.nrec));
.{//цикл из прототипа на вывод данных
.begin
Spnak.obnrec:=spnak.oborot.nrec;
End.
.{table 'spnak.oborot'
.begin
Spnak.sp:=spnak.katmc.name;
End.
.}
^^^^^^^^
.}
Данные из прототипа выводит,данные по моему запросу,название мц,не выводит...
Re: отчет на прототипе. Галактика 5.
Попробуйте так:
Совет сугубо теоретический, сам проверить не смогу, т. к. версия уже давно не актуальна.
Код: Выделить всё
.{table 'spnak.oborot'
.{table 'spnak.katsopr'
.{table 'spnak.spsopr'
.{table 'spnak.katmc'
.begin
Spnak.sp:=spnak.katmc.name;
End.
.}
.}
.}
.}
Re: отчет на прототипе. Галактика 5.
не помогло:(
Re: отчет на прототипе. Галактика 5.
вывела сообщение в .{table 'spnak' -он даже его не выдает,как будто даже не заходит туда...
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: отчет на прототипе. Галактика 5.
Spnak.obnrec:=spnak.oborot.nrec - вот это что?
потом эту же переменную вы используете в фильтре по oborot.nrec.
в obnrec надо передавать поле из прототипа
+ совет KATZ обязателен к исполнению.
потом эту же переменную вы используете в фильтре по oborot.nrec.
в obnrec надо передавать поле из прототипа
+ совет KATZ обязателен к исполнению.
Re: отчет на прототипе. Галактика 5.
в прототипе для галактики 8 есть поле с1р0-оборот.нрек,а в прототипе для галактики 5 нет такого поля.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: отчет на прототипе. Галактика 5.
Ну это не значит что туда можно пихать oborot.nrec. Ваша логическая таблица абсолютно не связана с потоком.
Придется тогда поизвращаться.
Придется тогда поизвращаться.
Re: отчет на прототипе. Галактика 5.
поняла теперь...
Re: отчет на прототипе. Галактика 5.
отошли от идеи отчета на прототипе. Написали обычный ард.
.form 'book'
.nameinlist 'книга'
.ard
.p60
.defo landscape
.var
Dat,dBeg,dEnd:date;
Org,nomdo,mc:string;
Datdo:date;
Sum:double;
.endvar
.create view spnak
As select
Oborot.datob,oborot.sumob,katmc.name,katorg.name,basedoc.ddoc,basedoc.nodoc
From oborot,katorg,basedoc,katmc
Where((dbeg<<=oborot.datob and dend>>=oborot.datob and oborot.kauos[1]==katorg.nrec and oborot.kauos[3]==basedoc.nrec and oborot.csoprdoc/==katsopr.nrec and katsopr.nrec/==spsopr.csopr and 1/==spsopr.prmc and spsopr.cmcusl==katmc.nrec )) and oborot.scheto='362' and oborot.schetk='390' and oborot.subschk='0111';
.fields
dbeg
dend
dat
org
nomdo
datdo
sum
mc
.endfields
.begin
sum:=0;
dbeg:=cur_date;dend:=cur_date;
rundialog(getinterval,dbeg,dend);
dbeg:=date(1,month(cur_date),year(cur_date))
dend:=date(last_day(cur_date),month(cur_date),year(cur_date))
.end
книга бух проводок
с ^ по ^
.{table 'spnak'
.begin
dat:=spnak.oborot.datod;
org:=spnak.katorg.name
datdo:=spnak.basedoc.ddoc;
nomdo:=spnak.basedoc.nodoc;
sum:=spnak.oborot.sumob;
mc:=spnak.katmc.name;
.end
^^^^^^
.}
.endform
запрос рабочий. при компиляции ошибок нет. запускаеым отчет,задаем даты,и выдает ошибку - РЕКУРСИВНОЕ РЕЛ.ОТНОШЕНИЕ ТАБЛИЦЫ ОБОРОТ. Что это и где искать?:(
.form 'book'
.nameinlist 'книга'
.ard
.p60
.defo landscape
.var
Dat,dBeg,dEnd:date;
Org,nomdo,mc:string;
Datdo:date;
Sum:double;
.endvar
.create view spnak
As select
Oborot.datob,oborot.sumob,katmc.name,katorg.name,basedoc.ddoc,basedoc.nodoc
From oborot,katorg,basedoc,katmc
Where((dbeg<<=oborot.datob and dend>>=oborot.datob and oborot.kauos[1]==katorg.nrec and oborot.kauos[3]==basedoc.nrec and oborot.csoprdoc/==katsopr.nrec and katsopr.nrec/==spsopr.csopr and 1/==spsopr.prmc and spsopr.cmcusl==katmc.nrec )) and oborot.scheto='362' and oborot.schetk='390' and oborot.subschk='0111';
.fields
dbeg
dend
dat
org
nomdo
datdo
sum
mc
.endfields
.begin
sum:=0;
dbeg:=cur_date;dend:=cur_date;
rundialog(getinterval,dbeg,dend);
dbeg:=date(1,month(cur_date),year(cur_date))
dend:=date(last_day(cur_date),month(cur_date),year(cur_date))
.end
книга бух проводок
с ^ по ^
.{table 'spnak'
.begin
dat:=spnak.oborot.datod;
org:=spnak.katorg.name
datdo:=spnak.basedoc.ddoc;
nomdo:=spnak.basedoc.nodoc;
sum:=spnak.oborot.sumob;
mc:=spnak.katmc.name;
.end
^^^^^^
.}
.endform
запрос рабочий. при компиляции ошибок нет. запускаеым отчет,задаем даты,и выдает ошибку - РЕКУРСИВНОЕ РЕЛ.ОТНОШЕНИЕ ТАБЛИЦЫ ОБОРОТ. Что это и где искать?:(
Re: отчет на прототипе. Галактика 5.
Попробовал на текущей версии компилировать, сразу получил несколько ошибок:
1) .p60 надо писать через пробел.
2) Вместо .end должно быть end. в двух местах.
3) Вместо spnak.oborot.datod должно быть spnak.oborot.datob.
После этого компилятор ругаться перестал. Неужели в 5-ой версии компилятор не считал это ошибками?
По содержательной части. В вашем случае подобрать для OBOROT 100%-но подходящий индекс не получается, но scheto+schetk+datob или schetk+subschk+datob гораздо удачнее, чем ваш datob. А всё, что не удалось поместить в ((...)), лучше отдельно (т. е. вне select-а) обрабатывать. Не раз сталкивался, что select с доп. условиями после скобок в модуле SQL выполняется нормально, а тот же select в VIP-е или в ARD не работает. Не знаю, почему так, вроде бы ядро одно и то же...
В-общем, попробуйте как-то так (сам проверить на старой версии не могу, опечатки не исключаются):
1) .p60 надо писать через пробел.
2) Вместо .end должно быть end. в двух местах.
3) Вместо spnak.oborot.datod должно быть spnak.oborot.datob.
После этого компилятор ругаться перестал. Неужели в 5-ой версии компилятор не считал это ошибками?
По содержательной части. В вашем случае подобрать для OBOROT 100%-но подходящий индекс не получается, но scheto+schetk+datob или schetk+subschk+datob гораздо удачнее, чем ваш datob. А всё, что не удалось поместить в ((...)), лучше отдельно (т. е. вне select-а) обрабатывать. Не раз сталкивался, что select с доп. условиями после скобок в модуле SQL выполняется нормально, а тот же select в VIP-е или в ARD не работает. Не знаю, почему так, вроде бы ядро одно и то же...
В-общем, попробуйте как-то так (сам проверить на старой версии не могу, опечатки не исключаются):
Код: Выделить всё
.form 'book'
.nameinlist 'книга'
.ard
.p 60
.defo landscape
.var
Dat,dBeg,dEnd:date;
Org,nomdo,mc:string;
Datdo:date;
Sum:double;
.endvar
.create view spnak
As select
Oborot.datob,oborot.sumob,katmc.name,katorg.name,basedoc.ddoc,basedoc.nodoc
From oborot,spsopr,katorg,basedoc,katmc
Where
((
'362'==oborot.scheto and '390'==oborot.schetk and
dbeg<<=oborot.datob and dend>>=oborot.datob and
oborot.csoprdoc==spsopr.csopr and 1==spsopr.prmc and
spsopr.cmcusl==katmc.nrec and
oborot.kauos[1]==katorg.nrec and
oborot.kauos[3]==basedoc.nrec
));
.fields
dbeg dend
dat org nomdo datdo sum mc
.endfields
.begin
sum:=0;
dbeg:=cur_date;dend:=cur_date;
rundialog(getinterval,dbeg,dend);
dbeg:=date(1,month(dbeg),year(dbeg));
dend:=date(last_day(dend),month(dend),year(dend));
end.
книга бух проводок
с ^ по ^
.{table 'spnak.oborot'
.{?Internal;(spnak.oborot.subschk='0111')
.{table 'spnak.spsopr'
.begin
dat:=spnak.oborot.datob;
sum:=spnak.oborot.sumob;
mc:=if((spnak.getfirst katmc)=0,spnak.katmc.name,'???');
org:=if((spnak.getfirst katorg)=0,spnak.katorg.name,'???');
datdo:=if((spnak.getfirst basedoc)=0,spnak.basedoc.ddoc,Date(0,0,0));
nomdo:=if((spnak.getfirst basedoc)=0,spnak.basedoc.nodoc,'???');
end.
^
^
^
^
^
^
.}
.}
.}
.endform
Re: отчет на прототипе. Галактика 5.
не помогло,все также -рекурсивное отношение...
Re: отчет на прототипе. Галактика 5.
Скомпилировал отчет в текущей версии, проверил - действительно "рекурсивное отношение". Стал разбираться... Оказалось, что причина - в имени dEnd, есть такая переменная и есть такое поле в таблице BASEDOC. Мы в запросе указываем переменную, а "Галактика" считает, что речь о поле из таблицы, и, естественно, ругается на рекурсию. Переименование переменной решает проблему.
Re: отчет на прототипе. Галактика 5.
спасибо огромнейшее! Работает!