Pular para o conteúdo principal

RPD001 — Relação Analítica de Pedidos

Fonte​

  • Source: source/RPD001/

Objetivo​

Relatório analítico de pedidos (Venda / Compra / Orçamento) com filtros amplos por empresa, condição/forma de pagamento, tabela de preço, seção, período de emissão e entrega, e quebras opcionais por vendedor e por pessoa. Emite quatro modelos distintos de layout: Normal (analítico padrão), Produção (amarrado à Ordem de Produção Recapadora), Orçamento (espelho gráfico do orçamento para o cliente) e Data de Entrega Comparativo (pedido x nota). Lê principalmente PEDIDO, ITEMPEDIDO, CONTASPEDIDO e PEDIDONOTA, e aplica multi-seleção via F9 para produtos, pessoas, vendedores, grupos, subgrupos, movimentações, formas de faturamento e ordens de produção.

Modelos de Relatorio​

O modelo é escolhido no combobox "Modelo de Layout" (cmbMD_LAYOUT) e influencia o SQL, o nome do layout de impressão (iLAYOUT = programa.Codigo + sufixo) e a habilitação das demais opções da tela.

Modelo 1: Normal​

Quando usado: item "Normal" do combobox "Modelo de Layout" (MD_LAYOUT = 'N'). Layout de impressão: RPD001. É o padrão ao abrir a tela.

Relatório analítico clássico de pedidos e itens, agrupável por Vendedor (chkVENDEDOR) e por Pessoa Física/Jurídica (chkPESSOA). Mostra número e datas do pedido, condição/forma de pagamento, descrição do item, peso/quantidade pedida e atendida, valor unitário, valor total, desconto e valor compensado (soma de CONTASPEDIDO). Ordena pela Empresa + quebras selecionadas + campo escolhido em "Ordem do Relatório".

SQL Base:

SELECT E.NM_EMPRESA||' - '||P.CD_EMPRESA NM_EMPRESA,
-- quebras opcionais (COALESCE(V.NM_PESSOA||' - '||P.CD_VENDEDOR,'Sem Vendedor') NM_VENDEDOR,
-- C.NM_PESSOA||' - '||C.CD_PESSOA NM_PESSOA)
P.NR_PEDIDO, P.DT_PEDIDO, P.DT_ENTREGA, P.TP_PEDIDO, P.ST_PEDIDO,
CASE CP.ST_CONDPAGTO WHEN 'D' THEN 'Vencto.: ' ELSE CP.DS_CONDPAGTO END DS_CONDPAGTO,
FP.DS_FORMAPAGTO, P.DT_VENCIMENTO,
ITEM.DS_ITEM||' - '||I.CD_ITEM DS_ITEM,
I.PS_PEDIDO, I.PS_ATENDIDO, I.QT_PEDIDA, I.QT_ATENDIDA,
I.VL_UNITARIO, I.VL_TOTAL, I.VL_DESCONTO, SUM(CPP.VL_COMPENSADO) VL_COMPENSADO
FROM PEDIDO P
INNER JOIN ITEMPEDIDO I ON (P.CD_EMPRESA = I.CD_EMPRESA
AND P.NR_PEDIDO = I.NR_PEDIDO
AND P.TP_PEDIDO = I.TP_PEDIDO)
INNER JOIN PESSOA C ON (P.CD_PESSOA = C.CD_PESSOA)
LEFT JOIN CONTASPEDIDO CPP ON (CPP.CD_EMPPEDIDO = P.CD_EMPRESA
AND CPP.NR_PEDIDO = P.NR_PEDIDO
AND CPP.TP_PEDIDO = P.TP_PEDIDO)
LEFT JOIN CONTAS ON (CONTAS.CD_EMPRESA = CPP.CD_EMPCONTA
AND CONTAS.NR_LANCAMENTO = CPP.NR_LANCCONTA
AND CONTAS.CD_PESSOA = CPP.CD_PESSOACONTA
AND CONTAS.CD_TIPOCONTA = CPP.CD_TIPOCONTA
AND CONTAS.NR_PARCELA = CPP.NR_PARCELACONTA)
LEFT JOIN PESSOA V ON (P.CD_VENDEDOR = V.CD_PESSOA)
INNER JOIN EMPRESA E ON (P.CD_EMPRESA = E.CD_EMPRESA)
INNER JOIN CONDPAGTO CP ON (P.CD_CONDPAGTO = CP.CD_CONDPAGTO)
INNER JOIN FORMAPAGTO FP ON (P.CD_FORMAPAGTO = FP.CD_FORMAPAGTO)
INNER JOIN ITEM ON (I.CD_ITEM = ITEM.CD_ITEM)
LEFT JOIN GRUPO G ON (G.CD_GRUPO = ITEM.CD_GRUPO)
LEFT JOIN SUBGRUPO SG ON (SG.CD_SUBGRUPO = ITEM.CD_SUBGRUPO)
/* JOIN opcional em SECAO quando Seção é informada */
/* JOIN opcional em PLUGORDRECAPPEDIDO / ORDEMPRODUCAORECAP quando Ordem Produção é informada */
WHERE P.CD_EMPRESA = :CD_EMPRESA
AND P.TP_PEDIDO = :TP_PEDIDO
AND ((CONTAS.ST_CONTAS <> 'C') OR (CONTAS.ST_CONTAS IS NULL))
/* Status: IN ('P','N') | IN ('P','N','A') | = :ST_PEDIDO (salvo 'T' = Todos) */
/* demais filtros opcionais sobre CD_CONDPAGTO, CD_FORMAPAGTO, CD_TABPRECO, SECAO,
DT_PEDIDO / DT_ENTREGA, NR_PEDIDOFOR e listas IN (...) de pedidos, produtos,
pessoas, vendedores, movimentações, grupos, subgrupos, tipo de faturamento */
GROUP BY /* quebras opcionais + */
E.NM_EMPRESA, P.CD_EMPRESA, C.NM_PESSOA, C.CD_PESSOA,
P.NR_PEDIDO, P.DT_PEDIDO, P.DT_ENTREGA, P.TP_PEDIDO, P.ST_PEDIDO,
CP.ST_CONDPAGTO, CP.DS_CONDPAGTO, FP.DS_FORMAPAGTO, P.DT_VENCIMENTO,
ITEM.DS_ITEM, I.CD_ITEM, I.PS_PEDIDO, I.PS_ATENDIDO,
I.QT_PEDIDA, I.QT_ATENDIDA, I.VL_UNITARIO, I.VL_TOTAL, I.VL_DESCONTO
ORDER BY E.NM_EMPRESA||' - '||P.CD_EMPRESA,
/* quebras + cmbORDEM.Value */

Modelo 2: Produção​

Quando usado: item "Produção" do combobox "Modelo de Layout" (MD_LAYOUT = 'P'). Layout de impressão: RPD001_1.

Mesma base do modelo Normal, porém obriga vínculo com Ordem de Produção Recapadora (PLUGORDRECAPPEDIDO → ORDEMPRODUCAORECAP) e adiciona a coluna OPR.ID ao SELECT e ao GROUP BY. Usado pela área de recapagem para ler pedidos amarrados a ordens de produção.

SQL Base:

SELECT E.NM_EMPRESA||' - '||P.CD_EMPRESA NM_EMPRESA,
/* quebras opcionais + */
OPR.ID,
P.NR_PEDIDO, P.DT_PEDIDO, P.DT_ENTREGA, P.TP_PEDIDO, P.ST_PEDIDO,
CASE CP.ST_CONDPAGTO WHEN 'D' THEN 'Vencto.: ' ELSE CP.DS_CONDPAGTO END DS_CONDPAGTO,
FP.DS_FORMAPAGTO, P.DT_VENCIMENTO,
ITEM.DS_ITEM||' - '||I.CD_ITEM DS_ITEM,
I.PS_PEDIDO, I.PS_ATENDIDO, I.QT_PEDIDA, I.QT_ATENDIDA,
I.VL_UNITARIO, I.VL_TOTAL, I.VL_DESCONTO,
SUM(CPP.VL_COMPENSADO) VL_COMPENSADO
FROM PEDIDO P
INNER JOIN ITEMPEDIDO I ON (P.CD_EMPRESA = I.CD_EMPRESA
AND P.NR_PEDIDO = I.NR_PEDIDO
AND P.TP_PEDIDO = I.TP_PEDIDO)
INNER JOIN PLUGORDRECAPPEDIDO POG ON (POG.CD_EMPRESA = P.CD_EMPRESA
AND POG.NR_PEDIDO = P.NR_PEDIDO
AND POG.TP_PEDIDO = P.TP_PEDIDO)
INNER JOIN ORDEMPRODUCAORECAP OPR ON (OPR.ID = POG.IDORDEMPRODUCAORECAP)
INNER JOIN PESSOA C ON (P.CD_PESSOA = C.CD_PESSOA)
LEFT JOIN CONTASPEDIDO CPP ON (...)
LEFT JOIN CONTAS ON (...)
LEFT JOIN PESSOA V ON (P.CD_VENDEDOR = V.CD_PESSOA)
INNER JOIN EMPRESA E ON (P.CD_EMPRESA = E.CD_EMPRESA)
INNER JOIN CONDPAGTO CP ON (P.CD_CONDPAGTO = CP.CD_CONDPAGTO)
INNER JOIN FORMAPAGTO FP ON (P.CD_FORMAPAGTO = FP.CD_FORMAPAGTO)
INNER JOIN ITEM ON (I.CD_ITEM = ITEM.CD_ITEM)
LEFT JOIN GRUPO G ON (G.CD_GRUPO = ITEM.CD_GRUPO)
LEFT JOIN SUBGRUPO SG ON (SG.CD_SUBGRUPO = ITEM.CD_SUBGRUPO)
WHERE P.CD_EMPRESA = :CD_EMPRESA
AND P.TP_PEDIDO = :TP_PEDIDO
AND ((CONTAS.ST_CONTAS <> 'C') OR (CONTAS.ST_CONTAS IS NULL))
/* filtros opcionais (idem modelo Normal) + OPR.ID IN (ordens selecionadas) */
GROUP BY /* idem Normal + */ OPR.ID
ORDER BY E.NM_EMPRESA||' - '||P.CD_EMPRESA, /* quebras + cmbORDEM.Value */

Modelo 3: Orçamento​

Quando usado: item "Orçamento" do combobox "Modelo de Layout" (MD_LAYOUT = 'O'). Layout de impressão: RPD001_O. Ao selecionar este modelo, cmbTP_PEDIDO é forçado para "Orçamento" (O), cmbST_PEDIDO para "Não Atendidos" (N), e as quebras por Vendedor / Pessoa são desabilitadas.

Espelho gráfico do orçamento para entregar ao cliente. Busca PEDIDO com TP_PEDIDO = 'O', junta dados da empresa emitente (logotipo, endereço, CNPJ/IE, observação), do cliente (endereço de entrega, município), dados de vendedor (telefone/celular/e-mail via RETORNA_DADOSCADASTRAIS), impostos item a item via CALCULA_IMPOSTOPEDIDO, valor por extenso via VALOR_EXTENSO, data por extenso via DATA_EXTENSO e mensagem padrão de pedido (PARMFATUR.DS_MSGPEDIDO) concatenada à observação do pedido.

SQL Base:

SELECT N.CD_EMPRESA, E.NM_EMPRESA, PE.NR_CNPJCPF NR_CNPJEMP, PE.NM_FANTASIA,
EE.DS_ENDERECO||COALESCE(', '||EE.NR_ENDERECO,' - ')||
COALESCE(COALESCE(' - '||EE.DS_BAIRRO, EE.DS_COMPLEMENTO),' ')||
' - CEP '||EE.NR_CEP||' - '||ME.DS_MUNICIPIO||' / '||ME.SG_ESTADO||
' - Telefone '||COALESCE(EE.NR_FONE, EE.NR_FAX) DS_ENDEREMP,
N.TP_PAGTOFRETE, PE.DS_SITE, EE.NR_INSCEST NR_INSCEMP, PE.DS_EMAIL,
P.DS_OBSERVACAO DS_CONTATO,
COALESCE(EE.NR_FONE, EE.NR_FAX) NR_FONEEMP, EE.NR_FAX NR_FAXEMP,
N.NR_PEDIDO, N.TP_PEDIDO, N.DT_PEDIDO, N.DT_ENTREGA,
N.CD_PESSOA, P.NM_PESSOA||COALESCE(' - '||P.NM_FANTASIA,'')||' - '||P.CD_PESSOA NM_PESSOA,
P.NR_CNPJCPF, EP.NR_CEP,
EP.DS_ENDERECO||COALESCE(', '||EP.NR_ENDERECO,' ')||' - '||
COALESCE(EP.NR_CEP||' - ','')||
COALESCE(MP.DS_MUNICIPIO||' / '||MP.SG_ESTADO,'')||' - '||EP.NR_FONE DS_ENDERECO,
COALESCE(EP.DS_BAIRRO, EP.DS_COMPLEMENTO) DS_BAIRRO,
MP.DS_MUNICIPIO||' - '||MP.SG_ESTADO DS_MUNICIPIO, EP.NR_INSCEST,
EP.NR_FONE, EP.NR_FAX,
CASE C.ST_CONDPAGTO
WHEN 'D' THEN 'Vencto.: '||FORMATA_DATA(N.DT_VENCIMENTO,'%d/%m/%Y')
ELSE C.DS_CONDPAGTO
END DS_CONDPAGTO, N.CD_CONDPAGTO, N.DT_VENCIMENTO,
N.CD_VENDEDOR, V.NM_PESSOA||' - '||N.CD_VENDEDOR NM_VENDEDOR,
N.CD_FORMAPAGTO, F.DS_FORMAPAGTO, MC.DS_MARCA,
MP.DS_MUNICIPIO DS_MUNIC, MP.SG_ESTADO,
IP.CD_ITEM, I.DS_ITEM, I.SG_UNIDMED, IP.VL_UNITARIO,
IP.VL_DESCONTO, IP.VL_TOTAL, IP.DS_OBSERVACAO DS_OBSITEM,
COALESCE(CI.V_PC_ICMS,0) PC_ICMS, NCM.PC_IPI, COALESCE(CI.V_VL_IPI,0) V_VL_IPI,
I.NR_NCM, MOV.CD_CST, CI.V_VL_SUBSTITUICAO,
CASE WHEN CI.V_VL_SUBSTITUICAO <> 0 THEN (CI.V_VL_SUBSTITUICAO/IP.VL_TOTAL)*100 ELSE 0 END PC_SUBSTITUICAO,
IP.VL_TOTAL - COALESCE(IP.VL_DESCONTO,0) + COALESCE(IP.VL_DESPESA,0) VL_LIQUIDO,
CASE (SELECT V_TIPO FROM HABILITA_PESOQTDE(IP.CD_ITEM))
WHEN 'Q' THEN IP.QT_PEDIDA ELSE IP.PS_PEDIDO
END PS_PEDIDO, IP.VL_DESPESA, PARM.DS_LOGOTIPO,
COALESCE(N.DS_OBSERVACAO,'')||COALESCE(' '||PARM.DS_MSGPEDIDO,'') DS_OBSERVACAO,
ME.DS_MUNICIPIO||', '||DE.O_DS_DATA||'. ' DS_DATA,
ME.DS_MUNICIPIO||' / '||ME.SG_ESTADO DS_MUNICEMP,
(SELECT VE.O_VALOR
FROM VALOR_EXTENSO(CAST(
(SELECT SUM(IPP.VL_TOTAL) FROM ITEMPEDIDO IPP
WHERE IPP.CD_EMPRESA = N.CD_EMPRESA
AND IPP.NR_PEDIDO = N.NR_PEDIDO
AND IPP.TP_PEDIDO = N.TP_PEDIDO) AS DOM_NUMERIC15_2)) VE
WHERE 1=1) DS_EXTENSO,
CASE C.ST_CONDPAGTO
WHEN 'D' THEN 'Vencto.: '||FORMATA_DATA(N.DT_VENCIMENTO,'%d/%m/%Y')
ELSE C.DS_CONDPAGTO
END||'/'||F.DS_FORMAPAGTO DS_PAGAMENTO,
CASE WHEN N.NR_DIASENTREGA IS NULL
THEN CASE WHEN N.DT_ENTREGA IS NULL THEN 'A Combinar'
ELSE FORMATA_DATA(N.DT_ENTREGA,'%d/%m/%Y') END
ELSE FORMATA_DATA(DATEADD(N.NR_DIASENTREGA DAY TO N.DT_PEDIDO),'%d/%m/%Y')
END DT_PRAZOFORNEC,
COALESCE(CASE N.TP_PAGTOFRETE WHEN 1 THEN 'Remetente - CIF'
WHEN 2 THEN 'Destinatário - FOB'
ELSE 'Outros'
END||COALESCE(' - '||PT.NM_PESSOA,''),'A Combinar') NM_TRANSPORTADOR,
RDV.NR_TELEFONE NR_TELVENDEDOR, RDV.NR_CELULAR NR_CELVENDEDOR,
RDV.NR_FAX NR_FAXVENDEDOR, V.DS_EMAIL DS_EMAILVENDEDOR,
'CNPJ '||PE.NR_CNPJCPF||' - Inscrição Estadual '||EE.NR_INSCEST DS_NRCNPJINSC
FROM PEDIDO N
INNER JOIN ITEMPEDIDO IP ON (N.NR_PEDIDO = IP.NR_PEDIDO
AND N.CD_EMPRESA = IP.CD_EMPRESA
AND N.TP_PEDIDO = IP.TP_PEDIDO)
INNER JOIN MOVIMENTACAO MOV ON (IP.CD_MOVIMENTACAO = MOV.CD_MOVIMENTACAO)
INNER JOIN PESSOA P ON (N.CD_PESSOA = P.CD_PESSOA)
INNER JOIN ENDERECOPESSOA EP ON (N.CD_PESSOA = EP.CD_PESSOA
AND N.CD_ENDERECO = EP.CD_ENDERECO)
INNER JOIN MUNICIPIO MP ON (EP.CD_MUNICIPIO = MP.CD_MUNICIPIO)
INNER JOIN EMPRESA E ON (N.CD_EMPRESA = E.CD_EMPRESA)
INNER JOIN PESSOA PE ON (E.CD_PESSOA = PE.CD_PESSOA)
INNER JOIN ENDERECOPESSOA EE ON (EE.CD_PESSOA = PE.CD_PESSOA
AND EE.CD_ENDERECO = (SELECT MIN(CD_ENDERECO)
FROM ENDERECOPESSOA ENDER
WHERE ENDER.CD_PESSOA = EE.CD_PESSOA))
INNER JOIN MUNICIPIO ME ON (EE.CD_MUNICIPIO = ME.CD_MUNICIPIO)
INNER JOIN CONDPAGTO C ON (N.CD_CONDPAGTO = C.CD_CONDPAGTO)
INNER JOIN ITEM I ON (IP.CD_ITEM = I.CD_ITEM)
INNER JOIN NCM ON (NCM.NR_NCM = I.NR_NCM)
LEFT JOIN MARCA MC ON (I.CD_MARCA = MC.CD_MARCA)
INNER JOIN PARMFATUR PARM ON (PARM.CD_EMPRESA = N.CD_EMPRESA)
LEFT JOIN PESSOA V ON (V.CD_PESSOA = N.CD_VENDEDOR)
LEFT JOIN RETORNA_DADOSCADASTRAIS(V.CD_PESSOA, NULL) RDV ON (1 = 1)
LEFT JOIN FORMAPAGTO F ON (F.CD_FORMAPAGTO = N.CD_FORMAPAGTO)
LEFT JOIN CALCULA_IMPOSTOPEDIDO(N.CD_EMPRESA, N.NR_PEDIDO, N.TP_PEDIDO,
IP.CD_ITEM, ME.SG_ESTADO, N.CD_EMPRESA) CI ON (1=1)
LEFT JOIN DATA_EXTENSO(N.DT_PEDIDO) DE ON (1=1)
LEFT JOIN PESSOA PT ON (PT.CD_PESSOA = N.CD_TRANSPORTADOR)
WHERE N.CD_EMPRESA = :CD_EMPRESA
AND N.TP_PEDIDO = 'O'
/* Status: IN ('P','N') | IN ('P','N','A') | = :ST_PEDIDO (salvo 'T') */
/* filtros opcionais: CD_CONDPAGTO, CD_FORMAPAGTO, CD_TABPRECO, CD_SECAO,
DT_PEDIDO, DT_ENTREGA, NR_PEDIDOFOR, IN (...) pedidos, produtos, pessoas,
vendedores, movimentações, grupos, subgrupos, tipo faturamento, ordem produção */
ORDER BY /* cmbORDEM.Value com P. substituído por N. */

