Пример #1
0
 public static void CalcularCustoMPD(TRegistro_ApontamentoProducao val, BancoDados.TObjetoBanco banco)
 {
     if (val != null)
     {
         if (val.Dt_apontamento != null)
         {
             if (val.LFormulaApontamento.Count > 0)
             {
                 val.Vl_custo_mpd = CalcularCustoMPD(val.LFormulaApontamento[0].LFichaTec_MPrima, val.Dt_apontamentostr, val.Qtd_batch, banco);
             }
         }
     }
 }
Пример #2
0
 public static void BuscarFormula(TRegistro_ApontamentoProducao val,
                                  BancoDados.TObjetoBanco banco)
 {
     if (val.Cd_empresa.Trim().Equals(string.Empty))
     {
         return;
     }
     else
     {
         TRegistro_FormulaApontamento rFormula = new TRegistro_FormulaApontamento();
         rFormula = Buscar(val.Cd_empresa,
                           val.Id_formulacaostr,
                           string.Empty,
                           string.Empty,
                           string.Empty,
                           string.Empty,
                           string.Empty,
                           1,
                           string.Empty,
                           banco)[0];
         //Buscar ficha tecnica materia-prima
         TCN_Ordem_MPrima.Buscar(val.Id_ordemstr, banco).ForEach(x =>
         {
             rFormula.LFichaTec_MPrima.Add(new TRegistro_FichaTec_MPrima
             {
                 Cd_empresa           = val.Cd_empresa,
                 Id_formulacao_mprima = x.ID_Formulacao_MPrima,
                 Cd_local             = x.Cd_local,
                 Cd_produto           = x.Cd_produto,
                 Ds_produto           = x.Ds_produto,
                 Cd_unidade           = x.Cd_unidade,
                 Ds_unidade           = x.Ds_unidade,
                 Cd_unid_produto      = x.Cd_unid_produto,
                 Pc_quebra_tec        = x.Pc_quebratec,
                 Qtd_produto          = x.Qtd_produto
             });
         });
         //Buscar custo fixo direto
         rFormula.LCustoFixo = TCN_CustoFixo_Direto.Buscar(val.Cd_empresa,
                                                           val.Id_formulacaostr,
                                                           string.Empty,
                                                           string.Empty,
                                                           string.Empty,
                                                           0,
                                                           string.Empty,
                                                           banco);
         val.LFormulaApontamento.Add(rFormula);
     }
 }
Пример #3
0
 public static void CalcularCustoFixo(TRegistro_ApontamentoProducao val, BancoDados.TObjetoBanco banco)
 {
     if (val != null)
     {
         if (val.LFormulaApontamento.Count > 0)
         {
             val.LFormulaApontamento[0].LCustoFixo.ForEach(p =>
             {
                 if (p.Vl_custo > 0)
                 {
                     string moeda_padrao = TCN_CadParamGer.BuscaVL_String_Empresa("CD_MOEDA_PADRAO", val.Cd_empresa, banco);
                     if (moeda_padrao.Trim().Equals(string.Empty))
                     {
                         throw new Exception("Erro calcular custo fixo: falta configurar moeda padrão.");
                     }
                     if (p.Cd_moeda.Trim().Equals(moeda_padrao.Trim()))
                     {
                         p.Vl_custo_calculado = p.Vl_custo * val.Qtd_batch;
                     }
                     else if (val.Dt_apontamento != null)
                     {
                         decimal indice       = decimal.Zero;
                         p.Vl_custo_calculado = TCN_CotacaoMoeda.ConvertMoeda(p.Cd_moeda,
                                                                              moeda_padrao,
                                                                              val.Dt_apontamento.Value,
                                                                              false,
                                                                              p.Vl_custo,
                                                                              ref indice,
                                                                              banco) * val.Qtd_batch;
                         p.Indice_monetario = indice;
                     }
                 }
             });
             val.Vl_custo_fixodireto = val.LFormulaApontamento[0].LCustoFixo.Sum(p => p.Vl_custo_calculado);
         }
     }
 }
Пример #4
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();
                }
            }
        }
