Erro no excauto do Pedido de Venda

Ola! Estou tentando executar uma rotina automática do pedido de venda (mata410) e está apresentando um comportamento muito estranho. a forma como eu estou fazendo é a seguinte: coloquei um botão dentro da alteração do pedido de venda; ao clicar no botão eu pego os dados do pedido aberto e recrio ele em outra filial, com os mesmos itens e cabeçalho. Em pedidos que eu tenho somente 1 item, ele funciona normalmente mas em pedidos que tem mais de 1 item, apresenta um erro no campo cliente, erro de type mismatch mas não é pois até ja testei colocando o cliente direto no fonte no modo caracter. Em anexo, está o print do erro em um pedido com 2 itens.

segue o fonte:

Static Function TESTEX()

local cC5num := SC5->C5_NUM local cC5cli := SC5->C5_CLIENTE local aLin := {} local aArea := GetArea() local cQuery := "" //Local nOpr := 3 // NÚMERO DA OPERAÇÃO (INCLUSÃO) Local aCabc := {} // INFORMAÇÕES DO CABEÇALHO Local aLine := {} // INFORMAÇÕES DA LINHA Local aItems := {} // CONJUNTO DE LINHAS local nXi := 1

Private lMsErroAuto := .F. Private lMsHelpAuto := .T.

cQuery += " SELECT C6_ITEM,C6_PRODUTO,C6_QTDVEN,C6_PRUNIT,C6_PRCVEN,C6_UM,C6_VALOR,C6_OPER,C6_TES,C6_LOCAL FROM "+RetSQLName("SC6")+" " cQuery += " WHERE C6_NUM = '"+cC5num+"' AND C6_CLI = '"+cC5cli+"' "

TCQUERY cQuery NEW ALIAS "QRY" dbSelectArea("QRY") while !QRY->(EoF())

aadd(aLin, {C6_ITEM,C6_PRODUTO,C6_QTDVEN, C6_PRUNIT, C6_PRCVEN,C6_UM, C6_VALOR, C6_OPER ,C6_TES,C6_LOCAL }) QRY->(DbSkip())

enddo QRY->(DbCloseArea())

alert("novo pedido sera incluido na filial 12 com:"+cValToChar(len(aLin))+" itens")

RPCSetEnv("01", "12", NIL, NIL, "FAT", NIL, {"SC5", "SC6"}) // ABERTURA DE AMBIENTE (REMOVER SE EXECUTADO VIA SMARTCLIENT) aArea := GetArea()

// cNum := GetSXENum("SC5", "C5_NUM") // REMOVER PARA GERAÇÃO DE NUMERAÇÃO AUTOMÁTICA PELA ROTINA

// DADOS DO CABEÇALHO // AAdd(aHeader, {"C5_NUM", cNum, NIL}) // REMOVER PARA GERAÇÃO DE NUMERAÇÃO AUTOMÁTICA PELA ROTINA AAdd(aCabc, {"C5_TIPO" , SC5->C5_TIPO , NIL}) AAdd(aCabc, {"C5_CLIENTE", "033439", NIL}) //AAdd(aCabc, {"C5_LOJACLI", SC5->C5_LOJACLI, NIL}) //AAdd(aCabc, {"C5_LOJAENT", SC5->C5_LOJAENT, NIL}) AAdd(aCabc, {"C5_LOJAENT", SC5->C5_LOJAENT, NIL}) AAdd(aCabc, {"C5_CONDPAG", SC5->C5_CONDPAG, NIL}) AAdd(aCabc, {"C5_VEND1" , SC5->C5_VEND1 , NIL}) AAdd(aCabc, {"C5_TRANSP" , SC5->C5_TRANSP , NIL}) //AAdd(aCabc, {"C5_TPFRETE", SC5->C5_TPFRETE, NIL}) AAdd(aCabc, {"C5_MENNOTA", SC5->C5_MENNOTA, NIL}) //AAdd(aCabc, {"C5_CGCINT" , SC5->C5_CGCINT , NIL})

// DADOS DOS ITENS For nXi := 1 to len(aLin) aLine := {} AAdd(aLine, {"C6_ITEM" , aLin[nXi][1], NIL}) AAdd(aLine, {"C6_PRODUTO", aLin[nXi][2], NIL}) AAdd(aLine, {"C6_QTDVEN" , aLin[nXi][3], NIL}) AAdd(aLine, {"C6_PRUNIT" , aLin[nXi][4], NIL}) AAdd(aLine, {"C6_PRCVEN" , aLin[nXi][5], NIL}) AAdd(aLine, {"C6_UM" , aLin[nXi][6], NIL}) AAdd(aLine, {"C6_VALOR" , aLin[nXi][7], NIL}) AAdd(aLine, {"C6_OPER" , "03" , NIL}) AAdd(aLine, {"C6_TES" , "531" , NIL}) AAdd(aLine, {"C6_LOCAL" , "13" , NIL})

AAdd(aItems, aLine)

next nXi

MsExecAuto({|x, y, z| MATA410(x, y, z)}, aCabc, aItems, 3)

// VALIDAÇÃO DE ERRO If (lMsErroAuto) MostraErro() // RollbackSX8() // REMOVER PARA GERAÇÃO DE NUMERAÇÃO AUTOMÁTICA PELA ROTINA

ConOut(Repl("-", 80)) ConOut(PadC("MATA410 automatic routine ended with error", 80)) ConOut(PadC("Ended at: " + Time(), 80)) ConOut(Repl("-", 80)) Else // ConfirmSX8() // REMOVER PARA GERAÇÃO DE NUMERAÇÃO AUTOMÁTICA PELA ROTINA

ConOut(Repl("-", 80)) ConOut(PadC("MATA410 automatic routine successfully ended", 80)) ConOut(PadC("Ended at: " + Time(), 80)) ConOut(Repl("-", 80)) alert("incluído com sucesso")

EndIf

RestArea(aArea) // RESTAURAÇÃO DA ÁREA ANTERIOR //RPCClearEnv() // FECHAMENTO DE AMBIENTE (REMOVER SE EXECUTADO VIA SMARTCLIENT) Return

compartilhar
  • Você faz esse MsExecAuto com RpcSetEnv na mesma thread?

    Daniel Mendes   08 de Aug de 2022
  • Parece que a variável de leitura do grid que está gerando a exceção.

    Daniel Mendes   08 de Aug de 2022
  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!

2 respostas

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