Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Nome

Tipo

Descrição

Obrigatório

aCabecArray de registrosArray contendo os campos do cabeçalho (ACQ)Sim
aGridArray de registrosArray contendo os campos da Grid (ACR)Sim
nOpcXNumérico (opção de execução)3 = Inclusão; 4 = Alteração; 5 = ExclusãoSim

05. RETORNO

Não há

06. EXEMPLOS

Totvs custom tabs box items
defaultno
referenciaFonte

Exemplo básico para a execução de Inclusão, Alteração e Exclusão de Regras de Bonificação via Rotina Automática:

Bloco de código
linenumberstrue
#Include 'protheus.ch'
#Include 'topconn.ch'
#Include "tbiconn.ch"

//----------------------------------------------------------------------------
/*/{Protheus.doc} TSTFATA090
Exemplo de ExecAuto para a rotina FATA090-Manutenção das Regras de Bonificação

@author Squad CRM/FAT
@since 29/09/2023
@version 1.0
/*/
//----------------------------------------------------------------------------

User Function TSTFATA090()

Local aCab              as Array
Local aItens            as Array
Local aLinha            as Array
Local cCodRegra         as Char			//Código da Regra
Local aErroAuto         as Array
Local nCount            as Numeric
Local cLogErro          as Char
Local cItem             as Char
Local nOpcX				as Numeric		//Opção para (3 = Inclusão; 4 = Alteração; 5 = Exclusão)
Private lMsErroAuto		as Logical
Private lAutoErrNoFile	as Logical

// Neste RDMAKE (Exemplo), o mesmo número de regra de bonificação é utilizado para a Rotina Automática (Modelos INCLUSÃO / ALTERAÇÃO e EXCLUSÃO).
//****************************************************************
//* Abertura do ambiente
//****************************************************************
FWLogMsg('WARN',, 'SIGAFAT', FunName(), '', '01', ("Inicio: " + Time()) , 0, 0, {})

RpcClearEnv()
RPCSetType(3) //Nao faz consumo de licença
RPCSetEnv("T1", "D MG 01", Nil, Nil, "FAT")

//|---------------------------------|
//| Inclusão - Início				|
//|---------------------------------|

cCodRegra := GetSxeNum("ACQ","ACQ_CODREG")
aCab      := {}
aItens    := {}

//|---------------------------------|
//| Preenche Cabeçalho				|
//|---------------------------------|
Aadd(aCab,{"ACQ_CODREG" ,cCodRegra                        ,Nil})
Aadd(aCab,{"ACQ_DESCRI" ,"REGRA DE BONIFICACAO "+cCodRegra,Nil})
Aadd(aCab,{"ACQ_CODPRO" ,"FATR00000000000000000000000032" ,Nil})
Aadd(aCab,{"ACQ_QUANT"  ,1                                ,Nil})
Aadd(aCab,{"ACQ_TPRGBN" ,"1"                              ,Nil})
	
//|---------------------------------|
//| Preenche ITENS 					|
//|---------------------------------|
aLinha := {}
Aadd(aLinha,{"ACR_ITEM"	  ,"001"                            ,Nil})
Aadd(aLinha,{"ACR_CODPRO" ,"FATR00000000000000000000000026" ,Nil})
Aadd(aItens,aLinha)

aLinha := {}
Aadd(aLinha,{"ACR_ITEM"	  ,"002"                            ,Nil})
Aadd(aLinha,{"ACR_CODPRO" ,"FATR00000000000000000000000027" ,Nil})
Aadd(aItens,aLinha)

//|-----------------------------|
//| Gera a Regra de Bonificação |
//|-----------------------------|
nOpcX		    := 3
lAutoErrNoFile	:= .F.
MSExecAuto({|a,b,c,d| FATA090(a,b,c)}, aCab, aItens, nOpcx)

If lMsErroAuto
    FWLogMsg('WARN',, 'SIGAFAT', FunName(), '', '02', "Erro na inclusao!" , 0, 0, {})
    aErroAuto := GetAutoGRLog()
    For nCount := 1 To Len(aErroAuto)
       cLogErro += StrTran(StrTran(aErroAuto[nCount], "<", ""), "-", "") + " "
       FWLogMsg('WARN',, 'SIGAFAT', FunName(), '', '03', cLogErro , 0, 0, {})
       ConOut(cLogErro)
    Next
Else
    FWLogMsg('WARN',, 'SIGAFAT', FunName(), '', '04', ("Incluido com sucesso! "+cCodRegra) , 0, 0, {})
EndIf
//|---------------------------------|
//| Inclusão - Fim  				|
//|---------------------------------|


