MSExecAuto GPEA020

Alguem ja fez uso da rotina automatica para alterar e para excluir dependentes gpea020.



User function ftstDepend()
    Local aCabec   := {}
    Local aItens   := {}
    Local aLinha   := {}
    PRIVATE lMsErroAuto := .F.

    RPCSetType(3)
    PREPARE ENVIRONMENT EMPRESA "01" FILIAL "060101" TABLES "SRA", "SRB", "SX3", "SX2" MODULO "GPE"

    //==============> INCLUSAO DOS PRIMEIROS DEPENDENTES
    aCabec   := {}
    aadd(aCabec,{"RA_FILIAL","060101" ,Nil  })
    aadd(aCabec,{"RA_MAT"   ,"000026" ,Nil  })

    aLinha := {}
    aItens := {}

    aadd(aLinha,{"RB_FILIAL"    , "060101"           , Nil })
    aadd(aLinha,{"RB_MAT"       , "000026"           , Nil })
    aadd(aLinha,{"RB_COD"         , "01"              , Nil })
    aadd(aLinha,{"RB_NOME"       , "MARIA DA SILVA"     , Nil })
    aadd(aLinha,{"RB_DTNASC"     , Ctod("01/01/99")     , Nil })
    aadd(aLinha,{"RB_SEXO"      , "F"                , Nil })
    aadd(aLinha,{"RB_GRAUPAR"     , "F"                , Nil })
    aadd(aLinha,{"RB_TIPIR"      , "1"                , Nil })
    aadd(aLinha,{"RB_TIPSF"      , "1"                , Nil })
    aadd(aLinha,{"RB_LOCNASC"     , "SP"                , Nil })
    aadd(aItens,aLinha)

    aLinha := {}

    aadd(aLinha,{"RB_FILIAL"    , "01"                , Nil })
    aadd(aLinha,{"RB_MAT"       , "000026"           , Nil })
    aadd(aLinha,{"RB_COD"         , "02"                , Nil })
    aadd(aLinha,{"RB_NOME"       , "PEDRO DA SILVA"     , Nil })
    aadd(aLinha,{"RB_DTNASC"     , Ctod("01/01/02")     , Nil })
    aadd(aLinha,{"RB_SEXO"      , "M"                , Nil })
    aadd(aLinha,{"RB_GRAUPAR"      , "F"                , Nil })
    aadd(aLinha,{"RB_TIPIR"      , "1"                , Nil })
    aadd(aLinha,{"RB_TIPSF"      , "1"                , Nil })
    aadd(aLinha,{"RB_LOCNASC"     , "SP"                , Nil })                             

    aadd(aItens,aLinha)   

    MSExecAuto({|x,y,k,w,z| GPEA020(x,y,k,w,z)},3,aCabec,aItens,3) 

    //-- Retorno de erro na execução da rotina
    If lMsErroAuto
        MostraErro()
    Else     
        msgstop("Registro(s) Incluído(s) !!!")      
    EndIf

    //==============> FIM DA INCLUSAO DOS PRIMEIROS REGISTROS

    //==============> TENTATIVA DE ADD UM NOVO DEPENDENTE
    aItens := {}
    aLinha := {}

    aadd(aLinha,{"RB_FILIAL"    , "060101"           , Nil })
    aadd(aLinha,{"RB_MAT"       , "000026"           , Nil })
    aadd(aLinha,{"RB_COD"         , "03"              , Nil })
    aadd(aLinha,{"RB_NOME"       , "JORGE MATEUS"     , Nil })
    aadd(aLinha,{"RB_DTNASC"     , Ctod("01/01/04")     , Nil })
    aadd(aLinha,{"RB_SEXO"      , "F"                , Nil })
    aadd(aLinha,{"RB_GRAUPAR"     , "F"                , Nil })
    aadd(aLinha,{"RB_TIPIR"      , "1"                , Nil })
    aadd(aLinha,{"RB_TIPSF"      , "1"                , Nil })
    aadd(aLinha,{"RB_LOCNASC"     , "SP"                , Nil })
    aadd(aItens,aLinha)

    MSExecAuto({|x,y,k,w,z| GPEA020(x,y,k,w,z)},3,aCabec,aItens,3) 

    //-- Retorno de erro na execução da rotina
    If lMsErroAuto
        MostraErro()
    Else     
        msgstop("Registro(s) Incluído(s) !!!")      
    EndIf
    //==============> FIM DA TENTATIVA DE ADD UM NOVO DEPENDENTE   

    //==============> TENTANDO ALTERA O ULTIMO DEPENDENTE PRA CORRECAO DO NOME
    aItens := {}
    aLinha := {}

    aadd(aLinha,{"RB_FILIAL"    , "060101"           , Nil })
    aadd(aLinha,{"RB_MAT"       , "000026"           , Nil })
    aadd(aLinha,{"RB_COD"         , "03"              , Nil })
    aadd(aLinha,{"RB_NOME"       , "JORGE MATHEUS"     , Nil })
    aadd(aLinha,{"RB_DTNASC"     , Ctod("01/01/04")     , Nil })
    aadd(aLinha,{"RB_SEXO"      , "F"                , Nil })
    aadd(aLinha,{"RB_GRAUPAR"     , "F"                , Nil })
    aadd(aLinha,{"RB_TIPIR"      , "1"                , Nil })
    aadd(aLinha,{"RB_TIPSF"      , "1"                , Nil })
    aadd(aLinha,{"RB_LOCNASC"     , "SP"                , Nil })
    aadd(aItens,aLinha)

    MSExecAuto({|x,y,k,w,z| GPEA020(x,y,k,w,z)},4,aCabec,aItens,4) 

    //-- Retorno de erro na execução da rotina
    If lMsErroAuto
        MostraErro()
    Else     
        msgstop("Registro(s) Incluído(s) !!!")      
    EndIf
    //==============> FIM DA ALTERACAO

    //==============> EXCLUSAO DO PRIMEIRO DEPENDENTE
    aItens := {}
    aLinha := {}

    aadd(aLinha,{"RB_FILIAL"    , "060101"           , Nil })
    aadd(aLinha,{"RB_MAT"       , "000026"           , Nil })
    aadd(aLinha,{"RB_COD"         , "01"              , Nil })
    aadd(aLinha,{"RB_NOME"       , "MARIA DA SILVA"     , Nil })
    aadd(aLinha,{"RB_DTNASC"     , Ctod("01/01/99")     , Nil })
    aadd(aLinha,{"RB_SEXO"      , "F"                , Nil })
    aadd(aLinha,{"RB_GRAUPAR"     , "F"                , Nil })
    aadd(aLinha,{"RB_TIPIR"      , "1"                , Nil })
    aadd(aLinha,{"RB_TIPSF"      , "1"                , Nil })
    aadd(aLinha,{"RB_LOCNASC"     , "SP"                , Nil })
    aadd(aItens,aLinha)

    MSExecAuto({|x,y,k,w,z| GPEA020(x,y,k,w,z)},5,aCabec,aItens,5) 

    //-- Retorno de erro na execução da rotina
    If lMsErroAuto
        MostraErro()
    Else     
        msgstop("Registro(s) Incluído(s) !!!")      
    EndIf
Return(.T.)

Fiz este pequeno fonte para exemplificar, ocorre erro na alteracao dando como chave duplicada devido ter este codigo e ele compreende como inclusao.

E ao excluir um unico dependente ocorre a exclusao de todos.

Olá, você já tentou fazer isso utilizando em MVC? https://tdn.totvs.com/pages/releaseview.action?pageId=586696753

Eu tenho abandonado os MsExecAutos da vida, sempre que a rotina já está em MVC, minha opção é usar o modelo de dados.

Ronald a questão é que você passou o nOpc = 5 exclusão, então o sistema sempre entende a exclusão completa. Observe que quando queremos fazer a exclusão de apenas 1 registro nesses grids, temos que entrar como alteração e depois deletar a linha. Usando esse modelo de ExecAuto não sei como proceder, com MVC é bem tranquilo fazer isso. Claro o ExecAuto MVC é muito diferente do que já estamos acostumados, mas ele oferece possibilidades quase infinitas.