Versão atual:

Ponto de Entrada SF1100I - Ajuda

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

Versão (1):

Ver a versão formatada

Ponto de Entrada SF1100I - Ajuda

Comentário

new question