Pular para o conteúdo principal

RNF001 — Reimpressão de Notas Fiscais

Fonte​

  • Source: source/RNF001/
  • Form: source/RNF001/URNF001.pas
  • DataModule: source/RNF001/UdmRNF001.pas

Objetivo​

Tela de reimpressão de notas fiscais ja emitidas. Permite filtrar notas por empresa, tipo, serie, numero, situacao, periodo, vendedores, pessoas e produtos, marcar as notas/itens desejados via grid (botao de marca "Å") e reimprimir o DANFE/boleto correspondente ou etiquetas de volume a partir do layout configurado em PARMFATUR. Nao gera novas notas — apenas reexecuta a impressão, reusando os dados ja gravados em NOTA/ITEMNOTA/NFE.

Modelos de Relatorio​

RNF001 nao usa combobox "Modelo" tradicional. Os modelos correspondem as duas abas do relatorio, cada uma com SQL e layout proprios selecionados na hora da impressao. A combo "Modelo Impressao" (Visualiza / Imprime Direto) define somente o modo de saida, nao alterando o SQL.

Modelo 1: Reimpressao de Nota Fiscal (DANFE/documento)​

Quando usado: aba "Reimpressao de Notas" + botao "Imprimir Notas <F8>" (ou "Imprimir <F8>" da barra de ferramentas). SQL montado pelo botao "Consultar Notas <F3>" antes da selecao das notas no grid.

Layout: resolvido em runtime por nota via PARMNOTA.CD_LAYNOTA (linkado em JOIN por CD_EMPRESA/TP_NOTA/CD_SERIE). Nota com ST_CUPOMFISCAL = 'S' ou CD_LAYNOTA = 'CUPOM' e ignorada pela reimpressao (bypass). CarregaLayout e chamado para cada nota marcada no grid (checkbox "Å").

SQL Base:

SELECT CAST(NULL AS VARCHAR(1)) STATUS, N.CD_EMPRESA, N.DT_EMISSAO,
N.NR_LANCAMENTO, N.CD_SERIE, P.NM_PESSOA, N.VL_NOTAFISCAL,
COALESCE(N.NR_NOTAFISCAL, N.NR_NOTAFOR) NR_NOTAFISCAL,
CASE N.TP_NOTA WHEN 'E' THEN 'Entrada' ELSE 'Saida' END DS_TPNOTA,
N.TP_NOTA, PM.CD_LAYNOTA, PM.ST_CUPOMFISCAL
FROM NOTA N
INNER JOIN PESSOA P ON (P.CD_PESSOA = N.CD_PESSOA)
INNER JOIN ITEMNOTA I ON (I.CD_EMPRESA = N.CD_EMPRESA
AND I.NR_LANCAMENTO = N.NR_LANCAMENTO
AND I.TP_NOTA = N.TP_NOTA
AND I.CD_SERIE = N.CD_SERIE)
INNER JOIN PARMNOTA PM ON (PM.CD_EMPRESA = N.CD_EMPRESA
AND PM.CD_SERIE = N.CD_SERIE
AND PM.TP_NOTA = N.TP_NOTA)
/* retornaWhere dinamico: filtros + INNER JOIN opcional em NFE
(transmitida/pendente/denegada) + INNER JOIN opcional em ITEMNOTAVENDEDOR
quando PARMFATUR.ST_VARIOSVENDEDORES = 'S' */
GROUP BY STATUS, N.CD_EMPRESA, N.DT_EMISSAO, N.NR_LANCAMENTO,
N.CD_SERIE, P.NM_PESSOA, N.VL_NOTAFISCAL, NR_NOTAFISCAL,
TP_NOTA, PM.CD_LAYNOTA, PM.ST_CUPOMFISCAL

Parametros do CarregaLayout (por nota):

