Страница 1 из 2
Как вывести данные из Таблицы в Памяти в LinkForm'е
Добавлено: 11 окт 2006, 11:49
DarkAngel27
Код: Выделить всё
.LinkForm 'NAME' Prototype is 'Schfrees'
.Create view Tabl
from SchFact, SpSchf, KatMc, KatParty, KatOtPed
where
((
nSchFact == SchFact.nRec and
SchFact.nRec == SpSchf.cSchFact and
SpSchf.cMcUsl == KatMc.nRec and
SpSchf.cParty == KatParty.nRec and
SpSchf.cOtpEd == KatOtPed.nRec
))
order external by KatMc.Name, KatParty.Name, SpSchf.Price
;
... // структура прототипа
.{Table tabl
.begin
... // Заполнение Таблицы в Памяти
end.
.}
Как далее можно организовать цикл по Таблице в Памяти и вывести из неё все необходимые данные?
Добавлено: 11 окт 2006, 11:56
dp
абсолютно не понятно какая таблица и в какой памяти имеется в виду...
Добавлено: 11 окт 2006, 11:57
Алексей
во вьюхе надо указать в секции фром имя своей таблицы временной, наприме tTable
.fields
table.tTable.field1
table.tTable.field2
.endfields
.{Table 'tabl.tTable'
^ ^
.}
Добавлено: 11 окт 2006, 14:46
DarkAngel27
Добавил следующее:
Код: Выделить всё
.Create view tabl_1
from tabl_in_memory
;
... // тело прототипа
.{Table tabl
.begin
... // Заполнение Таблицы в Памяти tabl_in_memory
end.
.}
.{table 'tabl_1.tabl_in_memory'
.fields
tabl_1.tabl_in_memory.field1
tabl_1.tabl_in_memory.field2
.endfields
^ ^
.}
После компиляции и запуска LinkForm'ы Галактика выдаёт ошибку:
"Внутренняя ошибка - объект не найден в ресурсе" и вылетает по RunTime'у.
Добавлено: 11 окт 2006, 15:03
edward_K
logstrtofile или message вам поможет
а вообще хотите ответа выкладывайте всю форму, а не ее фрагменты.
Добавлено: 11 окт 2006, 15:28
DarkAngel27
Код: Выделить всё
!
! #include table_in_mem.inc (Включено в проектном файле перед данной LinkForm'ой
!
.LinkForm 'SCHFREES_DA' Prototype is 'Schfrees'
.Group 'Бланки счетов-фактур'
.NameInList 'Унифицированная форма'
.p 60
.DEFO LANDSCAPE
.var
SrcCountry:String;
GTDNumber:String;
rNDS:Double;
rSumNoNDS:Double;
rAkcis:Double;
rSaleTax:Double;
rSumma:Double;
StrPrim1:String;
StrPrim2:String;
plat_No:String;
plat_Date:String;
platNo_Date:String;
EmptyField:String;
is2004:Boolean;
mc_name:string[100];
.endvar
.Create view tabl1
from table_in_mem
;
.Create view DA
from SchFact, SpSchf, KatMc, KatParty, KatOtPed
where
((
nSchFact == SchFact.nRec and
SchFact.nRec == SpSchf.cSchFact and
SpSchf.cMcUsl == KatMc.nRec and
SpSchf.cParty == KatParty.nRec and
SpSchf.cOtpEd == KatOtPed.nRec
))
order external by KatMc.Name, KatParty.Name, SpSchf.Price
;
.Create view vSpSchf
from
SpSchf , KatParty, SchFact, BookPrZk
where
((
cSpSchf == SpSchf.nRec and
SpSchf.cParty == KatParty.nRec
));
.Create view vSchf
from
SchFact, BookPrZk, SchFact SchFactPlat, SoprHoz, KatParty, SpSopHoz, SpSopr
where
((
nSchFact == SchFact.nRec and (SchFact.SubTip = 0)
and SchFact.nRec == BookPrZk.cSchFact and
((BookPrZk.SubTip = 4) or (BookPrZk.SubTip = 20))
and BookPrZk.cSchFactS == SchFactPlat.nRec
and SchFactPlat.cSoprHoz == SoprHoz.nRec
and SoprHoz.nRec == SpSopHoz.cSoprHoz
and SpSopHoz.cSpSopr == SpSopr.nRec
))
;
!
! // ЗДЕСЬ идёт базовая форма (БЕЗ ИЗМЕНЕНИЙ)
!
.{Table da
.begin
if getfirst da.SpSchf = tsOK then do
{
mc_name := replace(da.KatMC.NAME,'&&&',DoubleToStr(Double(da.KatParty.Name),'777.8'));
if getfirst table_in_mem(byOTCH) where (( mc_name == table_in_mem.NAME and
da.SpSchf.Price == table_in_mem and
da.KatOtPed.Name == table_in_mem.ED
))<>tsOK then
If insert in table_in_mem<>tsOK then
{
message('Не удалось добавить запись');
exit;
}
set table_in_mem.name := mc_name;
set table_in_mem.BARKOD := da.KatMC.BarKod;
set table_in_mem.CMC := da.SpSchf.cMcUsl;
If update current table_in_mem<>tsOK then
{
message('Не удалось модифицировать запись');
exit;
}
}while getnext da.SpSchf=tsOK
end.
.}
.{table 'tabl1.table_in_mem'
.fields
tabl1.table_in_mem.NAME tabl1.table_in_mem.BARKOD
.endfields
^ ^
.} // tabl1
.}
.endform
Добавлено: 11 окт 2006, 16:02
Vek
случайно не забыли в файле проекта таблицу table_in_mem описать?
что-то типа:
table struct table_in_mem (
...
)
with index (
...
)
;
то есть обращение в форме к ней есть, а вдруг ее нету

