Transferência Múltipla CSV

Ao realizar a transferência de um produto para outro, aparece o help a260local com a seguinte mensagem "O armazém informado como destino não existe para este produto". Porém, ao fazer transferência múltipla através do ESTOQUE/CUSTOS. Não da erro. Segue o código da rotina que está sendo desenvolvida.

#INCLUDE "Protheus.ch"
#INCLUDE "FileIo.ch"
#INCLUDE "RwMake.ch"

/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaÉÍÍÍÍÍÍÍÍÍÍNÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍNÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍNÍÍÍÍÍÍÍÍÍÍÍÍÍtaa
aasPrograma  | atcest001   | Autor | Arthur             | Data |  13/04/2017 saa
aaEÍÍÍÍÍÍÍÍÍÍRÍÍÍÍÍÍÍÍÍÍEÍÍÍÍÍÍÍDÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍEÍÍÍÍÍÍDÍÍÍÍÍÍÍÍÍÍÍÍÍšaa
aasDescricao | Rotina de importacao movimentos estoque                      saa
aaEÍÍÍÍÍÍÍÍÍÍRÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍšaa

http://tdn.totvs.com/pages/releaseview.action;jsessionid=4145137410B923499C30E609F95E1723?pageId=36308382
/*/

User Function  MyMata261()
    //Local nn
     aAuto := {}
     aLinha := {}
    Private aPerg       := {}
    // Arthur - 29/08/2019
    // Private cPerg       := PadR("atcest001", Len(SX1->X1_GRUPO),"")
    Private cPerg       := "MyMata261"

    /*aAdd(         aPerg , {         "01", "Arquivo :"      , "mv_ch1", "C", 090 , 0 ,"MV_PAR01","G" ,"DIR", "  ","  "," ","   ","    "  ,  "",""      } )

    DbSelectArea("SX1")
    DbSetOrder(1)
    For nn := 1 to Len( aPerg )
        If !DbSeek(cPerg + aPerg[nn,1] )    
            RecLock("SX1",.T.)
            Replace ;
            X1_GRUPO   With cPerg       , X1_ORDEM   With aPerg[nn,01],;
            X1_PERGUNT With aPerg[nn,02], X1_VARIAVL With aPerg[nn,03],;
            X1_TIPO    With aPerg[nn,04], X1_TAMANHO With aPerg[nn,05],;
            X1_DECIMAL With aPerg[nn,06], X1_VAR01   With aPerg[nn,07],;
            X1_GSC     With aPerg[nn,08], X1_F3      With aPerg[nn,09],;
            X1_Def01   With aPerg[nn,10], X1_Def02   With aPerg[nn,11],;
            X1_Def03   With aPerg[nn,12], X1_Def04   With aPerg[nn,13],;
            X1_Def05   With aPerg[nn,14], X1_Valid   With aPerg[nn,15],;
            X1_Picture   With aPerg[nn,16]
            MsUnlock()
        End
    Next*/

    Pergunte(cPerg,.F.)

    cCadastro := OemtoAnsi("Importação para estoque...")
    aSays      := {}
    aButtons  := {}

    AADD(aSays,OemToAnsi("Esta rotina irá ler arquivo .csv para importar os lancamentos para estoque."))

    AADD(aButtons, { 5,.T.,{|| Pergunte(cPerg,.T. )}})
    AADD(aButtons, { 1,.T.,{|o| Processa({||(learquivo(),FechaBatch())}) }})
    AADD(aButtons, { 2,.T.,{|o| FechaBatch() }} )

    FormBatch( cCadastro, aSays, aButtons )

Return .T. 