[0] CD_LAYNOTA (PARMNOTA) [4] CD_SERIE
[1] CD_EMPRESA [5] sessao.Path
[2] NR_LANCAMENTO [6] 'V' (Visualiza) ou 'I' (Imprime Direto) — combo "Modelo Impressao"
[3] TP_NOTA [7] Retorna_ImpressoraUsuario(...)
[10] 'RNF001' (módulo origem)

Modelo 2: Reimpressao de Etiqueta de Produto​

Quando usado: aba "Reimpressao de Etiquetas" + botao "Imprimir Etiquetas <F8>" (ou "Imprimir <F8>" da barra de ferramentas). Consulta base e montada pelo botao "Consultar Itens <F>"; o SQL final do layout e montado dinamicamente ao imprimir, a partir dos itens marcados no grid com suas quantidades.

Layout: PARMFATUR.CD_LAYETIQUETA da empresa da sessao (obrigatorio; sem ele, bloqueia com mensagem apontando [MFA001]). GravaRelatorio persiste o SQL montado antes do CarregaLayout.

SQL Base (consulta de itens na aba):

SELECT H.DS_PESO, H.DS_QTDE, CAST(NULL AS VARCHAR(1)) STATUS,
N.CD_EMPRESA, N.DT_EMISSAO, N.NR_LANCAMENTO, N.CD_SERIE,
COALESCE(N.NR_NOTAFOR, N.NR_NOTAFISCAL) NR_NOTAFISCAL,
CASE N.TP_NOTA WHEN 'E' THEN 'Entrada' ELSE 'Saida' END DS_TPNOTA,
N.TP_NOTA, IT.PS_ITEMNOTA, IT.QT_ITEMNOTA, I.CD_ITEM, I.DS_ITEM,
CAST(NULL AS DOM_INTEGER) QT_ETIQUETA,
CAST(NULL AS DOM_DATE) DT_ETIQUETA,
PF.CD_LAYETIQUETA
FROM NOTA N
INNER JOIN PESSOA P ON (P.CD_PESSOA = N.CD_PESSOA)
INNER JOIN ITEMNOTA IT ON (IT.CD_EMPRESA = N.CD_EMPRESA
AND IT.NR_LANCAMENTO = N.NR_LANCAMENTO
AND IT.TP_NOTA = N.TP_NOTA
AND IT.CD_SERIE = N.CD_SERIE)
INNER JOIN ITEM I ON (IT.CD_ITEM = I.CD_ITEM)
INNER JOIN PARMFATUR PF ON (PF.CD_EMPRESA = N.CD_EMPRESA)
LEFT JOIN HABILITA_PESOQTDE(IT.CD_ITEM) H ON (1 = 1)
/* retornaWhere dinamico com mesmos filtros do Modelo 1 */

SQL Base (montagem do payload para o layout de etiqueta):

SELECT V.*, :CD_EMPRESA CD_EMPRESA,
CAST( CASE WHEN V.CD_ITEM = <cdItem> THEN <dtEtiqueta> ELSE CURRENT_DATE END AS DATE) DT_ETIQUETA,
DATEADD(1 YEAR TO CAST(<...> AS DATE)) DT_VENC
FROM VIEW_ETIQUETAITEM(
'SELECT ITEM.DS_ITEM, ITEMTABPRECO.VL_PRECO, CD_CODIGOBARRA,
CAST(<CASE WHEN ITEM.CD_ITEM = <cdItem> THEN <qtEtiqueta>> AS NUMERIC(15,3)),
ITEM.SG_UNIDMED, ITEM.PS_LIQUIDO, ITEM.CD_ITEM,
ITEM.CD_FORNECEDOR1, ITEM.CD_FORNECEDOR2,
S.DS_SECAO, S.DS_APLICACAO, ITEM.PS_LIQUIDOEMB, ITEM.NR_DIASVALIDADE,
CAST(0 AS NUMERIC(15,3)) PS_TARA,
NULL, NULL, NULL, NULL
FROM ITEM
LEFT JOIN SECAO S ON (S.CD_SECAO = ITEM.CD_SECAO)
LEFT JOIN ITEMTABPRECO ON (ITEMTABPRECO.CD_TABPRECO = COALESCE(<PARMFATUR.CD_TABPRECO>, -1)
AND ITEMTABPRECO.CD_ITEM = ITEM.CD_ITEM)
WHERE ITEM.CD_CODIGOBARRA IS NOT NULL
AND ITEM.ST_ATIVO = ''S''
AND ITEM.CD_ITEM IN (<itens marcados>)
ORDER BY ITEM.CD_ITEM'
) V

