{"id":18794,"date":"2021-11-09T19:53:55","date_gmt":"2021-11-09T18:53:55","guid":{"rendered":"https:\/\/developers.primaverabss.com\/en\/questions\/erro-na-decomposicao-com-numeros-de-serie\/"},"modified":"2021-11-09T19:53:56","modified_gmt":"2021-11-09T18:53:56","slug":"erro-na-decomposicao-com-numeros-de-serie","status":"publish","type":"cma_thread","link":"https:\/\/developers.ila.cegid.com\/en\/forum\/erro-na-decomposicao-com-numeros-de-serie\/","title":{"rendered":"Erro na decomposi\u00e7\u00e3o com n\u00fameros de s\u00e9rie"},"content":{"rendered":"<p>Pretendo decompor utilizando os motores um artigo composto que requer n\u00fameros de s\u00e9rie (s\/n) e que entre os seus componentes, tem um que requer igualmente s\/n. Depois de preencher o documento de decomposi\u00e7\u00e3o, obtenho o erro &#8220;<strong>Existem n\u00fameros de s\u00e9rie por preencher para o artigo [COMPONENTE1] na linha [1].<\/strong>&#8220;, apesar de ter preenchido esses elementos.<\/p>\n<p>Deixo o c\u00f3digo-fonte do exemplo que preparei para o efeito, baseado no c\u00f3digo que estou a usar para fazer a composi\u00e7\u00e3o, pois certamente est\u00e1 a falhar-me algum detalhe.<\/p>\n<p>Importante: se n\u00e3o chamar o&#8230;<\/p>\n<pre class=\"cma_snippet_background\"> linha.LinhasComponentes.RemoveTodos();,<\/pre>\n<p>&#8230;e simplesmente preencher os s\/n do componente que os requer, a decomposi\u00e7\u00e3o \u00e9 feita sem erros, mas para este caso em particular, pretende-se que a decomposi\u00e7\u00e3o apenas gere um sub-conjunto dos componentes da ficha de composi\u00e7\u00e3o.<\/p>\n<pre class=\"EnlighterJSRAW\">using System;\r\nusing System.Collections.Generic;\r\nusing System.Configuration;\r\nusing static StdBE100.StdBETipos;\r\n\r\nnamespace TesteComposicao\r\n{\r\n    partial class Program\r\n    {\r\n        public static class Test4\r\n        {\r\n            public static void RunTest()\r\n            {\r\n\r\n                \/\/ ligar ao Primavera\r\n                PriEngine.CreatContext(ConfigurationManager.AppSettings[\"databaseName\"], ConfigurationManager.AppSettings[\"username\"], ConfigurationManager.AppSettings[\"password\"], (EnumTipoPlataforma)Convert.ToInt32(ConfigurationManager.AppSettings[\"platformType\"]), \"Default\");\r\n\r\n                if (PriEngine.EngineStatus)\r\n                {\r\n                    Console.WriteLine(\"Company: \" + PriEngine.Platform.Contexto.Empresa.CodEmp + \" | \");\r\n                    Console.WriteLine(\"Company Name: \" + PriEngine.Platform.Contexto.Empresa.IDNome + \" | \");\r\n                    Console.WriteLine(\"Currency: \" + PriEngine.Platform.Contexto.Empresa.MoedaBase);\r\n\r\n                    string context = \"\";\r\n                    try\r\n                    {\r\n\r\n                        context = \"criar documento\";\r\n                        var documento = new InvBE100.InvBEDocumentoComposicao\r\n                        {\r\n                            Tipodoc = \"DCOM\",\r\n                            Serie = \"2021\",\r\n                            Data = DateTime.Today,\r\n                        };\r\n                        context = \"preencher dados relacionados\";\r\n                        PriEngine.Engine.Inventario.Composicoes.PreencheDadosRelacionados(documento);\r\n\r\n                        context = \"adicionar linha\";\r\n\r\n                        string location = \"A1\";\r\n                        string warehouseCode = \"A1\";\r\n                        string productCode = \"COMPOSTO1\";\r\n\r\n                        \/\/ n\u00fameros de s\u00e9rie dos compostos a decompor\r\n                        KeyValuePair&lt;string, string&gt;[] numerosSerieOut = {\r\n                            new KeyValuePair&lt;string, string&gt;(\"3178B895-2A1A-4B98-A3B3-9958EE869B58\",\"ABC0001\"),\r\n                            new KeyValuePair&lt;string, string&gt;(\"257A40DC-67F1-48EA-A7D6-6846E2D5C93E\",\"ABC0002\")\r\n                        };\r\n\r\n                        \/\/ n\u00fameros de s\u00e9rie a atribuir aos componentes\r\n                        KeyValuePair&lt;string, string&gt;[] numerosSerieIn = {\r\n                            new KeyValuePair&lt;string, string&gt;(\"EB24243E-A9AE-11EB-8164-005056BA8D78\",\"ABC0001\"),\r\n                            new KeyValuePair&lt;string, string&gt;(\"EB24243F-A9AE-11EB-8164-005056BA8D78\",\"ABC0002\")\r\n                        };\r\n\r\n                        PriEngine.Engine.Inventario.Composicoes.AdicionaLinhaComposto(documento, productCode, 2, warehouseCode, Localizacao: location);\r\n\r\n                        var linha = documento.LinhasCompostos.GetEdita(documento.LinhasCompostos.NumItens);\r\n\r\n                        \/\/ atribuir os n\u00fameros de s\u00e9rie dos artigos a decompor\r\n                        linha.NumerosSerie = new BasBE100.BasBENumerosSerie();\r\n                        foreach (var item in numerosSerieOut)\r\n                        {\r\n                            linha.NumerosSerie.Insere(new BasBE100.BasBENumeroSerie { IdNumeroSerie = item.Key, NumeroSerie = item.Value, Modulo = \"S\" });\r\n                        }\r\n\r\n                        linha.LinhasComponentes.RemoveTodos();\r\n\r\n                        \/\/ adicionar componente que requer s\/n\r\n                        PriEngine.Engine.Inventario.Composicoes.AdicionaLinhaComponente(documento, linha, \"COMPONENTE1\", 2, warehouseCode, Localizacao: location);\r\n\r\n                        \/\/ atribuir os n\u00fameros de s\u00e9rie dos componentes obtidos\r\n                        var componente = linha.LinhasComponentes.GetEdita(1);\r\n                        componente.NumerosSerie = new BasBE100.BasBENumerosSerie();\r\n                        foreach (var item in numerosSerieIn)\r\n                        { \r\n                            componente.NumerosSerie.Insere(new BasBE100.BasBENumeroSerie { IdNumeroSerie = item.Key, NumeroSerie = item.Value, Modulo = \"S\" });\r\n                        }\r\n\r\n                        \/\/ adicionar componentes que n\u00e3o requerem s\/n\r\n                        PriEngine.Engine.Inventario.Composicoes.AdicionaLinhaComponente(documento, linha, \"COMPONENTE2\", 2, warehouseCode, Localizacao: location);\r\n                        PriEngine.Engine.Inventario.Composicoes.AdicionaLinhaComponente(documento, linha, \"COMPONENTE3\", 2, warehouseCode, Localizacao: location);\r\n\r\n                        string avisos = string.Empty;\r\n                        context = \"gravar documento\";\r\n                        PriEngine.Engine.Inventario.Composicoes.Actualiza(documento, ref avisos);\r\n                        if (!string.IsNullOrEmpty(avisos))\r\n                            Console.WriteLine(\"Avisos ao gravar o documento: {0}\", avisos);\r\n                        Console.WriteLine($\"Sucesso ({documento.Tipodoc} {documento.Serie}\/{documento.NumDoc} - {documento.ID} )\");\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        Console.ForegroundColor = ConsoleColor.Red;\r\n                        Console.WriteLine($\"** Erro ao {context} **\");\r\n                        Console.ForegroundColor = ConsoleColor.White;\r\n                        Console.WriteLine($\"{ex.Message} ({ex.GetType()})\");\r\n                        if (ex.InnerException != null)\r\n                            Console.WriteLine($\"InnerException:\\r\\n {ex.InnerException.Message} ({ex.InnerException.GetType()})\");\r\n\r\n                        throw;\r\n                    }\r\n                    finally\r\n                    {\r\n                        PriEngine.Engine.FechaEmpresaTrabalho();\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    Console.WriteLine(\"N\u00e3o foi poss\u00edvel ligar ao Primavera.\");\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>Obrigado,<\/p>\n<p>Alberto Silva<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pretendo decompor utilizando os motores um artigo composto que requer n\u00fameros de s\u00e9rie (s\/n) e que entre os seus componentes, tem um que requer igualmente s\/n. Depois de preencher o documento de decomposi\u00e7\u00e3o, obtenho o erro &#8220;Existem n\u00fameros de s\u00e9rie por preencher para o artigo [COMPONENTE1] na linha [1].&#8220;, apesar de ter preenchido esses elementos. [&hellip;]<\/p>\n","protected":false},"author":48,"featured_media":0,"template":"","tags":[],"cma_category":[],"cma_difficulty_level":[],"forum-tag":[370,374],"class_list":["post-18794","cma_thread","type-cma_thread","status-publish","hentry","forum-tag-integration","forum-tag-v10-en","forum-languages-pt"],"_links":{"self":[{"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/cma_thread\/18794","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/cma_thread"}],"about":[{"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/types\/cma_thread"}],"author":[{"embeddable":true,"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/users\/48"}],"wp:attachment":[{"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/media?parent=18794"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/tags?post=18794"},{"taxonomy":"cma_category","embeddable":true,"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/cma_category?post=18794"},{"taxonomy":"cma_difficulty_level","embeddable":true,"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/cma_difficulty_level?post=18794"},{"taxonomy":"forum-tag","embeddable":true,"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/forum-tag?post=18794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}