Помогите плз.
БЭСТ4+ 12.01 SP73
Нужно печатать фискальный чек из накладной (Товары. Готовая продукция)
Написали программу, которая в XML файл пишет данные для фискального принтера. Программа запускается из расходных накладных через Ctrl+F5. Вот текст программы
PRIVATE FB,BUFF,nCena,nNDS,nVO,S,Sm,nKol,Skidka,Fl,xml_file,stroka
nCena:= 0
Fl:=0
nNDS:= " "
nVO:=" "
MPantner:=" "
Skidka:=0
k1:=0
xml_file:="c:\ArtSoft\04640020292909J1201005100000000110720140464.xml"
fb:=fcreate(xml_file)
DBPUSH("MDOCM","MDOCM","",{"UPPER(Sclad+Vid+Type+CodeDoc+NumDoc)",MDOC->(UPPER(Sclad+Vid+Type+CodeDoc+NumDoc))})
MDOC->(Reclock())
IF (MDOC->PAYTYPE = "ФискЧек") .and. (!EMPTY(MDOC->DATE0))
SayAndWait ("Чек по этой накладной уже пробит")
MDOC->PAYTYPE:= "ФискЧек"
MDOC->(F_DBUNLOCK())
DBPOP()
FCLOSE(FB)
ELSE
S:=0
PARTNER->(ordsetfocus("Partner"))
//Поиск контрагента по коду
PARTNER->(DBGOTOP())
DO WHILE ((PARTNER->(!EOF())) .AND. (PARTNER->CODE <> MDOC->AGENTCODE))
PARTNER->(DBSKIP())
ENDDO
BUFF:="Партнер - "+PARTNER->CODE_PR+CHR(13)+CHR(10)
FWRITE(FB,@BUFF,LEN(BUFF))
BUFF:="Партнер - "+PARTNER->SHORTNAME+CHR(13)+CHR(10)
FWRITE(FB,@BUFF,LEN(BUFF))
MLABEL->(ordsetfocus("MLabel"))
F_SETRELATION("MLABEL","UPPER(Grup+NNum)")
MGRUP->(ordsetfocus("MGrup"))
F_SETRELATION("MGRUP","UPPER(Grup)")
// Определяем вид оплаты
nVO:=IF(MDOC->CODEOPER="Г011","3","0")
BUFF:="Партнер - "+PARTNER->ORGNAME+CHR(13)+CHR(10)
FWRITE(FB,@BUFF,LEN(BUFF))
//Распечатываем в заголовке чека номер накладной
BUFF:="P;Чек N "+ALLTRIM(MDOC->NUMDOC)+";"+CHR(13)+CHR(10)
FWRITE(FB,@BUFF,LEN(BUFF))
DO WHILE !EOF()
nCena:= ROUND(IF(MDOC->L_NDS,MDOCM->CENAOUT,(MDOCM->SUMOUTR+MDOCM->SUM_NDS)/KOL),2)
nNDS:= IF(MGRUP->NDS=20,"2","3")
nKol:= MDOCM->KOL
IF MDOCM->CENAOUT=0
Fl:=1
ENDIF
BUFF:="S; ;"+ALLTRIM(SUBSTR(UPPER(MLABEL->NAME),1,20))+";"+ALLTRIM(STR(nCena,9,2))+";"
BUFF:=BUFF+ALLTRIM(STR(MDOCM->KOL,8,3))+";"+nNDS+";;;"+CHR(13)+CHR(10)
FWRITE(FB,@BUFF,LEN(BUFF))
DBSKIP()
S:=S+nCena*nKol
ENDDO
//Закритие чека
// BUFF:= "T; ;;;"+nVO+";"+ALLTRIM(STR(Sm,8,2))+";"
BUFF:= "T;0;"+nVO+";"+CHR(13)+CHR(10)
FWRITE(FB,@BUFF,LEN(BUFF))
BUFF:= "E;"
FWRITE(FB,@BUFF,LEN(BUFF))
IF Fl=0
MDOC->SUMMA0:= IF(MDOC->L_NDS,MDOC->SUMMA,MDOC->SUMMA+MDOC->SUM_NDS)
MDOC->PAYTYPE:= "Налог_Н"
MDOC->DATE0:= DATE()
MDOC->(F_DBUNLOCK())
FCLOSE(FB)
ELSE
FCLOSE(FB)
ENDIF
DBPOP()
ENDIF
Все прекрасно работает, чек формируется.
Но... После формирования чека, заходим в накладную, и при попытке вызова справочника партнеров (Partner) получаем ошибку "ERROR DBFCDX/1201 Файл не индексирован". Нужно только выйти из модуля, и зайти заново - тогда все нормально.
Помогите пожалуйста, куда пропадает индекс?
БЭСТ4+ 12.01 SP73
Нужно печатать фискальный чек из накладной (Товары. Готовая продукция)
Написали программу, которая в XML файл пишет данные для фискального принтера. Программа запускается из расходных накладных через Ctrl+F5. Вот текст программы
PRIVATE FB,BUFF,nCena,nNDS,nVO,S,Sm,nKol,Skidka,Fl,xml_file,stroka
nCena:= 0
Fl:=0
nNDS:= " "
nVO:=" "
MPantner:=" "
Skidka:=0
k1:=0
xml_file:="c:\ArtSoft\04640020292909J1201005100000000110720140464.xml"
fb:=fcreate(xml_file)
DBPUSH("MDOCM","MDOCM","",{"UPPER(Sclad+Vid+Type+CodeDoc+NumDoc)",MDOC->(UPPER(Sclad+Vid+Type+CodeDoc+NumDoc))})
MDOC->(Reclock())
IF (MDOC->PAYTYPE = "ФискЧек") .and. (!EMPTY(MDOC->DATE0))
SayAndWait ("Чек по этой накладной уже пробит")
MDOC->PAYTYPE:= "ФискЧек"
MDOC->(F_DBUNLOCK())
DBPOP()
FCLOSE(FB)
ELSE
S:=0
PARTNER->(ordsetfocus("Partner"))
//Поиск контрагента по коду
PARTNER->(DBGOTOP())
DO WHILE ((PARTNER->(!EOF())) .AND. (PARTNER->CODE <> MDOC->AGENTCODE))
PARTNER->(DBSKIP())
ENDDO
BUFF:="Партнер - "+PARTNER->CODE_PR+CHR(13)+CHR(10)
FWRITE(FB,@BUFF,LEN(BUFF))
BUFF:="Партнер - "+PARTNER->SHORTNAME+CHR(13)+CHR(10)
FWRITE(FB,@BUFF,LEN(BUFF))
MLABEL->(ordsetfocus("MLabel"))
F_SETRELATION("MLABEL","UPPER(Grup+NNum)")
MGRUP->(ordsetfocus("MGrup"))
F_SETRELATION("MGRUP","UPPER(Grup)")
// Определяем вид оплаты
nVO:=IF(MDOC->CODEOPER="Г011","3","0")
BUFF:="Партнер - "+PARTNER->ORGNAME+CHR(13)+CHR(10)
FWRITE(FB,@BUFF,LEN(BUFF))
//Распечатываем в заголовке чека номер накладной
BUFF:="P;Чек N "+ALLTRIM(MDOC->NUMDOC)+";"+CHR(13)+CHR(10)
FWRITE(FB,@BUFF,LEN(BUFF))
DO WHILE !EOF()
nCena:= ROUND(IF(MDOC->L_NDS,MDOCM->CENAOUT,(MDOCM->SUMOUTR+MDOCM->SUM_NDS)/KOL),2)
nNDS:= IF(MGRUP->NDS=20,"2","3")
nKol:= MDOCM->KOL
IF MDOCM->CENAOUT=0
Fl:=1
ENDIF
BUFF:="S; ;"+ALLTRIM(SUBSTR(UPPER(MLABEL->NAME),1,20))+";"+ALLTRIM(STR(nCena,9,2))+";"
BUFF:=BUFF+ALLTRIM(STR(MDOCM->KOL,8,3))+";"+nNDS+";;;"+CHR(13)+CHR(10)
FWRITE(FB,@BUFF,LEN(BUFF))
DBSKIP()
S:=S+nCena*nKol
ENDDO
//Закритие чека
// BUFF:= "T; ;;;"+nVO+";"+ALLTRIM(STR(Sm,8,2))+";"
BUFF:= "T;0;"+nVO+";"+CHR(13)+CHR(10)
FWRITE(FB,@BUFF,LEN(BUFF))
BUFF:= "E;"
FWRITE(FB,@BUFF,LEN(BUFF))
IF Fl=0
MDOC->SUMMA0:= IF(MDOC->L_NDS,MDOC->SUMMA,MDOC->SUMMA+MDOC->SUM_NDS)
MDOC->PAYTYPE:= "Налог_Н"
MDOC->DATE0:= DATE()
MDOC->(F_DBUNLOCK())
FCLOSE(FB)
ELSE
FCLOSE(FB)
ENDIF
DBPOP()
ENDIF
Все прекрасно работает, чек формируется.
Но... После формирования чека, заходим в накладную, и при попытке вызова справочника партнеров (Partner) получаем ошибку "ERROR DBFCDX/1201 Файл не индексирован". Нужно только выйти из модуля, и зайти заново - тогда все нормально.
Помогите пожалуйста, куда пропадает индекс?