Parametros do CarregaLayout (etiqueta):

[0] CD_LAYETIQUETA (PARMFATUR) [3] NR_RELATORIO gerado por GravaRelatorio
[1] CD_EMPRESA da sessao [4] sessao.Path
[2] CD_USUARIO da sessao [5] 'V' (visualiza)

Filtros​

Campos da aba "Dados Para Consulta" que alimentam o WHERE dinamico usado pelos botoes "Consultar Notas <F3>" e "Consultar Itens <F2>".

Campos simples:

  • Empresa (Lista de Empresas cadastradas) F9
  • Tipo da Nota (S=Saida / E=Entrada / T=Todas) — default "Saida"
  • Nº Lançamento
  • Série
  • Nº Nota Fiscal
  • Nº Nota Fornecedor
  • Espécie
  • Nº Ordem Carregamento
  • Situação (V=Valida / C=Cancelada / E=Excluidas / V,C=Todas Validas / T=Todas) — default "Valida"
  • NFe (S=Transmitida / P=Pendentes / D=Denegadas / T=Todas) — default "Denegadas"; controla INNER JOIN NFE com filtro de NR_PROTOCOLOAUT ou CSTAT IN (110,205,301,302)
  • Periodo de Emissao (De / Ate) — intervalo em N.DT_EMISSAO
  • Seq. de Numeros de Nota (De / Ate) — intervalo em NR_NOTAFOR (entrada) ou NR_NOTAFISCAL (saida)
  • Modelo Impressao (Visualiza / Imprime Direto) — default "Visualiza"; so afeta Modelo 1

Filtros de grid (multi-selecao via F9):

  • Pessoas Fisica / Juridica (Lista de Pessoas) F9 — multi-selecao, filtra N.CD_PESSOA IN (...)
  • Vendedores (Lista de Vendedores) F9 — multi-selecao, filtra N.CD_VENDEDOR IN (...). Se PARMFATUR.ST_VARIOSVENDEDORES = 'S', substitui por JOIN em ITEMNOTAVENDEDOR
  • Produtos (Lista de Produtos) F9 — multi-selecao, filtra I.CD_ITEM IN (...)

Parametros que Influenciam​

Campos de tabelas-parametro (ver TABELAS_PARAMETROS.md) que afetam o comportamento de RNF001.

TabelaCampoEfeito
PARMFATURCD_LAYETIQUETALayout usado na reimpressao de etiquetas. Obrigatorio para Modelo 2. Ausencia bloqueia com mensagem "O Layout de Etiqueta nao esta Cadastrado nos Parametros de Faturamento [MFA001]"
PARMFATURCD_TABPRECOTabela de preco usada no JOIN ITEMTABPRECO para buscar VL_PRECO impresso na etiqueta (Modelo 2). Quando nulo, JOIN resolve para -1 e VL_PRECO vem vazio
PARMFATURST_VARIOSVENDEDORESQuando 'S', a filtragem por vendedor passa a usar INNER JOIN ITEMNOTAVENDEDOR + ITNV.CD_VENDEDOR IN (...). Quando 'N'/outro, filtra diretamente por N.CD_VENDEDOR IN (...)
PARMNOTACD_LAYNOTALayout usado na reimpressao de nota fiscal (Modelo 1). Resolvido por nota via JOIN por CD_EMPRESA/TP_NOTA/CD_SERIE. Notas com CD_LAYNOTA = 'CUPOM' sao ignoradas
PARMNOTAST_CUPOMFISCALQuando 'S' na linha de PARMNOTA, a nota e ignorada pelo Modelo 1 (bypass sem chamar CarregaLayout)

