Á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
languagexml
themeFadeToGrey
titleExemplo de Inclusão da Planilha Orçamentária
collapsetrue
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.


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 := {;
			{"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 "*".


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)}, 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


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 diretamente previamente na rotina Orçamentos (PCOA100) (Atualizações / Planilhas / Orçamentos).