Пример #5
0
        public static string Deletar(TRegistro_ApontamentoProducao val, BancoDados.TObjetoBanco banco)
        {
            bool st_transacao = false;
            TCD_ApontamentoProducao qtb_apontamento = new TCD_ApontamentoProducao();

            try
            {
                if (banco == null)
                {
                    st_transacao = qtb_apontamento.CriarBanco_Dados(true);
                }
                else
                {
                    qtb_apontamento.Banco_Dados = banco;
                }
                //Excluir Apontamento MPrima
                val.lMPrimaApontamento.ForEach(p => TCN_Apontamento_MPrima.Excluir(p, qtb_apontamento.Banco_Dados));
                val.LApontamentoEstoque.ForEach(p =>
                                                //Excluir apontamento X Estoque
                                                //O metodo deletarapontamento ja vai cancelar os estoques correspondentes
                                                TCN_Apontamento_Estoque.DeletarApontamentoEstoque(p, qtb_apontamento.Banco_Dados));
                //Excluir Apontamento Custo Fixo
                val.LCustoFixo.ForEach(p => TCN_Apontamento_CustoFixo.DeletarApontamentoCustoFixo(p, qtb_apontamento.Banco_Dados));
                //Excluir Ordem Producao X Apontamento
                val.lOrdem.ForEach(p =>
                                   TCN_OrdemProducao_X_Apontamento.Excluir(
                                       new TRegistro_OrdemProducao_X_Apontamento()
                {
                    Id_apontamento = val.Id_apontamento,
                    Id_ordem       = p.Id_ordem
                }, qtb_apontamento.Banco_Dados)
                                   );
                //Excluir Numero Serie
                val.lSerie.ForEach(p =>
                {
                    if (new CamadaDados.Faturamento.Pedido.TCD_ItensExpedicao(qtb_apontamento.Banco_Dados).BuscarEscalar(
                            new TpBusca[]
                    {
                        new TpBusca()
                        {
                            vNM_Campo = "a.id_serie",
                            vOperador = "=",
                            vVL_Busca = p.Id_seriestr
                        }
                    }, "1") != null)
                    {
                        throw new Exception("Numero série <" + p.Nr_serie.Trim() + ">, ja foi utilizado no faturamento.");
                    }
                    TCN_SerieProduto.Excluir(p, qtb_apontamento.Banco_Dados);
                });
                //Deletar apontamento producao
                qtb_apontamento.Deletar(val);
                if (st_transacao)
                {
                    qtb_apontamento.Banco_Dados.Commit_Tran();
                }
                return("OK");
            }
            catch (Exception ex)
            {
                if (st_transacao)
                {
                    qtb_apontamento.Banco_Dados.RollBack_Tran();
                }
                throw new Exception("Erro: " + ex.Message);
            }
            finally
            {
                if (st_transacao)
                {
                    qtb_apontamento.deletarBanco_Dados();
                }
            }
        }
