Pular para conteúdo

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 == 1 tê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

  1. Usuário seleciona Natureza de Operação = "REM.BENEF"
  2. Sistema habilita campo txtPedidoTransferencia para informar o Pedido de Venda
  3. Usuário busca e seleciona o Pedido de Venda
  4. Sistema carrega os itens disponíveis do Pedido de Venda
  5. Usuário seleciona o item a vincular
  6. Campos hidden guardam as referências:
  7. hfPedido_Transferencia - Número do Pedido de Venda
  8. hfItem_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

  1. Natureza de Operação do Pedido de Venda: Deve ser do tipo Venda (TipoNaturezaOperacao = 1)
  2. Status do Pedido de Venda: Deve ser "A Faturar" (3) ou "Fechado" (4)
  3. Produto: Deve ser o mesmo entre o Beneficiamento e o Pedido de Venda
  4. Quantidade: Não pode exceder a quantidade do Pedido de Venda + percentual de perda
  5. Cliente/Destinatário: Pode filtrar por mesmo destinatário (opcional)

6.3 Fluxo no SGE 3.0

  1. Usuário seleciona Natureza "Remessa Beneficiamento para posterior retorno com Venda Casada"
  2. Sistema mostra seção "Vincular Item de Pedido de Venda (Venda Casada)"
  3. Usuário busca Pedido de Venda por número
  4. Sistema retorna pedidos com NaturezaOperacao.TipoNaturezaOperacao = Venda
  5. Usuário seleciona o Pedido de Venda
  6. Sistema carrega os itens do Pedido de Venda selecionado
  7. Usuário seleciona o item
  8. Sistema exibe informações do item (Mercadoria, Quantidade, Unidade, Valores)
  9. Usuário clica em "Adicionar"
  10. 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