Forum
See question

Erro na decomposição com números de série   

58 views
0
0

Pretendo decompor utilizando os motores um artigo composto que requer números de série (s/n) e que entre os seus componentes, tem um que requer igualmente s/n. Depois de preencher o documento de decomposição, obtenho o erro “Existem números de série por preencher para o artigo [COMPONENTE1] na linha [1].“, apesar de ter preenchido esses elementos.

Deixo o código-fonte do exemplo que preparei para o efeito, baseado no código que estou a usar para fazer a composição, pois certamente está a falhar-me algum detalhe.

Importante: se não chamar o…

 linha.LinhasComponentes.RemoveTodos();,

…e simplesmente preencher os s/n do componente que os requer, a decomposição é feita sem erros, mas para este caso em particular, pretende-se que a decomposição apenas gere um sub-conjunto dos componentes da ficha de composição.

using System;
using System.Collections.Generic;
using System.Configuration;
using static StdBE100.StdBETipos;

namespace TesteComposicao
{
    partial class Program
    {
        public static class Test4
        {
            public static void RunTest()
            {

                // ligar ao Primavera
                PriEngine.CreatContext(ConfigurationManager.AppSettings["databaseName"], ConfigurationManager.AppSettings["username"], ConfigurationManager.AppSettings["password"], (EnumTipoPlataforma)Convert.ToInt32(ConfigurationManager.AppSettings["platformType"]), "Default");

                if (PriEngine.EngineStatus)
                {
                    Console.WriteLine("Company: " + PriEngine.Platform.Contexto.Empresa.CodEmp + " | ");
                    Console.WriteLine("Company Name: " + PriEngine.Platform.Contexto.Empresa.IDNome + " | ");
                    Console.WriteLine("Currency: " + PriEngine.Platform.Contexto.Empresa.MoedaBase);

                    string context = "";
                    try
                    {

                        context = "criar documento";
                        var documento = new InvBE100.InvBEDocumentoComposicao
                        {
                            Tipodoc = "DCOM",
                            Serie = "2021",
                            Data = DateTime.Today,
                        };
                        context = "preencher dados relacionados";
                        PriEngine.Engine.Inventario.Composicoes.PreencheDadosRelacionados(documento);

                        context = "adicionar linha";

                        string location = "A1";
                        string warehouseCode = "A1";
                        string productCode = "COMPOSTO1";

                        // números de série dos compostos a decompor
                        KeyValuePair<string, string>[] numerosSerieOut = {
                            new KeyValuePair<string, string>("3178B895-2A1A-4B98-A3B3-9958EE869B58","ABC0001"),
                            new KeyValuePair<string, string>("257A40DC-67F1-48EA-A7D6-6846E2D5C93E","ABC0002")
                        };

                        // números de série a atribuir aos componentes
                        KeyValuePair<string, string>[] numerosSerieIn = {
                            new KeyValuePair<string, string>("EB24243E-A9AE-11EB-8164-005056BA8D78","ABC0001"),
                            new KeyValuePair<string, string>("EB24243F-A9AE-11EB-8164-005056BA8D78","ABC0002")
                        };

                        PriEngine.Engine.Inventario.Composicoes.AdicionaLinhaComposto(documento, productCode, 2, warehouseCode, Localizacao: location);

                        var linha = documento.LinhasCompostos.GetEdita(documento.LinhasCompostos.NumItens);

                        // atribuir os números de série dos artigos a decompor
                        linha.NumerosSerie = new BasBE100.BasBENumerosSerie();
                        foreach (var item in numerosSerieOut)
                        {
                            linha.NumerosSerie.Insere(new BasBE100.BasBENumeroSerie { IdNumeroSerie = item.Key, NumeroSerie = item.Value, Modulo = "S" });
                        }

                        linha.LinhasComponentes.RemoveTodos();

                        // adicionar componente que requer s/n
                        PriEngine.Engine.Inventario.Composicoes.AdicionaLinhaComponente(documento, linha, "COMPONENTE1", 2, warehouseCode, Localizacao: location);

                        // atribuir os números de série dos componentes obtidos
                        var componente = linha.LinhasComponentes.GetEdita(1);
                        componente.NumerosSerie = new BasBE100.BasBENumerosSerie();
                        foreach (var item in numerosSerieIn)
                        { 
                            componente.NumerosSerie.Insere(new BasBE100.BasBENumeroSerie { IdNumeroSerie = item.Key, NumeroSerie = item.Value, Modulo = "S" });
                        }

                        // adicionar componentes que não requerem s/n
                        PriEngine.Engine.Inventario.Composicoes.AdicionaLinhaComponente(documento, linha, "COMPONENTE2", 2, warehouseCode, Localizacao: location);
                        PriEngine.Engine.Inventario.Composicoes.AdicionaLinhaComponente(documento, linha, "COMPONENTE3", 2, warehouseCode, Localizacao: location);

                        string avisos = string.Empty;
                        context = "gravar documento";
                        PriEngine.Engine.Inventario.Composicoes.Actualiza(documento, ref avisos);
                        if (!string.IsNullOrEmpty(avisos))
                            Console.WriteLine("Avisos ao gravar o documento: {0}", avisos);
                        Console.WriteLine($"Sucesso ({documento.Tipodoc} {documento.Serie}/{documento.NumDoc} - {documento.ID} )");
                    }
                    catch (Exception ex)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine($"** Erro ao {context} **");
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine($"{ex.Message} ({ex.GetType()})");
                        if (ex.InnerException != null)
                            Console.WriteLine($"InnerException:\r\n {ex.InnerException.Message} ({ex.InnerException.GetType()})");

                        throw;
                    }
                    finally
                    {
                        PriEngine.Engine.FechaEmpresaTrabalho();
                    }
                }
                else
                {
                    Console.WriteLine("Não foi possível ligar ao Primavera.");
                }
            }
        }
    }
}

Obrigado,

Alberto Silva

Faça login para poder traduzir
Integration
V10
Marked as spam
Created 4 years and 5 months ago albertosilva
a
albertosilva Iniciante