Modelo 4: Data de Entrega (Comparativo)​

Quando usado: item "Data de Entrega (Comparativo)" do combobox "Modelo de Layout" (MD_LAYOUT = 'E'). Layout de impressão: RPD001_E. Ao selecionar, as quebras por Vendedor / Pessoa e o campo "Ordem do Relatório" ficam desabilitados.

Compara a data de entrega prometida no pedido com a data efetiva da nota fiscal emitida, item a item. Junta PEDIDO + ITEMPEDIDO com PEDIDONOTA, NOTA e ITEMNOTA (LEFT JOIN — mostra também itens ainda não faturados) e converte quantidade/peso conforme TIPOCALCULO.TP_UNIDADE. Ordenação fixa: PD.NR_PEDIDO, IP.CD_ITEM, NT.NR_LANCAMENTO.

SQL Base:

SELECT PD.NR_PEDIDO,
CASE PD.TP_PEDIDO WHEN 'E' THEN 'Entrada' ELSE 'Saída' END TP_PEDIDO,
PD.DT_PEDIDO,
PD.DT_ENTREGA DT_ENTREGAPEDIDO,
PD.CD_CONDPAGTO||' - '||CPP.DS_CONDPAGTO CD_CONDPAGTOPEDIDO,
PD.CD_FORMAPAGTO||' - '||FPP.DS_FORMAPAGTO CD_FORMAPAGTOPEDIDO,
PD.CD_PESSOA, PP.NM_PESSOA, IP.CD_ITEM, I.DS_ITEM,
IP.DT_ENTREGA DT_ENTREGAITEM,
NT.NR_LANCAMENTO,
COALESCE(NT.NR_NOTAFISCAL, NT.NR_NOTAFOR) NR_NOTAFISCAL,
NT.CD_SERIE,
CASE NT.TP_NOTA WHEN 'E' THEN 'Entrada' ELSE 'Saída' END TP_NOTA,
NT.CD_CONDPAGTO||' - '||CPN.DS_CONDPAGTO CD_CONDPAGTONOTA,
NT.CD_FORMAPAGTO||' - '||FPN.DS_FORMAPAGTO CD_FORMAPAGTONOTA,
NT.DT_EMISSAO DT_EMISSAONOTA, NT.DT_ENTREGA DT_ENTREGANOTA,
CASE TP.TP_UNIDADE WHEN 'Q' THEN IP.QT_PEDIDA ELSE IP.PS_PEDIDO END QT_PEDIDA,
CASE TP.TP_UNIDADE WHEN 'Q' THEN PN.QT_ATENDIDA ELSE IT.PS_ITEMNOTA END QT_ITEMNOTA
FROM PEDIDO PD
INNER JOIN ITEMPEDIDO IP ON (IP.CD_EMPRESA = PD.CD_EMPRESA
AND IP.NR_PEDIDO = PD.NR_PEDIDO
AND IP.TP_PEDIDO = PD.TP_PEDIDO)
INNER JOIN ITEM I ON (I.CD_ITEM = IP.CD_ITEM)
INNER JOIN TIPOCALCULO TP ON (TP.CD_TIPOCALCULO = I.CD_TIPOCALCULO)
INNER JOIN PESSOA PP ON (PP.CD_PESSOA = PD.CD_PESSOA)
INNER JOIN FORMAPAGTO FPP ON (FPP.CD_FORMAPAGTO = PD.CD_FORMAPAGTO)
INNER JOIN CONDPAGTO CPP ON (CPP.CD_CONDPAGTO = PD.CD_CONDPAGTO)
LEFT JOIN PEDIDONOTA PN ON (PN.CD_EMPRPED = PD.CD_EMPRESA
AND PN.NR_PEDIDO = PD.NR_PEDIDO
AND PN.TP_PEDIDO = PD.TP_PEDIDO
AND PN.CD_ITEM = IP.CD_ITEM)
LEFT JOIN NOTA NT ON (NT.CD_EMPRESA = PN.CD_EMPRESA
AND NT.NR_LANCAMENTO = PN.NR_LANCAMENTO
AND NT.CD_SERIE = PN.CD_SERIE
AND NT.TP_NOTA = PN.TP_NOTA)
LEFT JOIN ITEMNOTA IT ON (IT.CD_EMPRESA = NT.CD_EMPRESA
AND IT.NR_LANCAMENTO = NT.NR_LANCAMENTO
AND IT.TP_NOTA = NT.TP_NOTA
AND IT.CD_SERIE = NT.CD_SERIE
AND IT.CD_ITEM = I.CD_ITEM)
LEFT JOIN FORMAPAGTO FPN ON (FPN.CD_FORMAPAGTO = NT.CD_FORMAPAGTO)
LEFT JOIN CONDPAGTO CPN ON (CPN.CD_CONDPAGTO = NT.CD_CONDPAGTO)
/* JOIN opcional em SECAO / PLUGORDRECAPPEDIDO quando filtros são informados */
WHERE PD.CD_EMPRESA = :CD_EMPRESA
AND PD.TP_PEDIDO = :TP_PEDIDO
/* demais filtros IN / entre datas (idem modelo Normal) */
ORDER BY PD.NR_PEDIDO, IP.CD_ITEM, NT.NR_LANCAMENTO