Static Function LeArquivo()  

    //Local _dDataCont  := CTOD("")
    //Local cHistCompl  := ""
    //Local nZ          := 0
    Local aDados      := {}
    Local aItem       := {}
    Local AMensagem   := ""
    Local nOpcAuto := 3
    Local nX 

    //Cabecalho a Incluir
    cDocumen := GetSxeNum("SD3","D3_DOC")
    aadd(aAuto,{cDocumen,dDataBase}) //Cabecalho

    If    Empty(MV_PAR01)
        Iw_MsgBox("Parâmetros Incorretos", "Atenção!", "INFO")
        Return(Nil)

    EndIf       

    //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    //³ Inicia Leitura do arquivo                ³'
    //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    //Prepare Environment EMPRESA '01' FILIAL "00" MODULO 'EST' TABL'ES 'SD3','SB1'

    DbSelectArea("SD3")

    //Quantos registros para ler
    ProcRegua(FT_FLASTREC())

    // Verifica se o esta Disponivel para uso, (abrir) //-1 Nao encontrou o arquivos na pasta destino
    If FT_FUse(MV_PAR01) <> -1

        FT_FGOTOP()    // Posiciona no Inicio do Arquivo, (vai para o topo do arquivo)

        //i_linha  := 0           
        lFirst   := .F.        
        nAt      := 0                           

        //Pular a linha do cabeçalho do arquivo.
        FT_FSKIP() // Proxima linha                          
        nImport  :=0

        While !FT_FEOF()
            nImport += 1
            IncProc("Lendo Arquivo (linha): " + Strzero( nImport,8))
            cLinha := AllTrim( FT_FREADLN() )
            //Alert(cLinha)    
            If !Empty(cLinha) .Or. Alltrim(cLinha) != ';;;;;;;;'
                aadd( aDados, {} ) // array de processamento dos registros do arquivo
                //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
                //| Monta as Colunas delimitados por ponto e virgula.|
                //RÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
                While Len(cLinha) > 0
                    If (nAt := At (";",cLinha)) > 0
                        cDado  := Left(cLinha,nAt-1)
                        cLinha := Substr(cLinha,nAt+1)
                    Else
                        cDado  := cLinha
                        cLinha := ""
                    EndIf
                    aadd( Atail(aDados), Alltrim(cDado) )
                EndDo
            EndIf
            lFirst := .f.
            FT_FSKIP() // Proxima linha
        EndDo
    Else 
        MsgAlert("Nao foi possivel abrir o arquivo informado nos parametros! " + MV_PAR01)            
    EndIF  

    Begin Transaction
        DbSelectArea("SD3")
        lMsErroAuto := .F.
        aItem := {}
        For nX = 1 to len(aDados)
        aLinha := {}
            IncProc("Inserindo linha: " + Strzero( nImport,4))
            nImport += 1  

            AMensagem := "Produto: " +aDados[nX,1]+ " Produto Destino: "+aDados[nX,6]


            //Origem
            aadd(aLinha,{"ITEM",'00'+cvaltochar(nX),Nil})
            aadd(aLinha,{"D3_COD",    aDados[nX,1], NIL}) //Cod Produto origem
            aadd(aLinha,{"D3_DESCRI", aDados[nX,2], NIL}) //descr produto origem
            aadd(aLinha,{"D3_UM",     aDados[nX,3], NIL}) //unidade medida origem
            aadd(aLinha,{"D3_LOCAL",  aDados[nX,4], NIL}) //armazem origem
            aadd(aLinha,{"D3_LOCALIZ", aDados[nX,5], NIL}) //Informar endereço origem    

            //Destino
            aadd(aLinha,{"D3_COD",    aDados[nX,6], NIL}) //cod produto destino
            aadd(aLinha,{"D3_DESCRI", aDados[nX,7], NIL}) //descr produto destino
            aadd(aLinha,{"D3_UM",     aDados[nX,8], NIL}) //unidade medida destino
            aadd(aLinha,{"D3_LOCAL",  aDados[nX,9], NIL}) //armazem destino
            aadd(aLinha,{"D3_LOCALIZ", aDados[nX,10], NIL}) //Informar endereço destino
            aadd(aLinha,{"D3_NUMSERI", "", Nil}) //Numero serie
            aadd(aLinha,{"D3_LOTECTL", "", Nil}) //Lote Origem
            aadd(aLinha,{"D3_NUMLOTE", "", Nil}) //sublote origem
            aadd(aLinha,{"D3_DTVALID", '', Nil}) //data validade
            aadd(aLinha,{"D3_POTENCI", 0, Nil}) // Potencia
            aadd(aLinha,{"D3_QUANT", aDados[nX,11], NIL}) //Quantidade
            aadd(aLinha,{"D3_QTSEGUM", 0, Nil}) //Seg unidade medida
            aadd(aLinha,{"D3_ESTORNO", "", Nil}) //Estorno 
            aadd(aLinha,{"D3_NUMSEQ", "", Nil}) // Numero sequencia D3_NUMSEQ
            aadd(aLinha,{"D3_LOTECTL", "", Nil}) //Lote destino
            aadd(aLinha,{"D3_NUMLOTE", "", Nil}) //sublote destino 
            aadd(aLinha,{"D3_DTVALID", '', Nil}) //validade lote destino
            aadd(aLinha,{"D3_ITEMGRD", "", Nil}) //Item Grade
            aadd(aLinha,{"D3_CODLAN", "", Nil}) //cat83 prod origem
            aadd(aLinha,{"D3_CODLAN", "", Nil}) //cat83 prod destino 

            aAdd(aAuto,aLinha)

        Next nX


    MSExecAuto({|x,y| mata261(x,y)},aAuto,nOpcAuto)


    If lMsErroAuto
        MsgInfo("Erro inserindo: "+aMensagem)
        MostraErro()
        DisarmTransaction()
        break
    Else
        //DbSelectArea("ZD3")
        //DbGoto( SQLZD3->R_E_C_N_O_ )
        //Reclock("ZD3",.F.)
        //ZD3->ZD3_FLAG:='S'
        //msUnlock()
    Endif

    End Transaction
    MsgInfo('Importados '+AllTrim(Str(nImport))+' produtos com sucesso!','Mensagem')
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!

0 resposta

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