Fórum
Ver pergunta

Composição – Existe método para recalcular o preço do composto baseado nas linhas componentes?   

176 visualizações
0
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;
            }

        }

 

Faça login para poder traduzir
Integração
V10
Marcado como spam
Criado há 6 anos e 6 meses miguelganilhosantos
miguelganilhosantos Miguel Ganilho Santos Iniciante
1 respostas
0
Resposta privada

Bom dia, infelizmente não existe, neste momento, tal método na API para efetuar este cálculo.

Faça login para poder traduzir
Marcado como spam
Criado há 6 anos e 6 meses danielvieira-1
d
danielvieira-1 Daniel Vieira Responsiveness Member
    Comentários
    Ok, obrigado pela resposta rápida. Vou interpretar esse "...neste momento..." como uma esperança :)
    6 anos e 6 meses
    miguelganilhosantos