Imprimi Página | Fechar janela

EXECAUTO MATA103

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=44445
Data da Impressão: sábado, 14 de dezembro de 2024 at 16:16


Topico: EXECAUTO MATA103

Postado por: ELTON93
Assunto: EXECAUTO MATA103
Data Postagem: quinta-feira, 15 de fevereiro de 2024 at 11:02

Pessoal fiz um EXECAUTO na MATA103 e e está funcionando bem, exceto as informações de lote, o sistema está substituindo as informações do Lote que estão no array por informações automaticas tipo AUTO20983.

Alguém sabe me dizer pq ?


Respostas:

Postado Por: GERARDO
Data Postagem: quinta-feira, 15 de fevereiro de 2024 at 11:17

Elton, bom dia.

Verifica se tem fórmula cadastrada no parâmetro:
MV_FORMLOT - Código da formula default utilizada para preenchimento dos lotes

At.te,

Gerardo Lobos
Athenas Solutions.



Postado Por: ELTON93
Data Postagem: quinta-feira, 15 de fevereiro de 2024 at 11:19

Já olhei, esse parametro está vazio. Não tinha só que acatar o Lote do array?



Postado Por: GERARDO
Data Postagem: quinta-feira, 15 de fevereiro de 2024 at 11:34

Estranho, pois o sistema só preenche o campo D1_LOTECTL, iniciando com "AUTO" quando se tem formula no parametro.

Seria interessante, você colocar o fonte para análise, pois pode ser outra coisa.



Postado Por: ELTON93
Data Postagem: quinta-feira, 15 de fevereiro de 2024 at 12:40

pIOR QUE É UM PROgrama simples, não tem muito segredo.


               WHILE cAlias->(!Eof()) //.and. cDoc == cAlias->D2_DOC .and. cSerie == cAlias->D2_SERIE
                    cCodigo    := cAlias->ZY_COD
                    nQuant     := IIF(cAlias->ZY_QTCONV > 0 ,cAlias->ZY_QTCONV, cAlias->D2_QUANT)
                    cLotectl   := cAlias->ZY_LOTECTL
                    nCusto     := cAlias->D2_CUSTO1
                    dDValidad := Stod(cAlias->D2_DTVALID)
                    cD2Total   := cAlias->D2_TOTAL
                    nPrcVend   := iiF(cAlias->ZY_QTCONV > 0, cD2Total/nQuant, cAlias->D2_PRCVEN)
                    cPC        := cAlias->ZY_PC
                                       cItemZy    := StrZero(Val(cAlias->ZY_ITEM), 4)
                    nIPI       := Posicione("SB1",1,xFilial("SB1")+cCodigo,"SB1->B1_IPI" )
                        
                          If cEmpOri <> cEmpDest
                             IF nIPI > 0
                               cTE := aEntrs[4]
                              Else
                               cTE := aEntrs[5]
                              Endif

                          ElseIF cEmpOri == cEmpDest
                               cTE := aEntrs[3]
                          Endif
                    
                   aadd(aLotes,{cLotectl})
                    nItem++
                    aItem := {}
                    aAdd(aItem,{‘D1_ITEM‘,      sTRzero(nItem,4)          ,NIL})
                    aAdd(aItem,{‘D1_COD‘,       cCodigo,NIL})
                    aAdd(aItem,{‘D1_DESCRI‘,    Posicione(‘SB1‘,1,xFilial("SB1")+cCodigo, ‘SB1->B1_DESC‘),NIL})
                    aAdd(aItem,{‘D1_UM‘,        Posicione(‘SB1‘,1,xFilial("SB1")+cCodigo, ‘SB1->B1_UM‘),NIL})
                    aAdd(aItem,{"D1_QUANT",      nQuant,Nil})
                    aAdd(aItem,{"D1_VUNIT",      nPrcVend,Nil})
                    aAdd(aItem,{"D1_TOTAL",      nPrcVend*nQuant,Nil})

                    IF Posicione(‘SB1‘,1,xFilial(‘SB1‘)+cCodigo, ‘SB1->B1_RASTRO‘) == "L"
                    aAdd(aItem,{"D1_LOTECTL",    cLotectl,Nil})
                    aAdd(aItem,{"D1_DTVALID",    dDValidad,Nil})
                    Endif

                    aAdd(aItem,{"D1_DOC",        cDoc ,Nil})
                    aAdd(aItem,{"D1_SERIE",      cSerie,Nil})
                    aAdd(aItem,{"D1_FORNECE",    cFornece,Nil})
                    aAdd(aItem,{"D1_CUSTO",      nCusto,Nil})
                     If lClass
                       aAdd(aItem,{"D1_TES",      cTE,Nil})
                     Endif
                       
                    

                    aadd(aItens,aItem)

                    
       
        IF !Empty(cPC )
                   Aadd(aItens[Len(aItens)], {‘D1_PEDIDO ‘,cPC ,nil}) // Número do Pedido de Compras
               aadd(aItens[Len(aItens)], {‘D1_ITEMPC ‘, cItemZy ,nil}) // Item do Pedido de Compras
        Endif

                    aadd(aUpdate,{cDoc,cSerie,cFornece,cCodigo,sTRzero(nItem,4),cLotectl,dDValidad,nCusto})

                    cAlias->(DBSKIP())

               EndDo

               /// Enddo
          Endif
          Conout("GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG"+cValTochar(lClass))
     
          
               aAdd(aParamAux, {"MV_PAR01", 2}) //-- Mostra Lanc. Contabil? 1 = Sim, 2 = Não
               aAdd(aParamAux, {"MV_PAR06", 2}) //-- Contabilizacao Online? 1 = Sim, 2 = Não

               MSExecAuto({|x,y,z,k,a,b| MATA103(x,y,z,,,,k,a,,,b)},aCabec,aItens,nOpc,aParamAux,aItensRat,aCodRet)