Perguntas Frequentes​

P: Qual e a finalidade da tela RNF001? R: A tela RNF001 e utilizada para impressão de notas fiscais e etiquetas de produtos. Ela possui tres funcionalidades principais: (1) uma tela de filtros onde o usuario define criterios como empresa, periodo, pessoa fisica/juridica, vendedor, produto e faixa de sequencias para selecionar as notas; (2) uma tela de selecao onde o usuario marca quais notas deseja imprimir; e (3) uma tela de impressão de etiquetas onde e possivel definir quantidades por produto. O módulo gera relatorios de notas e permite a impressão de etiquetas com layouts configurados nos parametros de faturamento.


P: Ao tentar imprimir, o sistema apresenta a mensagem "Deve ser Selecionado ao menos uma nota para imprimir!". Como devo proceder? R: Esta mensagem ocorre quando nenhuma nota foi marcada na tela de selecao. Antes de clicar em Imprimir, selecione ao menos uma nota na lista marcando o campo de selecao correspondente.

P: O sistema exibe a mensagem "Deve ser Selecionado ao menos um item para imprimir!". O que devo fazer? R: Esta mensagem aparece quando nenhum item de nota foi selecionado para impressão. Na tela de selecao de itens, marque ao menos um item antes de prosseguir com a impressão.

P: Recebi a mensagem "O Layout de Etiqueta nao esta Cadastrado nos Parametros de Faturamento para a Empresa X. [MFA001]!". Como resolver? R: O layout de etiqueta nao foi configurado nos parametros de faturamento da empresa indicada. Acesse a tela Parametros de Faturamento (MFA001) e cadastre o layout de etiqueta para a empresa correspondente.

P: O sistema apresenta a mensagem "Deve ser informado ao menos a quantidade de uma etiqueta por produto para imprimir!". O que significa? R: Esta mensagem aparece ao tentar imprimir etiquetas sem informar a quantidade de nenhum produto. Na tela de etiquetas, informe a quantidade desejada para ao menos um produto antes de solicitar a impressão.

P: Ao consultar, recebo a mensagem "Consulta nao retornou registros". O que devo fazer? R: A consulta com os filtros informados nao encontrou notas ou itens correspondentes no banco de dados. Verifique os filtros aplicados (empresa, periodo, pessoa, vendedor, produto, sequencias) e ajuste-os para ampliar a busca.

P: Ao informar a Empresa, o sistema exibe a mensagem "A Empresa nao esta Cadastrada [ADM002]!". Como resolver? R: O codigo de empresa informado no filtro nao existe no cadastro do sistema. Verifique o codigo digitado ou utilize a tecla F9 para buscar uma empresa valida. O cadastro de empresas pode ser consultado na tela ADM002.

P: Ao informar a Pessoa, recebo a mensagem "A Pessoa Fisica / Juridica nao esta Cadastrada [TFA001]!". O que devo fazer? R: O codigo de pessoa informado nao corresponde a nenhum registro no cadastro de pessoas. Verifique o codigo digitado ou use a tecla F9 para buscar uma pessoa valida. O cadastro de pessoas pode ser consultado na tela TFA001.

P: Ao informar o Vendedor, o sistema apresenta a mensagem "O Vendedor nao esta Cadastrado [TFA007]!". Como proceder? R: O codigo de vendedor informado nao existe no cadastro de vendedores. Verifique o codigo digitado ou utilize a tecla F9 para localizar um vendedor valido. O cadastro de vendedores esta na tela TFA007.

P: Ao informar o Produto, recebo a mensagem "O Código do Produto nao esta Cadastrado [TPO001]!". Como resolver? R: O codigo de produto informado nao esta registrado no cadastro de produtos. Verifique o codigo digitado ou use a tecla F9 para buscar um produto valido. O cadastro de produtos esta na tela TPO001.