//|---------------------------------|
//| Alteração - Início				|
//|---------------------------------|
ACQ->(DbSetOrder(1))
If ACQ->(DbSeek(xFilial("ACQ")+cCodRegra))
    aCab      := {}
    aItens    := {}

    //|---------------------------------|
    //| Preenche Cabeçalho				|
    //|---------------------------------|
    Aadd(aCab,{"ACQ_CODREG" ,ACQ->ACQ_CODREG    ,Nil})
    Aadd(aCab,{"ACQ_DESCRI" ,ACQ->ACQ_DESCRI    ,Nil})
    Aadd(aCab,{"ACQ_CODPRO" ,ACQ->ACQ_CODPRO    ,Nil})
    Aadd(aCab,{"ACQ_QUANT"  ,2                  ,Nil}) //Alterando a quantidade a ser bonificada para 2
    Aadd(aCab,{"ACQ_TPRGBN" ,ACQ->ACQ_TPRGBN    ,Nil})
        
    //|---------------------------------|
    //| Preenche ITENS 					|
    //|---------------------------------|
    ACR->(DbSetOrder(1))
    If ACR->(DbSeek(xFilial("ACR")+cCodRegra))
        While ACR->(!Eof()) .And. ACR->ACR_CODREG == cCodRegra
            aLinha := {}
            Aadd(aLinha,{"LINPOS"     ,"ACR_ITEM"      ,ACR->ACR_ITEM})
            Aadd(aLinha,{"AUTDELETA"  ,"N"             ,Nil          })
            Aadd(aLinha,{"ACR_CODPRO" ,ACR->ACR_CODPRO ,Nil          })
            Aadd(aItens,aLinha)
            cItem := ACR->ACR_ITEM
            ACR->(DbSkip())
        End

        //Adicionando o item
        aLinha := {}
        Aadd(aLinha,{"ACR_ITEM"	  ,(cItem := Soma1(cItem))          ,Nil})
        Aadd(aLinha,{"ACR_CODPRO" ,"FATR00000000000000000000000028" ,Nil})
        Aadd(aItens,aLinha)

        //Adicionando o item
        aLinha := {}
        Aadd(aLinha,{"ACR_ITEM"	  ,(cItem := Soma1(cItem))          ,Nil})
        Aadd(aLinha,{"ACR_CODPRO" ,"FATR00000000000000000000000029" ,Nil})
        Aadd(aItens,aLinha)
    EndIf

    //|-------------------------------|
    //| Altera a Regra de Bonificação |
    //|-------------------------------| 
	nOpcX		    := 4
    lMsErroAuto		:= .F.
    lAutoErrNoFile	:= .F.     
	MSExecAuto({|a,b,c,d| FATA090(a,b,c)}, aCab, aItens,  nOpcX )
    If lMsErroAuto
        FWLogMsg('WARN',, 'SIGAFAT', FunName(), '', '05', "Erro na alteração!" , 0, 0, {})
        aErroAuto := GetAutoGRLog()
        For nCount := 1 To Len(aErroAuto)
            cLogErro += StrTran(StrTran(aErroAuto[nCount], "<", ""), "-", "") + " "
            FWLogMsg('WARN',, 'SIGAFAT', FunName(), '', '06', cLogErro , 0, 0, {})
            ConOut(cLogErro)
        Next
    Else
        FWLogMsg('WARN',, 'SIGAFAT', FunName(), '', '07', ("Alterado com sucesso! "+cCodRegra) , 0, 0, {})
    EndIf
EndIf
//|---------------------------------|
//| Alteração - Fim  				|
//|---------------------------------|

//|---------------------------------|
//| Exclusão - Início				|
//|---------------------------------|
ACQ->(DbSetOrder(1))
If ACQ->(DbSeek(xFilial("ACQ")+cCodRegra))
    aCab      := {}
    aItens    := {}

    //|---------------------------------|
    //| Preenche Cabeçalho				|
    //|---------------------------------|
    Aadd(aCab,{"ACQ_CODREG" ,ACQ->ACQ_CODREG ,Nil})
    Aadd(aCab,{"ACQ_DESCRI" ,ACQ->ACQ_DESCRI ,Nil})
    Aadd(aCab,{"ACQ_CODPRO" ,ACQ->ACQ_CODPRO ,Nil})
    Aadd(aCab,{"ACQ_QUANT"  ,ACQ->ACQ_QUANT  ,Nil})
    Aadd(aCab,{"ACQ_TPRGBN" ,ACQ->ACQ_TPRGBN ,Nil})
        
    //|---------------------------------|
    //| Preenche ITENS 					|
    //|---------------------------------|
    ACR->(DbSetOrder(1))
    If ACR->(DbSeek(xFilial("ACR")+cCodRegra))
        While ACR->(!Eof()) .And. ACR->ACR_CODREG == cCodRegra
            aLinha := {}
            Aadd(aLinha,{"ACR_ITEM"	  ,ACR->ACR_ITEM   ,Nil})
            Aadd(aLinha,{"ACR_CODPRO" ,ACR->ACR_CODPRO ,Nil})
            Aadd(aItens,aLinha)
            ACR->(DbSkip())
        End
    EndIf

    //|-------------------------------|
    //| Exclui a Regra de Bonificação |
    //|-------------------------------| 
	nOpcX		    := 5
    lMsErroAuto		:= .F.
    lAutoErrNoFile	:= .F.
    MSExecAuto({|a,b,c,d| FATA090(a,b,c)}, aCab, aItens, nOpcX)

    If lMsErroAuto
        FWLogMsg('WARN',, 'SIGAFAT', FunName(), '', '08', "Erro na exclusão!" , 0, 0, {})
        aErroAuto := GetAutoGRLog()
        For nCount := 1 To Len(aErroAuto)
            cLogErro += StrTran(StrTran(aErroAuto[nCount], "<", ""), "-", "") + " "
            FWLogMsg('WARN',, 'SIGAFAT', FunName(), '', '09', cLogErro , 0, 0, {})
            ConOut(cLogErro)
        Next
    Else
        FWLogMsg('WARN',, 'SIGAFAT', FunName(), '', '10', ("Excluido com sucesso! "+cCodRegra) , 0, 0, {})
    EndIf
EndIf
//|---------------------------------|
//| Exclusão - Fim  				|
//|---------------------------------|

RpcClearEnv()

Return