Análise da Implementação de Venda Casada no SGE 2.0
Documentação de referência para implementação da funcionalidade de Venda Casada no SGE 3.0 Tarefa: NH-168
1. Estrutura de Dados (Tabelas SQL Server)
No SGE 2.0, a Venda Casada usa as seguintes tabelas:
CADITEMC (Itens de Compra/OC)
| Campo | Descrição |
|---|---|
ITEC01 |
Número da OC (Ordem de Compra) |
ITEC23 |
Número do Pedido de Venda vinculado |
ITEC24 |
Item do Pedido de Venda vinculado |
ITEC02 |
Cliente da Venda Casada |
ITEC19 |
Fornecedor |
ITEC03 |
Código do Produto |
ITEC09 |
Descrição do Produto |
ITEC16 |
Quantidade de Separação |
ITEC21 |
Unidade de Separação |
ITEC14 |
Valor Mão de Obra |
ITEC15 |
Unidade MO |
ITEC17 |
Prazo Pagamento |
CADITEM (Itens de Pedido)
| Campo | Descrição |
|---|---|
ITE01 |
Número do Pedido |
ITE14 |
Item do Pedido |
ITE15 |
Número da NF |
ITE18 |
Quantidade em quilos empenhada |
cd_Pedido_Transferencia |
Referência ao pedido de origem |
cd_Item_Transferencia |
Referência ao item de origem |
ControleVendaCasada (Tabela de Controle)
| Campo | Descrição |
|---|---|
nu_OC |
Número da OC |
nu_Item_OC |
Item da OC |
cd_Unidade |
Unidade (SP/CP) |
dt_PrazoEntregaConfirmado |
Prazo de entrega confirmado |
XML_EnviadoFornecedor |
Flag XML enviado |
ObsControlador |
Observações do controlador |
ObsVendedor |
Observações do vendedor |
Status |
Status do controle (A=Aberto, F=Fechado) |
Controlador |
Usuário controlador |
2. Natureza de Operação
- Código:
REM.BENEF - Descrição: "Remessa Beneficiamento para posterior retorno com Venda Casada"
- Permissão: Usuários com perfil
intUsuarioBeneficiamentoVendaCasada == 1têm acesso
Lista completa de Naturezas (SGE 2.0)
// Arquivo: App_Code/Natureza_Operacao.cs
lista.Add(new natu { codigo = "ATIVO", descricao = "Vendas do Imobilizado" });
lista.Add(new natu { codigo = "VENDA ORD", descricao = "Vendas a Ordem" });
lista.Add(new natu { codigo = "REM.C.O.3", descricao = "Remessa C.O.3" });
lista.Add(new natu { codigo = "TROCA", descricao = "Trocas" });
lista.Add(new natu { codigo = "TROCA ORC", descricao = "Trocas Orçamento" });
lista.Add(new natu { codigo = "TRANSF.DF", descricao = "Transferência Deposito Fechado" });
lista.Add(new natu { codigo = "TRANSF.V", descricao = "Transferência Venda" });
lista.Add(new natu { codigo = "TRANSF.E", descricao = "Transferência Estoque" });
lista.Add(new natu { codigo = "DV.COMPRA", descricao = "Devolução Compra" });
lista.Add(new natu { codigo = "REM.BENEF", descricao = "Remessa Beneficiamento para posterior retorno com Venda Casada" });
lista.Add(new natu { codigo = "REM.USI", descricao = "Remessa Beneficiamento para posterior retorno ao Estoque" });
lista.Add(new natu { codigo = "REM.CONSE", descricao = "Remessa para Conserto" });
lista.Add(new natu { codigo = "ORCA 2", descricao = "Orçamentos 2" });
lista.Add(new natu { codigo = "ORCAMENTO", descricao = "Orçamentos" });
lista.Add(new natu { codigo = "ZONA FRAN", descricao = "Vendas p/ Zona Franca ou Area de Livre Comércio ou Amazônia Ocidental" });
lista.Add(new natu { codigo = "VENDA SUC", descricao = "Vendas de Matéria Prima" });
lista.Add(new natu { codigo = "VENDA", descricao = "Vendas de Produto" });
lista.Add(new natu { codigo = "VENDA EVR", descricao = "Vendas de Produto a Ordem Entregue pelo Vendedor Remetente" });
3. Fluxo de Funcionamento
3.1 Criação do Pedido de Beneficiamento com Venda Casada
- Usuário seleciona Natureza de Operação = "REM.BENEF"
- Sistema habilita campo
txtPedidoTransferenciapara informar o Pedido de Venda - Usuário busca e seleciona o Pedido de Venda
- Sistema carrega os itens disponíveis do Pedido de Venda
- Usuário seleciona o item a vincular
- Campos hidden guardam as referências:
hfPedido_Transferencia- Número do Pedido de VendahfItem_Transferencia- Item do Pedido de Venda
3.2 Validação de Quantidade (frm_Pedidos.aspx.cs, linhas 8494-8525)
if (ddlOperacao.SelectedValue.ToString().ToUpper().Equals("REM.BENEF"))
{
// Busca parâmetro de perda
strSql = "SELECT vl_Perda_Beneficiamento FROM CAD_Parametros";
strPerdaBeneficiamento = Convert.ToDouble(clsBD.ExecuteScalar(strSql).ToString());
if (ddlEspecieSeparacao.SelectedValue.ToString().Equals("KG"))
{
// Valida se quantidade não excede o permitido (Venda + Perda)
if (Convert.ToDouble(txtQtdeSeparacao.Text) >
Math.Round((TotSeparacao * (1 + (strPerdaBeneficiamento / 100.00))), 1))
{
// Erro: Quantidade superior ao permitido
myString = @"alert('Qtde de Separação superior a " +
Convert.ToString(Math.Round((TotSeparacao * (1 + (strPerdaBeneficiamento / 100.00))), 1)) +
" KG (Venda+Perda) emitida no Pedido de Venda.');";
return;
}
}
}
3.3 Vinculação do Item
O item do pedido de Beneficiamento é vinculado ao item do Pedido de Venda através de:
- CADITEMC.ITEC23 = CADITEM.ITE01 (Número do Pedido de Venda)
- CADITEMC.ITEC24 = CADITEM.ITE14 (Item do Pedido de Venda)
3.4 Validação de Produto
// Verifica se o produto da OC confere com o produto do Pedido de Venda
strSql = @"Select iteC01 FROM CADITEMC
WHERE ITEC01 = " + txtNrOCPrestacaoServico.Text +
" AND ITEC03 like '" + txtProduto.Text + "%'" +
" AND ITEC24 = " + txtItemOCPrestacaoServico.Text;
var existeProduto = clsBD.ExecuteScalar(strSql);
if (existeProduto == null)
{
// Erro: Produto não confere
myString = "O Produto da OC não confere com o Produto do Pedido de Remessa para Beneficiamento.";
return;
}
4. Telas do SGE 2.0
4.1 frm_OC_MO_RemessaVendaCasada.aspx
Tela de manutenção da OC de Venda Casada (Mão de Obra)
Funcionalidades: - Filtro por Unidade (SP/Campinas) - Filtro por Período - Filtro por Fornecedor - Grid com itens da OC vinculados ao Pedido de Venda - Edição de: Fornecedor, Tipo Fornecedor, Valor Unitário MO, Origem, Unidade MO, Prazo Pagamento
Colunas do Grid: - OC, Fornecedor, Atividade Econômica, Pedido Venda, Item Venda - Código, Descrição, Cliente da Venda Casada - Qtde Separação, Unidade Separação, Valor MO, Unidade MO - Prazo Pagamento, NF Remessa Beneficiamento
4.2 frm_Item_OC_VendaCasada.aspx (Gerencial/Cons)
Tela de consulta e controle dos itens de Venda Casada
Filtros: - Período (Data Início/Fim) - Vendedor - Fornecedor - Tipo Entrega (Entrega/Retira) - Status (Aberto/Fechado) - NF Venda (Faturado/Não Faturado) - NF Compra (Com NF/Sem NF) - Número da OC - Unidade (SP/CP) - Cliente
Colunas do Grid (agrupadas): 1. Ordem de Compra: Vendedor, Unidade, Emissão, Nº OC, Item, Fornecedor, Transporte, Produto, Prazo Previsto, Prazo Confirmado, Unidade Exp, Qtde Exp, Unidade Com, Qtde Com 2. NF Fornecimento: Emissão, Nº NF, Enviado, XML 3. Pedido de Vendas: Emissão, Pedido, Cliente, Transporte 4. NF Vendas: Nº NF, Unidade, Emissão 5. Expedição: Emissão Romaneio, Romaneio 6. Observação: Controlador, Vendedor 7. Status: Status
5. Arquivos Relevantes no SGE 2.0
sge/NM_2015/
├── App_Code/
│ ├── Natureza_Operacao.cs # Enum de naturezas de operação
│ └── Pdf_OC.cs # Geração de PDF da OC
├── OC/
│ ├── frm_OC_MO_RemessaVendaCasada.aspx # Tela de manutenção
│ └── frm_OC_MO_RemessaVendaCasada.aspx.cs # Code-behind
├── Pedido/
│ ├── frm_Pedidos.aspx # Tela principal de pedidos
│ ├── frm_Pedidos.aspx.cs # Lógica de vinculação (linhas 8450-8530)
│ └── PDF_Pedido.aspx.cs # Impressão com dados Venda Casada
├── Gerencial/
│ └── Cons/
│ ├── frm_Item_OC_VendaCasada.aspx # Tela de consulta
│ └── frm_Item_OC_VendaCasada.aspx.cs # Lógica de consulta
└── Faturamento/
└── frm_NFV3013.aspx.cs # Faturamento com Venda Casada
6. Implementação no SGE 3.0
6.1 Modelo de Dados Necessário
Adicionar campos no modelo PedidoItem:
// Referência ao Pedido de Venda vinculado (Venda Casada)
public int? PedidoVendaVinculadoId { get; set; }
public int? PedidoItemVendaVinculadoId { get; set; }
// Navigation properties
public virtual Pedido? PedidoVendaVinculado { get; set; }
public virtual PedidoItem? PedidoItemVendaVinculado { get; set; }
6.2 Validações a Implementar
- Natureza de Operação do Pedido de Venda: Deve ser do tipo
Venda(TipoNaturezaOperacao = 1) - Status do Pedido de Venda: Deve ser "A Faturar" (3) ou "Fechado" (4)
- Produto: Deve ser o mesmo entre o Beneficiamento e o Pedido de Venda
- Quantidade: Não pode exceder a quantidade do Pedido de Venda + percentual de perda
- Cliente/Destinatário: Pode filtrar por mesmo destinatário (opcional)
6.3 Fluxo no SGE 3.0
- Usuário seleciona Natureza "Remessa Beneficiamento para posterior retorno com Venda Casada"
- Sistema mostra seção "Vincular Item de Pedido de Venda (Venda Casada)"
- Usuário busca Pedido de Venda por número
- Sistema retorna pedidos com NaturezaOperacao.TipoNaturezaOperacao = Venda
- Usuário seleciona o Pedido de Venda
- Sistema carrega os itens do Pedido de Venda selecionado
- Usuário seleciona o item
- Sistema exibe informações do item (Mercadoria, Quantidade, Unidade, Valores)
- Usuário clica em "Adicionar"
- Sistema:
- Copia dados do item do Pedido de Venda
- Vincula referência ao pedido/item de origem
- Adiciona ao pedido atual de Beneficiamento
6.4 Parâmetros de Configuração
Verificar se existe parâmetro vl_Perda_Beneficiamento na tabela de parâmetros do SGE 3.0. Se não existir, criar ou usar valor padrão.
7. Queries de Referência do SGE 2.0
Buscar itens de Venda Casada
SELECT
CADITEMC.ITEC01 as NrOC,
CADITEMC.ITEC24 as ItemOC,
CADITEMC.ITEC23 as PedidoVenda,
CADITEMC.ITEC02 as ClienteVendaCasada,
CADITEMC.ITEC03 as CodigoProduto,
CADITEMC.ITEC09 as DescricaoProduto,
CADITEMC.ITEC16 as QtdeSeparacao,
CADITEMC.ITEC21 as UnidadeSeparacao,
CADITEM.ITE15 as NFRemessaBeneficiamento
FROM CADITEMC
INNER JOIN CADITEM ON CADITEMC.ITEC23 = CADITEM.ITE01
AND CADITEMC.ITEC24 = CADITEM.ITE14
WHERE CADPEDC.TP_LANCAMENTO = 'T' -- Tipo = Terceiro/Beneficiamento
AND (CADITEMC.SR_DELETED IS NULL OR CADITEMC.SR_DELETED <> 'T')
Validar quantidade disponível
SELECT ITE18 as QtdeKgEmpenhada
FROM CADITEM
WHERE ITE01 = @PedidoVendaId
AND ITE14 = @ItemVendaId
AND (SR_DELETED IS NULL OR SR_DELETED <> 'T')
Documento criado em: 2024-12-01 Referência: SGE 2.0 (NM_2015) Tarefa: NH-168