| ♥ 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 Marked as spam |
Erro na decomposição com números de série
58 views