P: O sistema exibe a mensagem "O numero informado deve ser maior que zero!". O que significa? R: O valor informado no campo de sequencia inicial ou sequencia final e zero ou negativo. Informe um numero maior que zero para a faixa de sequencias.

P: Recebi a mensagem "A sequencia inicial deve ser menor que a final!". Como corrigir? R: O valor informado no campo de sequencia inicial e maior que o valor da sequencia final. Corrija os valores para que a sequencia inicial seja menor que a sequencia final.

P: O sistema apresenta a mensagem "A sequencia final deve ser maior que a inicial!". O que devo fazer? R: O valor informado no campo de sequencia final e menor que o valor da sequencia inicial. Ajuste os valores para que a sequencia final seja maior que a sequencia inicial.

P: Ao informar as datas, recebo a mensagem "A Data Inicial nao pode ser Maior que a Data Final!". Como proceder? R: A data informada no campo "Data Inicial" e posterior a data do campo "Data Final". Corrija as datas para que a data inicial seja igual ou anterior a data final.

P: O sistema exibe a mensagem "A Data Final nao pode ser Menor que a Data Inicial!". O que significa? R: A data informada no campo "Data Final" e anterior a data do campo "Data Inicial". Ajuste a data final para que seja igual ou posterior a data inicial.

Mensagens exibidas​

Levantadas de source/RNF001/ pela camada 0 (commit 96fc51e236).

Mais 16 mensagens com texto literal no código: RNF001.

Tabelas de Escrita (INSERT/UPDATE/DELETE)​

As escritas em EMPRESA/ITEM/PESSOA sao herdadas de infraestrutura compartilhada (cache/updates de referencia do framework), nao de operacoes transacionais da tela.

TabelaOperacoes
EMPRESADELETE, INSERT, SELECT, UPDATE
ITEMDELETE, INSERT, SELECT, UPDATE
PESSOADELETE, INSERT, SELECT, UPDATE

Tabelas de Leitura (SELECT)​

TabelaOperacoes
ITEMNOTASELECT
ITEMNOTAVENDEDORSELECT
ITEMTABPRECOSELECT
NFESELECT
NOTASELECT
PARMFATURSELECT
PARMNOTASELECT
SECAOSELECT

Procedures Chamadas​

ProcedureTabelas Acessadas
HABILITA_PESOQTDEITEM (SELECT), TIPOCALCULO (SELECT), UNIDMED (SELECT)
VIEW_ETIQUETAITEMCOLUNAGRADE (SELECT), GRADE (SELECT), GRUPO (SELECT), ITEM (SELECT), ITEMEMPRESA (SELECT), ITEMGRADE (SELECT) +12

Tabelas via Procedures (acesso indireto)​

TabelaOperacoes
COLUNAGRADESELECT
GRADESELECT
GRUPOSELECT
ITEMSELECT
ITEMEMPRESASELECT
ITEMGRADESELECT
ITEMLOCALSELECT
ITEMTABPRECOSELECT
ITEMTABPRECODATASELECT
LINHAGRADESELECT
LOCALESTOQUESELECT
LOTESEMENTESELECT
MARCASELECT
PARMFATURSELECT
SECAOSELECT
SESSAOSELECT
SUBGRUPOSELECT
TIPOCALCULOSELECT
TIPOLOCALSELECT
UNIDMEDSELECT

Dependencias Aferentes (quem alimenta esta tela)​

Telas que escrevem em tabelas lidas por esta tela. Limitado a 30 entradas mais acopladas.

