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)); }
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); }
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; } } }
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(); }
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(); } } }