How to create a stock document of type composition of article via engines? (V9)

1

What is intended is to create a stock composition document via engines, but specifying which are the components and not using the ones in the product datasheet. I am using the code below but the document is created, the composite article goes into stock but the document runs out of components. What's wrong ? Is there any other way to do this without having to specify all the fields of the component lines?

GcpBELinhasDocumentoStock novasLinhasComponentes = new GcpBELinhasDocumentoStock();
GcpBELinhaDocumentoStock linhaComponentes ;

int x = 10001;
foreach (Componente item in composicaoMadeira.Componentes)
{
    armazem = MotorPrimavera.Motor.Comercial.Artigos.DaValorAtributo(item.CodArtigo, "ArmazemSugestao").ToString();
    linhaComponentes = new GcpBELinhaDocumentoStock();
    linhaComponentes.set_IdLinha(MotorPrimavera.Plataforma.FuncoesGlobais.CriaGuid(false));
    linhaComponentes.set_Artigo(item.CodArtigo);
    linhaComponentes.set_Quantidade(item.Quantidade);
    linhaComponentes.set_FactorConv(1);
    linhaComponentes.set_Lote(item.Lote);
    linhaComponentes.set_Armazem(armazem);
    linhaComponentes.set_Localizacao(armazem);
    linhaComponentes.set_DataStock(doc.get_DataDoc());
    linhaComponentes.set_TipoLinha("13");
    linhaComponentes.set_EntradaSaida("S");

    linhaComponentes.set_NumLinha(x);
    x++;
    linhaComponentes.set_NumLinComposto(1);
    linhaComponentes.set_Unidade(MotorPrimavera.Motor.Comercial.Artigos.DaValorAtributo(item.CodArtigo, "UnidadeBase").ToString());

    novasLinhasComponentes.Insere(linhaComponentes);
}

doc.get_Linhas().OfType<GcpBELinhaDocumentoStock>().First().set_Linhas(novasLinhasComponentes);
MotorPrimavera.Motor.Comercial.Stocks.Actualiza(doc);
    
asked by anonymous 14.08.2018 / 12:23

1 answer

2

What you lack there is removing component rows from the composite article.
If the Comercial.Stocks.AdicionaLinha method is used to add the compound to the document, all components are automatically associated with the object.

Here is a working example of how to create a Product Composition document:

// ...
// pressupomos que existe um objeto "motor" do tipo "ErpBS"

private void CriaDocStock()
{   
    GcpBEDocumentoStock objDocStock = null;
    GcpBELinhaDocumentoStock objLinhaStockComposto = null;
    GcpBELinhaDocumentoStock objLinhaStockComponente = null;

    try
    {
        // criar novo documento de composição
        objDocStock = new GcpBEDocumentoStock();
        objDocStock.set_Tipodoc("COM");
        objDocStock.set_Serie("A");
        objDocStock.set_DataDoc(DateTime.Now);
        objDocStock.set_Modulo("S");

        // preenche os dados relacionados
        motor.Comercial.Stocks.PreencheDadosRelacionados(objDocStock);

        // adicionar o composto
        motor.Comercial.Stocks.AdicionaLinha(objDocStock, "PACK01", "E", 1, "A1", 1000, Localizacao: "A1");

        objLinhaStockComposto = objDocStock.get_Linhas()[1];

        // remover os componentes automaticamente associados pelo método "AdicionaLinha"
        objLinhaStockComposto.get_Linhas().RemoveTodos();

        // adicionar os componentes
        objLinhaStockComponente = new GcpBELinhaDocumentoStock();
        objLinhaStockComponente.set_Artigo("A0001");
        objLinhaStockComponente.set_Armazem("A1");
        objLinhaStockComponente.set_Localizacao("A1");
        objLinhaStockComponente.set_Quantidade(1);
        objLinhaStockComponente.set_PrecUnit(100);
        objLinhaStockComponente.set_EntradaSaida("S");
        objLinhaStockComponente.set_DataStock(DateTime.Now);
        objLinhaStockComponente.set_Modulo("S");
        objLinhaStockComponente.set_NumLinComposto(1);
        objLinhaStockComponente.set_TipoLinha("10");

        // adicionar o componente ao composto
        objLinhaStockComposto.get_Linhas().Insere(objLinhaStockComponente);

        // adicionar os componentes
        objLinhaStockComponente = new GcpBELinhaDocumentoStock();
        objLinhaStockComponente.set_Artigo("B0001");
        objLinhaStockComponente.set_Armazem("A1");
        objLinhaStockComponente.set_Localizacao("A1");
        objLinhaStockComponente.set_Quantidade(1);
        objLinhaStockComponente.set_PrecUnit(100);
        objLinhaStockComponente.set_EntradaSaida("S");
        objLinhaStockComponente.set_DataStock(DateTime.Now);
        objLinhaStockComponente.set_Modulo("S");
        objLinhaStockComponente.set_NumLinComposto(1);
        objLinhaStockComponente.set_TipoLinha("10");

        // adicionar o componente ao composto
        objLinhaStockComposto.get_Linhas().Insere(objLinhaStockComponente);

        // atualizar o documento
        motor.Comercial.Stocks.Actualiza(ref objDocStock);
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
    
14.08.2018 / 13:23