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
compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags advpl ou faça a sua própria pergunta.