Boa Tarde Denis,
Tenta alterar a operação de 3 para 4, ou seja, enviando a operação de alteração, como a informação do cabeçalho já existe(SRA), acho que enviando como operação de inclusão pode agir de forma "estranha". Na tabela de preços DA0/DA1, quando se trata somente de inclusão de um novo registro na DA1, mando informação de alteração, informando todos os registros relacionados da DA1, mais o novo registro a ser incluído. Já quando alterado somente as informações do registro envio só ele também com operação de alteração(4).
Veja:
User Function RestItTp(oJson,nOp,cRecno)
Local aRet := {}
Local aArea := GetArea()
Local aCab := {}
Local aItem := {}
Local cAliasDA1 := GetNextAlias()
Local nItem
Local cArqErro := 'erroauto.Txt'
Default cRecno := 0
Private lMsErroAuto := .F.
If nOp == 3 //Post de Item
BeginSql alias cAliasDA1
SELECT TOP(1) DA1_ITEM
FROM %TABLE:DA1% DA1
WHERE DA1.%NotDel%
AND DA1_CODTAB = %EXP:oJson['DA0010']['DA0_CODTAB']%
ORDER BY DA1_ITEM DESC
EndSql
If EMPTY(cAliasDA1)
nItem := alltrim(STRZER0(1,4))
Else
nItem := alltrim(STRZERO(VAL((cAliasDA1)->DA1_ITEM) + 1,4))
EndIf
(cAliasDA1)->(DbCloseArea())
BeginSql alias cAliasDA1
SELECT *
FROM %TABLE:DA1% DA1
WHERE DA1.%NotDel%
AND DA1_CODTAB = %EXP:oJson['DA0010']['DA0_CODTAB']%
ORDER BY DA1_ITEM
EndSql
While !(cAliasDA1)->(EOF())
aAdd(aItem,{{"DA1_FILIAL", "010104",NIL},;
{"LINPOS", "DA1_ITEM", (cAliasDA1)->DA1_ITEM},;//{"DA1_ITEM", (cAliasDA1)->DA1_ITEM, NIL},;
{"AUTDELETA","N" ,Nil},;
{"DA1_CODTAB", (cAliasDA1)->DA1_CODTAB , NIL},;
{"DA1_CODPRO", (cAliasDA1)->DA1_CODPRO , NIL},;
{"DA1_PRCVEN", (cAliasDA1)->DA1_PRCVEN , NIL},;
{"DA1_ATIVO", (cAliasDA1)->DA1_ATIVO ,NIL},;
{"DA1_TPOPER", (cAliasDA1)->DA1_TPOPER ,NIL },;
{"DA1_DATVIG", stod((cAliasDA1)->DA1_DATVIG),NIL}})
(cAliasDA1)->(DbSkip())
EndDo
DbSelectArea("DA0")
DbSetOrder(1)
If DA0->(DbSeek(xFilial("DA0") + oJson['DA0010']['DA0_CODTAB']))
aAdd(aCab,{"DA0_CODTAB", DA0->DA0_CODTAB, NIL})
aAdd(aCab,{"DA0_DESCRI", DA0->DA0_DESCRI, NIL})
aAdd(aCab,{"DA0_DATDE", DA0->DA0_DATDE, NIL})
aAdd(aCab,{"DA0_HORADE", DA0->DA0_HORADE, NIL})
aAdd(aCab,{"DA0_TPHORA", DA0->DA0_TPHORA, NIL})
aAdd(aCab,{"DA0_ATIVO", DA0->DA0_ATIVO, NIL})
aAdd(aCab,{"DA0_XINTEG", DA0->DA0_XINTEG, NIL})
aAdd(aItem,{{"DA1_FILIAL", "010104",NIL},;
{"DA1_ITEM", nItem, NIL},;
{"DA1_CODTAB", oJson['DA0010']['DA0_CODTAB'], NIL},;
{"DA1_CODPRO", oJson['SB1010']['B1_COD'], NIL},;
{"DA1_PRCVEN", val(oJson['DA1_PRCVEN']), NIL},;
{"DA1_ATIVO", oJson['DA1_ATIVO'],NIL},;
{"DA1_TPOPER", oJson['DA1_TPOPER'],NIL },;
{"DA1_DATVIG", stod(oJson['DA1_DATVIG']),NIL}})
MSExecAuto({|x,y,z| Omsa010(x,y,z)},aCab,aItem,4)
If lMsErroAuto
MostraErro('\temp\',cArqErro)
cMsg := MemoRead('\temp\' + cArqErro)
aRet := {.F., cMsg,"",0}
Else
aRet := {.T., 'Item incluido com Sucesso!',nItem,DA1->( recno())}
EndIf
Else
aRet := {.F., 'Tabela de Preco Inexistente!',0,0}
EndIf
ElseIf nOp == 4
BeginSql alias cAliasDA1
SELECT DA1_CODTAB,DA1_ITEM
FROM %TABLE:DA1% DA1
WHERE DA1.%NotDel%
AND R_E_C_N_O_ = %Exp:cRecno%
EndSql
DbSelectArea("DA0")
DbSetOrder(1)
If DA0->(DbSeek(xFilial("DA0") + oJson['DA0010']['DA0_CODTAB']))
aAdd(aCab,{"DA0_CODTAB", DA0->DA0_CODTAB, NIL})
aAdd(aCab,{"DA0_DESCRI", DA0->DA0_DESCRI, NIL})
aAdd(aCab,{"DA0_DATDE", DA0->DA0_DATDE, NIL})
aAdd(aCab,{"DA0_HORADE", DA0->DA0_HORADE, NIL})
aAdd(aCab,{"DA0_TPHORA", DA0->DA0_TPHORA, NIL})
aAdd(aCab,{"DA0_ATIVO", DA0->DA0_ATIVO, NIL})
aAdd(aItem,{{"DA1_FILIAL", "010104",NIL},;
{"LINPOS", "DA1_ITEM", (cAliasDA1)->DA1_ITEM},;//{"DA1_ITEM", (cAliasDA1)->DA1_ITEM, NIL},;
{"AUTDELETA","N" ,Nil},;
{"DA1_CODTAB", oJson['DA0010']['DA0_CODTAB'], NIL},;
{"DA1_CODPRO", oJson['SB1010']['B1_COD'], NIL},;
{"DA1_PRCVEN", val(oJson['DA1_PRCVEN']), NIL},;
{"DA1_ATIVO", oJson['DA1_ATIVO'],NIL},;
{"DA1_TPOPER", oJson['DA1_TPOPER'],NIL },;
{"DA1_DATVIG", stod(oJson['DA1_DATVIG']),NIL}})
MSExecAuto({|x,y,z| Omsa010(x,y,z)},aCab,aItem,4)
If lMsErroAuto
MostraErro('\temp\',cArqErro)
cMsg := MemoRead('\temp\' + cArqErro)
aRet := {.F., cMsg,"",0}
Else
aRet := {.T., 'Item alterado com Sucesso!',(cAliasDA1)->DA1_ITEM,DA1->( recno())}
EndIf
EndIf
ElseIf nOp == 5
BeginSql alias cAliasDA1
SELECT DA1_CODTAB,DA1_ITEM
FROM %TABLE:DA1% DA1
WHERE DA1.%NotDel%
AND R_E_C_N_O_ = %Exp:cRecno%
EndSql
DbSelectArea("DA0")
DbSetOrder(1)
If DA0->(DbSeek(xFilial("DA0") + (cAliasDA1)->DA1_CODTAB))
aAdd(aCab,{"DA0_CODTAB", DA0->DA0_CODTAB, NIL})
aAdd(aCab,{"DA0_DESCRI", DA0->DA0_DESCRI, NIL})
aAdd(aCab,{"DA0_DATDE", DA0->DA0_DATDE, NIL})
aAdd(aCab,{"DA0_HORADE", DA0->DA0_HORADE, NIL})
aAdd(aCab,{"DA0_TPHORA", DA0->DA0_TPHORA, NIL})
aAdd(aCab,{"DA0_ATIVO", DA0->DA0_ATIVO, NIL})
aAdd(aItem,{{"DA1_FILIAL", "010104",NIL},;
{"LINPOS", "DA1_ITEM", (cAliasDA1)->DA1_ITEM},;//{"DA1_ITEM", (cAliasDA1)->DA1_ITEM, NIL},;
{"AUTDELETA","S" ,Nil}})
MSExecAuto({|x,y,z| Omsa010(x,y,z)},aCab,aItem,4)
If lMsErroAuto
MostraErro('\temp\',cArqErro)
cMsg := MemoRead('\temp\' + cArqErro)
aRet := {.T., cMsg,"",0}
Else
aRet := {.T., 'Item Excluido com Sucesso!',(cAliasDA1)->DA1_ITEM,DA1->( recno())}
EndIf
EndIf
EndIf
DbCloseArea()
RestArea(aArea)
Return aRet
Talvez esta funcione da mesma maneira, desta forma só deve ser enviado a operação de inclusão (3), se a SRA também ser de inclusão.
Atenciosamente,