Filtros​

Campos simples:

  • Empresa (Lista de Empresas) F9 — obrigatório; default = empresa da sessão
  • Condição de Pagamento (Lista de Condições de Pagamento) F9
  • Forma de Pagamento (Lista de Formas de Pagamento) F9
  • Tabela de Preço (Lista de Tabelas de Preço) F9
  • Seção (Lista de Seções) F9 — força INNER JOIN SECAO na consulta
  • Status / Situação (Não Atendidos / Atendidos / Com Saldo / Bloqueados / Cancelados / Todos Válidos / Todos) — default "Com Saldo"; "Com Saldo" expande para ST_PEDIDO IN ('P','N'), "Todos Válidos" para IN ('P','N','A'); sempre exclui contas canceladas (CONTAS.ST_CONTAS <> 'C' OR NULL)
  • Tipo Pedido (Venda / Compra / Orçamento) — default "Venda"; modelo "Orçamento" força esta opção para "Orçamento"
  • Modelo de Layout (Normal / Produção / Orçamento / Data de Entrega (Comparativo)) — troca o SQL base e o arquivo de layout (ver "Modelos de Relatório")
  • Nº Pedido Cliente — filtro por NR_PEDIDOFOR (número do pedido no cliente)
  • Período de Emissão (Emissão De / Até) — filtra PEDIDO.DT_PEDIDO
  • Período de Entrega (Entrega De / Até) — filtra PEDIDO.DT_ENTREGA
  • Ordem do Relatório (Data Emissão → Nº Pedido → Data Entrega / Nº Pedido → Data Emissão → Data Entrega / Data Entrega → Data Emissão → Nº Pedido) — default "Data Emissão → Nº Pedido → Data Entrega"; desabilitado no modelo "Data de Entrega Comparativo"
  • Vendedor (checkbox — quebra por vendedor no grupo "Opções de Quebra") — adiciona vendedor ao SELECT/GROUP BY/ORDER BY; desabilitado nos modelos Orçamento e Comparativo
  • Pessoa Física/Jurídica (checkbox — quebra por cliente no grupo "Opções de Quebra") — default marcado; desabilitado nos modelos Orçamento e Comparativo

Filtros de grid (multi-selecao via F9):

  • Pedidos / Ordem Produção — duas grades lado a lado no mesmo GroupBox:
    • Pedidos (Lista de Pedidos) F9 — multi-seleção — F9 exige Empresa preenchida e envia CD_EMPRESA + TP_PEDIDO como parâmetros da busca
    • Ordem Produção (Lista de Ordens Produção) F9 — multi-seleção — F9 exige Empresa preenchida; quando informada força JOIN em PLUGORDRECAPPEDIDO + ORDEMPRODUCAORECAP nos modelos Normal, Produção e Orçamento
  • Pessoas Física / Jurídica (Lista de Pessoas) F9 — multi-seleção
  • Vendedores (Lista de Vendedores) F9 — multi-seleção
  • Produtos (Lista de Produtos) F9 — multi-seleção (pesquisa em ITEM com ST_ATIVO = 'S')
  • Movimentações (Lista de Movimentações) F9 — multi-seleção (pesquisa em MOVIMENTACAO com ST_ATIVO = 'S')
  • Grupos (Lista de Grupos) F9 — multi-seleção
  • SubGrupos (Lista de SubGrupos) F9 — multi-seleção; lookup filtra por CD_GRUPO do último grupo selecionado
  • Formas de Faturamento (Lista de Formas de Faturamento) F9 — multi-seleção

Parametros que Influenciam​

TabelaCampoEfeito
PARMFATURDS_LOGOTIPOCaminho/nome da imagem de logotipo da empresa emitente — impressa no cabeçalho do modelo "Orçamento"
PARMFATURDS_MSGPEDIDOMensagem padrão de pedido concatenada à observação do orçamento (N.DS_OBSERVACAO) — exibida no rodapé do modelo "Orçamento"

Perguntas Frequentes​


Perguntas Gerais​

P: Qual é a finalidade da tela RPD001?

R: O RPD001 é o Relatório de Pedidos completo do sistema. Ele permite consultar e imprimir pedidos de venda com múltiplos layouts e filtros avançados. O relatório consulta as tabelas PEDIDO, ITEMPEDIDO, PESSOA, EMPRESA, CONDPAGTO, FORMAPAGTO, ITEM, GRUPO, SUBGRUPO, MOVIMENTACAO, TIPOFATURAMENTO e ORDEMPRODUCAORECAP.


P: Quais são os tipos (layouts) de relatório disponíveis no RPD001?

R: O RPD001 oferece os seguintes layouts:

  • N (Normal): Relatório padrão de pedidos (layout RPD001).
  • P (Com Ordem de Produção Recap): Exibe pedidos vinculados à ordem de produção recapitulada (layout RPD001_P).
  • O (Orçamento): Relatório no formato de orçamento (layout RPD001_O).
  • E (Evolução Pedido/Nota): Exibe a evolução do pedido até a nota fiscal (layout RPD001_E e RPD001_1).

P: Quais filtros estão disponíveis no RPD001?

R: Os filtros disponíveis são:

  • Empresa (obrigatório)
  • Tipo de Pedido (S=Saída, E=Entrada, O=Orçamento)
  • Status do Pedido (P=Pendente, V=Válido, T=Todos, etc.)
  • Período de Emissão (data inicial e final)
  • Período de Entrega (data inicial e final)
  • Condição de Pagamento
  • Forma de Pagamento
  • Tabela de Preço
  • Seção
  • Número do Pedido (faixa)
  • Produto (grid de múltipla seleção)
  • Pessoa/Cliente (grid de múltipla seleção)
  • Vendedor (grid de múltipla seleção)
  • Movimentação (grid de múltipla seleção)
  • Grupo de Produto (grid de múltipla seleção)
  • Subgrupo de Produto (grid de múltipla seleção)
  • Tipo de Faturamento (grid de múltipla seleção)
  • Ordem de Produção Recap (grid de múltipla seleção)

P: É possível quebrar o relatório por alguma classificação?

R: Sim. O RPD001 oferece quebras de relatório por:

  • Vendedor (chkVENDEDOR): agrupa os pedidos por vendedor.
  • Pessoa/Cliente (chkPESSOA): agrupa os pedidos por cliente.
  • Também é possível definir a ordem de apresentação pelo campo cmbORDEM.

P: O RPD001 salva os filtros utilizados?

R: Sim. Ao fechar o relatório, o sistema salva automaticamente os filtros informados por meio da função Grava_FiltroPrograma. Na próxima abertura, os filtros são recuperados automaticamente via Recupera_FiltroPrograma.


Mensagens de Validação e Erros​

P: O sistema exibe "É Obrigatório Informar a Empresa para Realizar a Consulta!" ao tentar imprimir. O que fazer?

R: O campo Empresa é obrigatório para gerar o relatório RPD001. Informe o código da empresa no campo correspondente. Pressione F9 para pesquisar e selecionar a empresa na lista.


P: Aparece "A Empresa não está Cadastrada [ADM002]!" ao informar o código da empresa. O que significa?

R: O código informado no campo Empresa não foi encontrado no cadastro de empresas. Verifique se o código está correto ou utilize F9 para pesquisar a empresa pelo nome. Caso a empresa não esteja cadastrada, acesse o módulo ADM002 para cadastrá-la.


P: O sistema exibe "O Produto não está Ativo [TPO001]!" ao informar um produto. O que fazer?

R: O produto informado está cadastrado, porém com status inativo. Apenas produtos ativos (ST_ATIVO = 'S') podem ser utilizados como filtro. Verifique o status do produto no módulo TPO001 e reative-o se necessário.


P: O sistema exibe "O Código do Produto não está Cadastrado [TPO001]!" ao informar um produto. O que fazer?

R: O código de produto informado no grid de filtro não existe no cadastro. Verifique se o código está correto ou use F9 para pesquisar o produto pelo nome no módulo TPO001.


P: Aparece a mensagem "A Data Inicial não pode ser Maior que a Data Final!" ao definir um período. O que fazer?

R: A data inicial informada é posterior à data final. Corrija o período garantindo que a data inicial seja anterior ou igual à data final. Isso se aplica tanto ao período de emissão quanto ao período de entrega.


P: O sistema exibe "A Data Final não pode ser Menor que a Data Inicial!" ao informar datas. O que fazer?

