コード例 #1
0
 private static decimal CalcularCustoMPD(TList_FichaTec_MPrima val,
                                         string Dt_apontamento,
                                         decimal Qtd_batch,
                                         BancoDados.TObjetoBanco banco)
 {
     val.ForEach(p =>
     {
         if (p.Id_formulacao_mprima != null)
         {
             //Buscar lista de materia-prima
             TList_FichaTec_MPrima lMPrima = TCN_FichaTec_MPrima.Buscar(p.Cd_empresa,
                                                                        p.Id_formulacao_mprimastr,
                                                                        string.Empty,
                                                                        string.Empty,
                                                                        string.Empty,
                                                                        0,
                                                                        string.Empty,
                                                                        banco);
             //Chamar o metodo CalcularCustoMPD recursivamente
             p.Vl_custo      = CalcularCustoMPD(lMPrima, Dt_apontamento, Qtd_batch, banco);
             p.Vl_customedio = Math.Round(p.Vl_custo / p.Qtd_produto / Qtd_batch, 2);
         }
         else
         {
             p.Vl_customedio = TCN_CadConvUnidade.ConvertUnid(p.Cd_unidade,
                                                              p.Cd_unid_produto,
                                                              TCN_LanEstoque.BuscarVlEstoqueUltimaCompra(p.Cd_empresa, p.Cd_produto, banco), 5, banco);
             p.Vl_custo = Math.Round(p.Vl_customedio * p.Qtd_produto * Qtd_batch, 2);
         }
     });
     return(val.Sum(p => p.Vl_custo));
 }
コード例 #2
0
        private void PreencherFicha(TRegistro_FormulaApontamento rFormula)
        {
            //Buscar Ficha Formula
            TList_FichaTec_MPrima lFicha =
                CamadaNegocio.Producao.Producao.TCN_FichaTec_MPrima.Buscar(rFormula.Cd_empresa,
                                                                           rFormula.Id_formulacaostr,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           0,
                                                                           string.Empty,
                                                                           null);

            lFicha.ForEach(p =>
            {
                lficha.Add(
                    new TRegistro_FichaTecOrcItem()
                {
                    Nr_orcamento = pNr_orcamento,
                    Id_item      = pId_item,
                    Cd_item      = p.Cd_produto,
                    Ds_item      = p.Ds_produto,
                    Cd_local     = p.Cd_local,
                    Ds_local     = p.Ds_local,
                    Sg_unditem   = p.Sigla_unidade,
                    Cd_unditem   = p.Cd_unidade,
                    Ds_unditem   = p.Ds_unidade,
                    Quantidade   = p.Qtd_produto,
                    SaldoEstoque = TCN_LanEstoque.Busca_Saldo_Local(pCd_empresa, p.Cd_produto, p.Cd_local, null),
                });
            });
            bsFichaTec.DataSource = lficha;
            bsFichaTec.ResetBindings(true);
        }
コード例 #3
0
        public static string Gravar(TList_FichaTec_MPrima val, BancoDados.TObjetoBanco banco)
        {
            bool st_transacao = false;

            try
            {
                if (banco == null)
                {
                    banco = new BancoDados.TObjetoBanco();
                    banco.CriarObjetosBanco(Parametros.pubLogin, Parametros.pubNM_Servidor, Parametros.pubNM_BancoDados);
                    banco.Conexao.Open();
                    banco.Start_Tran(IsolationLevel.ReadCommitted);
                    banco.Comando.Transaction = banco.Transac;
                    st_transacao = true;
                }
                string retorno = string.Empty;
                val.ForEach(p => retorno += Gravar(p, banco));
                if (st_transacao)
                {
                    banco.Commit_Tran();
                }
                return(retorno);
            }
            catch (Exception ex)
            {
                if (st_transacao)
                {
                    banco.RollBack_Tran();
                }
                throw new Exception("Erro gravar ficha tecnica: " + ex.Message.Trim());
            }
            finally
            {
                if (st_transacao)
                {
                    if (banco.Conexao.State == ConnectionState.Open)
                    {
                        banco.Conexao.Close();
                    }
                    banco = null;
                }
            }
        }