Пример #6
0
        public static void ProcessarEstoqueProdutoAcabado(TRegistro_ApontamentoProducao val,
                                                          decimal Qtd_batch,
                                                          decimal TotalCusto,
                                                          BancoDados.TObjetoBanco banco)
        {
            bool st_transacao = false;
            TCD_ApontamentoProducao qtb_ficha = new TCD_ApontamentoProducao();

            try
            {
                if (banco == null)
                {
                    st_transacao = qtb_ficha.CriarBanco_Dados(true);
                }
                else
                {
                    qtb_ficha.Banco_Dados = banco;
                }
                if ((!new CamadaDados.Estoque.Cadastros.TCD_CadProduto(qtb_ficha.Banco_Dados).ItemServico(val.LFormulaApontamento[0].Cd_produto)) &&
                    (!new CamadaDados.Estoque.Cadastros.TCD_CadProduto(qtb_ficha.Banco_Dados).ProdutoConsumoInterno(val.LFormulaApontamento[0].Cd_produto)))
                {
                    //Entrada produto acabado no estoque
                    CamadaDados.Estoque.TRegistro_LanEstoque rEstoque = new CamadaDados.Estoque.TRegistro_LanEstoque();
                    rEstoque.Cd_empresa    = val.Cd_empresa;
                    rEstoque.Cd_local      = val.LFormulaApontamento[0].Cd_local;
                    rEstoque.Cd_produto    = val.LFormulaApontamento[0].Cd_produto;
                    rEstoque.Ds_observacao = "ESTOQUE GRAVADO AUTOMATICAMENTE PELA PRODUCAO DO ITEM: " + val.LFormulaApontamento[0].Cd_produto.Trim();
                    rEstoque.Dt_lancto     = val.Dt_apontamento;
                    rEstoque.Qtd_entrada   = !val.LFormulaApontamento[0].St_decomposicao ? TCN_CadConvUnidade.ConvertUnid(val.LFormulaApontamento[0].Cd_unidade,
                                                                                                                          val.LFormulaApontamento[0].Cd_unidProduto,
                                                                                                                          val.Qtd_batch * val.LFormulaApontamento[0].Qt_produto,
                                                                                                                          3,
                                                                                                                          qtb_ficha.Banco_Dados) : decimal.Zero;
                    rEstoque.Qtd_saida = val.LFormulaApontamento[0].St_decomposicao ? TCN_CadConvUnidade.ConvertUnid(val.LFormulaApontamento[0].Cd_unidade,
                                                                                                                     val.LFormulaApontamento[0].Cd_unidProduto,
                                                                                                                     val.Qtd_batch * val.LFormulaApontamento[0].Qt_produto,
                                                                                                                     3,
                                                                                                                     qtb_ficha.Banco_Dados) : decimal.Zero;
                    rEstoque.Tp_lancto    = "N";
                    rEstoque.Tp_movimento = !val.LFormulaApontamento[0].St_decomposicao ? "E" : "S";
                    rEstoque.Vl_subtotal  = TotalCusto;
                    rEstoque.Vl_unitario  = rEstoque.Vl_subtotal > 0?(rEstoque.Vl_subtotal / (val.LFormulaApontamento[0].St_decomposicao ? rEstoque.Qtd_saida : rEstoque.Qtd_entrada)):0;
                    string ret_estoque = TCN_LanEstoque.GravarEstoque(rEstoque, qtb_ficha.Banco_Dados);
                    val.LApontamentoEstoque.Add(new TRegistro_Apontamento_Estoque()
                    {
                        Cd_empresa       = val.Cd_empresa,
                        Cd_produto       = val.LFormulaApontamento[0].Cd_produto,
                        Id_lanctoestoque = rEstoque.Id_lanctoestoque,
                        Vl_custocontabil = rEstoque.Vl_subtotal
                    });
                }
                if (st_transacao)
                {
                    qtb_ficha.Banco_Dados.Commit_Tran();
                }
            }
            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();
                }
            }
        }