R: A data final informada é anterior à data inicial. Corrija o período para que a data final seja posterior ou igual à data inicial.


P: Aparece "O Pedido não está Cadastrado para a Empresa X [MPD001]!" ao informar um número de pedido. O que fazer?

R: O número de pedido informado não existe para a empresa selecionada. Verifique se o número do pedido e a empresa estão corretos, ou consulte os pedidos disponíveis no módulo MPD001.


P: O sistema exibe "É Obrigatório Informar a Empresa para Validação do Pedido!" ao digitar um número de pedido. O que fazer?

R: Para validar um número de pedido, é necessário informar primeiro o código da empresa. Preencha o campo Empresa antes de informar o número do pedido.


P: Aparece "A Pessoa Física / Jurídica não está Ativa [TFA001]!" ao informar uma pessoa no grid de filtro. O que fazer?

R: A pessoa informada está cadastrada, porém com status inativo (ST_ATIVA = 'N'). Para utilizar como filtro, a pessoa deve estar ativa. Verifique e reative o cadastro no módulo TFA001.


P: O sistema exibe "A Pessoa Física / Jurídica não está Cadastrada [TFA001]!" ao informar uma pessoa. O que fazer?

R: O código de pessoa informado não existe no cadastro. Verifique se o código está correto ou utilize F9 para pesquisar a pessoa pelo nome no módulo TFA001.


P: Aparece "O Vendedor não está Cadastrado [TFA007]!" ao informar um vendedor no grid de filtro. O que fazer?

R: O código de vendedor informado não está cadastrado como vendedor no sistema. Verifique se o código corresponde a um vendedor válido no módulo TFA007. Use F9 para pesquisar a lista de vendedores.


P: O sistema exibe "A Movimentação não está Ativa [TCB001]!" ao informar uma movimentação. O que fazer?

R: A movimentação informada está com status inativo. Apenas movimentações ativas podem ser utilizadas como filtro. Verifique o status da movimentação no módulo TCB001.


P: Aparece "A Movimentação não está Cadastrada [TCB001]!" ao informar uma movimentação. O que fazer?

R: O código de movimentação informado não existe no cadastro. Verifique se o código está correto ou utilize F9 para pesquisar a movimentação disponível no módulo TCB001.


P: O sistema exibe "A Condição de Pagamento não está Cadastrada [TFC002]!" ao informar uma condição de pagamento. O que fazer?

R: O código de condição de pagamento informado não foi encontrado no cadastro. Verifique o código ou utilize F9 para pesquisar as condições de pagamento disponíveis no módulo TFC002.


P: Aparece "A Forma de Pagamento não está Cadastrada [TFC001]!" ao informar uma forma de pagamento. O que fazer?

R: O código de forma de pagamento informado não existe no cadastro. Verifique o código ou utilize F9 para pesquisar as formas de pagamento disponíveis no módulo TFC001.


P: O sistema exibe "A Tabela de Preço não está Cadastrada [TFA006]!" ao informar uma tabela de preço. O que fazer?

R: O código de tabela de preço informado não foi encontrado no cadastro. Verifique o código ou utilize F9 para pesquisar as tabelas de preço no módulo TFA006.


P: Aparece "O Grupo não está Cadastrado [TPO006]!" ao informar um grupo no grid de filtro. O que fazer?

R: O código de grupo informado não existe no cadastro de grupos de produtos. Verifique o código ou utilize F9 para pesquisar os grupos disponíveis no módulo TPO006.


P: O sistema exibe "O SubGrupo não está Cadastrado [TPO007]!" ao informar um subgrupo. O que fazer?

R: O código de subgrupo informado não existe no cadastro. Verifique o código ou utilize F9 para pesquisar os subgrupos disponíveis no módulo TPO007.


P: Aparece "Seção não cadastrada. Verifique [TPO008]" ao informar uma seção. O que fazer?

R: O código de seção informado não foi encontrado no cadastro de seções. Verifique o código ou utilize F9 para pesquisar as seções disponíveis no módulo TPO008.


P: O sistema exibe "Tipo de Faturamento não cadastrado. Verifique [TFA065]" ao informar um tipo de faturamento. O que fazer?

R: O código de tipo de faturamento informado não existe no cadastro. Verifique o código ou utilize F9 para pesquisar os tipos de faturamento disponíveis no módulo TFA065.


Dicas de Uso​

P: Como pesquisar um valor usando a tecla F9 nos campos do RPD001?

R: Pressione F9 em qualquer campo de código (empresa, produto, pessoa, vendedor, etc.) para abrir uma janela de pesquisa com lista de opções disponíveis. Também é possível pressionar F9 nos grids de múltipla seleção para adicionar itens à lista de filtro.

P: Quais teclas de atalho estão disponíveis no RPD001?

R: As principais teclas de atalho são:

  • F4: Limpar/excluir o item selecionado no grid ativo.
  • F5: Novo / Limpar todos os filtros.
  • F8: Imprimir o relatório.
  • F9: Pesquisar/selecionar valor no campo ativo.
  • F12: Sair da tela.

Mensagens exibidas​

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

Mais 24 mensagens com texto literal no código: RPD001.

Tabelas de Escrita (INSERT/UPDATE/DELETE)​

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

Tabelas de Leitura (SELECT)​

TabelaOperacoes
CONDPAGTOSELECT
CONTASSELECT
CONTASPEDIDOSELECT
ENDERECOPESSOASELECT
FORMAPAGTOSELECT
GRUPOSELECT
ITEMNOTASELECT
ITEMPEDIDOSELECT
MARCASELECT
MUNICIPIOSELECT
NCMSELECT
NOTASELECT
ORDEMPRODUCAORECAPSELECT
PARMFATURSELECT
PEDIDOSELECT
PEDIDONOTASELECT
PLUGORDRECAPPEDIDOSELECT
SECAOSELECT
SUBGRUPOSELECT
TABPRECOSELECT
TIPOCALCULOSELECT
TIPOFATURAMENTOSELECT

Procedures Chamadas​

ProcedureTabelas Acessadas
CALCULA_IMPOSTOPEDIDOEMPRESA (SELECT), ENDERECOPESSOA (SELECT), IMPOSTO (SELECT), IMPOSTOITEM (SELECT), IMPOSTOMOV (SELECT), ITEM (SELECT) +9
DATA_EXTENSO-
HABILITA_PESOQTDEITEM (SELECT), TIPOCALCULO (SELECT), UNIDMED (SELECT)
RETORNA_DADOSCADASTRAISAREACOMERCIAL (SELECT), ENDERECOPESSOA (SELECT), ESTADO (SELECT), FORMAPAGTO (SELECT), GRUPOPCP (SELECT), MUNICIPIO (SELECT) +4
VALOR_EXTENSO-

Tabelas via Procedures (acesso indireto)​

TabelaOperacoes
AREACOMERCIALSELECT
EMPRESASELECT
ENDERECOPESSOASELECT
ESTADOSELECT
FORMAPAGTOSELECT
GRUPOPCPSELECT
IMPOSTOSELECT
IMPOSTOITEMSELECT
IMPOSTOMOVSELECT
ITEMSELECT
ITEMPEDIDOSELECT
MUNICIPIOSELECT
NCMSELECT
ORDEMSERVICOSELECT
ORDEMSERVITEMSELECT
PAISBACENSELECT
PEDIDOSELECT
PESSOASELECT
PESSOAFISICASELECT
REGIAOCOMERCIALSELECT
...+3 tabelas

Dependencias Aferentes (quem alimenta esta tela)​

Telas que escrevem em tabelas lidas por esta tela.

TelaTítuloTabelas em Comum
MRC020Confirmação de Ordem de Carregamento RecapadoraCONTAS
MFC023Duplicata / Adiantamento por ObraCONTAS
MFC027Gerenciamento Conciliação BancáriaCONTAS
MFC005Cancelamento de Duplicata / AdiantamentoCONTAS
MNF034Lançamento Documento Fiscal em LoteCONTAS
CNF012Consulta de CTRCCONTAS
MPD026Controle de ObrasCONTAS
MTR005Consulta / Fechamento de ViagemCONTAS
RPD015CONTAS
MRC030CONTAS
jFaturamentoCONTAS
MCA004Fechamento de ContratosCONTAS
MFC014CONTAS
MCA009Complemento de PagamentoCONTAS
MNF002Emissão de Nota Fiscal de VendaCONTAS
MFC034Provisão Financeira/Contábil para Devedores DuvidososCONTAS
MPD019Gerenciamento de Contrato/Romaneio ObrasCONTAS
MPD022CONTAS
MFC019Reparcelamento de ContasCONTAS
MFC012Agrupamento de ContasCONTAS
MNF023Gerenciamento de Contas de ContratosCONTAS
MNF009CONTAS
MNF017Venda BalcãoCONTAS
MNF024CONTAS
MNF007Devolução / Retorno de Notas FiscaisCONTAS
MFC015Desconto de Duplicatas / ChequesCONTAS
MFC032Gerenciamento de Títulos a PagarCONTAS
TFA067Contratos e Licenças de SoftwareCONTAS
MNF004Emissão de Notas Fiscais LiberadasCONTAS
MNF001Recebimento de Notas Fiscais de CompraCONTAS
...+75 telas

