Rotina: Pedido de Venda
Detalhamento completo da rotina de pedido de venda: tabelas, campos, parâmetros, stored procedures e influências em outros módulos.
Módulo Delphi Principal
| Arquivo | Linhas | Responsabilidade |
|---|---|---|
source/MPD002/UMPD002.pas | 8.021 | Form principal — cabeçalho, itens, abas |
source/MPD002/UdmMPD002.pas | — | DataModule — queries, lógica de negócio |
source/MPD002/UAUTORIZACAO.pas | — | Aprovação/autorização de pedidos |
source/MPD002/UPARCELAPRAZOMEDIO.pas | — | Parcelamento e prazo médio |
source/MPD002/UMPD002CUSTOMINIMO.pas | — | Validação de custo mínimo |
source/MPD002/UMPD002CUSTOPEDIDO.pas | — | Cálculo de custo do pedido |
source/MPD002/UMPD002FrmContEntrega.pas | — | Controle de entrega |
source/MPD002/UMPD002FrmFator.pas | — | Fator/Markup |
source/MPD002/UMPD002FrmCaixaMaster.pas | — | Caixa master (embalagem) |
source/MPD002/UMPD002MENSAGEM.pas | — | Mensagens ao cliente |
source/MPD002/UMPD002SERIAL.pas | — | Controle de número de série |
source/LPD001/ULPD001.pas | — | Layout de impressão do pedido |
source/CPD001/UCPD001.pas | — | Consulta de pedidos com filtros |
Tabelas do Banco de Dados
PEDIDO — Cabeçalho
DDL: docs/schema/tables/PEDIDO.sql
| Campo | Tipo | Obrig | Descrição |
|---|---|---|---|
| CD_EMPRESA | INTEGER | ✓ | Empresa (PK) |
| NR_PEDIDO | INTEGER | ✓ | Número sequencial (PK) |
| TP_PEDIDO | CHAR(1) | ✓ | 'S'=Saída/Venda, 'E'=Entrada/Compra, 'O'=Orçamento, 'T'=Transferência (PK) |
| CD_PESSOA | INTEGER | ✓ | Cliente (FK → PESSOA) |
| CD_ENDERECO | INTEGER | ✓ | Endereço de cobrança (FK → ENDERECOPESSOA) |
| CD_ENDENTREGA | INTEGER | Endereço de entrega se diferente | |
| CD_ENDCOBRANCA | INTEGER | Endereço de cobrança específico | |
| CD_VENDEDOR | INTEGER | Vendedor responsável (FK → VENDEDOR) | |
| CD_CONDPAGTO | INTEGER | ✓ | Condição de pagamento (FK → CONDPAGTO) |
| CD_FORMAPAGTO | VARCHAR(2) | ✓ | Forma de pagamento (FK → FORMAPAGTO) |
| CD_JURO | INTEGER | Tabela de juros (FK → JURO) | |
| CD_TRANSPORTADOR | INTEGER | Transportador (FK → PESSOA) | |
| ST_PEDIDO | CHAR(1) | ✓ | 'P'=Pendente, 'A'=Atendido, 'C'=Cancelado, 'N'=Normal |
| DT_PEDIDO | DATE | ✓ | Data de emissão |
| HR_PEDIDO | TIME | Hora da emissão (DEFAULT CURRENT_TIME) | |
| DT_ENTREGA | DATE | Data prometida de entrega | |
| DT_VENCIMENTO | DATE | Vencimento do pagamento | |
| DT_FATURADO | DATE | Preenchido quando a NF é emitida | |
| DT_EXPEDIDO | DATE | Data de expedição/saída física | |
| DT_LIBERADO | DATE | Data de liberação para faturamento | |
| DT_CANCELAMENTO | DATE | Data do cancelamento | |
| NR_DIASENTREGA | INTEGER | Prazo de entrega em dias | |
| VL_TRANSPORTADOR | NUMERIC(15,2) | Valor do frete | |
| VL_REDESPACHO | NUMERIC(15,2) | Valor de redespacho | |
| PC_COMISSAOGERAL | NUMERIC(3,2) | % comissão geral do pedido | |
| CD_USUARIO | VARCHAR(5) | Usuário que criou (FK → USUARIO) | |
| DS_OBSERVACAO | VARCHAR(240) | Observações gerais | |
| DS_BLOQUEIO | VARCHAR(32000) | Motivo do bloqueio (preenchido automaticamente) |
Chave primária: (CD_EMPRESA, NR_PEDIDO, TP_PEDIDO)
ITEMPEDIDO — Itens
DDL: docs/schema/tables/ITEMPEDIDO.sql
| Campo | Tipo | Obrig | Descrição |
|---|---|---|---|
| CD_EMPRESA | INTEGER | ✓ | Empresa (PK) |
| NR_PEDIDO | INTEGER | ✓ | Número do pedido (PK, FK → PEDIDO) |
| TP_PEDIDO | CHAR(1) | ✓ | Tipo do pedido (PK, FK → PEDIDO) |
| CD_ITEM | INTEGER | ✓ | Produto (PK, FK → ITEM) |
| CD_MOVIMENTACAO | INTEGER | Tipo de movimento (FK → MOVIMENTACAO) | |
| TP_ITEM | CHAR(1) | 'P'=Produto, 'S'=Serviço, 'T'=Terceiro | |
| QT_PEDIDA | NUMERIC(15,2) | ✓ | Quantidade pedida |
| QT_ATENDIDA | NUMERIC(15,2) | Quantidade efetivamente atendida | |
| PS_PEDIDO | NUMERIC(15,3) | Peso pedido | |
| PS_ATENDIDO | NUMERIC(15,3) | Peso atendido | |
| VL_UNITARIO | NUMERIC(15,4) | ✓ | Preço unitário |
| VL_TOTAL | NUMERIC(15,2) | (QT_PEDIDA × VL_UNITARIO) − VL_DESCONTO + VL_DESPESA | |
| VL_DESCONTO | NUMERIC(15,2) | Desconto concedido no item | |
| VL_DESPESA | NUMERIC(15,2) | Despesa adicional no item | |
| VL_JURO | NUMERIC(15,2) | Juros do item | |
| PC_COMISSAO | NUMERIC(3,2) | % comissão do item | |
| PC_COMISEMPR | NUMERIC(3,2) | % comissão adicional da empresa | |
| ST_ITEMPEDIDO | CHAR(1) | 'N'=Não atendido, 'A'=Atendido, 'P'=Parcial | |
| ST_ENTREGA | CHAR(1) | Status de entrega ('A'=Aguardando, 'E'=Entregue) | |
| ST_TERCEIRO | CHAR(1) | 'S'/'N' — produto de terceiro | |
| DT_ENTREGA | DATE | Data de entrega física do item | |
| CD_TABPRECO | INTEGER | Tabela de preço usada (FK → TABPRECO) | |
| CD_LOCAL | INTEGER | Local de estoque (FK → LOCALESTOQUE) | |
| CD_TIPOLOCAL | INTEGER | Tipo de local de estoque |
Chave primária: (CD_EMPRESA, NR_PEDIDO, TP_PEDIDO, CD_ITEM) ON DELETE CASCADE: se o PEDIDO for deletado, os itens são deletados junto.
PARCELAPEDIDO — Parcelas
DDL: docs/schema/tables/PARCELAPEDIDO.sql
Habilitado por: PARMFATUR.ST_PARCELAPEDIDO = 'S'
| Campo | Tipo | Obrig | Descrição |
|---|---|---|---|
| CD_EMPRESA | INTEGER | ✓ | Empresa (PK) |
| NR_PEDIDO | INTEGER | ✓ | Pedido (PK, FK → PEDIDO) |
| TP_PEDIDO | CHAR(1) | ✓ | Tipo (PK, FK → PEDIDO) |
| NR_PARCELA | INTEGER | ✓ | Sequencial da parcela (PK) |
| DT_VENCIMENTO | DATE | ✓ | Data de vencimento |
| VL_PARCELA | NUMERIC(15,2) | ✓ | Valor da parcela |
| QT_DIAS | INTEGER | Dias até vencimento | |
| CD_FORMAPAGTO | VARCHAR(2) | Forma de pagamento desta parcela | |
| VL_JUROPARCELA | NUMERIC(15,2) | Juros da parcela |
Regra: SUM(VL_PARCELA) = VL_TOTAL do PEDIDO (com tolerância de centavos)
Regra: cada VL_PARCELA >= PARMFATUR.VL_MINPARCELAPEDIDO
PEDIDONOTA — Rastreamento Pedido → Nota
DDL: docs/schema/tables/PEDIDONOTA.sql
Preenchida por: stored procedure GERA_NOTAPEDIDO
| Campo | Tipo | Descrição |
|---|---|---|
| CD_EMPRESA | INTEGER | Empresa da nota |
| NR_LANCAMENTO | INTEGER | Número de lançamento da NF (FK → ITEMNOTA) |
| TP_NOTA | CHAR(1) | Tipo da NF |
| CD_SERIE | VARCHAR(4) | Série da NF |
| CD_ITEM | INTEGER | Item da NF (FK → ITEMNOTA) |
| CD_EMPRPED | INTEGER | Empresa do pedido |
| NR_PEDIDO | INTEGER | Número do pedido |
| TP_PEDIDO | CHAR(1) | Tipo do pedido |
| QT_ATENDIDA | NUMERIC(15,2) | Qtd atendida por esta NF (pedido parcial) |
| PS_ATENDIDO | NUMERIC(15,3) | Peso atendido |
| VL_UNITARIO | NUMERIC(15,4) | Valor na nota (pode diferir do pedido) |
Uso: permite rastrear qual NF atendeu qual pedido, inclusive parcialmente.
CONTASPEDIDO — Rastreamento Pedido → Título Financeiro
DDL: docs/schema/tables/CONTASPEDIDO.sql
| Campo | Tipo | Descrição |
|---|---|---|
| CD_EMPCONTA | INTEGER | Empresa da conta (FK → CONTAS) |
| NR_LANCCONTA | INTEGER | Lançamento da conta (FK → CONTAS) |
| CD_PESSOACONTA | INTEGER | Pessoa da conta |
| CD_TIPOCONTA | INTEGER | Tipo de conta |
| NR_PARCELACONTA | INTEGER | Parcela |
| CD_EMPPEDIDO | INTEGER | Empresa do pedido |
| NR_PEDIDO | INTEGER | Número do pedido |
| TP_PEDIDO | CHAR(1) | Tipo do pedido |
| VL_COMPENSADO | NUMERIC(15,4) | Valor compensado |
| DT_LANCAMENTO | DATE | Data do lançamento |
Uso: vincula a duplicata gerada pelo faturamento ao pedido de origem. Permite saber de qual pedido veio cada cobrança.
Tabelas de Configuração e Suporte
| Tabela | DDL | Papel na Rotina |
|---|---|---|
| PARMFATUR | docs/schema/tables/PARMFATUR.sql | ~274 parâmetros que controlam todo o comportamento |
| CONDPAGTO | docs/schema/tables/CONDPAGTO.sql | Define prazos, parcelas, taxas de juro, desconto máx |
| FORMAPAGTO | — | Meios de pagamento disponíveis |
| JURO | — | Tabelas de taxa de juros e multa |
| PESSOA | — | Cliente, dados de crédito, bloqueio |
| ENDERECOPESSOA | — | Endereços (cobrança e entrega) |
| VENDEDOR | — | Dados do vendedor, % comissão |
| ITEM | — | Cadastro do produto |
| TABPRECO | — | Tabela de preço de venda |
| MOVIMENTACAO | — | Tipo de movimento de estoque |
| LOCALESTOQUE | — | Local/posição no armazém |
Stored Procedures
GERA_NOTAPEDIDO
Scripts/GERA_NOTAPEDIDO.sql
Entrada:
I_CD_EMPRESA INTEGER — empresa
I_NR_PEDIDO INTEGER — pedido
I_TP_PEDIDO CHAR(1) — 'S' ou 'E'
Saída:
O_NR_NOTAFISCAL INTEGER — número da NF gerada
O_NR_LANCAMENTO INTEGER — lançamento na NOTAFISCAL
O_CD_SERIE VARCHAR(10) — série da NF
O_DS_MENSAGEM VARCHAR(1000) — erro ou sucesso
O que faz:
- Lê itens do PEDIDO/ITEMPEDIDO
- Calcula impostos (
CALCULA_IMPOSTOPEDIDO) - Insere em NOTAFISCAL + ITEMNOTA
- Insere em PEDIDONOTA (rastreamento)
- Atualiza
PEDIDO.DT_FATURADOeST_PEDIDO = 'A' - Gera contas a receber (CONTAS/CONTASDUPLICA)
- Baixa estoque via MOVIMENTACAO
GERA_NOTAFISCALPEDIDO
Scripts/GERA_NOTAFISCALPEDIDO.sql
Versão estendida que trata romaneio/carregamento (expedição em lotes).
CALCULA_IMPOSTOPEDIDO
Scripts/CALCULA_IMPOSTOPEDIDO.sql
Entrada:
V_CD_EMPRESA INTEGER — empresa
V_NR_PEDIDO INTEGER — pedido
V_TP_PEDIDO CHAR(1)
V_CD_ITEM INTEGER — item específico
V_SG_UFEMPRESA VARCHAR(2) — UF da empresa (para DIFAL)
V_CD_EMPRNOTA INTEGER
V_VL_SIMULACAO NUMERIC — valor simulado (opcional)
Saída:
V_PC_IMPOSTO — % imposto total
V_VL_IMPOSTO — valor imposto total
V_VL_RETIDO — valor retido (ST)
V_VL_SUBSTITUICAO — valor substituição tributária
V_VL_TOTAL — total com imposto
V_VL_IPI — IPI
V_VL_ICMS — ICMS
V_VL_PIS — PIS
V_VL_COFINS — COFINS
...+ outros
Usado em:
- Preview de impostos no pedido (quando
PARMFATUR.ST_IMPOSTOPEDIDO = 'S') - Cálculo definitivo na emissão da NF
Outras Procedures Relacionadas
| Procedure | Script | Ação |
|---|---|---|
CALCULA_IMPOSTOPEDIDO_V2 | Scripts/ | Versão otimizada com menos subqueries |
CALCULA_IMPOSTOPEDIDOTOTAL | Scripts/ | Totalização de impostos de todos os itens |
CALCULA_COMISSAO | Scripts/ | Calcula e grava comissão do vendedor |
ATUALIZA_PEDIDONOTA | Scripts/ | Atualiza rastreamento após faturamento parcial |
ATUALIZA_PEDIDOROMANEIO | Scripts/ | Atualiza romaneio/expedição |
GERA_CONTROLEENTREGAPEDIDO | Scripts/ | Gera controle de entrega pós-expedição |
ATUALIZA_NOTAPEDIDOORIGEMDEST | Scripts/ | Atualiza origem/destino na nota |
Parâmetros (PARMFATUR)
Tabela PARMFATUR tem ~274 campos por empresa. Os relevantes para Pedido de Venda:
Habilitação
| Parâmetro | Tipo | Efeito quando 'S' |
|---|---|---|
ST_PEDVENDA | S/N | Habilita a rotina de pedidos de venda. Se 'N', o menu não abre MPD002 |
ST_BLOQUEIOPED | S/N | Bloqueia criação de qualquer novo pedido (freeze comercial) |
ST_BLOQVENDEDOR | S/N | Vendedor não pode criar pedidos (gerente libera) |
Estoque
| Parâmetro | Tipo | Efeito |
|---|---|---|
ST_ESTOQUENEGATIVO | S/N | 'S' = permite vender sem estoque. 'N' = bloqueia item sem saldo |
ST_ALERTAESTOQUENEGATIVO | S/N | Avisa mas não bloqueia quando estoque negativo |
ST_SOLICITALOCALPED | S/N | 'S' = obriga selecionar local de estoque no item (CD_LOCAL em ITEMPEDIDO) |
ST_CAIXAMASTER | S/N | Valida se quantidade pedida é múltipla da caixa master do produto |
ST_VALIDAITEMEMPRESA | 0/1 | Verifica se o produto pertence a esta empresa |
Comercial / Crédito
| Parâmetro | Tipo | Efeito |
|---|---|---|
VL_MINIMOPEDIDO | NUMERIC | Valor mínimo do pedido. Abaixo disso, não salva |
PC_DESCONTOPED | NUMERIC(3,2) | Desconto máximo permitido (%). Acima: requer autorização |
TP_LIMITECREDITO | CHAR | 'N'=Sem limite, 'C'=Limite por cliente (PESSOA.VL_LIMITECRED), outros=regras customizadas |
ST_BLOQPEDIDOMFA006 | S/N | Bloqueia pedido se cliente tem título vencido em aberto |
Pagamento
| Parâmetro | Tipo | Efeito |
|---|---|---|
ST_PARCELAPEDIDO | S/N | 'S' = grava e exibe PARCELAPEDIDO. 'N' = parcelas só existem na NF |
ST_JUROVENDA | S/N | Calcula juros na venda pelo CD_JURO do CONDPAGTO |
VL_MINPARCELAPEDIDO | NUMERIC | Cada parcela deve ter valor >= este |
CD_CONDPAGTOPED | INTEGER | Condição de pagamento padrão (sugestão ao abrir pedido) |
CD_FORMAPAGTOPED | VARCHAR(2) | Forma de pagamento padrão |
Impostos
| Parâmetro | Tipo | Efeito |
|---|---|---|
ST_IMPOSTOPEDIDO | S/N | 'S' = chama CALCULA_IMPOSTOPEDIDO já no pedido, mostrando preview de impostos. 'N' = impostos calculados só na NF |
Entrega
| Parâmetro | Tipo | Efeito |
|---|---|---|
ST_DTENTREGA | S/N | Obriga informar DT_ENTREGA antes de salvar |
NR_DIASRETIRADA | INTEGER | Dias padrão para data de retirada (soma em DT_PEDIDO) |
Layout de Impressão
| Parâmetro | Tipo | Efeito |
|---|---|---|
CD_LAYPEDVENDA | VARCHAR(6) | Código do layout LPD* para imprimir o pedido. Ex: 'LPD001' |
CD_LAYETIQUETA | VARCHAR(6) | Layout de etiquetas dos itens |
CD_LAYORDCARREG | VARCHAR(6) | Layout da ordem de carregamento |
Condições de Pagamento (CONDPAGTO)
Campos que afetam diretamente o pedido:
| Campo | Efeito no Pedido |
|---|---|
DS_CONDPAGTO | Exibida na seleção do pedido |
ST_CONDPAGTO | 'D'=duração fixa, 'I'=intervalo — define como calcular datas das parcelas |
TP_NOTA | 'V'=só venda, 'C'=só compra, 'T'=todos — filtra condições disponíveis por TP_PEDIDO |
CD_JURO | Tabela de juros aplicada automaticamente ao usar esta condição |
CD_TABPRECO | Tabela de preço sugerida ao usar esta condição (ex: condição à vista → preço especial) |
PC_MARGEMPEDIDO | Margem mínima de lucro por item. Abaixo: pede autorização |
VL_PEDIDOMINIMO | Valor mínimo para usar esta condição de pagamento |
PC_DESCMAX | % máximo de desconto para esta condição |
ST_ATIVO | 'N' = não aparece na lista do pedido |
PC_TAXAJUROS | Taxa mensal de juros aplicada nas parcelas |
ST_TAXADESTINO | 'S' = calcula juro por UF de destino (DIFAL) |
Fluxo Completo
┌─────────────────────────────────────────────────────────┐
│ ABERTURA DO PEDIDO (btnNovo / iniciar) │
│ │
│ Verifica PARMFATUR: │
│ ST_PEDVENDA = 'S'? → senão: fecha módulo │
│ ST_BLOQUEIOPED = 'N'? → senão: avisa bloqueio │
│ Carrega defaults: │
│ CD_CONDPAGTOPED, CD_FORMAPAGTOPED, CD_LAYPEDVENDA │
└────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ PREENCHIMENTO DO CABEÇALHO │
│ │
│ Cliente (CD_PESSOA) │
│ → Valida PESSOA.ST_BLOQCREDITO │
│ → Se ST_BLOQPEDIDOMFA006='S': verifica títulos venc. │
│ → Se TP_LIMITECREDITO≠'N': calcula saldo de crédito │
│ │
│ Condição de Pagamento (CD_CONDPAGTO) │
│ → Filtra por TP_NOTA compatível │
│ → Aplica CONDPAGTO.CD_TABPRECO ao pedido │
│ → Aplica CONDPAGTO.CD_JURO │
│ → Verifica CONDPAGTO.VL_PEDIDOMINIMO │
└────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ LANÇAMENTO DE ITENS (ITEMPEDIDO) │
│ │
│ Para cada item: │
│ TP_ITEM: P/S/T │
│ Busca preço em TABPRECO │
│ Calcula VL_TOTAL = (QT × VL_UNIT) − VL_DESC │
│ Valida PC_COMISSAO │
│ Valida VL_DESCONTO <= PC_DESCONTOPED │
│ Se ST_SOLICITALOCALPED='S': obriga CD_LOCAL │
│ Se ST_CAIXAMASTER='S': valida múltiplo de caixa │
│ │
│ Se TP_ITEM = 'P' (produto): │
│ Se ST_ESTOQUENEGATIVO='N': verifica saldo estoque │
│ Se ST_ALERTAESTOQUENEGATIVO='S': avisa sem bloquear │
│ Se ST_VALIDAITEMEMPRESA='1': valida item na empresa │
│ │
│ Se ST_IMPOSTOPEDIDO='S': │
│ CALCULA_IMPOSTOPEDIDO → exibe preview impostos │
└────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ PARCELAS (PARCELAPEDIDO) │
│ │
│ Se ST_PARCELAPEDIDO='S': │
│ Gera parcelas com base em CONDPAGTO │
│ Cada parcela: DT_VENCIMENTO + VL_PARCELA │
│ Valida: SUM(VL_PARCELA) = VL_TOTAL │
│ Valida: cada VL_PARCELA >= VL_MINPARCELAPEDIDO │
│ Se ST_JUROVENDA='S': adiciona VL_JUROPARCELA │
└────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ GRAVAÇÃO (btnSalvar) │
│ │
│ Valida VL_TOTAL >= VL_MINIMOPEDIDO │
│ tabPEDIDO.Post → INSERT/UPDATE PEDIDO │
│ tabITEM.Post → INSERT/UPDATE ITEMPEDIDO │
│ tabPARCELA.Post → INSERT/UPDATE PARCELAPEDIDO │
│ Transaction.Commit │
│ CALCULA_COMISSAO (se configurado) │
│ Exibe layout de impressão (CD_LAYPEDVENDA) │
└────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ LIBERAÇÃO / APROVAÇÃO │
│ │
│ PEDIDO.DT_LIBERADO := SYSDATE │
│ PEDIDO.ST_PEDIDO := 'A' (ou permanece 'P' aguardando) │
│ UAUTORIZACAO.pas — autorizações de desconto/crédito │
└────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ FATURAMENTO (MNF001 / TFA*) │
│ │
│ GERA_NOTAPEDIDO(CD_EMPRESA, NR_PEDIDO, 'S') │
│ → Cria NOTAFISCAL + ITEMNOTA │
│ → Insere PEDIDONOTA (rastreamento) │
│ → PEDIDO.DT_FATURADO := SYSDATE │
│ → Transmite NF-e à SEFAZ (jFaturamento) │
│ → Gera CONTAS (títulos a receber) │
│ → Insere CONTASPEDIDO (rastreamento financeiro) │
│ → Baixa ESTOQUE via MOVIMENTACAO │
│ → Calcula COMISSAO definitiva │
└────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ EXPEDIÇÃO / ENTREGA │
│ │
│ PEDIDO.DT_EXPEDIDO := SYSDATE │
│ ITEMPEDIDO.ST_ENTREGA := 'E' (Entregue) │
│ ATUALIZA_PEDIDOROMANEIO → gera romaneio │
│ GERA_CONTROLEENTREGAPEDIDO → rastreia entrega │
└────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ RECEBIMENTO FINANCEIRO (Módulo Financeiro) │
│ │
│ CONTAS.ST_CONTAS = 'L' (Liquidado) │
│ Gera MOVTOCAIXA / MOVCONTA │
│ Vinculado via CONTASPEDIDO ao pedido original │
└─────────────────────────────────────────────────────────┘
Estados do Pedido (ST_PEDIDO)
[Novo]
│
▼
'P' Pendente ─── bloqueio de crédito/estoque ──► DS_BLOQUEIO preenchido
│
│ Aprovação / Liberação
▼
'N' Normal / 'A' Atendido ──► DT_LIBERADO preenchido
│
│ GERA_NOTAPEDIDO
▼
'A' Atendido ──────────────► DT_FATURADO preenchido
│
│ Expedição
▼
(mantém 'A') ───────────────► DT_EXPEDIDO preenchido
│
│ Cancelamento
▼
'C' Cancelado ──────────────► DT_CANCELAMENTO preenchido
Influências em Outros Módulos
→ Estoque
- Reserva de estoque ao salvar o pedido (saldo disponível vs. comprometido)
- Baixa definitiva ao emitir a NF (
GERA_NOTAPEDIDO→ MOVIMENTACAO) ITEMPEDIDO.CD_LOCALdefine de qual local sai o produto- Sem pedido: estoque não é comprometido antes do faturamento
→ Faturamento
GERA_NOTAPEDIDOconverte o pedido em NF de saída (NOTAFISCAL + ITEMNOTA)PEDIDONOTAmantém o rastreamento item-a-item- Faturamento parcial: uma NF pode atender apenas parte dos itens — PEDIDONOTA registra as quantidades
→ Notas Fiscais
- A NF gerada vai para
NOTAFISCALcom referência ao pedido ITEMPEDIDO.CD_MOVIMENTACAOdefine o CFOP e natureza da operação- Se
ST_IMPOSTOPEDIDO='S': impostos já calculados no pedido são reaproveitados
→ Financeiro
GERA_NOTAPEDIDOgera os títulos a receber emCONTASCONTASPEDIDOvincula cada título ao pedido de origemPARCELAPEDIDO(quando ativo) é o espelho das futurasCONTAS- Limite de crédito do cliente (
PESSOA.VL_LIMITECRED) é consumido pelo pedido pendente
→ Fiscal
CALCULA_IMPOSTOPEDIDOcalcula ICMS, IPI, PIS, COFINS, ST já no pedido- UF do cliente (
ENDERECOPESSOA) influencia alíquota de DIFAL - Substituição tributária calculada na procedure, gravada na NF
→ Caixa e PDV
- Quando
TP_PEDIDO='S'e condição à vista: pode receber no caixa durante o faturamento - Pagamento integrado via FORMAPAGTO do pedido → MOVTOCAIXA
→ Transporte
PEDIDO.CD_TRANSPORTADORdefine a transportadoraVL_TRANSPORTADORrateado nos itens (influencia custo e NF)GERA_NOTAFISCALPEDIDOgera CT-e quando há transportadora
→ Mobile (JunsoftPedidoAPK)
- Vendedor cria pedido no app → API
PedidoController(POST /pedidos) - Grava direto em PEDIDO + ITEMPEDIDO via JDBC
- Fluxo de aprovação acontece no Desktop (MPD002)
→ Portal Web
- Módulo
pedidos/consulta via PortalWebAPI - Leitura de PEDIDO + ITEMPEDIDO para exibição
- Sem edição — apenas visualização
→ Agente de Atendimento (MCP)
- Ferramenta
consultar_pedidos_venda— lê PEDIDO com filtros - Ferramenta
simular_parcelamento_pedido— chamaCALCULA_IMPOSTOPEDIDOe cálculo de parcelas - Ferramenta
pesquisar_clientes— busca PESSOA para contexto do pedido
Cálculo do Valor Total
VL_ITEM = (QT_PEDIDA × VL_UNITARIO) − VL_DESCONTO + VL_DESPESA
VL_PEDIDO = SUM(VL_ITEM)
+ VL_TRANSPORTADOR
− VL_REDESPACHO
+ VL_IMPOSTO (se ST_IMPOSTOPEDIDO='S')
+ VL_JURO (se ST_JUROVENDA='S')
Comissão do Vendedor
Onde está salvo:
PEDIDO.PC_COMISSAOGERAL — % geral (sobrepõe por item se preenchido)
ITEMPEDIDO.PC_COMISSAO — % por item
ITEMPEDIDO.PC_COMISEMPR — % adicional da empresa
Fórmula:
VL_COMISSAO = VL_TOTAL_PEDIDO × (PC_COMISSAO / 100)
Gravada por:
procedure CALCULA_COMISSAO (Scripts/CALCULA_COMISSAO.sql)
Chamada após confirmação do pedido e/ou faturamento
Pontos de Atenção
-
Faturamento parcial — um pedido pode gerar múltiplas NFs.
PEDIDONOTA.QT_ATENDIDAcontrola o saldo ainda não faturado. VerificarITEMPEDIDO.ST_ITEMPEDIDO= 'P' (parcial). -
Desconto acima do limite — quando
VL_DESCONTO > PC_DESCONTOPED, o sistema abreUAUTORIZACAO.paspedindo senha de supervisor. -
Bloqueio de crédito —
DS_BLOQUEIOé preenchido automaticamente com o motivo. O pedido fica comST_PEDIDO = 'P'até liberação manual. -
PARMFATUR por empresa — cada empresa tem sua linha em PARMFATUR. Trocar empresa (MCP
trocar_empresa) muda todos os parâmetros. -
Pedido vs. Orçamento —
TP_PEDIDO = 'O'não compromete estoque, não gera NF diretamente, não gera financeiro. É convertido em'S'quando aprovado. -
Impostos no pedido —
ST_IMPOSTOPEDIDO='S'é custoso em performance pois chamaCALCULA_IMPOSTOPEDIDOa cada item. Empresas com muitos itens costumam desativar.