Page tree
Skip to end of metadata
Go to start of metadata

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

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.

Exemplo de Inclusão da Planilha Orçamentária
Local aAutoCab
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/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 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 período e assim deve seguir até o último período desejado.


Importante


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.


Alteração de um item existente
//exemplo de alteração de um item já existente 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' 	  , '0001'		 	  , NIL   },;
				{'AK2_CLASSE' , '000001'	 	  , NIL   },;
				{'LINPOS' 	  , 'AK2_ID'	 	  , '0001'},; //Estrutura do elemento LINPOS
				{'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   };
				})


2.2) Criando um novo item em uma planilha existente:

Para incluir um novo item na planilha, no conteúdo do campo AK2_ID deve ser passado "*".


Inclusão de novo item na Planilha
//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


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):

Exemplo de ExecAuto
#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)}, 3/*nCallOpcx*/,/*cRevisa*/, /*lRev*/, /*lSim*/, aAutoCab, /*xAutoItens*/) //inclusão na AK1

        If !lMsErroAuto
            msgalert("Incluido com sucesso! ")
        Else 
            msgalert("Erro na inclusao!")
            MostraErro()
        EndIf

    Else

        //alteracao da planilha - A estrutura 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:

Sintaxe da função PCOA100:

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


Atençã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).