Modelos de Relatório​

O modelo é escolhido no combobox "Modelo de Layout" (cmbMD_LAYOUT) e influencia o SQL, o nome do layout de impressão (iLAYOUT = programa.Código + sufixo) e a habilitação das demais opções da tela.

Modelo 1: Normal​

Quando usado: item "Normal" do combobox "Modelo de Layout" (MD_LAYOUT = 'N'). Layout de impressão: RPD001. É o padrão ao abrir a tela.

Relatório analítico clássico de pedidos e itens, agrupável por Vendedor (chkVENDEDOR) e por Pessoa Física/Jurídica (chkPESSOA). Mostra número e datas do pedido, condição/forma de pagamento, descrição do item, peso/quantidade pedida e atendida, valor unitário, valor total, desconto e valor compensado (soma de CONTASPEDIDO). Ordena pela Empresa + quebras selecionadas + campo escolhido em "Ordem do Relatório".

SQL Base:

SELECT E.NM_EMPRESA||' - '||P.CD_EMPRESA NM_EMPRESA,
-- quebras opcionais (COALESCE(V.NM_PESSOA||' - '||P.CD_VENDEDOR,'Sem Vendedor') NM_VENDEDOR,
-- C.NM_PESSOA||' - '||C.CD_PESSOA NM_PESSOA)
P.NR_PEDIDO, P.DT_PEDIDO, P.DT_ENTREGA, P.TP_PEDIDO, P.ST_PEDIDO,
CASE CP.ST_CONDPAGTO WHEN 'D' THEN 'Vencto.: ' ELSE CP.DS_CONDPAGTO END DS_CONDPAGTO,
FP.DS_FORMAPAGTO, P.DT_VENCIMENTO,
ITEM.DS_ITEM||' - '||I.CD_ITEM DS_ITEM,
I.PS_PEDIDO, I.PS_ATENDIDO, I.QT_PEDIDA, I.QT_ATENDIDA,
I.VL_UNITARIO, I.VL_TOTAL, I.VL_DESCONTO, SUM(CPP.VL_COMPENSADO) VL_COMPENSADO
FROM PEDIDO P
INNER JOIN ITEMPEDIDO I ON (P.CD_EMPRESA = I.CD_EMPRESA
AND P.NR_PEDIDO = I.NR_PEDIDO
AND P.TP_PEDIDO = I.TP_PEDIDO)
INNER JOIN PESSOA C ON (P.CD_PESSOA = C.CD_PESSOA)
LEFT JOIN CONTASPEDIDO CPP ON (CPP.CD_EMPPEDIDO = P.CD_EMPRESA
AND CPP.NR_PEDIDO = P.NR_PEDIDO
AND CPP.TP_PEDIDO = P.TP_PEDIDO)
LEFT JOIN CONTAS ON (CONTAS.CD_EMPRESA = CPP.CD_EMPCONTA
AND CONTAS.NR_LANCAMENTO = CPP.NR_LANCCONTA
AND CONTAS.CD_PESSOA = CPP.CD_PESSOACONTA
AND CONTAS.CD_TIPOCONTA = CPP.CD_TIPOCONTA
AND CONTAS.NR_PARCELA = CPP.NR_PARCELACONTA)
LEFT JOIN PESSOA V ON (P.CD_VENDEDOR = V.CD_PESSOA)
INNER JOIN EMPRESA E ON (P.CD_EMPRESA = E.CD_EMPRESA)
INNER JOIN CONDPAGTO CP ON (P.CD_CONDPAGTO = CP.CD_CONDPAGTO)
INNER JOIN FORMAPAGTO FP ON (P.CD_FORMAPAGTO = FP.CD_FORMAPAGTO)
INNER JOIN ITEM ON (I.CD_ITEM = ITEM.CD_ITEM)
LEFT JOIN GRUPO G ON (G.CD_GRUPO = ITEM.CD_GRUPO)
LEFT JOIN SUBGRUPO SG ON (SG.CD_SUBGRUPO = ITEM.CD_SUBGRUPO)
/* JOIN opcional em SECAO quando Seção é informada */
/* JOIN opcional em PLUGORDRECAPPEDIDO / ORDEMPRODUCAORECAP quando Ordem Produção é informada */
WHERE P.CD_EMPRESA = :CD_EMPRESA
AND P.TP_PEDIDO = :TP_PEDIDO
AND ((CONTAS.ST_CONTAS <> 'C') OR (CONTAS.ST_CONTAS IS NULL))
/* Status: IN ('P','N') | IN ('P','N','A') | = :ST_PEDIDO (salvo 'T' = Todos) */
/* demais filtros opcionais sobre CD_CONDPAGTO, CD_FORMAPAGTO, CD_TABPRECO, SECAO,
DT_PEDIDO / DT_ENTREGA, NR_PEDIDOFOR e listas IN (...) de pedidos, produtos,
pessoas, vendedores, movimentações, grupos, subgrupos, tipo de faturamento */
GROUP BY /* quebras opcionais + */
E.NM_EMPRESA, P.CD_EMPRESA, C.NM_PESSOA, C.CD_PESSOA,
P.NR_PEDIDO, P.DT_PEDIDO, P.DT_ENTREGA, P.TP_PEDIDO, P.ST_PEDIDO,
CP.ST_CONDPAGTO, CP.DS_CONDPAGTO, FP.DS_FORMAPAGTO, P.DT_VENCIMENTO,
ITEM.DS_ITEM, I.CD_ITEM, I.PS_PEDIDO, I.PS_ATENDIDO,
I.QT_PEDIDA, I.QT_ATENDIDA, I.VL_UNITARIO, I.VL_TOTAL, I.VL_DESCONTO
ORDER BY E.NM_EMPRESA||' - '||P.CD_EMPRESA,
/* quebras + cmbORDEM.Value */

Modelo 2: Produção​

Quando usado: item "Produção" do combobox "Modelo de Layout" (MD_LAYOUT = 'P'). Layout de impressão: RPD001_1.

Mesma base do modelo Normal, porém obriga vínculo com Ordem de Produção Recapadora (PLUGORDRECAPPEDIDO → ORDEMPRODUCAORECAP) e adiciona a coluna OPR.ID ao SELECT e ao GROUP BY. Usado pela área de recapagem para ler pedidos amarrados a ordens de produção.

SQL Base:

SELECT E.NM_EMPRESA||' - '||P.CD_EMPRESA NM_EMPRESA,
/* quebras opcionais + */
OPR.ID,
P.NR_PEDIDO, P.DT_PEDIDO, P.DT_ENTREGA, P.TP_PEDIDO, P.ST_PEDIDO,
CASE CP.ST_CONDPAGTO WHEN 'D' THEN 'Vencto.: ' ELSE CP.DS_CONDPAGTO END DS_CONDPAGTO,
FP.DS_FORMAPAGTO, P.DT_VENCIMENTO,
ITEM.DS_ITEM||' - '||I.CD_ITEM DS_ITEM,
I.PS_PEDIDO, I.PS_ATENDIDO, I.QT_PEDIDA, I.QT_ATENDIDA,
I.VL_UNITARIO, I.VL_TOTAL, I.VL_DESCONTO,
SUM(CPP.VL_COMPENSADO) VL_COMPENSADO
FROM PEDIDO P
INNER JOIN ITEMPEDIDO I ON (P.CD_EMPRESA = I.CD_EMPRESA
AND P.NR_PEDIDO = I.NR_PEDIDO
AND P.TP_PEDIDO = I.TP_PEDIDO)
INNER JOIN PLUGORDRECAPPEDIDO POG ON (POG.CD_EMPRESA = P.CD_EMPRESA
AND POG.NR_PEDIDO = P.NR_PEDIDO
AND POG.TP_PEDIDO = P.TP_PEDIDO)
INNER JOIN ORDEMPRODUCAORECAP OPR ON (OPR.ID = POG.IDORDEMPRODUCAORECAP)
INNER JOIN PESSOA C ON (P.CD_PESSOA = C.CD_PESSOA)
LEFT JOIN CONTASPEDIDO CPP ON (...)
LEFT JOIN CONTAS ON (...)
LEFT JOIN PESSOA V ON (P.CD_VENDEDOR = V.CD_PESSOA)
INNER JOIN EMPRESA E ON (P.CD_EMPRESA = E.CD_EMPRESA)
INNER JOIN CONDPAGTO CP ON (P.CD_CONDPAGTO = CP.CD_CONDPAGTO)
INNER JOIN FORMAPAGTO FP ON (P.CD_FORMAPAGTO = FP.CD_FORMAPAGTO)
INNER JOIN ITEM ON (I.CD_ITEM = ITEM.CD_ITEM)
LEFT JOIN GRUPO G ON (G.CD_GRUPO = ITEM.CD_GRUPO)
LEFT JOIN SUBGRUPO SG ON (SG.CD_SUBGRUPO = ITEM.CD_SUBGRUPO)
WHERE P.CD_EMPRESA = :CD_EMPRESA
AND P.TP_PEDIDO = :TP_PEDIDO
AND ((CONTAS.ST_CONTAS <> 'C') OR (CONTAS.ST_CONTAS IS NULL))
/* filtros opcionais (idem modelo Normal) + OPR.ID IN (ordens selecionadas) */
GROUP BY /* idem Normal + */ OPR.ID
ORDER BY E.NM_EMPRESA||' - '||P.CD_EMPRESA, /* quebras + cmbORDEM.Value */

