Страница 1 из 1

Запрос, В чем ошибка?

Добавлено: 15 янв 2007, 11:54
Alexander
Исходник:

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

Interface test 'Test' Cyan;
   show at (,,20,20)
   table struct TableVidDocs(
      code : double
   )with index (Ind = code);

   table struct PickSchet(
      code       : string
   )with index (Ind = code);

   create view vMain
      var
         date_from,
         date_to    : Date  ;
         pPlanSchet : comp  ;
      as
         select
            katsopr.nrec    ,
            oborot.nrec
         from
            katsopr (readonly),
            oborot  (readonly),
            katpodr KatPodrFrom(readonly), katpodr KatPodrTo(readonly),
            KatNazna(readonly),
            BuhSchet(readonly),
            spsopr  (readonly),
            katusl  (readonly),
            katmc   (readonly)
         where((
                TableVidDocs.code  == katsopr.vidsopr
            and pPlanSchet         == BuhSchet.cPlansSch
            and PickSchet.code     == BuhSchet.Code
            and date_from         <<= katsopr.dsopr
            and date_to           >>= katsopr.dsopr

            and katsopr.nrec      /== oborot.csoprdoc
            and katsopr.vidsopr    == oborot.tidk

            and katsopr.nrec       == spsopr.csopr

            and katsopr.cpodrfrom  == KatPodrFrom.nrec
            and katsopr.cpodrto    == KatPodrTo.nrec
            and katsopr.cnazna     == KatNazna.nrec

            and spsopr.cmcusl      == katusl.nrec
            and spsopr.cmcusl      == katmc.nrec
         )) and(Oborot.SchetO = BuhSchet.schet and Oborot.SubOsSch = BuhSchet.subsch)
               order by katsopr.dsopr
            bounds bOborot
            //    pPlanSchet         == Oborot.cPlansSch

             BuhSchet.schet     == Oborot.SchetO
            and BuhSchet.subsch    == Oborot.SubOsSch
            and date_from         <<= Oborot.datob
            and date_to           >>= oborot.datob


         ;
   SCREEN scrMain;
      fields
         date_from Protect, PickButton;
         date_to   Protect, PickButton;
      buttons
         cmbtCreate;
         cmbtCancel;
<<
               Период с .@@@@@@@@@@ по .@@@@@@@@@@

           <.Сформировать.>      <.   Отмена   .>
>>
   end;

   //------------------------------ Begin InitReport  ------------------------------
   procedure InitReport;
   {
       //счета
       insert into PickSchet set PickSchet.code = '43'  ;
       insert into PickSchet set PickSchet.code = '10.9';
       insert into PickSchet set PickSchet.code = '21'  ;
       insert into PickSchet set PickSchet.code = '90'  ;
       insert into PickSchet set PickSchet.code = '0.8' ;
       //Виды документов
       insert into TableVidDocs set TableVidDocs.code = 502;

       set date_to   := Cur_Date;
       set Date_from := Sub_Months(Cur_Date, 4);
       if(coGetTune('FIN.USER.CPLANSSCH') <> 0)
          pPlanSchet := coGetTune('FIN.USER.CPLANSSCH');
       else
          pPlanSchet := coGetTune('KONSOLID.CPLANSSCH');
       if (pPlanSchet = 0){
          Message('Утеряна настройка на план счетов',0);
          Abort;
          Exit;
       }
   }
   //------------------------------ End InitReport ------------------------------
   //------------------------------ Begin CreateTables ------------------------------
   procedure CreateTables;
   {
      var tc : word;
      StartNewVisual (vtRotateVisual,  vfTimer,  '',1);
      SetVisualTitle ('Формирование отчета');
      SetVisualHeader('Выборка данных...'  );
    _loop TableVidDocs{
      _loop katsopr{
         _loop oborot{
            tc := tc + 1;
         }
      }
     }
      StopVisual('',0);
     Message(tc);
   }
   //------------------------------ End CreateTables ------------------------------
   handleEvent
      cmInit:{
         InitReport;
      }
      cmbtCreate:{
         CreateTables;
      }
      cmbtCancel:{
         Abort;
         CloseInterface(0);
      }
   end;
end.
//------------------------------ End Interface Test ------------------------------
не работает,
а если сделать так:

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

502 == katsopr.vidsopr
and '43' == BuhSchet.code
...
_loop katsopr{
   _loop oborot{
        tc := tc + 1;
    }
}
то работает! Но хочется в запросе использовать несколько видов документов и несколько счетов... В Чем ошибка???

Добавлено: 17 янв 2007, 12:14
поЧитатель
1. Попробуй изменить структуру
table struct TableVidDocs(
code : Word
)with index (Ind = code);
2. Не вижу:
_loop PickSchet{
_loop BuhSchet{
...
}
}
я бы внес эти изменения.
3. У себя не проверял, так что - если не пойдет, то пиши, не забывай.

Добавлено: 17 янв 2007, 14:29
Alexander
code как double специально делал, иначе ругается, мол 4 байта стр-ра дожна быть...
Лупы делал, не помогает... поэтому и задал вопрос :-)

Добавлено: 17 янв 2007, 15:52
Alexander
ошибка была в подцепке...
сделал так, заработало:

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

         where((
                tableviddocs.code  == katsopr.vidsopr
            and pPlanSchet         == BuhSchet.cPlansSch
            and BuhSchet.Code     /== pickSchet.code
            and date_from         <<= katsopr.dsopr
            and date_to           >>= katsopr.dsopr
            and Oborot.SchetO     /== BuhSchet.schet (noindex)
            and Oborot.SubOsSch   /== BuhSchet.subsch (noindex)
            and katsopr.nrec      /== oborot.csoprdoc
            and katsopr.vidsopr    == oborot.tidk

            and katsopr.nrec       == spsopr.csopr

            and katsopr.cpodrfrom  == KatPodrFrom.nrec
            and katsopr.cpodrto    == KatPodrTo.nrec
            and katsopr.cnazna     == KatNazna.nrec

            and spsopr.cmcusl      == katusl.nrec
            and spsopr.cmcusl      == katmc.nrec
         ))
...............

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

      _loop TableVidDocs{
         _loop katsopr{
            _loop oborot{
               _loop buhschet{
                  _loop pickschet{
                       ............
                  }
               }
            }
         }
      }