Árvore de páginas

Versões comparadas

Chave

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

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

- SIGAPCO

Passo a passo:

A rotina automática (ExecAuto

da

) do cadastro de planilha orçamentaria (PCOA100) pode ser utilizado de

2

duas formas

conforme segue

:

1) Primeira Situação:  Para incluir a

planilha orçamentaria

Planilha Orçamentaria (AK1) e o nó principal da estrutura (AK3).

Neste

Para este caso

somente

, deve ser passado para a função PCOA100 apenas

o array

a estrutura xAutoCab, contendo os campos da tabela

de planilha orçamentaria

"Planilha Orçamentaria" (AK1).

O argumento da função

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

2)Para alteração de itens orçamentarios (AK2) tanto para inclusão de itens como para alteração

Neste caso deve ser passado a função PCOA100 os array xAutoCab e xAutoItens sendo que:

-No array xAutoCab deve ser passado o codigo da planilha, a versão e a conta orçamentária que vai receber os itens passado no array xAutoItens e em ambos os array deve se referir a campos da tabela de itens orçamentários (AK2).Para se referenciar aos períodos deve o nome do campo ser precedido da letra P seguido de 2 digitos numericos que corresponde ao período, assim fica P01 para primeiro período P02 para segundo periodo e segue esta sequencia.

Para alterar um item ja existente deve ser usado a clausula LINPOS no primeiro elemento, no segundo o campo referente ao item e no terceiro o código do item da planilha.

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

Exemplo: xAutoCab := { {"AK2_ORCAME", "MYPLANORC" , nil},;
{"AK2_VERSAO", "0001" , nil},;
{"AK2_CO" , "1010111" , nil}; }

xAutoItens := {}
//exemplo de alteracao de um item ja existente na planilha
aAdd(xAutoItens,{ {'AK2_ORCAME' ,'MYPLANORC' , NIL},;
{'AK2_VERSAO' ,'0001' , NIL},;
{'AK2_CO' ,'111' , NIL},;
{'AK2_ID' ,'0001', NIL},;
{'AK2_CLASSE' ,'000001' , 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
{'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};
} )

 

//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("Incluido com sucesso! ")
Else
msgalert("Erro na inclusao!")
MostraErro()
EndIf
Else
//alteracao da planilha - 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



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:

Return

 

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
title

 

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