Пример #7
0
        public static string Gravar2(TRegistro_ApontamentoProducao val,
                                     BancoDados.TObjetoBanco banco)
        {
            bool st_transacao = false;
            TCD_ApontamentoProducao qtb_ap = new TCD_ApontamentoProducao();

            try
            {
                if (banco == null)
                {
                    st_transacao = qtb_ap.CriarBanco_Dados(true);
                }
                else
                {
                    qtb_ap.Banco_Dados = banco;
                }
                //Gravar apontamento
                val.St_registro    = "1";
                val.Id_apontamento = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(qtb_ap.Gravar(val), "@P_ID_APONTAMENTO"));
                decimal custo = decimal.Zero;
                //Baixar estoque ficha tecnica
                TCN_Ordem_MPrima.Buscar(val.Id_ordemstr, qtb_ap.Banco_Dados)
                .ForEach(v =>
                {
                    //Incluir apontamento
                    TCN_Apontamento_MPrima.Gravar(
                        new TRegistro_Apontamento_MPrima
                    {
                        Id_apontamento = val.Id_apontamento.Value,
                        Cd_produto     = v.Cd_produto,
                        Cd_unidade     = v.Cd_unidade,
                        Cd_local       = v.Cd_local,
                        Qtd_produto    = v.Qtd_produto,
                        Pc_quebratec   = v.Pc_quebratec
                    }, qtb_ap.Banco_Dados);
                    //Gravar estoque
                    TRegistro_LanEstoque rEstoque = new TRegistro_LanEstoque();
                    rEstoque.Cd_empresa           = v.CD_Empresa;
                    rEstoque.Cd_local             = v.Cd_local;
                    rEstoque.Cd_produto           = v.Cd_produto;
                    rEstoque.Ds_observacao        = "ESTOQUE GRAVADO AUTOMATICAMENTE PELO APONTAMENTO DE PRODUCAO";
                    rEstoque.Dt_lancto            = val.Dt_apontamento;
                    rEstoque.Tp_movimento         = "S";
                    rEstoque.Qtd_entrada          = decimal.Zero;
                    rEstoque.Qtd_saida            = v.Qtd_produto;
                    rEstoque.Vl_unitario          = TCN_LanEstoque.BuscarVlEstoqueUltimaCompra(v.CD_Empresa, v.Cd_produto, qtb_ap.Banco_Dados);
                    rEstoque.Vl_subtotal          = v.Qtd_produto * rEstoque.Vl_unitario;
                    rEstoque.Tp_lancto            = "N";
                    custo += rEstoque.Vl_subtotal;
                    TCN_LanEstoque.GravarEstoque(rEstoque, qtb_ap.Banco_Dados);
                    //Apontamento x estoque
                    TCN_Apontamento_Estoque.GravarApontamentoEstoque(
                        new TRegistro_Apontamento_Estoque
                    {
                        Id_apontamento   = val.Id_apontamento,
                        Cd_empresa       = rEstoque.Cd_empresa,
                        Cd_produto       = rEstoque.Cd_produto,
                        Id_lanctoestoque = rEstoque.Id_lanctoestoque,
                        Vl_custocontabil = rEstoque.Vl_subtotal
                    }, qtb_ap.Banco_Dados);
                });
                //Dar entrada estoque produto acabado
                TRegistro_OrdemProducao rOrdem =
                    TCN_OrdemProducao.Buscar(val.Id_ordemstr,
                                             val.Cd_empresa,
                                             string.Empty,
                                             string.Empty,
                                             string.Empty,
                                             string.Empty,
                                             string.Empty,
                                             string.Empty,
                                             string.Empty,
                                             false,
                                             false,
                                             false,
                                             false,
                                             qtb_ap.Banco_Dados)[0];
                TRegistro_LanEstoque rEstAcab = new TRegistro_LanEstoque();
                rEstAcab.Cd_empresa    = rOrdem.Cd_empresa;
                rEstAcab.Cd_local      = rOrdem.Cd_local;
                rEstAcab.Cd_produto    = rOrdem.Cd_produto;
                rEstAcab.Ds_observacao = "ESTOQUE GRAVADO AUTOMATICAMENTE PELO APONTAMENTO DE PRODUCAO";
                rEstAcab.Dt_lancto     = val.Dt_apontamento;
                rEstAcab.Tp_movimento  = "E";
                rEstAcab.Qtd_entrada   = rOrdem.Qtd_saldoproduzir;
                rEstAcab.Qtd_saida     = decimal.Zero;
                rEstAcab.Vl_unitario   = Math.Round(decimal.Divide(custo, rOrdem.Qtd_saldoproduzir), 7, MidpointRounding.AwayFromZero);
                rEstAcab.Vl_subtotal   = custo;
                rEstAcab.Tp_lancto     = "N";
                TCN_LanEstoque.GravarEstoque(rEstAcab, qtb_ap.Banco_Dados);
                //Apontamento x estoque
                TCN_Apontamento_Estoque.GravarApontamentoEstoque(
                    new TRegistro_Apontamento_Estoque
                {
                    Id_apontamento   = val.Id_apontamento,
                    Cd_empresa       = rEstAcab.Cd_empresa,
                    Cd_produto       = rEstAcab.Cd_produto,
                    Id_lanctoestoque = rEstAcab.Id_lanctoestoque,
                    Vl_custocontabil = custo
                }, qtb_ap.Banco_Dados);
                //Gravar Ordem x Apontamento
                TCN_OrdemProducao_X_Apontamento.Gravar(
                    new TRegistro_OrdemProducao_X_Apontamento
                {
                    Id_apontamento = val.Id_apontamento,
                    Id_ordem       = val.Id_ordem
                }, qtb_ap.Banco_Dados);
                //Alterar status serie para P-Processada
                TCN_SerieProduto.Buscar(string.Empty,
                                        string.Empty,
                                        string.Empty,
                                        val.Id_ordemstr,
                                        qtb_ap.Banco_Dados)
                .ForEach(p => { p.St_registro = "P"; TCN_SerieProduto.Gravar(p, qtb_ap.Banco_Dados); });
                //Gravar custo total materia prima
                val.Vl_custo_mpd = custo;
                qtb_ap.Gravar(val);
                if (st_transacao)
                {
                    qtb_ap.Banco_Dados.Commit_Tran();
                }
                return(val.Id_apontamentostr);
            }
            catch (Exception ex)
            {
                if (st_transacao)
                {
                    qtb_ap.Banco_Dados.RollBack_Tran();
                }
                throw new Exception("Erro gravar apontamento: " + ex.Message.Trim());
            }
            finally
            {
                if (st_transacao)
                {
                    qtb_ap.deletarBanco_Dados();
                }
            }
        }
