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
Você faz esse MsExecAuto com RpcSetEnv na mesma thread?
— Daniel Mendes 08 de Aug de 2022Parece que a variável de leitura do grid que está gerando a exceção.
— Daniel Mendes 08 de Aug de 2022