Árvore de páginas

Versões comparadas

Chave

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

...

Produto:

Microsiga Protheus

Versões:

11.80 em diante

Ocorrência:

Como utilizar rotina automática ExecAuto da Planilha Orçamentária (PCOA100) ?

Ambiente:

SIGAPCO - Planejamento e Controle Orçamentário

Passo a passo:

A rotina automática (ExecAuto) do cadastro de planilha orçamentaria (PCOA100) pode ser utilizado de duas formas:

1) Primeira Situação:  Para incluir a Planilha Orçamentaria (AK1) e o nó principal da estrutura (AK3).

Para este caso, deve ser passado para a função PCOA100 apenas a estrutura xAutoCab, contendo os campos da tabela "Planilha Orçamentaria" (AK1).

A estrutura do xAutoItens não deve ser passado para a função.

Bloco de código
languagediffxml
themeRDarkFadeToGrey
titleExemplo de Inclusão da Planilha Orçamentária
collapsetrue
Local aAutoCab
aAutoCab := { ;
			{"AK1_CODIGO", "TSTPCOA100TESTEPLAN000001" 							, nil},;
			{"AK1_VERSAO", "0001" 									, nil},;
			{"AK1_DESCRI", "TESTE DO PCOA100 PARA INCLUIR PLANILHA" , nil},;
			{"AK1_TPPERI", "3" 										, nil},;
			{"AK1_INIPER", CTOD("01/01/16") 						, nil},;
			{"AK1_FIMPER", CTOD("31/12/16") 						, nil},;
			{"AK1_CTRUSR", "1" 										, nil},;
			{"AK1_STATUS", "1" 										, nil};
			}


2) Segunda Situação: Para alteração de itens do orçamento (AK2).

Para este caso, deve ser passado para a função PCOA100 as estruturas xAutoCab e xAutoItens.

Na estrutura xAutoCab deve ser passado o código da planilha, a versão e a conta orçamentária analítica,  analítica que receberá os itens passado na estrutura xAutoItens.

Os períodos devem ser preenchidos com a estrutura P99, onde 99 é o dígito numérico que representa o período desejado.

Exemplo: P01 para primeiro período, P02 para segundo segundo período e assim deve seguir até o último período desejado.2.1) Alterando um item já existente:

Para alterar um item já existente, deve ser usado a clausula LINPOS.

Nesta clausula, o primeiro elemento é o texto LINPOS, o segundo elemento é o campo referente ao item e no terceiro elemento deve ser o código do item da planilha.


Aviso
titleImportante


A rotina automática (Execauto) não fará o cadastro da estrutura analítica da planilha orçamentária.

Este cadastro deverá ser feito diretamente na rotina "Orçamentos" (Atualizações/Planilhas/Orçamentos).

Para incluir essa estrutura, altere a planilha desejada e selecione a opção: Outras Ações/Estrut./Incluir C.O..


2.1) Alterando um item já existente:

Para alterar um item já existente, deve ser usado a clausula LINPOS.

Nesta clausula, o primeiro elemento é o texto LINPOS, o segundo elemento é o campo referente ao item e no terceiro elemento deve ser o código do item da planilha.

Observação: para alterar os valores deve ser enviado toda a estrutura xAutoItens e modificar com os novos dados as posições desejadas.