Postado Por: ROBERTOMEN
Data Postagem: quinta-feira, 15 de fevereiro de 2024 at 13:04


Boa tarde:

Tente assim:

aItem := {}
   aAdd(aItem,{"D1_DOC",        cDoc ,Nil})
   aAdd(aItem,{"D1_SERIE",      cSerie,Nil})
   aAdd(aItem,{"D1_FORNECE",    cFornece,Nil})
   aAdd(aItem,{"D1_CUSTO",      nCusto,Nil})
   aAdd(aItem,{'D1_ITEM',      sTRzero(nItem,4)          ,NIL})
   aAdd(aItem,{'D1_COD',       cCodigo,NIL})
   aAdd(aItem,{'D1_DESCRI',    Posicione(‘SB1‘,1,xFilial("SB1")+cCodigo, ‘B1_DESC‘),NIL})
   aAdd(aItem,{'D1_UM',        Posicione(‘SB1‘,1,xFilial("SB1")+cCodigo, ‘B1_UM‘),NIL})
   aAdd(aItem,{"D1_QUANT",      nQuant,Nil})
   aAdd(aItem,{"D1_VUNIT",      nPrcVend,Nil})
   aAdd(aItem,{"D1_TOTAL",      nPrcVend*nQuant,Nil})

   If lClass
       aAdd(aItem,{"D1_TES",      cTE,Nil})
   Endif

   IF Posicione(‘SB1‘,1,xFilial(‘SB1‘)+cCodigo, ‘B1_RASTRO‘) == "L"
        aAdd(aItem,{"D1_LOTECTL",    cLotectl,Nil})
        aAdd(aItem,{"D1_DTVALID",    dDValidad,Nil})
   Endif

   aadd(aItens,aItem)



Postado Por: EMERSON.EN
Data Postagem: quinta-feira, 15 de fevereiro de 2024 at 15:43

