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

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", "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'},; //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 "*".

Observação: Note que para ocorra a correta inclusão dos itens na tabela estrutura da tabela (AK2) é necessário ter o analítico da estrutura.


Bloco de código
languagexml
themeFadeToGrey
titleInclusão de novo item na Planilha
collapsetrue
//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):

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" , "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 na 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},; 
                        {'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