Добавлено: 11 окт 2006, 16:04
edward_K
1. order external by - уберите нафиг, вы ж все равно во времянку грузите.
2.getfirst da.SpSchf - правильней писать da.getfirst SpSchf - в 8 такое и компилятор не скушает.
3.чтобы понять в чем дело(в коде или в select)
вставте мессагу в первую строку формы.
4.insert in table_in_mem тоже не понятно - убирайте
set tabl1.table_in_mem.name := mc_name;
set tabl1.table_in_mem.BARKOD := da.KatMC.BarKod;
set tabl1.table_in_mem.CMC := da.SpSchf.cMcUsl;
If tabl1.insert current table_in_mem<>tsOK then
insert into ??? set здесь не покатит, так есть данные с другой вьюхи(тогда точно такая мессага и будет)
Добавлено: 11 окт 2006, 16:25
DarkAngel27
2. Спасибо за совет.
3. Вставил Message. В итоге ошибка выскачила до появления сообщения.
4. Сделано так исходя из того, что: если такого индекса нету, то мы вставляем запись, а если он есть, то только делаем update строки.
To Vek
Не забыл.
Добавлено: 11 окт 2006, 16:43
DarkAngel27
Если убрать из формы
Код: Выделить всё
.Create view tabl1
from table_in_mem
;
и
.{table 'tabl1.table_in_mem'
.fields
tabl1.table_in_mem.NAME tabl1.table_in_mem.BARKOD
.endfields
^ ^
.} // tabl1
То программа отработает нормально...
Добавлено: 11 окт 2006, 17:56
edward_K
ну попробуйте оставить тока
.Create view tabl1 as select table_in_mem.*
from table_in_mem
;
мне вообще не нравиться table_in_mem - какое то оно не уникальное
может с другим ресом пересеклось?
поменяйте имя таблы.
и
If insert in table_in_mem<>tsOK
все таки неправильная конструкция.
Добавлено: 11 окт 2006, 18:07
DarkAngel27
1. Пробовал, та же ошибка.
2. Имя таблицы менял, та же ошибка (На сколько помню, если в ресурсе таблицы с одним и тем же именем встретятся, то компелятор выдаст ошибку)
Добавлено: 11 окт 2006, 18:37
edward_K
при компиляции ругнется если у вас все ресы подцепляны.
сделайте ард тока с этой view и мессагой и скомпилите в новый рес.
у меня всегда работало - даже на 573.
поробуйте объявить новую таблу с 1,2 полями.
Добавлено: 12 окт 2006, 11:56
DarkAngel27
Поменял имя таблицы в памяти на ASDLKJFHG, после чего форма заработала.
Но появилась новая проблема:
Код: Выделить всё
.{table 'tabl1.ASDLKJFHG'
.fields
tabl1.ASDLKJFHG.NAME tabl1.ASDLKJFHG.BARKOD
.endfields
^ ^
.}
Выдаются пустые значения (такое впечатление, что таблица в памяти заполнена пустыми записями), ставил message после update запись в таблице есть и правильная. Но при печати выводятся пустые строки, хотя их количество верное.
Что сделано не так?
Если в .fields выводить ASDLKJFHG.NAME ASDLKJFHG.BARKOD, то выводится последняя запись в таблице.
Добавлено: 13 окт 2006, 11:52
dp
а по моему
.fields
.endfields
должно быть до цикла
Код: Выделить всё
.fields
tabl1.ASDLKJFHG.NAME tabl1.ASDLKJFHG.BARKOD
.endfields
.{table 'tabl1.ASDLKJFHG'
^ ^
.}