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 NFEcom filtro deNR_PROTOCOLOAUTouCSTAT 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) ouNR_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 (...). SePARMFATUR.ST_VARIOSVENDEDORES = 'S', substitui por JOIN emITEMNOTAVENDEDOR - 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.
| Tabela | Campo | Efeito |
|---|---|---|
| PARMFATUR | CD_LAYETIQUETA | Layout 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]" |
| PARMFATUR | CD_TABPRECO | Tabela 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 |
| PARMFATUR | ST_VARIOSVENDEDORES | Quando '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 (...) |
| PARMNOTA | CD_LAYNOTA | Layout 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 |
| PARMNOTA | ST_CUPOMFISCAL | Quando '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.
| Tabela | Operacoes |
|---|---|
| EMPRESA | DELETE, INSERT, SELECT, UPDATE |
| ITEM | DELETE, INSERT, SELECT, UPDATE |
| PESSOA | DELETE, INSERT, SELECT, UPDATE |
Tabelas de Leitura (SELECT)
| Tabela | Operacoes |
|---|---|
| ITEMNOTA | SELECT |
| ITEMNOTAVENDEDOR | SELECT |
| ITEMTABPRECO | SELECT |
| NFE | SELECT |
| NOTA | SELECT |
| PARMFATUR | SELECT |
| PARMNOTA | SELECT |
| SECAO | SELECT |
Procedures Chamadas
| Procedure | Tabelas Acessadas |
|---|---|
| HABILITA_PESOQTDE | ITEM (SELECT), TIPOCALCULO (SELECT), UNIDMED (SELECT) |
| VIEW_ETIQUETAITEM | COLUNAGRADE (SELECT), GRADE (SELECT), GRUPO (SELECT), ITEM (SELECT), ITEMEMPRESA (SELECT), ITEMGRADE (SELECT) +12 |
Tabelas via Procedures (acesso indireto)
| Tabela | Operacoes |
|---|---|
| COLUNAGRADE | SELECT |
| GRADE | SELECT |
| GRUPO | SELECT |
| ITEM | SELECT |
| ITEMEMPRESA | SELECT |
| ITEMGRADE | SELECT |
| ITEMLOCAL | SELECT |
| ITEMTABPRECO | SELECT |
| ITEMTABPRECODATA | SELECT |
| LINHAGRADE | SELECT |
| LOCALESTOQUE | SELECT |
| LOTESEMENTE | SELECT |
| MARCA | SELECT |
| PARMFATUR | SELECT |
| SECAO | SELECT |
| SESSAO | SELECT |
| SUBGRUPO | SELECT |
| TIPOCALCULO | SELECT |
| TIPOLOCAL | SELECT |
| UNIDMED | SELECT |
Dependencias Aferentes (quem alimenta esta tela)
Telas que escrevem em tabelas lidas por esta tela. Limitado a 30 entradas mais acopladas.
| Tela | Título | Tabelas em Comum |
|---|---|---|
| MNF001 | Recebimento de Notas Fiscais de Compra | EMPRESA, ITEM, ITEMNOTA, ITEMTABPRECO, NFE +3 |
| CNF001 | Consulta de Notas Fiscais | EMPRESA, ITEM, ITEMNOTA, ITEMNOTAVENDEDOR, NFE +2 |
| MNF011 | Alteração de Comissões | EMPRESA, ITEM, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA +1 |
| MNF030 | EMPRESA, ITEM, ITEMNOTA, NFE, NOTA +1 | |
| TFA006 | Tabelas de Preço | EMPRESA, ITEM, ITEMTABPRECO, PARMFATUR, PESSOA +1 |
| CNF009 | Programação/Fechamento de Comissões | EMPRESA, ITEM, ITEMNOTAVENDEDOR, NOTA, SECAO |
| CNF012 | Consulta de CTRC | EMPRESA, ITEM, ITEMNOTA, NOTA, PESSOA |
| CNF017 | EMPRESA, ITEM, ITEMTABPRECO, NOTA, PESSOA | |
| MNF019 | Gerenciamento de Notas Geral/Mestra | EMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NFE, NOTA |
| MNF024 | EMPRESA, ITEM, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA | |
| MNF032 | Importação de XML Transmitido | ITEMNOTA, ITEMNOTAVENDEDOR, NFE, NOTA, PESSOA |
| MPD011 | Confirmação Ordem Carregamento | EMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA, PESSOA |
| MRC020 | Confirmação de Ordem de Carregamento Recapadora | EMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA, PESSOA |
| CFA003 | Gerenciamento de Margens sobre Produtos | EMPRESA, ITEM, ITEMTABPRECO, SECAO |
| CNF006 | Gerenciamento de Preços para Venda | EMPRESA, ITEM, ITEMTABPRECO, SECAO |
| CNF007 | EMPRESA, ITEM, NOTA, SECAO | |
| CNF008 | Demonstrativo de Margens sobre Vendas | EMPRESA, ITEM, PESSOA, SECAO |
| CNF011 | Consulta de NFS-e | EMPRESA, ITEM, NOTA, PESSOA |
| CPD001 | Consulta de Pedidos | EMPRESA, ITEM, NFE, PESSOA |
| MNF002 | Emissão de Nota Fiscal de Venda | EMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA |
| MNF016 | Controle de Entrega | EMPRESA, ITEM, ITEMNOTA, PESSOA |
| MNF023 | Gerenciamento de Contas de Contratos | EMPRESA, ITEMNOTA, NOTA, PESSOA |
| MNF026 | Troca de Produtos com Emissão de Nota Fiscal | EMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA |
| MNF029 | EMPRESA, ITEMNOTA, NOTA, PESSOA | |
| MTR004 | Despesas | ITEMNOTA, NFE, NOTA, PESSOA |
| RNF002 | Comissão sobre Notas Fiscais | EMPRESA, ITEM, PESSOA, SECAO |
| RNF004 | Relação de Notas Fiscais | EMPRESA, ITEM, PARMNOTA, PESSOA |
| RNF005 | Demonstrativo de Notas Fiscais | EMPRESA, ITEM, PESSOA, SECAO |
| MNF017 | Venda Balcão | EMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA |
| MNF007 | Devolução / Retorno de Notas Fiscais | EMPRESA, 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.
| Tela | Título | Tabelas em Comum |
|---|---|---|
| ... | +1398 telas que leem EMPRESA/ITEM/PESSOA |
Regras de Negocio
- Exige selecionar pelo menos uma nota antes de imprimir (
Deve ser Selecionado ao menos uma nota para imprimir!). - Para reimpressao de etiquetas, exige selecao de item e quantidade > 0 por produto.
- O layout de etiqueta e obrigatorio em
PARMFATURda empresa ([MFA001]); a ausencia bloqueia a impressão com mensagem direcionando para MFA001. - Marcacao/desmarcacao de linhas via botao de marca (
btnMarca/btnMarcaItem) alterandotabNOTASTATUS/tabITEMNOTASTATUSem memoria. - 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.
- 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)