TelaTítuloTabelas em Comum
MNF001Recebimento de Notas Fiscais de CompraEMPRESA, ITEM, ITEMNOTA, ITEMTABPRECO, NFE +3
CNF001Consulta de Notas FiscaisEMPRESA, ITEM, ITEMNOTA, ITEMNOTAVENDEDOR, NFE +2
MNF011Alteração de ComissõesEMPRESA, ITEM, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA +1
MNF030EMPRESA, ITEM, ITEMNOTA, NFE, NOTA +1
TFA006Tabelas de PreçoEMPRESA, ITEM, ITEMTABPRECO, PARMFATUR, PESSOA +1
CNF009Programação/Fechamento de ComissõesEMPRESA, ITEM, ITEMNOTAVENDEDOR, NOTA, SECAO
CNF012Consulta de CTRCEMPRESA, ITEM, ITEMNOTA, NOTA, PESSOA
CNF017EMPRESA, ITEM, ITEMTABPRECO, NOTA, PESSOA
MNF019Gerenciamento de Notas Geral/MestraEMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NFE, NOTA
MNF024EMPRESA, ITEM, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA
MNF032Importação de XML TransmitidoITEMNOTA, ITEMNOTAVENDEDOR, NFE, NOTA, PESSOA
MPD011Confirmação Ordem CarregamentoEMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA, PESSOA
MRC020Confirmação de Ordem de Carregamento RecapadoraEMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA, PESSOA
CFA003Gerenciamento de Margens sobre ProdutosEMPRESA, ITEM, ITEMTABPRECO, SECAO
CNF006Gerenciamento de Preços para VendaEMPRESA, ITEM, ITEMTABPRECO, SECAO
CNF007EMPRESA, ITEM, NOTA, SECAO
CNF008Demonstrativo de Margens sobre VendasEMPRESA, ITEM, PESSOA, SECAO
CNF011Consulta de NFS-eEMPRESA, ITEM, NOTA, PESSOA
CPD001Consulta de PedidosEMPRESA, ITEM, NFE, PESSOA
MNF002Emissão de Nota Fiscal de VendaEMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA
MNF016Controle de EntregaEMPRESA, ITEM, ITEMNOTA, PESSOA
MNF023Gerenciamento de Contas de ContratosEMPRESA, ITEMNOTA, NOTA, PESSOA
MNF026Troca de Produtos com Emissão de Nota FiscalEMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA
MNF029EMPRESA, ITEMNOTA, NOTA, PESSOA
MTR004DespesasITEMNOTA, NFE, NOTA, PESSOA
RNF002Comissão sobre Notas FiscaisEMPRESA, ITEM, PESSOA, SECAO
RNF004Relação de Notas FiscaisEMPRESA, ITEM, PARMNOTA, PESSOA
RNF005Demonstrativo de Notas FiscaisEMPRESA, ITEM, PESSOA, SECAO
MNF017Venda BalcãoEMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA
MNF007Devolução / Retorno de Notas FiscaisEMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA
...+533 telas

Dependencias Eferentes (quem consome dados desta tela)​

Como RNF001 nao gera dados transacionais, a lista de consumidores corresponde a todas as telas que leem EMPRESA/ITEM/PESSOA (tabelas-mestras). Informacional apenas.

TelaTítuloTabelas em Comum
...+1398 telas que leem EMPRESA/ITEM/PESSOA

Regras de Negocio​

  1. Exige selecionar pelo menos uma nota antes de imprimir (Deve ser Selecionado ao menos uma nota para imprimir!).
  2. Para reimpressao de etiquetas, exige selecao de item e quantidade > 0 por produto.
  3. O layout de etiqueta e obrigatorio em PARMFATUR da empresa ([MFA001]); a ausencia bloqueia a impressão com mensagem direcionando para MFA001.
  4. Marcacao/desmarcacao de linhas via botao de marca (btnMarca/btnMarcaItem) alterando tabNOTASTATUS/tabITEMNOTASTATUS em memoria.
  5. Filtros disponiveis: empresa, tipo de nota, serie, numero de lancamento, numero da nota fiscal, numero fornecedor, especie, ordem de carregamento, situacao, flag NFe, periodo de emissao, sequencia de numeros, vendedores, pessoas fisica/juridica e produtos.
  6. Reuso de dados: nenhuma alteracao em NOTA/ITEMNOTA/NFE — somente SELECT para montar o payload de impressão.

Modelos de Relatório​

