Работа с таблицами в памяти. Ошибка при группировке

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
Hershy
рег.отделение
Сообщения: 64
Зарегистрирован: Вт, 03/03/2009 07:53
Имя Фамилия: Николай Воронцов
Откуда: Галактика-Урал
Контактная информация:

Работа с таблицами в памяти. Ошибка при группировке

Сообщение Hershy »

Добрый день!

Вот, предлагаю посмотреть такой интерфейс

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

//--------------------------------------------------------------------------------------------------------
TABLE STRUCT LOCAL MTMARK ""(
  NREC      : COMP
, NAMEKLASS : STRING
, NAMEKLVAL : STRING
, COKLVAL   : COMP
)
WITH INDEX
(
    MT1 = NREC(surrogate),
    MT2 = NAMEKLASS+NAMEKLVAL
);
TABLE STRUCT LOCAL MTPAY "Получение, платежи"(
  NREC       : COMP
, CMTMARK    : COMP
, PTYPE      : WORD "0 - Получение, 1 - Оплата"
, SUMMA      : DOUBLE
, COVAL      : COMP
)
WITH INDEX
(
    MT11 = NREC(surrogate),
    MT33 = COVAL,
    MT44 = PTYPE,
    MT55 = CMTMARK+COVAL
);
TABLE STRUCT LOCAL ttITOGO "Итого по"(
  NREC       : COMP
, SUMMA      : DOUBLE
, COVAL      : COMP
)
WITH INDEX
(
    tt111 = NREC(surrogate, unique)
);
//--------------------------------------------------------------------------------------------------------
Interface iKREDITHISTORY, CYAN;
    Show at(60,10,120,20);

    CREATE VIEW V1 as
    SELECT
        *
    FROM
        MTMARK,
        MTPAY,
        ttITOGO
    ;
    
    HandleEvent
        cmInit:{
            insert MTMARK SET NAMEKLASS := 'Долгосрочный', NAMEKLVAL := 'EUR', COKLVAL   := 2;
            insert MTPAY SET CMTMARK:=MTMARK.NREC, PTYPE:=0, SUMMA:=10000, COVAL:=2;
            insert MTMARK SET NAMEKLASS := 'Долгосрочный', NAMEKLVAL := 'USD', COKLVAL:=4;
            insert MTPAY SET CMTMARK:=MTMARK.NREC, PTYPE:=0, SUMMA:=40000, COVAL:=4;
            inser t MTPAY SET CMTMARK:=MTMARK.NREC, PTYPE:=1, SUMMA:=10000, COVAL:=4;
            PUTTABLETODBF(#MTMARK, 'MTMARK.dbf',ptfFullTable);
            PUTTABLETODBF(#MTPAY, 'MTPAY.dbf',ptfFullTable);
            
            _loop MTMARK ORDERED BY MTMARK.NAMEKLASS, MTMARK.NAMEKLVAL {
                groupBy g1 : MTMARK.NAMEKLASS {
                    var ins : LONGINT;
                    if((ins := insert ttITOGO set ttITOGO.COVAL := MTMARK.COKLVAL) <> 0){
                        message('Ошибка '+ins+'! при вставке в ttITOGO');
                    }else{
                        message('Вставка '+MTMARK.NAMEKLVAL+', ttITOGO.NREC = '+ttITOGO.NREC+', ttITOGO.COVAL = '+ttITOGO.COVAL);
                    }
                    PUTTABLETODBF(#ttITOGO, ttITOGO.NREC+'ttITOGO.dbf',ptfFullTable);
                    groupby g2 : MTMARK.NAMEKLVAL {
                        _loop MTPAY WHERE ((MTMARK.NREC == MTPAY.CMTMARK)) {
                            var upd : LONGINT;
                            if((upd := update current ttITOGO SET ttITOGO.SUMMA := ttITOGO.SUMMA + MTPAY.SUMMA) <> 0){
                                message('Ошибка '+upd+'! при обновлении в ttITOGO');
                            }else{
                                message('Обновление '+MTMARK.NAMEKLVAL+', SUMMA = '+ttITOGO.SUMMA);
                            }
                        }
                    }
                }
                PUTTABLETODBF(#ttITOGO, 'ttITOGO.dbf',ptfFullTable);
                _loop ttITOGO {
                    message('Выгрузка '+ttITOGO.COVAL);
                }
                delete ALL ttITOGO;
            }
            Abort;
        };
    End; //HandleEvent
End.
Меня интересует что происходит с таблице ttITOGO, почему в строке

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

PUTTABLETODBF(#ttITOGO, 'ttITOGO.dbf',ptfFullTable);
файл создается только с заголовком, что означает, что таблица пустая, хотя сообщения о вставке проходят.

Голову сломал
Нужно бы смайл поставить такой
Аватара пользователя
Evchic
партнер
Сообщения: 88
Зарегистрирован: Пн, 17/09/2007 07:57
Имя Фамилия: Евгений Ильин
Откуда: Галактика ЮГ г.Ростов-на-Дону
Контактная информация:

Сообщение Evchic »

Попробуй
V1.PUTTABLETODBF(#ttITOGO, 'ttITOGO.dbf',ptfFullTable);
Hershy
рег.отделение
Сообщения: 64
Зарегистрирован: Вт, 03/03/2009 07:53
Имя Фамилия: Николай Воронцов
Откуда: Галактика-Урал
Контактная информация:

Сообщение Hershy »

спасибо, но
ничего не изменилось

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

V1.PUTTABLETODBF(#ttITOGO, 'ttITOGO.dbf',ptfFullTable);


так и возвращает пустую таблицу, и

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

                V1._loop ttITOGO { 
                    message('Выгрузка '+ttITOGO.COVAL); 
                }


ни одной записи не проходит

Что делать, кто поможет?
Gera
топ-софт
Сообщения: 97
Зарегистрирован: Пн, 24/09/2007 17:53
Имя Фамилия: Юрий Герман
Откуда: ТопСофт
Контактная информация:

Сообщение Gera »

Похоже, что то не так с порядком выполнения операторов.
Зарегистрируйте проблему в ПИР.
Ответить