Reestruturação do controle de saldos dos cubos do módulo SIGAPCO
Linha de Produto: | Microsiga Protheus |
Segmento: | Serviços |
Módulo: | SIGAPCO - Planejamento e Controle Orçamentário |
Função: | Pcoa300 / Pcoa310 |
Situação/Requisito: | Reestruturação do controle de saldos dos cubos do módulo SIGAPCO e Reprocessamento de Lançamentos |
Solução/Implementação: | Reestruturação do controle de saldos dos cubos do módulo SIGAPCO e Reprocessamento de Lançamentos Após aplicação do patch deste chamado o controle de saldos será somente pela tabela de saldos diários (AKT) não mais atualizando a tabela de saldos mensais (AKS) por motivo de performance. Todas as rotinas que trabalham com saldos foram adequadas para trabalhar com única tabela de saldos diários (AKT), sendo que para usuário final a funcionalidade do sistema continua exatamente como sempre não afetando os programas padrões do módulo SIGAPCO. Verificar se ocorreu a criação do campo "Analitico" (AKT_ANALIT) na tabela de saldos diários que indicara se chave gravada é analítica. Criado também o parâmetro "MV_PCOPROC" com conteúdo "" em branco onde usuário poderá indicar o processo/item que esta preparado para no reprocessamento de lançamentos (PCOA310) executar com procedure, sendo que a inclusão e validação do registro será por ponto de entrada. É recomendável que seja excluído os registros da tabela AKS - Saldos Mensais uma vez que esta não será mais utilizada e também que seja reprocessado os saldos, pois o campo "Analitico" (AKT_ANALIT) será populado pela rotina de reprocessamento de saldos. Solicitamos cautela com este procedimento pois dependendo do volume de movimentos este processamento poderá demorar muitas horas, então verificar previamente a viabilidade da aplicação do patch com esta funcionalidade. Esclarecemos que tende a melhorar tempo de resposta de todas integrações, pois a partir da aplicação deste patch teremos menor numero de gravações das tabelas de saldos e semáforo da chave do cubo tende a ser liberado mais rapidamente. Recomendamos para os testes de homologação do pacotes seguir os seguintes procedimentos:
No reprocessamento de lançamento implementado, a condição de executar a inclusão dos movimentos orçamentários via procedure, sendo que a alternativa a macro execução do ponto de lançamento será via ponto de entrada que deve retornar um script em linguagem de procedure nos bancos de dados SQLSERVER, ORACLE, DB2 ou INFORMIX. veja documentação do ponto de entrada PCOA3105 no link TDN: DT_Ponto_entrada_PCOA3105_inclusao_movimentos_orcamentarios_por_procedure No reprocessamento de lançamento implementado também a condição de executar por customização a rotina, para tanto utilizar o exemplo de chamada abaixo: #INCLUDE "PROTHEUS.CH" USER FUNCTION PRCPCOA310() LOCAL APAR1 LOCAL APAR2 APAR1 := {.T., CTOD("01/01/14"), CTOD("31/12/14"), " ", .F., .F. } APAR2 := {} PCOA310( 2, "000082", "01", APAR1, APAR2 ) RETURN Síntaxe : PCOA310( nOpc, cCodProcesso, cItemProcesso, Array Parametros 1, Array Parametros 2 ) nOpc = 2 – Reprocessar cCodProcesso = "000082" - Processo de Contabilização cItemProcesso = "01" - Contabilização - Itens Array Parametros 1: Posicao 1 (Logico) = .T. - Excluir itens dos movimentos orçamentarios (AKD) referente ao processo indicado Posicao 2 (Data) = CtoD("01/01/14") - Periodo inicial para reprocessamento dos lançamentos e exclusao dos movimentos orçamentarios Posicao 3 (Data) = CtoD("31/01/14") - Periodo finall para reprocessamento dos lançamentos e exclusao dos movimentos orçamentarios Posicao 4 (Caracter) = " " - Filtro na tabela Origem (neste exemplo CT2) Posicao 5 (Logico) = .F. - Visualizar Lançamentos processados (em caso de procedure independente da resposta será considerado .F.) Posicao 6 (Logico) = .F. - Atualiza saldos apos reprocessamento de lançamentos Array Parametros 2: Posicao 1 (Caracter) = " " - Filtro adicional na tabela de movimentos orçamentários (AKD) utilizado para exclusão dos lançamentos |
Chamados relacionados: |
Reestruturação do controle de saldos dos cubos do módulo SIGAPCO
Características do Requisito
Linha de Produto: | Microsiga Protheus | ||||||||||||||||||||||||||||||||||||||||||||||
Segmento: | Serviços | ||||||||||||||||||||||||||||||||||||||||||||||
Módulo: | SIGAPCO - Planejamento e Controle Orçamentário | ||||||||||||||||||||||||||||||||||||||||||||||
Rotina: |
| ||||||||||||||||||||||||||||||||||||||||||||||
Cadastros Iniciais: | Cadastro de Contas Orçamentarias Cadastro de Classes Orçamentarias Cadastros de Tipos de Saldos Cadastro de Operaçoes Cadastro de Cubos | ||||||||||||||||||||||||||||||||||||||||||||||
Chamados Relacionados | TVTMDP | ||||||||||||||||||||||||||||||||||||||||||||||
País(es): | Todos | ||||||||||||||||||||||||||||||||||||||||||||||
Banco(s) de Dados: | Todos | ||||||||||||||||||||||||||||||||||||||||||||||
Tabelas Utilizadas: | AKT - Saldos Diarios | ||||||||||||||||||||||||||||||||||||||||||||||
Sistema(s) Operacional(is): | Todos |
Descrição
Reestruturação do controle de saldos dos cubos do módulo SIGAPCO
Após aplicação do patch deste chamado o controle de saldos será somente pela tabela de saldos diários (AKT) não mais atualizando a tabela de saldos mensais (AKS) por motivo de performance. Todas as rotinas que trabalham com saldos foram adequadas para trabalhar com única tabela de saldos diários (AKT), sendo que para usuário final as funcionalidades do sistema continuam exatamente como sempre foram, não afetando os programas padrões do módulo SIGAPCO.
As customizações que utilizavam a tabela AKS-Saldos Mensais deverão ser adequadas para somente ler a tabela AKT-Saldos Diários uma vez que a mensal será descontinuada.
Verificar a criação do campo "Analitico" (AKT_ANALIT) na tabela de saldos diários que indicara se chave gravada é analítica.
Criado também o parâmetro "MV_PCOPROC" com conteúdo "" (em branco) onde usuário poderá indicar o processo que esta preparado para no reprocessamento de lançamentos (PCOA310) executar com procedure, sendo que a inclusão e validação do registro será por ponto de entrada.
É recomendável que seja excluído os registros da tabela AKS - Saldos Mensais uma vez que esta não será mais utilizada e também que seja reprocessado os saldos, pois o campo "Analitico" (AKT_ANALIT) será populado pela rotina de reprocessamento de saldos. Solicitamos cautela com este procedimento pois dependendo do volume de movimentos este processamento poderá demorar muitas horas, então verificar previamente a viabilidade da aplicação do patch com esta funcionalidade.
Esclarecemos que tende a melhorar tempo de resposta de todas integrações, pois a partir da aplicação deste patch teremos menor numero de gravações das tabelas de saldos e semáforo da chave do cubo tende a ser liberado mais rapidamente.
Somente instalar a pacote de procedure p12_13;sps após rodar o compatilizador da base de dados U_UPDPCO, pois estas procedures alimentarão novo campo "Analitico" criado na tabela de movimentos diários.
No reprocessamento de lançamento implementado, a condição de executar a inclusão dos movimentos orçamentários via procedure, sendo que a alternativa a macro execução do ponto de lançamento será via ponto de entrada que deve retornar um script em linguagem de procedure nos bancos de dados SQLSERVER, ORACLE, DB2 ou INFORMIX.
veja documentação do ponto de entrada PCOA3105 no link TDN:
DT_Ponto_entrada_PCOA3105_inclusao_movimentos_orcamentarios_por_procedure
No reprocessamento de lançamento implementado também a condição de executar por customização a rotina, para tanto utilizar o exemplo de chamada abaixo:
#INCLUDE "PROTHEUS.CH"
USER FUNCTION PRCPCOA310()
LOCAL APAR1
LOCAL APAR2
APAR1 := {.T., CTOD("01/01/14"), CTOD("31/12/14"), " ", .F., .F. }
APAR2 := {}
PCOA310( 2, "000082", "01", APAR1, APAR2 )
RETURN
Síntaxe : PCOA310( nOpc, cCodProcesso, cItemProcesso, Array Parametros 1, Array Parametros 2 )
nOpc = 2 – Reprocessar
cCodProcesso = "000082" - Processo de Contabilização
cItemProcesso = "01" - Contabilização - Itens
Array Parametros 1:
Posicao 1 (Logico) = .T. - Excluir itens dos movimentos orçamentarios (AKD) referente ao processo indicado
Posicao 2 (Data) = CtoD("01/01/14") - Periodo inicial para reprocessamento dos lançamentos e exclusao dos movimentos orçamentarios
Posicao 3 (Data) = CtoD("31/01/14") - Periodo finall para reprocessamento dos lançamentos e exclusao dos movimentos orçamentarios
Posicao 4 (Caracter) = " " - Filtro na tabela Origem (neste exemplo CT2)
Posicao 5 (Logico) = .F. - Visualizar Lançamentos processados (em caso de procedure independente da resposta será considerado .F.)
Array Parametros 2:
Posicao 1 (Caracter) = " " - Filtro adicional na tabela de movimentos orçamentários (AKD) utilizado para exclusão dos lançamentos
Atualizações necessárias para esta implementação
(Apenas para Microsiga Protheus, versões anteriores à versão 12)
1. Criação ou Alteração (mantenha somente a instrução correspondente) de Campos no arquivo SX3 – Campos:
- Tabela AKT - Mov. Diários Cubo Gerencial
Campo | AKT_ANALIT |
Tipo | C |
Tamanho | 1 |
Decimal | 0 |
Título | Chv.Analit. |
Descrição | Chave Analitica |
Nível | 1 |
Usado | Sim |
Obrigatório | Não |
Browse | Não |
Help | Indica se chave é analítica. |
Importante:
O tamanho dos campos que possuem grupo pode variar conforme ambiente em uso.
7. Criação ou Alteração de Parâmetros no arquivo SX6 – Parâmetros:
Nome da Variável | MV_PCOPROC |
Tipo | C |
Descrição | Processos de lancamentos que pode ser executadas por procedure (processo/item). |
Valor Padrão | (em branco) |
Procedimento para Configuração
(Estes procedimentos devem ser feitos quando for necessário configurar parâmetros e/ou rotinas no menu).
CONFIGURAÇÃO DE PARÂMETROS
- No Configurador (SIGACFG), acesse Ambientes/Cadastros/Parâmetros (CFGX017). Crie/configure o parâmetro a seguir:
Itens/Pastas | Descrição |
Nome: | MV_PCOTHRD |
Tipo: | N |
Cont. Por.: | 2 |
Descrição: | Numero de Threads utilizadas no reprocessamento do saldos dos cubos. |
CONFIGURAÇÃO DE MENUS
2. No Configurador (SIGACFG), acesse Ambientes/Cadastro/Menu (CFGX013). Informe a nova opção de menu do informe o nome do módulo, conforme instruções a seguir:
Menu | Miscelanea |
Submenu | Reprocessamento |
Nome da Rotina | Cubos Multi-thread |
Programa | PCOA301 |
Módulo | SIGAPCO |
Tipo | PCOA301() |
Procedimento para Utilização
1. No módulo de Planejamento e Controle Orçamentário (SIGAPCO), acesse Miscelânea / Reprocessamento / Cubos Multi-thread (PCOA301).
2. Preencha os parâmetros na pasta Perguntas e Confirme
3. Na pasta Informações pressione o botão Executar.
Descrição
O ponto entrada PCOA3105 permite a inclusão de movimentos orçamentários utilizando linguagem de procedure dos bancos de dados SQLSERVER, ORACLE, DB2 e INFORMIX e funcionará como a transação para o processo de de inclusão do lançamento como alternativa a macro execução dos pontos de lançamentos. Para utilizar esta funcionalidade deverá o parâmetro MV_PCOPROC estar criado com conteúdo código do processo e item.
Esclarecemos que se utilizado esta funcionalidade todas as validações para o lançamento deverá ser efetuado via customização por esse ponto de entrada.
Os parâmetros passados ao ponto de entrada, são os seguintes:
- ParamIxb[1] - Código do processo de lançamento
- ParamIxb[2] - Item do processo de lançamento
- ParamIxb[3] - Parâmetros informados na entrada da rotina
- ParamIxb[4] - Tabela de origem
- ParamIxb[5] - Nome da procedure de item do lote (AKD_ID)
Ponto de Entrada
Descrição: | O ponto_entrada_PCOA3105 permite a inclusão de movimentos orçamentários utilizando linguagem de procedure dos bancos de dados SQLSERVER, ORACLE, DB2 e INFORMIX. O exemplo abaixo se refere ao processo 000082 - Contabilização Itens e deve ser retrabalhado para atendimento das necessidades do cliente. | ||||||||
Localização: | Miscelanea / Reprocessamento / Lançamentos | ||||||||
Eventos: | Reprocessamento de lançamentos | ||||||||
Programa Fonte: | PCOA310 | ||||||||
Função: | A310Proced | ||||||||
Retorno: |
|
Exemplo:
#include "Protheus.ch"
User Function PCOA3105()
Local cProcesso := ParamIxb[1] //Codigo do processo de lancto
Local cItem := ParamIxb[2] //item do processo de lancto
Local aRet := ParamIxb[3] //parametros informados
Local cAliasEntid := ParamIxb[4] //entidade de origem
Local __cProcId := ParamIxb[5] //nome da procedure de item do lote (AKD_ID)
Local cCposAKD
Local cVarsAKD
Local cTipoDB := Upper(Alltrim(TCGetDB()))
Local lOracle := "ORACLE" $ cTipoDB
Local lPostgres := "POSTGRES" $ cTipoDB
Local lDB2 := "DB2" $ cTipoDB
Local lInformix := "INFORMIX" $ cTipoDB
Local cOpConcat := If( lOracle .Or. lPostgres .Or. lDB2 .Or. lInformix, " || ", " + " )
//----------------------------------------------------------------------------------------------------------------//
// VARIAVEIS DAS ENTIDADES DE ORIGEM SAO PRECEDIDAS DE @+TIPO
// EXEMPLO CAMPO CT2_DATA --> VARIAVEL @cCT2_DATA
//
// VARIAVEIS CARACTERS QUE PODEM SER UTILIZADAS POIS SAO PARAMETRO DA PROCEDURE
// @IN_ENTIDA - ENTIDADE ORIGEM
// @IN_PROCES - CODIGO DO PROCESSO DE LANCAMENTO
// @IN_ITEMPR - ITEM DO PROCESSO DE LANCAMENTO
// @IN_NUMLOTE - NUMERO DO LOTE
// @IN_DATAINI - DATA INICIAL
// @IN_DATAFIM - DATA FINAL
//
// variavel @cId recebe proximo item do lote
// A CADA INSERT DEVE SE COLOCAR A CHAMADA DA PROCEDURE PARA PROXIMO ITEM DO LOTE AKD_ID
// cPE3105 +=" EXEC "+__cProcID+"_"+cEmpAnt+" @IN_NUMLOTE, @cId OutPut "+CRLF
//
// SE POSSUIR 2 INSERTs NO SEGUNDO DEVE INCREMENTAR VARIAVEL @iRecno
// cPE3105 += " select @iRecno = IsNull(Max( R_E_C_N_O_ ), 0 ) from "+RetSqlName("AKD") + CRLF
// cPE3105 += " select @iRecno = @iRecno + 1 "+ CRLF
//
// variavel inteira @nLinCount - controla numero de linhas por transacao MV_PCOLIMI
// SE POSSUIR 2 INSERTs NO SEGUNDO DEVE INCREMENTAR VARIAVEL @nLinCount quando for partida dobrada
// cQuery += " Select @nLinCount = @nLinCount + 1 "+ CRLF
//
//SEMPRE QUE UTILIZAR INSERT DEVE COLOCAR A DIRETIVA TRATARECNO antes do begin tran e colocar FIMTRATARECNO Apos commit tran
//cPE3105 += " ##TRATARECNO @iRecno\ "+ CRLF
//cPE3105 += " begin tran"+CRLF
//
//INSERT.........
//cPE3105 += " ##FIMTRATARECNO "+ CRLF
//----------------------------------------------------------------------------------------------------------------//
cPE3105 :=""
cPE3105 +=" select @cId = ' '"+CRLF
cPE3105 +=" if @IN_PROCES = '000082' begin "+CRLF
cCposAKD := "AKD_FILIAL,AKD_STATUS,AKD_LOTE,AKD_ID,AKD_DATA,AKD_CO,AKD_CLASSE,AKD_OPER,AKD_TIPO,AKD_TPSALD,AKD_HIST,AKD_IDREF,AKD_PROCES,AKD_CHAVE,AKD_ITEM,AKD_SEQ,AKD_USER,AKD_COSUP,AKD_VALOR1,AKD_VALOR2,AKD_VALOR3,AKD_VALOR4,AKD_VALOR5,AKD_CODPLA,AKD_VERSAO,AKD_CC,AKD_ITCTB,AKD_CLVLR,AKD_LCTBLQ,AKD_UNIORC,AKD_FILORI,D_E_L_E_T_,R_E_C_N_O_,R_E_C_D_E_L_"
//variaveis debito
cVarsAKD := "@cFil_AKD,'1' ,@IN_NUMLOTE,@cId,@cCT2_DATA,"+IF(cTipoDB$"MSSQL7","RTRIM","TRIM")+"(@cCT2_DEBITO),'000001',' ','2','RE','CONTABILIDADE DEBITO PARA AKD',' ' ,@IN_PROCES,@cCT2_FILIAL"+cOpConcat+"@cCT2_DATA"+cOpConcat+"@cCT2_LOTE"+cOpConcat+"@cCT2_SBLOTE"+cOpConcat+"@cCT2_DOC"+cOpConcat+"@cCT2_LINHA"+cOpConcat+"@cCT2_TPSALD"+cOpConcat+"@cCT2_EMPORI"+cOpConcat+"@cCT2_FILORI"+cOpConcat+"@cCT2_MOEDLC,@IN_ITEMPR,'01','"+__cUserId+"',' ',@nCT2_VALOR,0,0,0,0,' ',' ',@cCT2_CCD,@cCT2_ITEMD,@cCT2_CLVLDB,' ',' ','"+cFilAnt+"',' ',@iRecno,0"
cPE3105 +=" if @cCT2_DC = '3' OR @cCT2_DC = '1' begin "+CRLF
cPE3105 += " select @iRecno = IsNull(Max( R_E_C_N_O_ ), 0 ) from "+RetSqlName("AKD") + CRLF
cPE3105 += " select @iRecno = @iRecno + 1 "+ CRLF
cPE3105 +=" EXEC "+__cProcID+"_"+cEmpAnt+" @IN_NUMLOTE, @cId OutPut "+CRLF
cPE3105 += " ##TRATARECNO @iRecno\ "+ CRLF
cPE3105 += " begin tran"+CRLF
cPE3105 += " INSERT INTO "+RetSqlName("AKD") +" ("+cCposAKD+")"+ CRLF
cPE3105 += " VALUES ("+cVarsAKD+")" + CRLF
cPE3105 += " commit tran"+CRLF
cPE3105 += " ##FIMTRATARECNO "+ CRLF
cPE3105 += " end "+ CRLF //finaliza if @cCT2_DC
cPE3105 +=" if @cCT2_DC = '3' OR @cCT2_DC = '2' begin "+CRLF
cPE3105 += " if @cCT2_DC = '3' begin Select @nLinCount = @nLinCount + 1 end "+ CRLF
cPE3105 += " select @iRecno = IsNull(Max( R_E_C_N_O_ ), 0 ) from "+RetSqlName("AKD") + CRLF
cPE3105 += " select @iRecno = @iRecno + 1 "+ CRLF
cPE3105 +=" EXEC "+__cProcID+"_"+cEmpAnt+" @IN_NUMLOTE, @cId OutPut "+CRLF
//variaveis credito
cVarsAKD := "@cFil_AKD,'1' ,@IN_NUMLOTE,@cId,@cCT2_DATA,"+IF(cTipoDB$"MSSQL7","RTRIM","TRIM")+"(@cCT2_CREDIT),'000001',' ','1','RE','CONTABILIDADE CREDITO PARA AKD',' ' ,@IN_PROCES,@cCT2_FILIAL"+cOpConcat+"@cCT2_DATA"+cOpConcat+"@cCT2_LOTE"+cOpConcat+"@cCT2_SBLOTE"+cOpConcat+"@cCT2_DOC"+cOpConcat+"@cCT2_LINHA"+cOpConcat+"@cCT2_TPSALD"+cOpConcat+"@cCT2_EMPORI"+cOpConcat+"@cCT2_FILORI"+cOpConcat+"@cCT2_MOEDLC,@IN_ITEMPR,'01','"+__cUserId+"',' ',@nCT2_VALOR,0,0,0,0,' ',' ',@cCT2_CCC,@cCT2_ITEMC,@cCT2_CLVLCR,' ',' ','"+cFilAnt+"',' ',@iRecno,0"
cPE3105 += " ##TRATARECNO @iRecno\ "+ CRLF
cPE3105 += " begin tran"+CRLF
cPE3105 += " INSERT INTO "+RetSqlName("AKD") +" ("+cCposAKD+")"+ CRLF
cPE3105 += " VALUES ("+cVarsAKD+")" + CRLF
cPE3105 += " commit tran"+CRLF
cPE3105 += " ##FIMTRATARECNO "+ CRLF
cPE3105 += " end "+ CRLF //finaliza if @cCT2_DC
cPE3105 += " end"+ CRLF //finaliza if @IN_PROCES = '000082'
Return(cPe3105)