Pular para o conteúdo principal

Ordenação das Etiquetas LET100 (MNF001)

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Ambos → Opção 1 (rótulo "Ordena LET100[MNF001]") Tabela: PARMFATUR.TP_ORDENALET100 Valor padrão: N (Nenhuma)

Telas impactadas​

MóduloCódigoDescrição
NF EntradaMNF001Rotina Imprime_Etiqueta — define Order by da consulta que alimenta o layout de etiquetas LET100

Pré-requisito de uso: o parâmetro só produz efeito quando o layout de etiquetas configurado na empresa é o LET100 (PARMFATUR.CD_LAYETIQUETA = 'LET100'). Para qualquer outro layout, o valor de TP_ORDENALET100 é ignorado.

Campos envolvidos​

CampoDescrição
PARMFATUR.CD_LAYETIQUETACódigo do layout de etiqueta usado pela empresa. Só 'LET100' aciona a lógica de ordenação.
ITEM.CD_ITEMCódigo do produto — usado quando TP_ORDENALET100 = 'A'.
ITEM.DS_ITEMDescrição do produto — usada quando TP_ORDENALET100 = 'D'.
NOTA.NR_SEQUENCIA (alias N.NR_SEQUENCIA)Sequência de inserção do item na nota — usada quando TP_ORDENALET100 = 'I' (também entra no GROUP BY).

Opções disponíveis​

N - Nenhuma (sem ordenação)​

O que fazDetalhe
Order by aplicadoNenhum — variável iOrderby fica em branco
Ordem efetiva das etiquetasA ordem natural devolvida pelo Firebird (sem garantia)
Quando usarQuando não importa a ordem de impressão das etiquetas

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Ambos → Opção 1 → "Ordena LET100[MNF001]" = Nenhuma
  2. Certifique-se que a empresa tem CD_LAYETIQUETA = 'LET100'
  3. Salve os parâmetros (F6)
  4. Abra uma NF de Entrada em MNF001 com vários itens lançados
  5. Dispare a impressão de etiquetas
  6. Na confirmação "Deseja Emitir as Etiquetas dos Produtos da Nota?", clique Sim
  7. As etiquetas saem na ordem natural do banco (sem Order by)

Resultado esperado: as etiquetas são impressas sem ordenação explícita — a ordem pode variar entre execuções.

Este é o valor padrão ao criar um novo registro no MFA001 (ver UdmMFA001.pas — tabPARMFATURAfterInsert).


A - Código do Item​

O que fazDetalhe
Order by aplicadoOrder by ITEM.CD_ITEM
Ordem efetiva das etiquetasAscendente pelo código do produto
Quando usarQuando o operador quer agrupar/encontrar etiquetas pelo código do item

Simulação passo a passo​

  1. MFA001 → "Ordena LET100[MNF001]" = Código do Item
  2. Salve os parâmetros (F6)
  3. Abra uma NF em MNF001 com itens de códigos variados (ex.: 1001, 2002, 500)
  4. Imprima as etiquetas (LET100) e confirme o diálogo
  5. A consulta adiciona Order by ITEM.CD_ITEM ao SELECT

Resultado esperado: as etiquetas são geradas em ordem crescente de CD_ITEM (500, 1001, 2002 no exemplo).


D - Descrição do Item​

O que fazDetalhe
Order by aplicadoOrder by ITEM.DS_ITEM
Ordem efetiva das etiquetasAscendente (alfabética) pela descrição do produto
Quando usarQuando o operador separa/confere etiquetas pela descrição

Simulação passo a passo​

  1. MFA001 → "Ordena LET100[MNF001]" = Descrição do Item
  2. Salve os parâmetros (F6)
  3. Abra uma NF em MNF001 com itens de descrições variadas (ex.: "Parafuso", "Arruela", "Porca")
  4. Imprima as etiquetas (LET100)
  5. A consulta adiciona Order by ITEM.DS_ITEM

Resultado esperado: etiquetas saem em ordem alfabética pela descrição ("Arruela", "Parafuso", "Porca").


I - Inserção (sequência na nota)​

