Á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", "TSTPCOA100TESTEPLAN000001" 							, 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,  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 segundo período e assim deve seguir até o último período desejado.2.1) Alterando um item já existente:


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 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", "MYPLANORCTESTEPLAN000001" 	, nil},;
			{"AK2_VERSAO", "0001" 			 , nil},;
			{"AK2_CO" 	 , "1010111" 		 , nil}; // Mesma conta analítica do xAutoItens
			}



xAutoItens := {} 
aAdd(xAutoItens,{;
				{'AK2_ORCAME' , 'MYPLANORCTESTEPLAN000001' , NIL   },; 
				 {'AK2_VERSAO' , '0001' 	 ,	 	  , NIL   },;
				 {'AK2_CO' 	   , '1111010111'	 		  , NIL   },;
				 {'AK2_ID' 	   , '0001'		 	  , NIL   },;
				 {'AK2_CLASSE' , '000001'	 	  , NIL   },;
				 {'LINPOS' 	   , 'AK2_ID'	 	  , '0001'},; //estruturaEstrutura 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 na 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
titleAlteração Inclusão de um item existentenovo item na Planilha
collapsetrue
//exemplo de inclusão de novo item na planilha 
aAdd(xAutoItens,{ {'xAutoCab := {;
			{"AK2_ORCAME' ,'MYPLANORC'", "TESTEPLAN000001" , NILnil},; 
				{'"AK2_VERSAO'", ,'0001'"0001" 			 , NILnil},;
				{'"AK2_CO'" 	 ,'111' "1010111" 		 , NILnil},;; // Mesma conta analítica do xAutoItens
				{'AK2_ID' ,'*', NIL},}

xAutoItens := {}
aAdd(xAutoItens,{;
				{'AK2_CLASSEORCAME' ,'000001TESTEPLAN000001' , NIL},; 
				{'P01AK2_VERSAO' ,11000'0001' ,	 NIL},; //primeiro período 
				{'P02' ,12000 , NIL},; //segundo período
				{'P03AK2_CO' ,13000	 , NIL},;
				{'P04'1010111' ,14000		 , NIL},;
				{'P05AK2_ID' ,15000	 , NIL},;
,'*'				{'P06' ,16000 , NIL},;
				{'P07' ,17000 , NIL},; //AKD_ID com '*' para criar um novo registro na AK2
				{'P08AK2_CLASSE' ,18000'000001' 		 , NIL},;
				{'P09P01' 		 ,19000 ,11000 NIL},;
				{'P10' ,20000 , NIL},; //P01 - primeiro período 
				{'P11P02' ,21000		  ,12000 			 , NIL},; //P02 = segundo período
				{'P12P03' 		  ,2200013000 			 , NIL},;
				} )

Exemplo de ExecAuto completo

{'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")
Bloco de código
languagexml
themeFadeToGrey
titleAlteração de um item existente
#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},;
        aAutoCab := { ;
         {"AK1_TPPERI" , "3"         {"AK1_CODIGO" , "TESTEPLAN000001"      , nil},;
                    {"AK1_INIPERVERSAO" , CTOD("01/01/16")"0001"              , nil},;
                    {"AK1_FIMPERDESCRI" , CTOD("31/12/16")   "TESTE DO PCOA100 PARA INCLUIR PLANILHA" , nil},;
                    {"AK1_CTRUSRTPPERI" , "13"                 , nil},;
                    {"AK1_STATUSINIPER" , "1"CTOD("01/01/19")    , nil},;
                    {"AK1_FIMPER" , CTOD("31/12/19")    , nil},;
                    }

  {"AK1_CTRUSR" , "1"      MSExecAuto( {|x, y, z, a, b, c| PCOA100(x, y, z, a, b, c)nil}, 3/*nCallOpcx*/,/*cRevisa*/, /*lRev*/, /*lSim*/, aAutoCab, /*xAutoItens*/) //inclusão na AK1

;
                If !lMsErroAuto
   {"AK1_STATUS" , "1"       msgalert("Incluido com sucesso! ")
       , Else nil};
            msgalert("Erro na inclusao!")
      }

      MostraErro()
  MSExecAuto( {|x, y, z, a,  EndIf

    Else

    //alteracao da planilha - estrutura tem que estar pronto AK1 / AK3
    aAutoCab := { ;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!  {"AK2_ORCAME"")
    , "TSTPCOA100"  , nilElse },;
            msgalert("Erro na inclusao!")
  {"AK2_VERSAO"    , "0001"     MostraErro()
   , nil },;
   EndIf

    Else

         {"AK2_CO"       , "111"         , nil }; 
     //alteracao da planilha - A estrutura analítica da planilha tem que estar pronta AK1 / AK3
        aAutoCab := { ;
           }

    aAutoItens := {} 
    //exemplo de alteracao de um item ja existente na planilha 
    aAdd(aAutoItens,{   {'  {"AK2_ORCAME'"   , 'TSTPCOA100'  "TESTEPLAN000001" , NIL nil  },; 
                        {'"AK2_VERSAO'"   , '"0001'"         , NIL  , nil },;
                        {'"AK2_CO'"       , '111'"1010111"         , NIL  nil },; 
                    }

    {'AK2_ID'    aAutoItens := {}
 , '0001'      /*
  , NIL   },;
   //exemplo de alteracao de um item ja existente na planilha 
        aAdd(aAutoItens,{   {'AK2_CLASSEORCAME'   , '000001TESTEPLAN000001'      , NIL   },; 
                            {'LINPOSAK2_VERSAO'   , '0001'     , 'AK2_ID'      , '0001' NIL   },;
                            {'P01AK2_CO'          , 11000'1010111'         , NIL   },;
                            {'P02AK2_ID'       , '0001'  , 12000         , NIL   },;
                        {'P03'    {'AK2_CLASSE'      , 13000, '000001'          , NIL   },;
                            {'P04LINPOS'       , 'AK2_ID'  , 14000       ,  , NIL'0001'},;
    },;
                        {'P05P01'          , 1500011000             , NIL   },;
                            {'P06P02'          , 1600012000             , NIL   },;
                            {'P07P03'          , 13000    17000         , NIL   },;
                            {'P08P04'          , 14000  18000           , NIL   },;
                            {'P09P05'          , 15000 19000            , NIL   },;
                            {'P10P06'          , 2000016000             , NIL   },;
                            {'P11P07'          , 17000    21000         , NIL   },;
                            {'P12P08'          , 18000   22000          , NIL   },;
                        }   )

  {'P09'   //exemplo de inclusao de um novo item na, planilha
19000    aAdd(aAutoItens,{   {'AK2_ORCAME'   ,  'TSTPCOA100' , NIL  NIL },; 
                        {'AK2_VERSAO'   ,  {'0001P10'          , 20000             , NIL   },;
                            {'AK2_COP11'          , 21000    '111'         , NIL   NIL},;
                            {'AK2_IDP12'          , 22000 '*'            , NIL   NIL},; 
                        {'AK2_CLASSE'   , } '000001')
     ,   NIL},;*/

        //exemplo de inclusao de um novo item          {'P01'          ,   111000      ,   NIL},;na planilha
                        {'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
     
//---------------------------------------------------------//

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

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:

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