| ♥ 0 | Ao criar um documento de composição (InvBEDocumentoComposicao) é possível evocar algum método (possivelmente do IInvBSComposicoes) para recalcular o preço de uma linha de composto com base nas respectivas linhas de componentes inseridas com preço? Procuro um comportamento similar ao editor, em este recálculo é automático e se baseia das propriedades “TipoQtdComposicaoTotal” e “TipoPreco”. Sei como efectuar este recálculo “manualmente”, pois já o codifiquei na v9 (nos antigos docs de stock de composição), mas acho estranho que, existindo um novo BS dedicado (IInvBSComposicoes) a este tipo de documentos, tal funcionalidade não exista. Obrigado. Anexo código de teste: public string TesteDocComposicao()
{
InvBEDocumentoComposicao docComposicao;
IInvBSComposicoes bsComposicoes;
InvBELinhaComposto linComposto;
InvBELinhaComponente linComponente;
try
{
//iniciar doc de composição
bsComposicoes = PriEngine.Engine.Inventario.Composicoes;
docComposicao = new InvBEDocumentoComposicao();
docComposicao.Tipodoc = "COM";
docComposicao.Data = DateTime.Today;
//adquirir série de defeito
docComposicao.Serie = PriEngine.Engine.Base.Series.DaSerieDefeito("S", docComposicao.Tipodoc, docComposicao.Data);
//definir regras de funcionamento
docComposicao.TipoQtdComposicaoTotal = true;
docComposicao.TipoPreco = "P";
bsComposicoes.PreencheDadosRelacionados(docComposicao);
//criar linha de composto de um artigo com gestão de lotes (lote existente)
bsComposicoes.AdicionaLinhaComposto(docComposicao, "PROD02L", 100, "A1", Lote: "LP4");//artigo com gestão de lotes
linComposto = docComposicao.LinhasCompostos.GetEdita(docComposicao.LinhasCompostos.NumItens);
//associar um componente de um artigo com gestão de lotes
bsComposicoes.AdicionaLinhaComponente(docComposicao, linComposto, "CONS01L", 10, "A1", Lote: "LC1");
linComponente = linComposto.LinhasComponentes.GetEdita(linComposto.LinhasComponentes.NumItens);
linComponente.PrecUnit = bsComposicoes.SugerePrecoUnitario(linComponente.Artigo, linComponente.Armazem, linComponente.Lote);
//associar outro componente de um artigo com gestão de lotes
bsComposicoes.AdicionaLinhaComponente(docComposicao, linComposto, "CONS03SL", 5, "A1"); //artigo sem gestão de lotes
linComponente = linComposto.LinhasComponentes.GetEdita(linComposto.LinhasComponentes.NumItens);
linComponente.PrecUnit = bsComposicoes.SugerePrecoUnitario(linComponente.Artigo, linComponente.Armazem, linComponente.Lote);
//Precisava de alguma função aqui semelhante a esta...
//bsComposicoes.RecalculaPrecoLinhaComposto(docComposicao, linComposto);
//Ou pelo como esta...
//bsComposicoes.RecalculaPrecoLinhasCompostos(docComposicao);
//validar e gravar
string strErro = string.Empty;
bool resposta = bsComposicoes.ValidaActualizacao(docComposicao, ref strErro);
if (resposta)
{
bsComposicoes.Actualiza(docComposicao, ref strErro);
if (strErro.Length > 0)
{
throw new Exception("Erro ao gravar documento no PRIMAVERA!" + Environment.NewLine + "Erro:" + strErro);
}
else
{
return docComposicao.ID;
}
}
else
{
throw new Exception("Documento não validado no PRIMAVERA!" + Environment.NewLine + "Erro:" + strErro);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
linComponente = null;
linComposto = null;
docComposicao = null;
}
}
Marcado como spam |
| Resposta privada Bom dia, infelizmente não existe, neste momento, tal método na API para efetuar este cálculo. Marcado como spam Comentários Ok, obrigado pela resposta rápida.
Vou interpretar esse "...neste momento..." como uma esperança :) |