Bloco de código
languagexml
themeFadeToGrey
titleAlteração de um item existente
collapsetrue
//exemplo de alteração de um item já existente na planilha 
xAutoCab := {
Bloco de código
languagediff
themeRDark
titleAlteração de um item existente
//exemplo de alteração de um item já existente na planilha 
xAutoCab := {;
			{"AK2_ORCAME", "MYPLANORC" 	, nil},;
			{"AK2_VERSAO", "0001" 		, nil},;
			{"AK2_COORCAME" 	 , "1010111TESTEPLAN000001" 	, nil},; 
			}



xAutoItens := {} 
aAdd(xAutoItens,{{'AK2_ORCAME' , 'MYPLANORC' , NIL   },; {"AK2_VERSAO", "0001" 			 , nil},;
				 {'"AK2_VERSAO'CO" 	 , '0001' "1010111" 		 , NIL   }, nil}; // Mesma conta analítica do xAutoItens
			}

xAutoItens := {} 
aAdd(xAutoItens,{;
				 {'AK2_COORCAME' 	   , '111TESTEPLAN000001' 		, , NIL   },; 
				 {'AK2_IDVERSAO' 	   , '0001' 	 	 	  , NIL   },;
				 {'AK2_CLASSECO' 	  , '0000011010111'	 	  , NIL   },;
				 {'LINPOS' 	   , 'AK2_ID' 	  , '0001'},; //no 2o. elemento de LINPOS tem que ser passado o campo do item e no 3o.elemento o codigo do item		 	  , NIL   },;
				{'AK2_CLASSE' , '000001'	 	  , NIL   },;
				 {'P01LINPOS' 	   , 11000'AK2_ID'	 		  , NIL   '0001'},; //primeiro períodoEstrutura do elemento LINPOS
				 {'P02P01' 	   	  , 1200011000 		 	  , NIL   },; //segundoP01 - primeiro período
				 {'P03P02' 	   	  , 1300012000 			  , NIL   },; //P02 - segundo período
				 {'P04P03' 	   	  , 1400013000 			  , NIL   },;
				 {'P05P04' 	   	  , 1500014000 			  , NIL   },;
				 {'P06P05' 	   	  , 1600015000 			  , NIL   },;
				 {'P07P06' 	   	  , 1700016000 			  , NIL   },;
				 {'P08P07' 	   	  , 1800017000 			  , NIL   },;
				 {'P09P08' 	   	  , 1900018000 		 	  , NIL   },;
				 {'P10P09' 	   	  , 2000019000 		 	  , NIL   },;
				 {'P11P10' 	   	  , 2100020000 		 	  , NIL   },;
				 {'P12P11' 	   	  , 2200021000 		 	  , NIL   },;
				 }){'P12' 	   	  , 22000 		 	  , NIL   };
				})


2.2) Criando um novo item em uma planilha existente:

Para incluir um novo item na planilha, no

conteudo

conteúdo do campo AK2_ID deve ser passado "*".


Bloco de código
languagexml
themeFadeToGrey
titleInclusão de novo item na Planilha
collapsetrue
//exemplo de inclusão de novo item na planilha 
xAutoCab := {;
			{"AK2_ORCAME", "TESTEPLAN000001" , nil},;
			{"AK2_VERSAO", "0001" 			 , nil},;
			{"AK2_CO" 	 , "1010111" 		 , nil}; // Mesma conta analítica do xAutoItens
			}

xAutoItens := {}
aAdd(xAutoItens,{;
				{'AK2_ORCAME' ,'TESTEPLAN000001' , NIL},; 
				{'AK2_VERSAO' ,'0001' 	   		 , NIL},;
				{'AK2_CO' 	  ,'1010111' 		 , NIL},;
				{'AK2_ID' 	  ,'*'				 , NIL},; //AKD_ID com '*' para criar um novo registro na AK2
				{'AK2_CLASSE' ,'000001' 		 , NIL},;
				{'P01' 		  ,11000 			 , NIL},; //P01 - primeiro período 
				{'P02' 		  ,12000 			 , NIL},; //P02 = segundo período
				{'P03' 		  ,13000 			 , NIL},;
				{'P04' 		  ,14000 			 , NIL},;
				{'P05' 		  ,15000 			 , NIL},;
				{'P06' 		  ,16000 			 , NIL},;
				{'P07' 		  ,17000 			 , NIL},;
				{'P08' 		  ,18000 			 , NIL},;
				{'P09' 		  ,19000 			 , NIL},;
				{'P10' 		  ,20000 			 , NIL},;
				{'P11' 		  ,21000 			 , NIL},;
				{'P12' 		  ,22000 			 , NIL};
				})
Aviso
titleAviso


O tamanho dos campos chave (Exemplo: AK2_ORCAME, AK2_VERSAO) devem respeitar o tamanho do dicionário de dados.
Verifique a necessidade de utilizar funções como PADR() para esta padronização.


Abaixo exemplo de código fonte para incluir planilha (AK1) e para alterar itens da planilha (AK2):

Bloco de código
languagexml
themeFadeToGrey
titleExemplo de ExecAuto
collapsetrue
#include "Protheus.ch"