コード例 #4
0
 private void PreencherFicha()
 {
     //Buscar Ficha do Cadastro de Produto
     CamadaDados.Estoque.Cadastros.TList_FichaTecProduto lFicha =
         TCN_FichaTecProduto.Buscar(cd_produto.Text,
                                    string.Empty,
                                    null);
     if (lFicha.Count > 0)
     {
         if (lFicha.Exists(p => string.IsNullOrEmpty(p.Cd_local)))
         {
             string vColunas = "a.ds_local|Local Armazenagem|150;" +
                               "a.cd_local|Código|50";
             string vParam = "|exists|(select 1 from tb_est_empresa_x_localarm x " +
                             "           where x.cd_local = a.cd_local and x.cd_empresa = '" + CD_Empresa.Text.Trim() + "')";
             DataRowView linha = FormBusca.UtilPesquisa.BTN_BUSCA(vColunas, null,
                                                                  new CamadaDados.Estoque.Cadastros.TCD_CadLocalArm(), vParam);
             try
             {
                 if (linha != null)
                 {
                     lFicha.ForEach(p =>
                     {
                         p.Cd_local = string.IsNullOrEmpty(p.Cd_local) ? linha["cd_local"].ToString() : p.Cd_local;
                         TCN_FichaTecProduto.Gravar(p, null);
                     });
                 }
                 else
                 {
                     PreencherFicha();
                 }
             }
             catch { }
         }
         lFicha.ForEach(p =>
         {
             (bsOrdemProducao.Current as TRegistro_OrdemProducao).lOrdem_MPrima.Add(
                 new TRegistro_Ordem_MPrima
             {
                 Cd_produto       = p.Cd_item,
                 Ds_produto       = p.Ds_item,
                 Cd_unidade       = p.Cd_unditem,
                 Ds_unidade       = p.Ds_unditem,
                 Sigla_unidade    = p.Sg_unditem,
                 Cd_local         = p.Cd_local,
                 Ds_local         = p.Ds_local,
                 Qtd_produto      = p.Quantidade,
                 Qtd_produto_calc = p.Quantidade,
                 SaldoEstoque     = TCN_LanEstoque.Busca_Saldo_Local(CD_Empresa.Text, p.Cd_item, p.Cd_local, null)
             });
         });
     }
     else
     {
         //Verificar ficha tecnica produção
         TList_FormulaApontamento lFormula =
             CamadaNegocio.Producao.Producao.TCN_FormulaApontamento.Buscar(CD_Empresa.Text,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           cd_produto.Text,
                                                                           string.Empty,
                                                                           0,
                                                                           string.Empty,
                                                                           null);
         TRegistro_FormulaApontamento rFormula = null;
         if (lFormula.Count > 1)
         {
             using (TFListFormula fList = new TFListFormula())
             {
                 fList.lFormula = lFormula;
                 if (fList.ShowDialog() == DialogResult.OK)
                 {
                     rFormula = fList.rFormula;
                     (bsOrdemProducao.Current as TRegistro_OrdemProducao).Qt_produto = rFormula.Qt_produto;
                 }
                 else
                 {
                     MessageBox.Show("Obrigatório selecionar formula.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
                     return;
                 }
             }
         }
         else if (lFormula.Count.Equals(1))
         {
             rFormula = lFormula[0];
         }
         if (rFormula != null)
         {
             (bsOrdemProducao.Current as TRegistro_OrdemProducao).Qt_produto = rFormula.Qt_produto;
             (bsOrdemProducao.Current as TRegistro_OrdemProducao).Cd_local   = rFormula.Cd_local;
             (bsOrdemProducao.Current as TRegistro_OrdemProducao).Ds_local   = rFormula.Ds_local;
             //Buscar ficha tecnica da formula selecionada
             TList_FichaTec_MPrima lFichaP =
                 CamadaNegocio.Producao.Producao.TCN_FichaTec_MPrima.Buscar(rFormula.Cd_empresa,
                                                                            rFormula.Id_formulacaostr,
                                                                            string.Empty,
                                                                            string.Empty,
                                                                            string.Empty,
                                                                            0,
                                                                            string.Empty,
                                                                            null);
             lFichaP.ForEach(p =>
             {
                 (bsOrdemProducao.Current as TRegistro_OrdemProducao).lOrdem_MPrima.Add(
                     new TRegistro_Ordem_MPrima
                 {
                     CD_Empresa           = p.Cd_empresa,
                     ID_Formulacao_MPrima = p.Id_formulacao_mprima,
                     Cd_produto           = p.Cd_produto,
                     Ds_produto           = p.Ds_produto,
                     Cd_unidade           = p.Cd_unidade,
                     Ds_unidade           = p.Ds_unidade,
                     Sigla_unidade        = p.Sigla_unidade,
                     Cd_local             = p.Cd_local,
                     Ds_local             = p.Ds_local,
                     Qtd_produto          = p.Qtd_produto,
                     Qtd_produto_calc     = p.Qtd_produto,
                     SaldoEstoque         = TCN_LanEstoque.Busca_Saldo_Local(CD_Empresa.Text, p.Cd_produto, p.Cd_local, null)
                 });
             });
             (bsOrdemProducao.Current as TRegistro_OrdemProducao).Id_formulacao = rFormula.Id_formulacao;
         }
     }
     bsOrdemMP.ResetCurrentItem();
     bsOrdemProducao.ResetCurrentItem();
 }
コード例 #5
0
        public static TList_Apontamento_Estoque ProcessarEstoqueFichaTec_MPrima(TList_FichaTec_MPrima val,
                                                                                decimal Qtd_batch,
                                                                                DateTime?Dt_estoque,
                                                                                bool St_decomposicao,
                                                                                BancoDados.TObjetoBanco banco)
        {
            bool st_transacao             = false;
            TCD_FichaTec_MPrima qtb_ficha = new TCD_FichaTec_MPrima();

            try
            {
                if (banco == null)
                {
                    st_transacao = qtb_ficha.CriarBanco_Dados(true);
                }
                else
                {
                    qtb_ficha.Banco_Dados = banco;
                }
                TList_Apontamento_Estoque lEstoque = new TList_Apontamento_Estoque();
                val.ForEach(p =>
                {
                    #region if produto composto e formula for nula
                    if ((new CamadaDados.Estoque.Cadastros.TCD_CadProduto(qtb_ficha.Banco_Dados).ProdutoComposto(p.Cd_produto)) && (p.Id_formulacao_mprima == null))
                    {
                        TRegistro_ApontamentoProducao rApontamento = new TRegistro_ApontamentoProducao();
                        rApontamento.Cd_empresa          = p.Cd_empresa;
                        rApontamento.Dt_apontamento      = Dt_estoque;
                        rApontamento.Dt_validade         = Dt_estoque;
                        rApontamento.Qtd_batch           = p.Qtd_produto * Qtd_batch;
                        rApontamento.LFormulaApontamento = new TList_FormulaApontamento()
                        {
                            TCN_FormulaApontamento.CriarFormulaApontamentoProd(p.Cd_empresa,
                                                                               p.Cd_produto,
                                                                               p.Cd_unidade,
                                                                               p.Cd_local,
                                                                               //St_decomposicao,
                                                                               qtb_ficha.Banco_Dados)
                        };
                        //Gravar Formula Apontamento
                        rApontamento.LFormulaApontamento.ForEach(x =>
                        {
                            x.St_decomposicao = St_decomposicao;
                            TCN_FormulaApontamento.Gravar(x, qtb_ficha.Banco_Dados);
                        });
                        //Calcular custo MPD
                        TCN_ApontamentoProducao.CalcularCustoMPD(rApontamento, qtb_ficha.Banco_Dados);
                        //Calcular custo fixo
                        TCN_ApontamentoProducao.CalcularCustoFixo(rApontamento, qtb_ficha.Banco_Dados);
                        //Chamar metodo Gravar Apontamento recursivamente
                        p.Id_apontamentomprima = Convert.ToDecimal(TCN_ApontamentoProducao.Gravar(rApontamento,
                                                                                                  qtb_ficha.Banco_Dados));
                    }
                    #endregion
                    #region else if formula diferente de nulll
                    else if (p.Id_formulacao_mprima != null)
                    {
                        //Buscar formula apontamento
                        TRegistro_ApontamentoProducao rApontamento = new TRegistro_ApontamentoProducao();
                        rApontamento.Cd_empresa          = p.Cd_empresa;
                        rApontamento.Dt_apontamento      = Dt_estoque;
                        rApontamento.Dt_validade         = Dt_estoque;
                        rApontamento.Qtd_batch           = p.Qtd_produto * Qtd_batch;
                        rApontamento.LFormulaApontamento = TCN_FormulaApontamento.Buscar(p.Cd_empresa,
                                                                                         p.Id_formulacao_mprimastr,
                                                                                         string.Empty,
                                                                                         string.Empty,
                                                                                         string.Empty,
                                                                                         string.Empty,
                                                                                         string.Empty,
                                                                                         0,
                                                                                         string.Empty,
                                                                                         qtb_ficha.Banco_Dados);
                        //Buscar ficha tecnica da formula
                        rApontamento.LFormulaApontamento[0].LFichaTec_MPrima =
                            TCN_FichaTec_MPrima.Buscar(p.Cd_empresa,
                                                       p.Id_formulacao_mprimastr,
                                                       string.Empty,
                                                       string.Empty,
                                                       string.Empty,
                                                       0,
                                                       string.Empty,
                                                       qtb_ficha.Banco_Dados);
                        //Buscar Custo
                        rApontamento.LFormulaApontamento[0].LCustoFixo =
                            TCN_CustoFixo_Direto.Buscar(p.Cd_empresa,
                                                        p.Id_formulacao_mprimastr,
                                                        string.Empty,
                                                        string.Empty,
                                                        string.Empty,
                                                        0,
                                                        string.Empty,
                                                        qtb_ficha.Banco_Dados);

                        rApontamento.Qtd_batch = Math.Round(p.Qtd_produto / TCN_CadConvUnidade.ConvertUnid(rApontamento.LFormulaApontamento[0].Cd_unidade,
                                                                                                           rApontamento.LFormulaApontamento[0].Cd_unidProduto,
                                                                                                           rApontamento.LFormulaApontamento[0].Qt_produto,
                                                                                                           3, qtb_ficha.Banco_Dados), 0);
                        //Calcular custo MPD
                        TCN_ApontamentoProducao.CalcularCustoMPD(rApontamento, qtb_ficha.Banco_Dados);
                        //Calcular custo fixo
                        TCN_ApontamentoProducao.CalcularCustoFixo(rApontamento, qtb_ficha.Banco_Dados);
                        //Chamar metodo Gravar Apontamento recursivamente
                        p.Id_apontamentomprima = Convert.ToDecimal(TCN_ApontamentoProducao.Gravar(rApontamento,
                                                                                                  qtb_ficha.Banco_Dados));
                    }
                    #endregion

                    //Gravar estoque
                    TRegistro_LanEstoque rEstoque = new TRegistro_LanEstoque();
                    rEstoque.Cd_empresa           = p.Cd_empresa;
                    rEstoque.Cd_local             = p.Cd_local;
                    rEstoque.Cd_produto           = p.Cd_produto;
                    rEstoque.Ds_observacao        = "ESTOQUE GRAVADO AUTOMATICAMENTE PELO APONTAMENTO DE PRODUCAO";
                    rEstoque.Dt_lancto            = Dt_estoque;
                    rEstoque.Tp_movimento         = !St_decomposicao ? "S" : "E";
                    rEstoque.Qtd_entrada          = St_decomposicao ? TCN_CadConvUnidade.ConvertUnid(p.Cd_unidade,
                                                                                                     p.Cd_unid_produto,
                                                                                                     p.Qtd_produto * Qtd_batch,
                                                                                                     3,
                                                                                                     qtb_ficha.Banco_Dados) : decimal.Zero;
                    rEstoque.Qtd_saida = !St_decomposicao ? TCN_CadConvUnidade.ConvertUnid(p.Cd_unidade,
                                                                                           p.Cd_unid_produto,
                                                                                           p.Qtd_produto * Qtd_batch,
                                                                                           3,
                                                                                           qtb_ficha.Banco_Dados) : decimal.Zero;
                    rEstoque.Vl_unitario = p.Vl_unitario;
                    rEstoque.Vl_subtotal = rEstoque.Vl_unitario * (St_decomposicao ? rEstoque.Qtd_entrada : rEstoque.Qtd_saida);
                    rEstoque.Tp_lancto   = "N";
                    TCN_LanEstoque.GravarEstoque(rEstoque, qtb_ficha.Banco_Dados);
                    lEstoque.Add(new TRegistro_Apontamento_Estoque()
                    {
                        Cd_empresa       = p.Cd_empresa,
                        Cd_produto       = p.Cd_produto,
                        Id_lanctoestoque = rEstoque.Id_lanctoestoque,
                        Vl_custocontabil = p.Vl_custo
                    });
                });
                if (st_transacao)
                {
                    qtb_ficha.Banco_Dados.Commit_Tran();
                }
                return(lEstoque);
            }
            catch (Exception ex)
            {
                if (st_transacao)
                {
                    qtb_ficha.Banco_Dados.RollBack_Tran();
                }
                throw new Exception("Erro: " + ex.Message.Trim());
            }
            finally
            {
                if (st_transacao)
                {
                    qtb_ficha.deletarBanco_Dados();
                }
            }
        }