Modelo 3: Orçamento​

Quando usado: item "Orçamento" do combobox "Modelo de Layout" (MD_LAYOUT = 'O'). Layout de impressão: RPD001_O. Ao selecionar este modelo, cmbTP_PEDIDO é forçado para "Orçamento" (O), cmbST_PEDIDO para "Não Atendidos" (N), e as quebras por Vendedor / Pessoa são desabilitadas.

Espelho gráfico do orçamento para entregar ao cliente. Busca PEDIDO com TP_PEDIDO = 'O', junta dados da empresa emitente (logotipo, endereço, CNPJ/IE, observação), do cliente (endereço de entrega, município), dados de vendedor (telefone/celular/e-mail via RETORNA_DADOSCADASTRAIS), impostos item a item via CALCULA_IMPOSTOPEDIDO, valor por extenso via VALOR_EXTENSO, data por extenso via DATA_EXTENSO e mensagem padrão de pedido (PARMFATUR.DS_MSGPEDIDO) concatenada à observação do pedido.

SQL Base:

SELECT N.CD_EMPRESA, E.NM_EMPRESA, PE.NR_CNPJCPF NR_CNPJEMP, PE.NM_FANTASIA,
EE.DS_ENDERECO||COALESCE(', '||EE.NR_ENDERECO,' - ')||
COALESCE(COALESCE(' - '||EE.DS_BAIRRO, EE.DS_COMPLEMENTO),' ')||
' - CEP '||EE.NR_CEP||' - '||ME.DS_MUNICIPIO||' / '||ME.SG_ESTADO||
' - Telefone '||COALESCE(EE.NR_FONE, EE.NR_FAX) DS_ENDEREMP,
N.TP_PAGTOFRETE, PE.DS_SITE, EE.NR_INSCEST NR_INSCEMP, PE.DS_EMAIL,
P.DS_OBSERVACAO DS_CONTATO,
COALESCE(EE.NR_FONE, EE.NR_FAX) NR_FONEEMP, EE.NR_FAX NR_FAXEMP,
N.NR_PEDIDO, N.TP_PEDIDO, N.DT_PEDIDO, N.DT_ENTREGA,
N.CD_PESSOA, P.NM_PESSOA||COALESCE(' - '||P.NM_FANTASIA,'')||' - '||P.CD_PESSOA NM_PESSOA,
P.NR_CNPJCPF, EP.NR_CEP,
EP.DS_ENDERECO||COALESCE(', '||EP.NR_ENDERECO,' ')||' - '||
COALESCE(EP.NR_CEP||' - ','')||
COALESCE(MP.DS_MUNICIPIO||' / '||MP.SG_ESTADO,'')||' - '||EP.NR_FONE DS_ENDERECO,
COALESCE(EP.DS_BAIRRO, EP.DS_COMPLEMENTO) DS_BAIRRO,
MP.DS_MUNICIPIO||' - '||MP.SG_ESTADO DS_MUNICIPIO, EP.NR_INSCEST,
EP.NR_FONE, EP.NR_FAX,
CASE C.ST_CONDPAGTO
WHEN 'D' THEN 'Vencto.: '||FORMATA_DATA(N.DT_VENCIMENTO,'%d/%m/%Y')
ELSE C.DS_CONDPAGTO
END DS_CONDPAGTO, N.CD_CONDPAGTO, N.DT_VENCIMENTO,
N.CD_VENDEDOR, V.NM_PESSOA||' - '||N.CD_VENDEDOR NM_VENDEDOR,
N.CD_FORMAPAGTO, F.DS_FORMAPAGTO, MC.DS_MARCA,
MP.DS_MUNICIPIO DS_MUNIC, MP.SG_ESTADO,
IP.CD_ITEM, I.DS_ITEM, I.SG_UNIDMED, IP.VL_UNITARIO,
IP.VL_DESCONTO, IP.VL_TOTAL, IP.DS_OBSERVACAO DS_OBSITEM,
COALESCE(CI.V_PC_ICMS,0) PC_ICMS, NCM.PC_IPI, COALESCE(CI.V_VL_IPI,0) V_VL_IPI,
I.NR_NCM, MOV.CD_CST, CI.V_VL_SUBSTITUICAO,
CASE WHEN CI.V_VL_SUBSTITUICAO <> 0 THEN (CI.V_VL_SUBSTITUICAO/IP.VL_TOTAL)*100 ELSE 0 END PC_SUBSTITUICAO,
IP.VL_TOTAL - COALESCE(IP.VL_DESCONTO,0) + COALESCE(IP.VL_DESPESA,0) VL_LIQUIDO,
CASE (SELECT V_TIPO FROM HABILITA_PESOQTDE(IP.CD_ITEM))
WHEN 'Q' THEN IP.QT_PEDIDA ELSE IP.PS_PEDIDO
END PS_PEDIDO, IP.VL_DESPESA, PARM.DS_LOGOTIPO,
COALESCE(N.DS_OBSERVACAO,'')||COALESCE(' '||PARM.DS_MSGPEDIDO,'') DS_OBSERVACAO,
ME.DS_MUNICIPIO||', '||DE.O_DS_DATA||'. ' DS_DATA,
ME.DS_MUNICIPIO||' / '||ME.SG_ESTADO DS_MUNICEMP,
(SELECT VE.O_VALOR
FROM VALOR_EXTENSO(CAST(
(SELECT SUM(IPP.VL_TOTAL) FROM ITEMPEDIDO IPP
WHERE IPP.CD_EMPRESA = N.CD_EMPRESA
AND IPP.NR_PEDIDO = N.NR_PEDIDO
AND IPP.TP_PEDIDO = N.TP_PEDIDO) AS DOM_NUMERIC15_2)) VE
WHERE 1=1) DS_EXTENSO,
CASE C.ST_CONDPAGTO
WHEN 'D' THEN 'Vencto.: '||FORMATA_DATA(N.DT_VENCIMENTO,'%d/%m/%Y')
ELSE C.DS_CONDPAGTO
END||'/'||F.DS_FORMAPAGTO DS_PAGAMENTO,
CASE WHEN N.NR_DIASENTREGA IS NULL
THEN CASE WHEN N.DT_ENTREGA IS NULL THEN 'A Combinar'
ELSE FORMATA_DATA(N.DT_ENTREGA,'%d/%m/%Y') END
ELSE FORMATA_DATA(DATEADD(N.NR_DIASENTREGA DAY TO N.DT_PEDIDO),'%d/%m/%Y')
END DT_PRAZOFORNEC,
COALESCE(CASE N.TP_PAGTOFRETE WHEN 1 THEN 'Remetente - CIF'
WHEN 2 THEN 'Destinatário - FOB'
ELSE 'Outros'
END||COALESCE(' - '||PT.NM_PESSOA,''),'A Combinar') NM_TRANSPORTADOR,
RDV.NR_TELEFONE NR_TELVENDEDOR, RDV.NR_CELULAR NR_CELVENDEDOR,
RDV.NR_FAX NR_FAXVENDEDOR, V.DS_EMAIL DS_EMAILVENDEDOR,
'CNPJ '||PE.NR_CNPJCPF||' - Inscrição Estadual '||EE.NR_INSCEST DS_NRCNPJINSC
FROM PEDIDO N
INNER JOIN ITEMPEDIDO IP ON (N.NR_PEDIDO = IP.NR_PEDIDO
AND N.CD_EMPRESA = IP.CD_EMPRESA
AND N.TP_PEDIDO = IP.TP_PEDIDO)
INNER JOIN MOVIMENTACAO MOV ON (IP.CD_MOVIMENTACAO = MOV.CD_MOVIMENTACAO)
INNER JOIN PESSOA P ON (N.CD_PESSOA = P.CD_PESSOA)
INNER JOIN ENDERECOPESSOA EP ON (N.CD_PESSOA = EP.CD_PESSOA
AND N.CD_ENDERECO = EP.CD_ENDERECO)
INNER JOIN MUNICIPIO MP ON (EP.CD_MUNICIPIO = MP.CD_MUNICIPIO)
INNER JOIN EMPRESA E ON (N.CD_EMPRESA = E.CD_EMPRESA)
INNER JOIN PESSOA PE ON (E.CD_PESSOA = PE.CD_PESSOA)
INNER JOIN ENDERECOPESSOA EE ON (EE.CD_PESSOA = PE.CD_PESSOA
AND EE.CD_ENDERECO = (SELECT MIN(CD_ENDERECO)
FROM ENDERECOPESSOA ENDER
WHERE ENDER.CD_PESSOA = EE.CD_PESSOA))
INNER JOIN MUNICIPIO ME ON (EE.CD_MUNICIPIO = ME.CD_MUNICIPIO)
INNER JOIN CONDPAGTO C ON (N.CD_CONDPAGTO = C.CD_CONDPAGTO)
INNER JOIN ITEM I ON (IP.CD_ITEM = I.CD_ITEM)
INNER JOIN NCM ON (NCM.NR_NCM = I.NR_NCM)
LEFT JOIN MARCA MC ON (I.CD_MARCA = MC.CD_MARCA)
INNER JOIN PARMFATUR PARM ON (PARM.CD_EMPRESA = N.CD_EMPRESA)
LEFT JOIN PESSOA V ON (V.CD_PESSOA = N.CD_VENDEDOR)
LEFT JOIN RETORNA_DADOSCADASTRAIS(V.CD_PESSOA, NULL) RDV ON (1 = 1)
LEFT JOIN FORMAPAGTO F ON (F.CD_FORMAPAGTO = N.CD_FORMAPAGTO)
LEFT JOIN CALCULA_IMPOSTOPEDIDO(N.CD_EMPRESA, N.NR_PEDIDO, N.TP_PEDIDO,
IP.CD_ITEM, ME.SG_ESTADO, N.CD_EMPRESA) CI ON (1=1)
LEFT JOIN DATA_EXTENSO(N.DT_PEDIDO) DE ON (1=1)
LEFT JOIN PESSOA PT ON (PT.CD_PESSOA = N.CD_TRANSPORTADOR)
WHERE N.CD_EMPRESA = :CD_EMPRESA
AND N.TP_PEDIDO = 'O'
/* Status: IN ('P','N') | IN ('P','N','A') | = :ST_PEDIDO (salvo 'T') */
/* filtros opcionais: CD_CONDPAGTO, CD_FORMAPAGTO, CD_TABPRECO, CD_SECAO,
DT_PEDIDO, DT_ENTREGA, NR_PEDIDOFOR, IN (...) pedidos, produtos, pessoas,
vendedores, movimentações, grupos, subgrupos, tipo faturamento, ordem produção */
ORDER BY /* cmbORDEM.Value com P. substituído por N. */