User Function TstPcoa100()
    Local aAutoCab   := {}
    Local aAutoItens := {}

    Private lMsHelpAuto := .T.
    Private lMsErroAuto := .F.

    If MsgYesNo("Deseja Incluir planilha - Caso nao sera considerado alterar","Atencao")
        aAutoCab := { ;
                    {"AK1_CODIGO" , "TESTEPLAN000001"   , nil},;
                    {"AK1_VERSAO" , "0001"              , nil},;
                    {"AK1_DESCRI" , "TESTE DO PCOA100 PARA INCLUIR PLANILHA" , nil},;
                    {"AK1_TPPERI" , "3"                 , nil},;
                    {"AK1_INIPER" , CTOD("01/01/19")    , nil},;
                    {"AK1_FIMPER" , CTOD("31/12/19")    , nil},;
                    {"AK1_CTRUSR" , "1"                 , nil},;
                    {"AK1_STATUS" , "1"                 , nil};
                    }

        MSExecAuto( {|x, y, z, a, b, c| PCOA100(x, y, z, a, b, c)}, 

//exemplo de inclusão de novo item na planilha
aAdd(xAutoItens,{ {'AK2_ORCAME' ,'MYPLANORC' , NIL},;
{'AK2_VERSAO' ,'0001' , NIL},;
{'AK2_CO' ,'111' , NIL},;
{'AK2_ID' ,'*', NIL},;
{'AK2_CLASSE' ,'000001' , NIL},;
{'P01' ,11000 , NIL},; //primeiro período
 

{'P02' ,12000 , NIL},; //segundo período
{'P03' ,13000 , NIL},;
{'P04' ,14000 , NIL},;
{'P05' ,15000 , NIL},;
{'P06' ,16000 , NIL},;
{'P07' ,17000 , NIL},;
{'P08' ,18000 , NIL},;
{'P09' ,19000 , NIL},;
{'P10' ,20000 , NIL},;
{'P11' ,21000 , NIL},;
{'P12' ,22000 , NIL};
} )

//---------------------------------------------------------//

Abaixo exemplo de código fonte para incluir planilha (AK1) e para alterar itens da planilha (AK2)

//---------------------------------------------------------//

#include "Protheus.ch"

User Function TstPcoa100()

Local aAutoCab
Local aAutoItens

Private lMsHelpAuto := .T.
Private lMsErroAuto := .F.

If MsgYesNo("Deseja Incluir planilha - Caso nao sera considerado alterar","Atencao")
aAutoCab := { ;
{"AK1_CODIGO", "TSTPCOA100" , nil},;
{"AK1_VERSAO", "0001" , nil},;
{"AK1_DESCRI" , "TESTE DO PCOA100 PARA INCLUIR PLANILHA" , nil},;
{"AK1_TPPERI" , "3" , nil},;
{"AK1_INIPER" , CTOD("01/01/16") , nil},;
{"AK1_FIMPER" , CTOD("31/12/16") , nil},;
{"AK1_CTRUSR" , "1" , nil},;
{"AK1_STATUS" , "1" , nil};
}
MSExecAuto( {|x,y,z,a,b,c| PCOA100(x,y,z, a, b, c)},
3/*nCallOpcx*/,/*cRevisa*/, /*lRev*/, /*lSim*/, aAutoCab, /*xAutoItens*/) //inclusão
AK1
If !lMsErroAuto
msgalert
 na AK1

        If !lMsErroAuto
            msgalert("Incluido com sucesso! ")

Else

        Else 
            msgalert("Erro na inclusao!")


            MostraErro()

EndIf
Else

        EndIf

    Else

        //alteracao da planilha - A estrutura
tem que estar pronto AK1 / AK3
aAutoCab := { ;
{"AK2_ORCAME", "TSTPCOA100" , nil},;
{"AK2_VERSAO", "0001" , nil},;
{"AK2_CO" , "111" , nil};
}
aAutoItens := {}
//exemplo de alteracao de um item ja existente na planilha
aAdd(aAutoItens,{ {'AK2_ORCAME' ,'TSTPCOA100' , NIL},;
{'AK2_VERSAO' ,'0001' , NIL},;
{'AK2_CO' ,'111' , NIL},;
{'AK2_ID' ,'0001', NIL},;
{'AK2_CLASSE' ,'000001' , NIL},;
{'LINPOS' ,'AK2_ID' , '0001'},;
{'P01' ,11000 , NIL},;
{'P02' ,12000 , NIL},;
{'P03' ,13000 , NIL},;
{'P04' ,14000 , NIL},;
{'P05' ,15000 , NIL},;
{'P06' ,16000 , NIL},;
{'P07' ,17000 , NIL},;
{'P08' ,18000 , NIL},;
{'P09' ,19000 , NIL},;
{'P10' ,20000 , NIL},;
{'P11' ,21000 , NIL},;
{'P12' ,22000 , NIL};
} )
//exemplo de inclusao de um novo item na planilha
aAdd(aAutoItens,{ {'AK2_ORCAME' ,'TSTPCOA100' , NIL},;
{'AK2_VERSAO' ,'0001' , NIL},;
{'AK2_CO' ,'111' , NIL},;
{'AK2_ID' ,'*', NIL},; //para inclusão de novo item da planilha deve ser passado no conteúdo "*" e nao deve ser utilizado LINPOS
{'AK2_CLASSE' ,'000001' , NIL},;
{'P01' ,111000 , NIL},;
{'P02' ,112000 , NIL},;
{'P03' ,113000 , NIL},;
{'P04' ,114000 , NIL},;
{'P05' ,115000 , NIL},;
{'P06' ,116000 , NIL},;
{'P07' ,117000 , NIL},;
{'P08' ,118000 , NIL},;
{'P09' ,119000 , NIL},;
{'P10' ,120000 , NIL},;
{'P11' ,121000 , NIL},;
{'P12' ,122000 , NIL};
} )
MSExecAuto( {|x,y,z,a,b,c| PCOA100(x,y,z, a, b, c)}, 4/*nCallOpcx*/,/*cRevisa*/, /*lRev*/, /*lSim*/,aAutoCab, aAutoItens) //4=alteração para manipular itens da planilha
If !lMsErroAuto
msgalert("Alterado os itens da planilha com sucesso! ")
Else
msgalert("Erro na alteracao dos itens da planilha!")
MostraErro()
EndIf
EndIf

Return

 analítica da planilha tem que estar pronta AK1 / AK3
        aAutoCab := { ;
                    {"AK2_ORCAME"   , "TESTEPLAN000001" , nil },;
                    {"AK2_VERSAO"   , "0001"            , nil },;
                    {"AK2_CO"       , "1010111"         , nil }; 
                    }

        aAutoItens := {}
        /*
        //exemplo de alteracao de um item ja existente na planilha 
        aAdd(aAutoItens,{   {'AK2_ORCAME'   , 'TESTEPLAN000001' , NIL   },; 
                            {'AK2_VERSAO'   , '0001'            , NIL   },;
                            {'AK2_CO'       , '1010111'         , NIL   },;
                            {'AK2_ID'       , '0001'            , NIL   },;
                            {'AK2_CLASSE'   , '000001'          , NIL   },;
                            {'LINPOS'       , 'AK2_ID'          , '0001'},;
                            {'P01'          , 11000             , NIL   },;
                            {'P02'          , 12000             , NIL   },;
                            {'P03'          , 13000             , NIL   },;
                            {'P04'          , 14000             , NIL   },;
                            {'P05'          , 15000             , NIL   },;
                            {'P06'          , 16000             , NIL   },;
                            {'P07'          , 17000             , NIL   },;
                            {'P08'          , 18000             , NIL   },;
                            {'P09'          , 19000             , NIL   },;
                            {'P10'          , 20000             , NIL   },;
                            {'P11'          , 21000             , NIL   },;
                            {'P12'          , 22000             , NIL   };
                            } )
        */

        //exemplo de inclusao de um novo item na planilha
        aAdd(aAutoItens,{   {'AK2_ORCAME'   , 'TESTEPLAN000001' , NIL},; 
                            {'AK2_VERSAO'   , '0001'            , NIL},;
                            {'AK2_CO'       , '1010111'         , NIL},;
                            {'AK2_ID'       , '*'               , NIL},; 
                            {'AK2_CLASSE'   , '000001'          , NIL},;
                            {'P01'          , 111000            , NIL},;
                            {'P02'          , 112000            , NIL},;
                            {'P03'          , 113000            , NIL},;
                            {'P04'          , 114000            , NIL},;
                            {'P05'          , 115000            , NIL},;
                            {'P06'          , 116000            , NIL},;
                            {'P07'          , 117000            , NIL},;
                            {'P08'          , 118000            , NIL},;
                            {'P09'          , 119000            , NIL},;
                            {'P10'          , 120000            , NIL},;
                            {'P11'          , 121000            , NIL},;
                            {'P12'          , 122000            , NIL};
                            } ) 

        MSExecAuto( {|x, y, z, a, b, c| PCOA100(x, y, z, a, b, c)}, 4/*nCallOpcx*/, /*cRevisa*/, /*lRev*/, /*lSim*/, aAutoCab, aAutoItens) //4=alteração para manipular itens da planilha

        If !lMsErroAuto
            msgalert("Alterado os itens da planilha com sucesso! ")
        Else
            msgalert("Erro na alteracao dos itens da planilha!")
            MostraErro()
        EndIf

    EndIf

Return 
     





Observações:

Observações:

Não existe rotina automática para inclusão ou alteração da estrutura da planilha (AK3).

Sintaxe da função PCOA100:

PCOA100(3/*nCallOpcx*/,/*cRevisa*/, /*lRev*/, /*lSim*/,aAutoCab, /*xAutoItens*/) //3=inclusão 4=alteração


Aviso
titleAtenção


Não existe rotina automática para inclusão ou alteração da estrutura da planilha (AK3).

Conforme explicado anteriormente, essa estrutura deverá ser cadastrada previamente na rotina Orçamentos (PCOA100) (Atualizações / Planilhas / Orçamentos).