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