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 SECAOna 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" paraIN ('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_PEDIDOcomo 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+ORDEMPRODUCAORECAPnos modelos Normal, Produção e Orçamento
- Pedidos (Lista de Pedidos) F9 — multi-seleção — F9 exige Empresa preenchida e envia
- 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
ITEMcomST_ATIVO = 'S') - Movimentações (Lista de Movimentações) F9 — multi-seleção (pesquisa em
MOVIMENTACAOcomST_ATIVO = 'S') - Grupos (Lista de Grupos) F9 — multi-seleção
- SubGrupos (Lista de SubGrupos) F9 — multi-seleção; lookup filtra por
CD_GRUPOdo último grupo selecionado - Formas de Faturamento (Lista de Formas de Faturamento) F9 — multi-seleção
Parametros que Influenciam
| Tabela | Campo | Efeito |
|---|---|---|
| PARMFATUR | DS_LOGOTIPO | Caminho/nome da imagem de logotipo da empresa emitente — impressa no cabeçalho do modelo "Orçamento" |
| PARMFATUR | DS_MSGPEDIDO | Mensagem 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)
| Tabela | Operacoes |
|---|---|
| EMPRESA | DELETE, INSERT, SELECT, UPDATE |
| ITEM | DELETE, INSERT, SELECT, UPDATE |
| MOVIMENTACAO | DELETE, INSERT, SELECT, UPDATE |
| PESSOA | DELETE, INSERT, SELECT, UPDATE |
Tabelas de Leitura (SELECT)
| Tabela | Operacoes |
|---|---|
| CONDPAGTO | SELECT |
| CONTAS | SELECT |
| CONTASPEDIDO | SELECT |
| ENDERECOPESSOA | SELECT |
| FORMAPAGTO | SELECT |
| GRUPO | SELECT |
| ITEMNOTA | SELECT |
| ITEMPEDIDO | SELECT |
| MARCA | SELECT |
| MUNICIPIO | SELECT |
| NCM | SELECT |
| NOTA | SELECT |
| ORDEMPRODUCAORECAP | SELECT |
| PARMFATUR | SELECT |
| PEDIDO | SELECT |
| PEDIDONOTA | SELECT |
| PLUGORDRECAPPEDIDO | SELECT |
| SECAO | SELECT |
| SUBGRUPO | SELECT |
| TABPRECO | SELECT |
| TIPOCALCULO | SELECT |
| TIPOFATURAMENTO | SELECT |
Procedures Chamadas
| Procedure | Tabelas Acessadas |
|---|---|
| CALCULA_IMPOSTOPEDIDO | EMPRESA (SELECT), ENDERECOPESSOA (SELECT), IMPOSTO (SELECT), IMPOSTOITEM (SELECT), IMPOSTOMOV (SELECT), ITEM (SELECT) +9 |
| DATA_EXTENSO | - |
| HABILITA_PESOQTDE | ITEM (SELECT), TIPOCALCULO (SELECT), UNIDMED (SELECT) |
| RETORNA_DADOSCADASTRAIS | AREACOMERCIAL (SELECT), ENDERECOPESSOA (SELECT), ESTADO (SELECT), FORMAPAGTO (SELECT), GRUPOPCP (SELECT), MUNICIPIO (SELECT) +4 |
| VALOR_EXTENSO | - |
Tabelas via Procedures (acesso indireto)
| Tabela | Operacoes |
|---|---|
| AREACOMERCIAL | SELECT |
| EMPRESA | SELECT |
| ENDERECOPESSOA | SELECT |
| ESTADO | SELECT |
| FORMAPAGTO | SELECT |
| GRUPOPCP | SELECT |
| IMPOSTO | SELECT |
| IMPOSTOITEM | SELECT |
| IMPOSTOMOV | SELECT |
| ITEM | SELECT |
| ITEMPEDIDO | SELECT |
| MUNICIPIO | SELECT |
| NCM | SELECT |
| ORDEMSERVICO | SELECT |
| ORDEMSERVITEM | SELECT |
| PAISBACEN | SELECT |
| PEDIDO | SELECT |
| PESSOA | SELECT |
| PESSOAFISICA | SELECT |
| REGIAOCOMERCIAL | SELECT |
| ... | +3 tabelas |
Dependencias Aferentes (quem alimenta esta tela)
Telas que escrevem em tabelas lidas por esta tela.
| Tela | Título | Tabelas em Comum |
|---|---|---|
| MRC020 | Confirmação de Ordem de Carregamento Recapadora | CONTAS |
| MFC023 | Duplicata / Adiantamento por Obra | CONTAS |
| MFC027 | Gerenciamento Conciliação Bancária | CONTAS |
| MFC005 | Cancelamento de Duplicata / Adiantamento | CONTAS |
| MNF034 | Lançamento Documento Fiscal em Lote | CONTAS |
| CNF012 | Consulta de CTRC | CONTAS |
| MPD026 | Controle de Obras | CONTAS |
| MTR005 | Consulta / Fechamento de Viagem | CONTAS |
| RPD015 | CONTAS | |
| MRC030 | CONTAS | |
jFaturamento | CONTAS | |
| MCA004 | Fechamento de Contratos | CONTAS |
| MFC014 | CONTAS | |
| MCA009 | Complemento de Pagamento | CONTAS |
| MNF002 | Emissão de Nota Fiscal de Venda | CONTAS |
| MFC034 | Provisão Financeira/Contábil para Devedores Duvidosos | CONTAS |
| MPD019 | Gerenciamento de Contrato/Romaneio Obras | CONTAS |
| MPD022 | CONTAS | |
| MFC019 | Reparcelamento de Contas | CONTAS |
| MFC012 | Agrupamento de Contas | CONTAS |
| MNF023 | Gerenciamento de Contas de Contratos | CONTAS |
| MNF009 | CONTAS | |
| MNF017 | Venda Balcão | CONTAS |
| MNF024 | CONTAS | |
| MNF007 | Devolução / Retorno de Notas Fiscais | CONTAS |
| MFC015 | Desconto de Duplicatas / Cheques | CONTAS |
| MFC032 | Gerenciamento de Títulos a Pagar | CONTAS |
| TFA067 | Contratos e Licenças de Software | CONTAS |
| MNF004 | Emissão de Notas Fiscais Liberadas | CONTAS |
| MNF001 | Recebimento de Notas Fiscais de Compra | CONTAS |
| ... | +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