Senhores, Bom Dia.
Fiz o ponto de entrada SF1100I para gerar um endereçamento dos meus produtos, conforme abaixo:
Mas estou achando algo bem estranho, no meu While, enquanto estou percorrendo uma nota com diversos itens, no primeiro item ele posiciona corretamente, quando volta para o While para executar o próximo item da nota, já volta desposicionado em outra nota.
O que pode ser isso galera?
Valeu
#include "PROTHEUS.CH"
#include "TOPCONN.CH"
User Function SF1100I()
Local _area := FwGetArea()
Local _aSD1 := SD1->(FwGetArea())
Local _aSDA := SDA->(FwGetArea())
Local _aSDB := SDB->(FwGetArea())
Local _aItensSDB := {}
Local aCabSDA := {}
Local aItSDB := {}
Local cprod := ""
Private lMsErroAuto := .F.
Private lMsHelpAuto := .F.
//Posicino na SD1 para buscar os ítens da Nota
DbSelectArea("SD1")
DbSetOrder(1) // D1_FILIAL, D1_DOC, D1_SERIE, D1_FORNECE, D1_LOJA, D1_COD, D1_ITEM, R_E_C_N_O_, D_E_L_E_T_
DbGoTop()
If DbSeeK(xFilial("SF1") + SF1->F1_DOC + SF1->F1_SERIE + SF1->F1_FORNECE + SF1->F1_LOJA)
//Enquanto não for o final de arquivo, percorro todos os itens da nota, para capturar os dados necessário para oendereçamento.
While !Eof() .and. xFilial("SF1")+ SF1->F1_DOC + SF1->F1_SERIE + SF1->F1_FORNECE + SF1->F1_LOJA == SD1->D1_FILIAL + SD1->D1_DOC + SD1->D1_SERIE + SD1->D1_FORNECE + SD1->D1_LOJA
If SD1->D1_CF <> '6907' .AND. SD1->D1_FORNECE <> '18958970'
cprod:=Alltrim(SD1->D1_COD)
DbSelectArea("SB1")
DbSetOrder(1)
If DbSeeK(xFilial("SD1")+SD1->D1_COD)
If SB1->B1_LOCALIZ=="S"
DbSelectArea("SDA")
DbSetOrder(1)//DA_FILIAL, DA_PRODUTO, DA_LOCAL, DA_NUMSEQ, DA_DOC, DA_SERIE, DA_CLIFOR, DA_LOJA, R_E_C_N_O_, D_E_L_E_T_
If DbSeeK(xFilial("SDA") + SD1->D1_COD + SD1->D1_LOCAL + SD1->D1_NUMSEQ + SD1->D1_DOC + SD1->D1_SERIE + SD1->D1_FORNECE + SD1->D1_LOJA)
If SDA->DA_SALDO > 0
aAdd(aItSDB,{"DB_ITEM" ,SD1->D1_ITEM,Nil})
aAdd(aItSDB,{"DB_ESTORNO"," " ,Nil})
aAdd(aItSDB,{"DB_PRODUTO",SD1->D1_COD ,Nil})
aAdd(aItSDB,{"DB_LOCAL" ,SDA->DA_LOCAL,Nil})
aAdd(aItSDB,{"DB_LOCALIZ" ,"LOTETESTE" ,Nil})
aAdd(aItSDB,{"DB_DATA" ,date() ,Nil})
aAdd(aItSDB,{"DB_QUANT" ,SDA->DA_SALDO,Nil})
If !empty(Alltrim(SDA->DA_LOTECTL))
aAdd(aItSDB,{"DB_LOTECTL", SDA->DA_LOTECTL,NIL})
Endif
aadd(_aItensSDB,aitSDB)
aCabSDA := {{"DA_FILIAL" ,SDA->DA_FILIAL ,Nil},;
{"DA_PRODUTO" ,SDA->DA_PRODUTO ,Nil},;
{"DA_LOCAL" ,SDA->DA_LOCAL ,Nil},;
{"DA_DOC" ,SDA->DA_DOC ,Nil},;
{"DA_SERIE" ,SDA->DA_SERIE ,Nil},;
{"DA_CLIFOR" ,SDA->DA_CLIFOR ,Nil},;
{"DA_LOJA" ,SDA->DA_LOJA ,Nil},;
{"DA_NUMSEQ" ,SDA->DA_NUMSEQ ,Nil}}
DbSelectArea("SBE")
DbSetOrder(1)//BE_FILIAL+BE_LOCAL+BE_LOCALIZ
If !DbSeeK(xFilial("SBE")+SDA->DA_LOCAL+"LOTETESTE")
RecLock("SBE",.t.)
SBE->BE_FILIAL := xFilial("SBE")
SBE->BE_LOCAL := SDA->DA_LOCAL
SBE->BE_LOCALIZ := "LOTETESTE"
SBE->BE_DESCRIC := "LOTETESTE"
MsUnlock()
Endif
If Len(aCabSDA)>0 .and. len(_aItensSDB)>0
MATA265( aCabSDA, _aItensSDB, 3) //Distribui
If lMsErroAuto
MostraErro()
DisarmTransaction()
Endif
Endif//If do len(aCabSDA)
Else
_A := "Else DO DA_SALDO"
Endif //If DO DA_SALDO
Else
_A := "Else DO SDA"
Endif //If DA SDA
Else
_A := "Else DO B1_LOCALIZ"
Endif //If do B1_LOCALIZ E D1_LOCAL
Else
_A := "Else DO SB1"
Endif //If DO SB1
Endif
SD1->(Dbskip())
enddo
Endif //If DO SD1
FwRestArea(_area)
FwRestArea(_aSDA)
FwRestArea(_aSDB)
FwRestArea(_aSD1)
Return