evite usar Posicione() várias vezes para a mesma finalidade. perda de performance.
evite fazer a soma para o conteúdo de campos caractere de conteúdo sequencial. para isto utilize a função Soma1()
para fácil entendimento, avalie cPC antes de incluir o item no array de itens do documento de entrada.


     aItens := {}
     cItemD1 := ‘0000‘ // criada como caractere para utilizar a função Soma1()

     WHILE cAlias->(!Eof()) //.and. cDoc == cAlias->D2_DOC .and. cSerie == cAlias->D2_SERIE
          cCodigo    := cAlias->ZY_COD
          nQuant     := IIF(cAlias->ZY_QTCONV > 0, cAlias->ZY_QTCONV, cAlias->D2_QUANT)
          cLotectl   := cAlias->ZY_LOTECTL
          nCusto     := cAlias->D2_CUSTO1
          dDValidad := Stod(cAlias->D2_DTVALID)
          cD2Total   := cAlias->D2_TOTAL
          nPrcVend   := iiF(cAlias->ZY_QTCONV > 0, cD2Total/nQuant, cAlias->D2_PRCVEN)
          cPC        := cAlias->ZY_PC
          cItemZy    := StrZero(Val(cAlias->ZY_ITEM), 4)

          // posiciona a tabela de produtos
          SB1->(dbSetOrder(1)) // B1_FILIAL, B1_COD
          SB1->(dbSeek(xFilial()+cCodigo))

          nIPI       := SB1->B1_IPI
               
          IF cEmpOri == cEmpDest
               cTE := aEntrs[3]
          Else
               cTE := aEntrs[ if(nIPI > 0, 4, 5) ]
          Endif
          
          aadd(aLotes,{cLotectl})

          cItemD1 := Soma1(cItemD1) // utilize a Soma1() - função padrão do Protheus

          aItem := {}
          aAdd(aItem,{‘D1_ITEM‘,   cItemD1,          Nil})
          aAdd(aItem,{‘D1_COD‘,    cCodigo,          Nil})
          aAdd(aItem,{‘D1_DESCRI‘, SB1->B1_DESC,     Nil})
          aAdd(aItem,{‘D1_UM‘,     SB1->B1_UM,       Nil})
          aAdd(aItem,{"D1_QUANT", nQuant,           Nil})
          aAdd(aItem,{"D1_VUNIT", nPrcVend,        Nil})
          aAdd(aItem,{"D1_TOTAL", nPrcVend*nQuant, Nil})

          IF SB1->B1_RASTRO == "L"
               aAdd(aItem,{"D1_LOTECTL", cLotectl, Nil})
               aAdd(aItem,{"D1_DTVALID", dDValidad, Nil})
          Endif

          aAdd(aItem,{"D1_DOC",        cDoc,     Nil})
          aAdd(aItem,{"D1_SERIE",      cSerie,   Nil})
          aAdd(aItem,{"D1_FORNECE",    cFornece, Nil})
          aAdd(aItem,{"D1_CUSTO",      nCusto,   Nil})

          If lClass
               aAdd(aItem,{"D1_TES",    cTE,      Nil})
          Endif

          IF !empty(cPC)
               aAdd(aItem,{‘D1_PEDIDO‘, cPC,     nil}) // Número do Pedido de Compras
               aAdd(aItem,{‘D1_ITEMPC‘, cItemZy, nil}) // Item do Pedido de Compras
          Endif

          aAdd(aItens,aItem)

          aAdd(aUpdate,{cDoc,cSerie,cFornece,cCodigo,sTRzero(nItem,4),cLotectl,dDValidad,nCusto})

          cAlias->(DBSKIP())

     ENDDO







Postado Por: ELTON93
Data Postagem: segunda-feira, 19 de fevereiro de 2024 at 09:23

Pessoal,

Muito obrigado pelas dicas, me ajudaram a resolver o problema.




Imprimir Página | Fechar Janela