MsExecAuto do GPEA020 gera integração incorreta com o TAF (Evento S-2205)

Boa tarde! Estou com o seguinte problema:

Supondo que um funcionário já possua um dependente cadastrado no GPEA020, quando eu cadastro mais um dependente para ele, a rotina faz integração com o TAF gerando o evento S-2205 (alterações cadastrais). Quando eu consulto este novo evento gerado na rotina TAFA421 (Cadastro do Trabalhador), na aba Dependentes mostra o dependente que o funcionário já possuía e mais o dependente que eu acabei de incluir.

Se executar este mesmo processo só que via rotina execauto, no evento gerado do S-2205 só contempla o dependente que eu fiz a inclusão via execauto, o outro dependente que já estava cadastrado não aparece.

Será que alguém já se deparou com este tipo problema e poderia me ajudar?

Estou anexando o fonte do meu execauto

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

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,

Boa tarde Douglas! Fiz como vc indicou, infelizmente não deu certo, ocorre o mesmo problema na geração do evento no TAF. De qualquer forma eu abri um chamada na TOTVS pra ver se pode ser erro no produto. Mas mesmo assim obrigado pela ajuda!