RNF001 nao usa combobox "Modelo" tradicional. Os modelos correspondem as duas abas do relatorio, cada uma com SQL e layout proprios selecionados na hora da impressão. A combo "Modelo Impressao" (Visualiza / Imprime Direto) define somente o modo de saida, nao alterando o SQL.

Modelo 1: Reimpressao de Nota Fiscal (DANFE/documento)​

Quando usado: aba "Reimpressao de Notas" + botao "Imprimir Notas <F8>" (ou "Imprimir <F8>" da barra de ferramentas). SQL montado pelo botao "Consultar Notas <F3>" antes da selecao das notas no grid.

Layout: resolvido em runtime por nota via PARMNOTA.CD_LAYNOTA (linkado em JOIN por CD_EMPRESA/TP_NOTA/CD_SERIE). Nota com ST_CUPOMFISCAL = 'S' ou CD_LAYNOTA = 'CUPOM' e ignorada pela reimpressao (bypass). CarregaLayout e chamado para cada nota marcada no grid (checkbox "Å").

SQL Base:

SELECT CAST(NULL AS VARCHAR(1)) STATUS, N.CD_EMPRESA, N.DT_EMISSAO,
N.NR_LANCAMENTO, N.CD_SERIE, P.NM_PESSOA, N.VL_NOTAFISCAL,
COALESCE(N.NR_NOTAFISCAL, N.NR_NOTAFOR) NR_NOTAFISCAL,
CASE N.TP_NOTA WHEN 'E' THEN 'Entrada' ELSE 'Saida' END DS_TPNOTA,
N.TP_NOTA, PM.CD_LAYNOTA, PM.ST_CUPOMFISCAL
FROM NOTA N
INNER JOIN PESSOA P ON (P.CD_PESSOA = N.CD_PESSOA)
INNER JOIN ITEMNOTA I ON (I.CD_EMPRESA = N.CD_EMPRESA
AND I.NR_LANCAMENTO = N.NR_LANCAMENTO
AND I.TP_NOTA = N.TP_NOTA
AND I.CD_SERIE = N.CD_SERIE)
INNER JOIN PARMNOTA PM ON (PM.CD_EMPRESA = N.CD_EMPRESA
AND PM.CD_SERIE = N.CD_SERIE
AND PM.TP_NOTA = N.TP_NOTA)
/* retornaWhere dinamico: filtros + INNER JOIN opcional em NFE
(transmitida/pendente/denegada) + INNER JOIN opcional em ITEMNOTAVENDEDOR
quando PARMFATUR.ST_VARIOSVENDEDORES = 'S' */
GROUP BY STATUS, N.CD_EMPRESA, N.DT_EMISSAO, N.NR_LANCAMENTO,
N.CD_SERIE, P.NM_PESSOA, N.VL_NOTAFISCAL, NR_NOTAFISCAL,
TP_NOTA, PM.CD_LAYNOTA, PM.ST_CUPOMFISCAL

Parametros do CarregaLayout (por nota):

[0] CD_LAYNOTA (PARMNOTA) [4] CD_SERIE
[1] CD_EMPRESA [5] sessao.Path
[2] NR_LANCAMENTO [6] 'V' (Visualiza) ou 'I' (Imprime Direto) — combo "Modelo Impressao"
[3] TP_NOTA [7] Retorna_ImpressoraUsuario(...)
[10] 'RNF001' (módulo origem)

Modelo 2: Reimpressao de Etiqueta de Produto​

Quando usado: aba "Reimpressao de Etiquetas" + botao "Imprimir Etiquetas <F8>" (ou "Imprimir <F8>" da barra de ferramentas). Consulta base e montada pelo botao "Consultar Itens <F2>"; o SQL final do layout e montado dinamicamente ao imprimir, a partir dos itens marcados no grid com suas quantidades.

Layout: PARMFATUR.CD_LAYETIQUETA da empresa da sessao (obrigatorio; sem ele, bloqueia com mensagem apontando [MFA001]). GravaRelatorio persiste o SQL montado antes do CarregaLayout.

