Как вывести данные из Таблицы в Памяти в LinkForm'е

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

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

DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Как вывести данные из Таблицы в Памяти в LinkForm'е

Сообщение 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.
.}
Как далее можно организовать цикл по Таблице в Памяти и вывести из неё все необходимые данные?
Последний раз редактировалось DarkAngel27 11 окт 2006, 16:44, всего редактировалось 1 раз.
dp
Местный житель
Сообщения: 216
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Беларусь, Минск
Контактная информация:

Сообщение dp »

абсолютно не понятно какая таблица и в какой памяти имеется в виду...
dP
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

во вьюхе надо указать в секции фром имя своей таблицы временной, наприме tTable

.fields
table.tTable.field1
table.tTable.field2
.endfields
.{Table 'tabl.tTable'
^ ^
.}
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

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

Сообщение edward_K »

logstrtofile или message вам поможет :(
а вообще хотите ответа выкладывайте всю форму, а не ее фрагменты.
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение 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
Vek
Постоянный гость
Сообщения: 74
Зарегистрирован: 16 фев 2006, 13:11

Сообщение Vek »

случайно не забыли в файле проекта таблицу table_in_mem описать?

что-то типа:

table struct table_in_mem (
...
)
with index (
...
)
;

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

Сообщение 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 здесь не покатит, так есть данные с другой вьюхи(тогда точно такая мессага и будет)
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »

2. Спасибо за совет.
3. Вставил Message. В итоге ошибка выскачила до появления сообщения.
4. Сделано так исходя из того, что: если такого индекса нету, то мы вставляем запись, а если он есть, то только делаем update строки.

To Vek
Не забыл.
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение 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 
То программа отработает нормально...
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

ну попробуйте оставить тока
.Create view tabl1 as select table_in_mem.*
from table_in_mem
;
мне вообще не нравиться table_in_mem - какое то оно не уникальное
может с другим ресом пересеклось?
поменяйте имя таблы.
и
If insert in table_in_mem<>tsOK
все таки неправильная конструкция.
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »

1. Пробовал, та же ошибка.
2. Имя таблицы менял, та же ошибка (На сколько помню, если в ресурсе таблицы с одним и тем же именем встретятся, то компелятор выдаст ошибку)
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

при компиляции ругнется если у вас все ресы подцепляны.
сделайте ард тока с этой view и мессагой и скомпилите в новый рес.
у меня всегда работало - даже на 573.
поробуйте объявить новую таблу с 1,2 полями.
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »

Поменял имя таблицы в памяти на ASDLKJFHG, после чего форма заработала.
Но появилась новая проблема:

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

.{table 'tabl1.ASDLKJFHG'
.fields
        tabl1.ASDLKJFHG.NAME tabl1.ASDLKJFHG.BARKOD
.endfields
^ ^
.}
Выдаются пустые значения (такое впечатление, что таблица в памяти заполнена пустыми записями), ставил message после update запись в таблице есть и правильная. Но при печати выводятся пустые строки, хотя их количество верное.
Что сделано не так?

Если в .fields выводить ASDLKJFHG.NAME ASDLKJFHG.BARKOD, то выводится последняя запись в таблице.
dp
Местный житель
Сообщения: 216
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Беларусь, Минск
Контактная информация:

Сообщение dp »

а по моему
.fields
.endfields
должно быть до цикла

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

.fields 
        tabl1.ASDLKJFHG.NAME tabl1.ASDLKJFHG.BARKOD 
.endfields 
.{table 'tabl1.ASDLKJFHG' 
^ ^ 
.} 

dP
Ответить