Á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
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};
			}



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 segundoperí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.


Bloco de código
languagediffxml
themeRDarkFadeToGrey
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_CO" 	 , "1010111" 	, nil}; 
			}



xAutoItens := {} 
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'},; //noestrutura 2o.do elemento de LINPOS tem que ser passado o campo do item e no 3o.elemento o codigo do item
				 {'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   };
				 })



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


//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

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