O que fazDetalhe
Order by aplicadoOrder by N.NR_SEQUENCIA
GROUP BY ajustadoAdiciona N.NR_SEQUENCIA ao grupo (iGroup := ' N.NR_SEQUENCIA, ')
Ordem efetiva das etiquetasMesma ordem em que os itens foram lançados na nota
Quando usarQuando o operador quer as etiquetas na ordem de digitação dos itens

Simulação passo a passo​

  1. MFA001 → "Ordena LET100[MNF001]" = Inserção
  2. Salve os parâmetros (F6)
  3. Abra uma NF em MNF001 e lance os itens em uma ordem específica (ex.: item B, depois item A, depois item C)
  4. Imprima as etiquetas (LET100)
  5. A consulta aplica Order by N.NR_SEQUENCIA e agrupa por NR_SEQUENCIA

Resultado esperado: etiquetas saem na mesma ordem em que os itens foram digitados na nota (B, A, C no exemplo).


Tabela Comparativa Resumida​

ValorDescriçãoOrder by aplicadoAjuste em GROUP BY
NNenhuma (padrão)(nenhum)—
ACódigo do ItemOrder by ITEM.CD_ITEM—
DDescrição do ItemOrder by ITEM.DS_ITEM—
IInserçãoOrder by N.NR_SEQUENCIAAdiciona N.NR_SEQUENCIA

Referências no Código Fonte​

Delphi - MFA001 (tela de parâmetros)​

  • source/MFA001/UMFA001.dfm (linhas 2605-2617): label lblTP_ORDENALET100 com Caption = 'Ordena LET100[MNF001]', posicionado no TabSheet pagFatOp1 (Ambos → Opção 1).
  • source/MFA001/UMFA001.dfm (linhas 3462-3490): combo cmbTP_ORDENACAO com DataField = 'TP_ORDENALET100' e Items.Strings:
    'Nenhuma' #9 'N'
    'Código do Item' #9 'A'
    'Descrição do Item' #9 'D'
    'Inserção' #9 'I'
  • source/MFA001/UdmMFA001.pas (linha 275): declaração tabPARMFATURTP_ORDENALET100: TStringField;.
  • source/MFA001/UdmMFA001.pas (linha 566, dentro de tabPARMFATURAfterInsert): valor padrão ao inserir novo registro:
    tabPARMFATURTP_ORDENALET100.AsString := 'N';
  • source/MFA001/UdmMFA001.dfm (linhas 287, 1927-1929, 2442, 2614, 2868, 3167): campo incluído no SELECT, INSERT e UPDATE do dataset tabPARMFATUR.

Delphi - MNF001 (único consumidor do parâmetro)​

  • source/MNF001/UdmMNF001.pas (linha 1108): declaração da variável de sessão iST_ORDENALET100: String;.
  • source/MNF001/UdmMNF001.pas (linhas 1370-1417): leitura do valor da PARMFATUR junto aos demais parâmetros de faturamento:
    Consulta :=
    'Select ... TP_ORDENALET100, ... From PARMFATUR Where CD_EMPRESA = ' + IntToStr(sessao.empresa.cd_Empresa);
    ...
    dmMNF001.iST_ORDENALET100 := Resultado[25];
  • source/MNF001/UMNF001.pas (linhas 699-721): uso efetivo dentro da rotina Imprime_Etiqueta, somente quando o layout é LET100:
    if (Trim(dmMNF001.iCD_LAYETIQUETA) = 'LET100') then
    begin
    if (dmMNF001.iST_ORDENALET100 = 'A') then
    iOrderby := ' Order by ITEM.CD_ITEM';

    if (dmMNF001.iST_ORDENALET100 = 'D') then
    iOrderby := ' Order by ITEM.DS_ITEM';

    if (dmMNF001.iST_ORDENALET100 = 'I') then
    begin
    iOrderby := ' Order by N.NR_SEQUENCIA';
    iGroup := ' N.NR_SEQUENCIA, ';
    end;

    if (dmMNF001.iST_ORDENALET100 = 'N') then
    iOrderby := '';
    end;

SQL (Scripts)​

  • Nenhuma referência a TP_ORDENALET100 em Scripts/ — o parâmetro é avaliado apenas no código Delphi do MNF001, não em stored procedures nem views.