Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Foxpro/Clipper/Dbase > Ошибка в FoxPro : Do nesting to deep!?


Автор: Sazz 11.10.2012, 10:28
Пожалуйста помогите решить проблему, сам я в FoxPro новичок, пока не могу разобраться.( дело в том, что при выполнении программы выдаёт ошибку типа: Do nesting to deep, как я понимаю, имеется в виду, то что превышен уровень вложенности команды DO, которая у меня вызывает и выполняет процедуры, но уровень 32 не превышен, что делать??? Если игнорировать ошибку и запустить выполнение со второго раза всё работает, в чём дело помогите разобраться пожалуйста!!!(

Автор: Данкинг 11.10.2012, 10:38
Программу показывай. И желательно код ошибки (или её точное описание).

Автор: Sazz 11.10.2012, 10:52
Цитата(Sazz @ 11.10.2012,  10:28)
Пожалуйста помогите решить проблему, сам я в FoxPro новичок, пока не могу разобраться.( дело в том, что при выполнении программы выдаёт ошибку типа: Do nesting to deep, как я понимаю, имеется в виду, то что превышен уровень вложенности команды DO, которая у меня вызывает и выполняет процедуры, но уровень 32 не превышен, что делать??? Если игнорировать ошибку и запустить выполнение со второго раза всё работает, в чём дело помогите разобраться пожалуйста!!!(

кусок кода:\




SELE 6
GO TOP
STORE 0 TO KOLSTR,J23,J24,J31,J231,J241
DO WHILE .NOT. EOF()
   IF GR23='1'
      J23=J23+1
      M23(J23)=VO
   ENDIF
   IF GR24='1'
      J24=J24+1
      M24(J24)=VO
   ENDIF
   IF GR23='9'
      J231=J231+1
      M231(J231)=VO
   ENDIF
   IF GR24='9'
      J241=J241+1
      M241(J241)=VO
   ENDIF
   IF GR42='1'
      J31=J31+1
      M31(J31)=VO
   ENDIF
   if gr43='1'
      J31=J31+1
      m231(j31)=vo
   endif
   IF .NOT. EOF()
      SKIP
   ELSE
      EXIT
   ENDIF
ENDDO
sele 6
use &db.bz00033 index &db.bz33

SELE 10
USE &DB.BZ0006
INDEX ON STR(TAB_NOM,5)+DATO TO &DB.BZ0006

SELE 1
GO TOP

DO WHILE .NOT. EOF()
   TN=TAB_NOM
   @ 23,5 SAY TAB_NOM pict '99999'
   I=VAL(SUBSTR(DATA_SCHET,1,2))
   data_uvc=substr(dtoc(data_uv),1,2)+substr(dtoc(data_uv),4,2)+substr(dtoc(data_uv),7,2)
   data_prc=substr(dtoc(data_pr),1,2)+substr(dtoc(data_pr),4,2)+substr(dtoc(data_pr),7,2)

   IF DATA_UVC<>'      '
      GG=SUBSTR(DATA_UVC,5,2)
      IF SUBSTR(GG,1,1)='9'
         GODU='19'+GG
      ELSE
         GODU='20'+GG
      ENDIF
      IF VAL(GODU)<VAL(GODT)
         SELE 1
         IF .NOT. EOF()
            SKIP
         ELSE
            EXIT
         ENDIF
         LOOP
      ENDIF
   ENDIF

   SELE 8
   use &db.tabts202 index &db.tabts202
   SEEK TN
   STORE 0 TO KOL_D
   IF FOUND()
      KOL_D(1)=KOL01
      KOL_D(2)=KOL02
      KOL_D(3)=KOL03
      KOL_D(4)=KOL04
      KOL_D(5)=KOL05
      KOL_D(6)=KOL06
      KOL_D(7)=KOL07
      KOL_D(8)=KOL08
      KOL_D(9)=KOL09
      KOL_D(10)=KOL10
      KOL_D(11)=KOL11
      KOL_D(12)=KOL12
   ENDIF

   SELE 1
   KOL_D(I)=VAL(KOL_DET)

   I=I+1
   DO WHILE I<=12
      KOL_D(I)=0
      I=I+1
   ENDDO

   FAM=FIO
   STR=KSTR
   PRS=PR1
   KODT='  '
   PR_NAL=0
*if tn=11 .or. tn=14
*   ? tn, val(pr2), pr2
*   wait
*endif

   IF VAL(PR2)=1
      TABL='01'
      PRUD=PR2
      IF SUBSTR(DATA_PRC,5,2)=SUBSTR(DATA_SCHET,3,2)
         IL=VAL(SUBSTR(DATA_PRC,3,2))
      ELSE
         IL=1
      ENDIF
      IF SUBSTR(DATA_UVC,5,2)=SUBSTR(DATA_SCHET,3,2)
         ILL=VAL(SUBSTR(DATA_UVC,3,2))+2
         IF ILL>13
            ILL=13
         ENDIF
         IF ILL<=VAL(SUBSTR(DATA_SCHET,1,2))
            SELE 1
            IF .NOT. EOF()
               SKIP
            ELSE
               EXIT
            ENDIF
            LOOP
         ENDIF
      ELSE
         ILL=13
      ENDIF
      DO UDPOD1  -----выдаёт ошибку на этой строке, код ошибки не помню...
      DO ZAPIS
   ENDIF
   SELE 1
   IF VAL(PR2)>=2
      TABL='02'
      PRUD=PR2
      PR_NAL=VAL(PR2)
      DO UDPOD2
      DO ZAPIS
   ENDIF

   SELE 1
   IF .NOT. EOF()
      SKIP
   ELSE
      EXIT
   ENDIF
ENDDO

SET DEVICE TO SCREEN
SET STATUS OFF
SET PRINT OFF
SET EXACT ON
CLOSE ALL
RELEASE ALL
RETURN

****************  ПРОЦЕДУРЫ   ******************

PROC UDPOD1
     i=1
     do while i<=12
        prp(i)=prp1(i)
        i=i+1
     enddo

     I=1
     DO WHILE I<IL
        PRP(I)=0
        I=I+1
     ENDDO

     I=ILL
     DO WHILE I<=12
        prp(i)=0
        I=I+1
     ENDDO

     i=val(substr(data_schet,1,2))+1
     do while i<=12
        prp(i)=0
        i=i+1
     enddo

     SELE 3
     SEEK TN
     STORE 0 TO SUMMA, NAL, NALR, nalP, s_lgotas
     STORE 0 TO SUMMAP, s_lgota, summp, SUMMB,NALLP,S_LGOTAD,NALLB
     STORE '    ' TO DAT, DAT_POM

     DO WHILE TAB_NOM=TN
        I=VAL(SUBSTR(DATo,1,2))
        I23=1
        DO WHILE I23<=J23
           IF VO=M23(I23)
              IF SUBSTR(DATO,3,2)=SUBSTR(DATA_SCHET,3,2)
                 SUMMA(I)=SUMMA(I)+SUMZP
                 DAT(I)=DATR
              endif
              IF SUBSTR(DATO,3,2)=godp
                 SUMMp=SUMMp+SUMZP
              endif
              IF SUBSTR(DATO,3,2)=godB
                 SUMMB=SUMMB+SUMZP
              endif
              EXIT
           ENDIF
           I23=I23+1
        ENDDO

        I231=1
        DO WHILE I231<=J231
           IF VO=M231(I231)
              IF SUBSTR(DATR,3,2)=SUBSTR(DATA_SCHET,3,2)
                 SUMMA(I)=SUMMA(I)+SUMZP
                 DAT(I)=DATR
              endif
              EXIT
           ENDIF
           I231=I231+1
        ENDDO

        I31=1
        DO WHILE I31<=J31
           IF VO=M31(I31)
              SUMMAP(I)=SUMMAP(I)+SUMZP
              DAT_POM=DATR
              EXIT
           ENDIF
           I31=I31+1
        ENDDO
        IF .NOT. EOF()
           SKIP
        ELSE
           EXIT
        ENDIF
     ENDDO

     I=VAL(SUBSTR(DATA_SCHET,1,2))
     DAT(I)=DATA_SCHET
     SELE 4
     SEEK STR(TN,5)
     DO WHILE TAB_NOM=TN
        IF SUBSTR(DATO,3,2)=SUBSTR(DATA_SCHET,3,2)
           I23=1
           DO WHILE I23<=J23
              IF VO=M23(I23)
                 I=VAL(SUBSTR(DATO,1,2))
                 SUMMA(I)=SUMMA(I)+SUMZP
                 EXIT
              ENDIF
              I23=I23+1
           ENDDO
           I31=1
           DO WHILE I31<=J31
              IF VO=M31(I31)
                 I=VAL(SUBSTR(DATO,1,2))
                 SUMMAP(I)=SUMMAP(I)+SUMZP
                 EXIT
              ENDIF
              I31=I31+1
           ENDDO
        ENDIF

        IF SUBSTR(DATR,3,2)=SUBSTR(DATA_SCHET,3,2)
           I231=1
           DO WHILE I231<=J231
              IF VO=M231(I231)
                 I=VAL(SUBSTR(DATR,1,2))
                 SUMMA(I)=SUMMA(I)+SUMZP
                 EXIT
              ENDIF
              I231=I231+1
           ENDDO
        ENDIF

        IF SUBSTR(DATO,3,2)=GODB
           I23=1
           DO WHILE I23<=J23
              IF VO=M23(I23)
                 SUMMB=SUMMB+SUMZP
                 EXIT
              ENDIF
              I23=I23+1
           ENDDO
        ENDIF

        IF SUBSTR(DATO,3,2)=GODp .and. substr(datr,3,2)=substr(data_schet,3,2)
           I23=1
           DO WHILE I23<=J23
              IF VO=M23(I23)
                 SUMMp=SUMMp+SUMZP
                 EXIT
              ENDIF
              I23=I23+1
           ENDDO
        ENDIF

        IF .NOT. EOF()
           SKIP
        ELSE
           EXIT
        ENDIF
     ENDDO

     SELE 10
     SEEK STR(TN,5)
     DO WHILE TAB_NOM=TN
        IF SUBSTR(DATR,3,2)=SUBSTR(DATA_SCHET,3,2)
           I=VAL(SUBSTR(DATR,1,2))
           SUMMAP(I)=SUMMAP(I)+SUMZP
        ENDIF
        IF .NOT. EOF()
           SKIP
        ELSE
           EXIT
        ENDIF
     ENDDO

     SELE 7
     SEEK TN
     DO WHILE TAB_NOM=TN
        IF SUBSTR(DATR,3,2)=SUBSTR(DATA_SCHET,3,2)
           I=VAL(SUBSTR(DATR,1,2))
           J=VAL(SUBSTR(DATA_SCHET,1,2))
           SUMMAP(I)=SUMMAP(I)+SUMPOM
           SUMMA(I)=SUMMA(I)+SUMZP
           NAL(i)=NAL(i)+SUMNAL
           s_lgota(i)=s_lgota(i)+SUMLGOT
           s_lgotaD(i)=s_lgotaD(i)+SUMLGOTD
           s_lgotas(i)=s_lgotas(i)+SUMLGOTs
        ENDIF
        IF .NOT. EOF()
           SKIP
        ELSE
           EXIT
        ENDIF
     ENDDO

     SELE 6
     SEEK STR(TN,5)
     J=VAL(SUBSTR(DATA_SCHET,1,2))
     DO WHILE TAB_NOM=TN
        IF VO=VV.AND. SUBSTR(DATO,3,2)=SUBSTR(DATA_SCHET,3,2)
           i=val(substr(dato,1,2))
           NAL(i)=NAL(i)+SUMZP
        ENDIF
        IF VO=VV.AND. SUBSTR(DATO,3,2)=godp.AND. SUBSTR(DATR,3,2)=SUBSTR(DATA_SCHET,3,2)
           NALLp=NALLp+SUMZP
        ENDIF
        IF VO=VV.AND. SUBSTR(DATO,3,2)=godB.AND. SUBSTR(DATR,3,2)=SUBSTR(DATA_SCHET,3,2)
           NALLB=NALLB+SUMZP
        ENDIF
        IF .NOT. EOF()
           SKIP
        ELSE
           EXIT
        ENDIF
     ENDDO

     SELE 5
     SEEK STR(TN,5)
     DO WHILE TAB_NOM=TN
        IF DATO=DATA_SCHET.AND.VO=VV
           NAL(J)=NAL(J)+SUMZP
        ENDIF
        IF .NOT. EOF()
           SKIP
        ELSE
           EXIT
        ENDIF
     ENDDO

     I=1
     DO WHILE I<=12
        IF SUMMAP(I)<>0
           DAT_POM=RIGHT('00'+LTRIM(STR(I)),2)+SUBSTR(DATA_SCHET,3,2)
        ENDIF
        I=I+1
     ENDDO
     DO RASNAL
RETURN

Автор: Данкинг 11.10.2012, 11:24
А ошибка-то на каком месте вылезает?

Автор: Sazz 11.10.2012, 11:26
DO UDPOD1  -----выдаёт ошибку на этой строке, код ошибки не помню...
      DO ZAPIS
я подписал рядом, при вызове процедуры UDPOD1

Добавлено через 42 секунды
Цитата(Sazz @ 11.10.2012,  10:28)
Пожалуйста помогите решить проблему, сам я в FoxPro новичок, пока не могу разобраться.( дело в том, что при выполнении программы выдаёт ошибку типа: Do nesting to deep, как я понимаю, имеется в виду, то что превышен уровень вложенности команды DO, которая у меня вызывает и выполняет процедуры, но уровень 32 не превышен, что делать??? Если игнорировать ошибку и запустить выполнение со второго раза всё работает, в чём дело помогите разобраться пожалуйста!!!(

DO UDPOD1  -----выдаёт ошибку на этой строке, код ошибки не помню...
      DO ZAPIS
я подписал рядом, при вызове процедуры UDPOD1 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)