| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
кусок кода:\ 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 секунды
DO UDPOD1 -----выдаёт ошибку на этой строке, код ошибки не помню... DO ZAPIS я подписал рядом, при вызове процедуры UDPOD1 |