SQL Base (consulta de itens na aba):

SELECT H.DS_PESO, H.DS_QTDE, CAST(NULL AS VARCHAR(1)) STATUS,
N.CD_EMPRESA, N.DT_EMISSAO, N.NR_LANCAMENTO, N.CD_SERIE,
COALESCE(N.NR_NOTAFOR, N.NR_NOTAFISCAL) NR_NOTAFISCAL,
CASE N.TP_NOTA WHEN 'E' THEN 'Entrada' ELSE 'Saida' END DS_TPNOTA,
N.TP_NOTA, IT.PS_ITEMNOTA, IT.QT_ITEMNOTA, I.CD_ITEM, I.DS_ITEM,
CAST(NULL AS DOM_INTEGER) QT_ETIQUETA,
CAST(NULL AS DOM_DATE) DT_ETIQUETA,
PF.CD_LAYETIQUETA
FROM NOTA N
INNER JOIN PESSOA P ON (P.CD_PESSOA = N.CD_PESSOA)
INNER JOIN ITEMNOTA IT ON (IT.CD_EMPRESA = N.CD_EMPRESA
AND IT.NR_LANCAMENTO = N.NR_LANCAMENTO
AND IT.TP_NOTA = N.TP_NOTA
AND IT.CD_SERIE = N.CD_SERIE)
INNER JOIN ITEM I ON (IT.CD_ITEM = I.CD_ITEM)
INNER JOIN PARMFATUR PF ON (PF.CD_EMPRESA = N.CD_EMPRESA)
LEFT JOIN HABILITA_PESOQTDE(IT.CD_ITEM) H ON (1 = 1)
/* retornaWhere dinamico com mesmos filtros do Modelo 1 */

SQL Base (montagem do payload para o layout de etiqueta):

SELECT V.*, :CD_EMPRESA CD_EMPRESA,
CAST( CASE WHEN V.CD_ITEM = <cdItem> THEN <dtEtiqueta> ELSE CURRENT_DATE END AS DATE) DT_ETIQUETA,
DATEADD(1 YEAR TO CAST(<...> AS DATE)) DT_VENC
FROM VIEW_ETIQUETAITEM(
'SELECT ITEM.DS_ITEM, ITEMTABPRECO.VL_PRECO, CD_CODIGOBARRA,
CAST(<CASE WHEN ITEM.CD_ITEM = <cdItem> THEN <qtEtiqueta>> AS NUMERIC(15,3)),
ITEM.SG_UNIDMED, ITEM.PS_LIQUIDO, ITEM.CD_ITEM,
ITEM.CD_FORNECEDOR1, ITEM.CD_FORNECEDOR2,
S.DS_SECAO, S.DS_APLICACAO, ITEM.PS_LIQUIDOEMB, ITEM.NR_DIASVALIDADE,
CAST(0 AS NUMERIC(15,3)) PS_TARA,
NULL, NULL, NULL, NULL
FROM ITEM
LEFT JOIN SECAO S ON (S.CD_SECAO = ITEM.CD_SECAO)
LEFT JOIN ITEMTABPRECO ON (ITEMTABPRECO.CD_TABPRECO = COALESCE(<PARMFATUR.CD_TABPRECO>, -1)
AND ITEMTABPRECO.CD_ITEM = ITEM.CD_ITEM)
WHERE ITEM.CD_CODIGOBARRA IS NOT NULL
AND ITEM.ST_ATIVO = ''S''
AND ITEM.CD_ITEM IN (<itens marcados>)
ORDER BY ITEM.CD_ITEM'
) V

Parametros do CarregaLayout (etiqueta):

[0] CD_LAYETIQUETA (PARMFATUR) [3] NR_RELATORIO gerado por GravaRelatorio
[1] CD_EMPRESA da sessao [4] sessao.Path
[2] CD_USUARIO da sessao [5] 'V' (visualiza)