Modelo 4: Data de Entrega (Comparativo)​

Quando usado: item "Data de Entrega (Comparativo)" do combobox "Modelo de Layout" (MD_LAYOUT = 'E'). Layout de impressão: RPD001_E. Ao selecionar, as quebras por Vendedor / Pessoa e o campo "Ordem do Relatório" ficam desabilitados.

Compara a data de entrega prometida no pedido com a data efetiva da nota fiscal emitida, item a item. Junta PEDIDO + ITEMPEDIDO com PEDIDONOTA, NOTA e ITEMNOTA (LEFT JOIN — mostra também itens ainda não faturados) e converte quantidade/peso conforme TIPOCALCULO.TP_UNIDADE. Ordenação fixa: PD.NR_PEDIDO, IP.CD_ITEM, NT.NR_LANCAMENTO.

SQL Base:

SELECT PD.NR_PEDIDO,
CASE PD.TP_PEDIDO WHEN 'E' THEN 'Entrada' ELSE 'Saída' END TP_PEDIDO,
PD.DT_PEDIDO,
PD.DT_ENTREGA DT_ENTREGAPEDIDO,
PD.CD_CONDPAGTO||' - '||CPP.DS_CONDPAGTO CD_CONDPAGTOPEDIDO,
PD.CD_FORMAPAGTO||' - '||FPP.DS_FORMAPAGTO CD_FORMAPAGTOPEDIDO,
PD.CD_PESSOA, PP.NM_PESSOA, IP.CD_ITEM, I.DS_ITEM,
IP.DT_ENTREGA DT_ENTREGAITEM,
NT.NR_LANCAMENTO,
COALESCE(NT.NR_NOTAFISCAL, NT.NR_NOTAFOR) NR_NOTAFISCAL,
NT.CD_SERIE,
CASE NT.TP_NOTA WHEN 'E' THEN 'Entrada' ELSE 'Saída' END TP_NOTA,
NT.CD_CONDPAGTO||' - '||CPN.DS_CONDPAGTO CD_CONDPAGTONOTA,
NT.CD_FORMAPAGTO||' - '||FPN.DS_FORMAPAGTO CD_FORMAPAGTONOTA,
NT.DT_EMISSAO DT_EMISSAONOTA, NT.DT_ENTREGA DT_ENTREGANOTA,
CASE TP.TP_UNIDADE WHEN 'Q' THEN IP.QT_PEDIDA ELSE IP.PS_PEDIDO END QT_PEDIDA,
CASE TP.TP_UNIDADE WHEN 'Q' THEN PN.QT_ATENDIDA ELSE IT.PS_ITEMNOTA END QT_ITEMNOTA
FROM PEDIDO PD
INNER JOIN ITEMPEDIDO IP ON (IP.CD_EMPRESA = PD.CD_EMPRESA
AND IP.NR_PEDIDO = PD.NR_PEDIDO
AND IP.TP_PEDIDO = PD.TP_PEDIDO)
INNER JOIN ITEM I ON (I.CD_ITEM = IP.CD_ITEM)
INNER JOIN TIPOCALCULO TP ON (TP.CD_TIPOCALCULO = I.CD_TIPOCALCULO)
INNER JOIN PESSOA PP ON (PP.CD_PESSOA = PD.CD_PESSOA)
INNER JOIN FORMAPAGTO FPP ON (FPP.CD_FORMAPAGTO = PD.CD_FORMAPAGTO)
INNER JOIN CONDPAGTO CPP ON (CPP.CD_CONDPAGTO = PD.CD_CONDPAGTO)
LEFT JOIN PEDIDONOTA PN ON (PN.CD_EMPRPED = PD.CD_EMPRESA
AND PN.NR_PEDIDO = PD.NR_PEDIDO
AND PN.TP_PEDIDO = PD.TP_PEDIDO
AND PN.CD_ITEM = IP.CD_ITEM)
LEFT JOIN NOTA NT ON (NT.CD_EMPRESA = PN.CD_EMPRESA
AND NT.NR_LANCAMENTO = PN.NR_LANCAMENTO
AND NT.CD_SERIE = PN.CD_SERIE
AND NT.TP_NOTA = PN.TP_NOTA)
LEFT JOIN ITEMNOTA IT ON (IT.CD_EMPRESA = NT.CD_EMPRESA
AND IT.NR_LANCAMENTO = NT.NR_LANCAMENTO
AND IT.TP_NOTA = NT.TP_NOTA
AND IT.CD_SERIE = NT.CD_SERIE
AND IT.CD_ITEM = I.CD_ITEM)
LEFT JOIN FORMAPAGTO FPN ON (FPN.CD_FORMAPAGTO = NT.CD_FORMAPAGTO)
LEFT JOIN CONDPAGTO CPN ON (CPN.CD_CONDPAGTO = NT.CD_CONDPAGTO)
/* JOIN opcional em SECAO / PLUGORDRECAPPEDIDO quando filtros são informados */
WHERE PD.CD_EMPRESA = :CD_EMPRESA
AND PD.TP_PEDIDO = :TP_PEDIDO
/* demais filtros IN / entre datas (idem modelo Normal) */
ORDER BY PD.NR_PEDIDO, IP.CD_ITEM, NT.NR_LANCAMENTO