Árvore de páginas

Versões comparadas

Chave

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

...

Ponto de entrada para manipulação da condição da consulta (Query) principal do Extrator LCDPR e / ou substituição do campo Histórico (E5_HISTOR) por outro histórico customizado, além de permitir a manipulação dos campos selecionados nessa consulta.

03. SOLUÇÃO

Ponto de entrada (PE) F820Qry criado para receber a condição padrão da consulta através de parâmetro (cCond) e manipulá-la (modificá-la ou até substituí-la) a fim de atender a uma necessidade específica de filtro das informações para o Livro Caixa Digital do Produtor Ruralalém dos campos (cSelect) selecionados na consulta.

Nota: os campos recebidos e devolvidos por parâmetro precisam respeitar a ordem padrão.


Exemplo:

Compilar a função de usuário:


#Include "Protheus.ch"
#Include "rwmake.ch"


User Function F820Qry()

Local cRet  cCond     := ParamIXB[1// Condição (cláusula WHERE da query) padrão para geração dos movimentos financeiros LCDPR.
Local cSelect   := ParamIXB[2// Campos da consulta
Local aVarAux   := ParamIXB[3// Variáveis usadas na Query principal, sendo:
Local aVar      := aClone(aVarAux[1])
Local cJoin     := "" // Parâmetro disponibilizado para o retorno do PE em que se é permitido incluir outras
                        // entidades às que já estão no padrão da consulta (SED, SA1, SE2, etc) por meio
                        // de junções (INNER, LEFT, JOIN, por exemplo).

            // aVar[1] = cpf do declarante
            // aVar[2] = Array contendo os parâmetros da tela do wizard
                // aVar[2][1] - Cód. da versão do leiaute       
                // aVar[2][2] - Cpf do declarante               
                // aVar[2][3] - Reservado p/ o nome do declarante
                // aVar[2][4] - Indicador do início do período: 0 - Regular; 1 - Abertura; 2 - Início da obrigatoriedade
                // aVar[2][5// Recebe a cCond com a condição da query padrão
Local aTpDoc := {} // Para caso de tipos de documentos diferentes do padrão
cRet := '- Indicador de Sit. Especial: 0 - Normal; 1 - Falecimento; 2 - Espólio; 3 - Sapida definitiva do País
                // aVar[2][6] - Data da situação especial
                // aVar[2][7] - Data do início do período
                // aVar[2][8] - Data Final do período       
                // aVar[2][9] - Forma de apuração: 1 - Livro Caixa; 2 - Apuração Lucro p/ Lei 8023/90; 
                // aVar[2][10] - Diretório de gravação do arquivo
                // aVar[2][11] - Reservado para uso interno
            // aVar[3] = Tipo de data usada no extrator: 1- Data da baixa; 2- Data de Crédito
            // aVar[4] = Objeto usado na consulta: dados do banco
            // aVar[5] = Objeto usado na consulta: dados da filial
            // aVar[6] = Tamanho do campo filial da tabela SEV
            // aVar[7] = Tamanho do campo filial da tabela SE5
            // aVar[8] = Tamanho do campo filial da tabela SED
            // aVar[9] = Tamanho do campo filial da tabela SA6
            // aVar[10] = Tamanho do campo filial da tabela SA1
            // aVar[11] = Tamanho do campo filial da tabela SA2
            // aVar[12] = Tamanho do campo filial da tabela SE1
            // aVar[13] = Tamanho do campo filial da tabela SE2
            // aVar[14] = Natureza padrão do PIS
            // aVar[15] = Natureza padrão do SEST
            // aVar[16] = Natureza padrão do ISS
            // aVar[17] = Natureza padrão do COFINS 
            // aVar[18] = Natureza padrão do CSLL
            // aVar[19] = Natureza padrão do INSS
            // aVar[20] = Natureza padrão do IRRF
            // aVar[21] = Indica se o campo E5_CGC existe na base

Local aRet      := {}
Local cSelUsr   := cSelect // Padrão:  SUBSTRING(E5_DATA,7,2) DIA, SUBSTRING(E5_DATA, 5, 2) || SUBSTRING(E5_DATA, 1, 4) MES_ANO, E5_DATA DDATA, "
            // TRFIL.COD FILCOD, FVV.FVV_PARTIC AS PERC, TRBCO.COD BANCO, E5_PREFIXO PREFIXO, E5_NUMERO NUMDOC, E5_HISTOR HIST, SA1.A1_CGC CNPJCLI, SA2.A2_CGC CNPJFOR, " 
            // E5_TIPODOC TPDOC, E5_TIPO, E5_RECPAG RECPAG, E1_VLCRUZ, E2_VLCRUZ, E1_SALDO SLDREC, E2_SALDO SLDPAG, E5_MOTBX, SE5.R_E_C_N_O_ REC, E5_CLIFOR CLIFOR, "
            // E5_VALOR AS VALOR "

            // , E5_CGC AS CGC (campo disponível a partir do dicionário do leiaute 1.3)

            // , E5_VLMOED2 VLMOED2, E5_MOEDA MOEDA, E5_ORIGEM ORI , E5_PARCELA PARC , E5_LOJA LOJA, ' ' CODEMP, E5_FILIAL SEFIL "
            // , ISNULL(CASE WHEN E1_VLCRUZ > 0 THEN SF2IMP.R_E_C_N_O_ ELSE SF1IMP.R_E_C_N_O_ END,0) RECSF12 "
            // , ISNULL(CASE WHEN E1_VLCRUZ > 0 THEN SF2IMP.F2_VALBRUT ELSE SF1IMP.F1_VALBRUT END,0) VBRUT12 "
            // , ISNULL(CASE WHEN E1_VLCRUZ > 0 THEN SF2IMP.F2_VLSENAR ELSE SF1IMP.F1_VLSENAR END,0) VSENA12 "
            // , ISNULL(CASE WHEN E1_VLCRUZ > 0 THEN SF2IMP.F2_VALINSS ELSE SF1IMP.F1_INSS END,0) VINSS12 "
            // , ISNULL(CASE WHEN E1_VLCRUZ > 0 THEN SF2IMP.F2_CONTSOC ELSE SF1IMP.F1_CONTSOC END,0) COSOC12 " 
            // , NULL NFTOTAL, NULL FUNRURAL, NULL VLSENAR, NULL VALINS, NULL VLFETFAC "


Local cCondCust : = " AND E5_NATUREZ = 1 'MYNATUR'

aTpDoc := { , 'FTM|FTN|FTT' } // Exemplo de utilização informando 3 tipos de faturas, além da 'FT ' do padrão

"


cJoin   := "" // Usado para junção da query principal com outras entidades. Ex.:
                // "LEFT JOIN MINHATAB AS MTAB ON E5_IDORIG = MTAB.IDDOC
cCond   := cCond + cCondCust

aAdd(aRet, cCond)
aAdd(aRet, " E5_BENEF || ' - ' || E5_IDORIG "// Parâmetro que substitui a impressão do histórico do título (campo E5_HISTOR).

aAdd(aRet, cSelUsr + ", MTAB.CPO_A AS MEUCPO "// Parâmetro para definir tratativas na consulta principal do relatório, sempre respeitando a estrutura padrão dos campos da consulta.
aAdd(aRet, cJoin)
aAdd(aRet, {{ "MEUCPO", "C", 10, 0}}) // Parâmetro obrigatório caso se adicione campos de outras tabelas
                                        // ao 3º parâmetro do aRet
                                        // Estrutura: aRet[5][1][1] - Alias do campo
                                        // Estrutura: aRet[5][1][2] - Tipo de dado (C - Caracter; ou N - Numérico)
                                        // Estrutura: aRet[5][1][3] - Tamanho do campo 
                                        // Estrutura: aRet[5][1][4] - Parte decimal do campo (se numérico)

aAdd(aRet, " E1_HIST || ' - ' || E1_ORIGEM "// Parâmetro que substitui a impressão do histórico do título (campo E1_HIST).

aAdd(aRet, " E2_HIST || ' - ' || E2_ORIGEM "// Parâmetro que substitui a impressão do histórico do título (campo E2_HIST).

Return aRetReturn { cRet, aTpDoc }

Onde o 'cCond' recebido por parâmetro é a cláusula Where padrão do Extrator LCDPR e 'cSelect' contém os campos utilizados na primeira parte da consulta do Extrator. Como a consulta contém alguns UNION em sua estrutura, essa ordem padrão deve ser mantida.

Já o terceiro parâmetro passado (aVar) contém todas as variáveis locais utilizadas na query.

O quarto parâmetro (cJoin) está disponível para retorno de uma junção customizada do operador com as junções padrões existentes (entidade SED, SA1, SE2, etc).

O quinto parâmetro (aRet[5]) deverá conter a estrutura de campos customizados e que tenham sido adicionados ao 3º parâmetro (cSelUsr), quando for necessário.

O sexto parâmetro (aRet[6]: é o campo (ou conjunto de campos) que irão substituir a informação contida no campo E1_HIST  de cada Recebimento Antecipado (RA) quando MV_LCDPRRA = 'D'.

O sétimo parâmetro (aRet[7]: é o campo (ou conjunto de campos) que irão substituir a informação contida no campo E2_HIST  de cada Pagamento Antecipado (PA) quando MV_LCDPRPA = 'D'.


Informações
titleNota

A validação para os campos  (E5_TIPO / E5_DOCUMEN/ E5_IDMOVI/ E5_TIPODOC/ E5_NUMERO/ E5_BANCO/ E5_AGENCIA/ E5_CONTA/ E5_NUMCHEQ) da tabela de movimento bancário (SE5) para verificar se os mesmos não estão vazios, devem ser controlados pelo ponto de entrada.

Ex: !Empty(SE5->(E5_BANCO+E5_AGENCIA+E5_CONTA+E5_NUMCHEQ) 

Caso desejar tratar dados de empresas diferentes no arquivo disponibilizamos o campo CODEMP (Código da empresa), para que possa ser informado via ponto de entrada a empresa que deseja consultar. Nesse caso, a informação do campo é OBRIGATÓRIA.

Ex:  'T2' AS CODEMP, para a tabela de movimento SE5"T2"0.

Caso não haja outras empresas envolvidas na consulta, o campo poderá ser definido como vazio(' ').

04. DEMAIS INFORMAÇÕES

Retorno do PE:

cRetcCond (posição 1ª do aRet): condição escrita (em formato de consulta SQL) para filtragem nos dados da base de forma customizada; e

aTpDoc: é o array retornado na segunda posição (caso necessário) para indicar os tipos de documentos existentes além dos tipos do padrão.

Estrutura do aTpDpc:

aTpDoc[1]: tipo Nota Fiscal, além do 'NF' padrão;

aTpDoc[2]: tipo Fatura, além do 'FT' do padrão;

aTpDoc[3]: tipo Recibo, além do 'RC' do padrão;

aTpDoc[4]: tipo Contrato, além do 'C01' do padrão;

aTpDoc[5]: tipo Folha de pagamento, além do 'FOL' do padrão.

Todos os tipos devem ser informados, cada qual em sua posição específica no array, separados por '|' (Pipe). Exemplo:

aRet[2]: é o campo (ou conjunto de campos) que irão substituir a informação contida no campo E5_HISTOR  de cada movimento financeiro (SE5);

cSelUsr (posição 3ª do aRet): campos selecionados na consulta padrão dos movimentos financeiros;

(cJoin) está disponível para retorno de uma junção customizada do operador com as junções padrões existentes (entidade SED, SA1, SE2, etc); e

(aRet[5]) deverá conter a estrutura de campos customizados e que tenham sido adicionados ao 3º parâmetro (cSelUsr), quando for necessário.

aRet[6]: é o campo (ou conjunto de campos) que irão substituir a informação contida no campo E1_HIST  de cada Recebimento Antecipado (RA) quando MV_LCDPRRA = 'D';

aRet[7]: é o campo (ou conjunto de campos) que irão substituir a informação contida no campo E2_HIST  de cada Pagamento Antecipado (PA) quando MV_LCDPRPA = 'D';aTpDoc := { 'NFC|NFX', 'FTY|FTA',,'CNT' }

05. ASSUNTOS RELACIONADOS

...