Пример #8
0
        public static string Gravar(TRegistro_ApontamentoProducao val,
                                    BancoDados.TObjetoBanco banco)
        {
            bool st_transacao = false;
            TCD_ApontamentoProducao qtb_apontamento = new TCD_ApontamentoProducao();

            try
            {
                if (banco == null)
                {
                    st_transacao = qtb_apontamento.CriarBanco_Dados(true);
                }
                else
                {
                    qtb_apontamento.Banco_Dados = banco;
                }
                if (val.LFormulaApontamento.Count < 1)
                {
                    throw new Exception("Erro: Não existe formula apontamento para processar apontamento produção.");
                }
                //Verificar custo fixo
                string moeda_padrao = TCN_CadParamGer.BuscaVL_String_Empresa("CD_MOEDA_PADRAO", val.Cd_empresa, qtb_apontamento.Banco_Dados);
                if (moeda_padrao.Trim().Equals(string.Empty))
                {
                    throw new Exception("Erro gravar apontamento produção: falta configurar moeda padrão para realizar calculo do custo fixo.");
                }
                //Gravar apontamento producao
                val.St_registro    = "1";
                val.Id_apontamento = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(qtb_apontamento.Gravar(val), "@P_ID_APONTAMENTO"));
                List <TRegistro_CustoFixo_Direto> lCustoMoeda = val.LFormulaApontamento[0].LCustoFixo.FindAll(p => p.Cd_moeda.Trim() != moeda_padrao.Trim());
                lCustoMoeda.ForEach(p =>
                {
                    //Verificar se existe cotacao para este custo
                    object obj = new TCD_CotacaoMoeda(qtb_apontamento.Banco_Dados).BuscarEscalar(
                        new TpBusca[]
                    {
                        new TpBusca()
                        {
                            vNM_Campo = "a.cd_moeda",
                            vOperador = "=",
                            vVL_Busca = "'" + p.Cd_moeda.Trim() + "'"
                        },
                        new TpBusca()
                        {
                            vNM_Campo = "a.cd_moedaresult",
                            vOperador = "=",
                            vVL_Busca = "'" + moeda_padrao.Trim() + "'"
                        },
                        new TpBusca()
                        {
                            vNM_Campo = "a.data",
                            vOperador = "=",
                            vVL_Busca = "'" + string.Format(new System.Globalization.CultureInfo("en-US", true), Convert.ToDateTime(val.Dt_apontamento.Value).ToString("yyyyMMdd")) + "'"
                        }
                    }, "1");
                    if (obj != null)
                    {
                        if (!obj.ToString().Equals("1"))
                        {
                            throw new Exception("Erro gravar apontamento produção: Não existe cotação para a moeda de origem " + p.Cd_moeda.Trim() + ", \r\n" +
                                                "moeda de destino " + moeda_padrao.Trim() + ", data de cotação " + val.Dt_apontamentostr.Trim());
                        }
                    }
                    else
                    {
                        throw new Exception("Erro gravar apontamento produção: Não existe cotação para a moeda de origem " + p.Cd_moeda.Trim() + ", \r\n" +
                                            "moeda de destino " + moeda_padrao.Trim() + ", data de cotação " + val.Dt_apontamentostr.Trim());
                    }
                });
                CalcularCustoMPD(val, qtb_apontamento.Banco_Dados);
                //Processar estoque produto acabado
                ProcessarEstoqueProdutoAcabado(val, val.Qtd_batch, val.Vl_custo_mpd, qtb_apontamento.Banco_Dados);
                //Processar estoque materia-prima
                TCN_FichaTec_MPrima.ProcessarEstoqueFichaTec_MPrima(val.LFormulaApontamento[0].LFichaTec_MPrima,
                                                                    val.Qtd_batch,
                                                                    val.Dt_apontamento,
                                                                    val.LFormulaApontamento[0].St_decomposicao,
                                                                    qtb_apontamento.Banco_Dados).ForEach(p => val.LApontamentoEstoque.Add(p));
                //Gravar apontamento X Estoque
                val.LApontamentoEstoque.ForEach(p =>
                {
                    p.Id_apontamento = val.Id_apontamento;
                    TCN_Apontamento_Estoque.GravarApontamentoEstoque(p, qtb_apontamento.Banco_Dados);
                });


                //Gravar apontamento X Custo Fixo
                val.LFormulaApontamento[0].LCustoFixo.ForEach(p =>
                {
                    TCN_Apontamento_CustoFixo.GravarApontamentoCustoFixo(
                        new TRegistro_Apontamento_CustoFixo()
                    {
                        Id_apontamento   = val.Id_apontamento,
                        Id_custo         = p.Id_custo,
                        Vl_custo         = p.Vl_custo_calculado,
                        Indice_monetario = p.Indice_monetario
                    }, qtb_apontamento.Banco_Dados);
                });
                //Gravar Formula Materia Prima
                val.LFormulaApontamento[0].LFichaTec_MPrima.ForEach(p =>
                                                                    TCN_Apontamento_MPrima.Gravar(new TRegistro_Apontamento_MPrima()
                {
                    Id_apontamento       = val.Id_apontamento.HasValue ? val.Id_apontamento.Value : decimal.Zero,
                    Id_mprima            = decimal.Zero,
                    Cd_produto           = p.Cd_produto,
                    Cd_unidade           = p.Cd_unidade,
                    Cd_local             = p.Cd_local,
                    Qtd_produto          = p.Qtd_produto,
                    Pc_quebratec         = p.Pc_quebra_tec,
                    Id_apontamentomprima = p.Id_apontamentomprima
                }, qtb_apontamento.Banco_Dados));
                if (val.Id_ordem != null)
                {
                    //Gravar Apontamento X Ordem de Producao
                    TCN_OrdemProducao_X_Apontamento.Gravar(
                        new TRegistro_OrdemProducao_X_Apontamento()
                    {
                        Id_apontamento = val.Id_apontamento,
                        Id_ordem       = val.Id_ordem
                    }, qtb_apontamento.Banco_Dados);
                }
                //Gravar Mov Rastreabilidade
                val.lMov.ForEach(p =>
                {
                    p.Cd_empresa     = val.Cd_empresa;
                    p.Id_apontamento = val.Id_apontamento;
                    TCN_MovRastreabilidade.Gravar(p, qtb_apontamento.Banco_Dados);
                });
                if (val.Id_ordem.HasValue)
                {
                    //Buscar Nº Série
                    TList_SerieProduto lSerie =
                        new TCD_SerieProduto(qtb_apontamento.Banco_Dados).Select(
                            new TpBusca[]
                    {
                        new TpBusca()
                        {
                            vNM_Campo = "a.cd_empresa",
                            vOperador = "=",
                            vVL_Busca = "'" + val.Cd_empresa.Trim() + "'"
                        },
                        new TpBusca()
                        {
                            vNM_Campo = "a.id_ordem",
                            vOperador = "=",
                            vVL_Busca = val.Id_ordemstr
                        }
                    }, 0, string.Empty);
                    //Processar Numero se Serie
                    if (lSerie.Count > 0)
                    {
                        lSerie.ForEach(p =>
                        {
                            p.St_registro = "P";
                            TCN_SerieProduto.Gravar(p, qtb_apontamento.Banco_Dados);
                        });
                    }
                }
                if (st_transacao)
                {
                    qtb_apontamento.Banco_Dados.Commit_Tran();
                }
                return(val.Id_apontamentostr);
            }
            catch (Exception ex)
            {
                if (st_transacao)
                {
                    qtb_apontamento.Banco_Dados.RollBack_Tran();
                }
                throw new Exception("Erro: " + ex.Message);
            }
            finally
            {
                if (st_transacao)
                {
                    qtb_apontamento.deletarBanco_Dados();
                }
            }
        }
