Erro ao incluir Ordem de Produção. MATA650

Estou criando uma rotina que deve gerar Ordens de Produção com base em um Pedido de Venda. Para isso, estou utilizando a execauto MATA650 de acordo com a documentação. Documentação TOTVS.

Na nossa realidade aqui, será necessário gerar 1 OP para cada item do PV, sendo assim, espera-se que sejam geradas varias OPs com o mesmo numero, porem com itens diferentes. Entretanto é retornado uma erro na execauto dizendo que esse registro já existe.

Segue abaixo trecho do código que realiza as inclusões e anexo contendo o erro.

Obs.: tentei mudar o terceiro conteúdo do array da execauto pois supostamente iria sobrescrever a validação padrão.

    if lOK

        begin transaction

        if select("TSC6A") > 0
            TSC6A->(DbCloseArea())
        endif

        BEGINSQL ALIAS "TSC6A"
            SELECT * FROM %TABLE:SC6%
            WHERE %NOTDEL%
            AND C6_FILIAL = %XFILIAL:SC6%
            AND C6_NUM = %EXP:cPedido%
            ORDER BY C6_ITEM ASC
        ENDSQL

        while ! TSC6A->(EoF())

            aCabc  := { {'C2_FILIAL'    , xFilial("SC2")        ,NIL},;         
                        {'C2_NUM'       , TSC6A->(C6_NUM)       ,.T.},;          
                        {'C2_ITEM'      , TSC6A->(C6_ITEM)      ,.T.},;     
                        {'C2_SEQUEN'    , "001"                 ,.T.},;  
                        {'C2_PRODUTO'   , alltrim(TSC6A->(C6_PRODUTO))   ,NIL},;     
                        {'C2_PEDIDO'    , TSC6A->(C6_NUM)       ,NIL},;
                        {"C2_ITEMPV"    , TSC6A->(C6_ITEM)      ,NIL},;  
                        {"C2_QUANT"     , TSC6A->(C6_QTDVEN)    ,NIL},;  
                        {"C2_STATUS"    , 'N'                   ,NIL},;  
                        {"C2_LOCAL"     , '04'                  ,NIL},;  
                        {"C2_CC"        , '430010017'           ,NIL},;  
                        {"C2_PRIOR"     , '500'                 ,NIL},;  
                        {"C2_DATPRI"    , DDATABASE             ,NIL},;  
                        {"C2_DATPRF"    , DDATABASE + 10        ,NIL},;  
                        {'AUTEXPLODE'   , "S"                   ,NIL}}       

            msExecAuto({|x,Y| Mata650(x,Y)},aCabc,3)

            if lMsErroAuto
                montaErro(mostraerro("/logs","ordemproducao" + strtran(time(),':') + ".log"),400,21)
                DisarmTransaction()
                Break
            else
                oReturn["resultado"] := "OK"
                oReturn["mensagem"] += ' | Tempo gasto: ' + Tgasto()

                AADD(oReturn["listaOPs"], JsonObject():New())
                nQtd := len(oReturn["listaOPs"])
                oReturn["listaOPs"][nQtd]["item"] := TSC6A->(C6_ITEM)
                oReturn["listaOPs"][nQtd]["opGerada"] := TSC6A->(C6_NUM)
            endif

            TSC6A->(DbSkip())
        end

        end transaction
    endif
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 execauto mata650 ou faça a sua própria pergunta.