Пример #9
0
        public static string Excluir(TRegistro_Apontamento_MPrima val, BancoDados.TObjetoBanco banco)
        {
            bool st_transacao = false;
            TCD_Apontamento_MPrima qtb_apont = new TCD_Apontamento_MPrima();

            try
            {
                if (banco == null)
                {
                    st_transacao = qtb_apont.CriarBanco_Dados(true);
                }
                else
                {
                    qtb_apont.Banco_Dados = banco;
                }
                //Excluir materia prima
                qtb_apont.Excluir(val);
                //Verificar se era um subconjunto
                if (val.Id_apontamentomprima != null)
                {
                    //Buscar apontamento materia prima
                    TRegistro_ApontamentoProducao rApontamento = TCN_ApontamentoProducao.Buscar(val.Id_apontamentomprima.Value.ToString(),
                                                                                                string.Empty,
                                                                                                string.Empty,
                                                                                                string.Empty,
                                                                                                string.Empty,
                                                                                                string.Empty,
                                                                                                string.Empty,
                                                                                                string.Empty,
                                                                                                string.Empty,
                                                                                                string.Empty,
                                                                                                string.Empty,
                                                                                                1,
                                                                                                string.Empty,
                                                                                                qtb_apont.Banco_Dados)[0];
                    rApontamento.LApontamentoEstoque = TCN_Apontamento_Estoque.Buscar(rApontamento.Id_apontamentostr,
                                                                                      string.Empty,
                                                                                      string.Empty,
                                                                                      string.Empty,
                                                                                      0,
                                                                                      string.Empty,
                                                                                      qtb_apont.Banco_Dados);
                    rApontamento.LCustoFixo = TCN_Apontamento_CustoFixo.Buscar(rApontamento.Id_apontamentostr,
                                                                               string.Empty,
                                                                               0,
                                                                               string.Empty,
                                                                               qtb_apont.Banco_Dados);
                    //Buscar Materia Prima Apontamento
                    rApontamento.lMPrimaApontamento = Buscar(rApontamento.Id_apontamentostr, qtb_apont.Banco_Dados);
                    //Buscar custo fixo apontamento
                    rApontamento.LCustoFixo = TCN_Apontamento_CustoFixo.Buscar(rApontamento.Id_apontamentostr,
                                                                               string.Empty,
                                                                               0,
                                                                               string.Empty,
                                                                               qtb_apont.Banco_Dados);
                    //Chamar metodo excluir apontamento
                    TCN_ApontamentoProducao.Deletar(rApontamento, qtb_apont.Banco_Dados);
                }
                if (st_transacao)
                {
                    qtb_apont.Banco_Dados.Commit_Tran();
                }
                return("OK");
            }
            catch (Exception ex)
            {
                if (st_transacao)
                {
                    qtb_apont.Banco_Dados.RollBack_Tran();
                }
                throw new Exception("Erro excluir materia prima apontamento: " + ex.Message.Trim());
            }
            finally
            {
                if (st_transacao)
                {
                    qtb_apont.deletarBanco_Dados();
                }
            }
        }