public static Lib_Primavera.Model.RespostaErro AlterarPassword(string codcliente, string nova)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();

            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    StdBECamposChave chave = new StdBECamposChave();
                    chave.AddCampoChave("CDU_codCliente", codcliente);

                    PriEngine.Engine.TabelasUtilizador.ActualizaValorAtributo
                        ("TDU_ClienteAuxiliar", chave, "CDU_Password" , sha1(nova));

                    erro.Erro = 0;
                    erro.Descricao = "Sucesso";
                    return erro;
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;
                }
            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Model.RespostaErro Encomendas_New(Model.DocVenda dv)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();
            GcpBEDocumentoVenda myEnc = new GcpBEDocumentoVenda();

            GcpBELinhaDocumentoVenda myLin = new GcpBELinhaDocumentoVenda();

            GcpBELinhasDocumentoVenda myLinhas = new GcpBELinhasDocumentoVenda();

            PreencheRelacaoVendas rl = new PreencheRelacaoVendas();
            List<Model.LinhaDocVenda> lstlindv = new List<Model.LinhaDocVenda>();

            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    // Atribui valores ao cabecalho do doc
                    //myEnc.set_DataDoc(dv.Data);
                    myEnc.set_Entidade(dv.Entidade);
                    myEnc.set_TipoEntidade("C");
                    myEnc.set_Tipodoc("FA");
                    myEnc.set_Serie(dv.Serie);
                    myEnc.set_DataDoc(DateTime.Today);

                    // Linhas do documento para a lista de linhas
                    lstlindv = dv.LinhasDoc;
                    PriEngine.Engine.Comercial.Vendas.PreencheDadosRelacionados(myEnc, rl);
                    foreach (Model.LinhaDocVenda lin in lstlindv)
                    {
                        PriEngine.Engine.Comercial.Vendas.AdicionaLinha(myEnc, lin.CodArtigo, lin.Quantidade, "", "", lin.PrecoUnitario, lin.Desconto);
                    }

                    // PriEngine.Engine.Comercial.Compras.TransformaDocumento(

                    PriEngine.Engine.IniciaTransaccao();
                    PriEngine.Engine.Comercial.Vendas.Actualiza(myEnc, "Teste");
                    PriEngine.Engine.TerminaTransaccao();
                    erro.Erro = 0;
                    erro.Descricao = "Sucesso";
                    return erro;
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;

                }

            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);

                PriEngine.Engine.DesfazTransaccao();
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro ApagarGeneros(string CodArtigo)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();

            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    StdBECamposChave chave = new StdBECamposChave();
                    chave.AddCampoChave("CDU_idArtigo", CodArtigo);

                    PriEngine.Engine.TabelasUtilizador.Remove("TDU_ArtigoGenero", chave);

                    erro.Erro = 0;
                    erro.Descricao = "Sucesso";
                    return erro;
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir a empresa";
                    return erro;
                }
            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro AlterarDados(View.AcessoLogin2 registo)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();
            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    StdBECamposChave chave = new StdBECamposChave();
                    StdBECampos campos = new StdBECampos();
                    StdBECampo cmp1 = new StdBECampo();
                    StdBECampo cmp2 = new StdBECampo();

                    chave.AddCampoChave("CDU_codCliente", registo.CodCliente);

                    cmp1.Nome = "CDU_Email";
                    cmp1.Valor = registo.email;
                    cmp2.Nome = "CDU_Sexo";
                    cmp2.Valor = registo.sexo;

                    campos.Insere(cmp1);
                    campos.Insere(cmp2);

                    PriEngine.Engine.TabelasUtilizador.ActualizaValorAtributos("TDU_ClienteAuxiliar", chave, campos);

                    GcpBECliente objCli = new GcpBECliente();
                    objCli = PriEngine.Engine.Comercial.Clientes.Edita(registo.CodCliente);
                    objCli.set_EmModoEdicao(true);

                    objCli.set_Nome(registo.NomeCliente);
                    objCli.set_NumContribuinte(registo.NumContribuinte);
                    objCli.set_Moeda(registo.Moeda);
                    objCli.set_Morada(registo.Morada);

                    PriEngine.Engine.Comercial.Clientes.Actualiza(objCli);

                    erro.Erro = 0;
                    erro.Descricao = "Sucesso";
                    return erro;
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;
                }
            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro InsereArtigoCarrinho(Model.Carrinho carrinho)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();

            string data = String.Format("{0:yyyy-M-d HH:mm:ss}", DateTime.Now) + ".000";

            StdBERegistoUtil objRegisto = new StdBERegistoUtil();
            StdBECampos campos = new StdBECampos();
            StdBECampo cmp1 = new StdBECampo();
            StdBECampo cmp2 = new StdBECampo();
            StdBECampo cmp3 = new StdBECampo();
            StdBECampo cmp4 = new StdBECampo();

            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    cmp1.Nome = "CDU_idArtigo";
                    cmp2.Nome = "CDU_CodCliente";
                    cmp3.Nome = "CDU_adicionado";
                    cmp4.Nome = "CDU_comprado";

                    cmp1.Valor = carrinho.artigo;
                    cmp2.Valor = carrinho.cliente;
                    cmp3.Valor = data;
                    cmp4.Valor = "1900-01-01 00:00:00.000";

                    campos.Insere(cmp1);
                    campos.Insere(cmp2);
                    campos.Insere(cmp3);
                    campos.Insere(cmp4);

                    objRegisto.set_Campos(campos);
                    PriEngine.Engine.TabelasUtilizador.Actualiza("TDU_Pagamento", objRegisto);

                    erro.Erro = 0;
                    erro.Descricao = "Sucesso";
                    return erro;
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;
                }
            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro InsereClassificacao(Model.Classificacao cla)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();

            StdBERegistoUtil objRegisto = new StdBERegistoUtil();
            StdBECampos campos = new StdBECampos();
            StdBECampo cmp1 = new StdBECampo();
            StdBECampo cmp2 = new StdBECampo();
            StdBECampo cmp3 = new StdBECampo();
            StdBECampo cmp4 = new StdBECampo();

            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    cmp1.Nome = "CDU_idArtigo";
                    cmp2.Nome = "CDU_idCliente";
                    cmp3.Nome = "CDU_Valor";
                    cmp4.Nome = "CDU_Comentario";

                    cmp1.Valor = cla.codArtigo;
                    cmp2.Valor = cla.codCliente;
                    cmp3.Valor = cla.valor;
                    cmp4.Valor = cla.comentario;

                    campos.Insere(cmp1);
                    campos.Insere(cmp2);
                    campos.Insere(cmp3);
                    campos.Insere(cmp4);

                    objRegisto.set_Campos(campos);
                    PriEngine.Engine.TabelasUtilizador.Actualiza("TDU_Classificacao", objRegisto);

                    erro.Erro = 0;
                    erro.Descricao = "Sucesso";
                    return erro;
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;
                }
            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro ApagarArtigoCarrinho(Model.Carrinho carrinho)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();

            StdBECamposChave objRegisto = new StdBECamposChave();
            StdBECampos campos = new StdBECampos();
            StdBECampo cmp1 = new StdBECampo();
            StdBECampo cmp2 = new StdBECampo();

            objRegisto.AddCampoChave("CDU_idArtigo", carrinho.artigo);
            objRegisto.AddCampoChave("CDU_CodCliente", carrinho.cliente);

            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    if (PriEngine.Engine.TabelasUtilizador.Existe("TDU_Pagamento", objRegisto) == false)
                    {
                        erro.Erro = 1;
                        erro.Descricao = "Não existe esta linha no carrinho";
                        return erro;
                    }
                    else
                    {

                        PriEngine.Engine.TabelasUtilizador.Remove("TDU_Pagamento", objRegisto);
                        erro.Erro = 0;
                        erro.Descricao = "Sucesso";
                        return erro;
                    }

                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;
                }
            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro DelCliente(string codCliente)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();
            GcpBECliente objCli = new GcpBECliente();

            try
            {

                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    if (PriEngine.Engine.Comercial.Clientes.Existe(codCliente) == false)
                    {
                        erro.Erro = 1;
                        erro.Descricao = "O cliente não existe";
                        return erro;
                    }
                    else
                    {
                        PriEngine.Engine.Comercial.Clientes.Remove(codCliente);
                        erro.Erro = 0;
                        erro.Descricao = "Sucesso";
                        return erro;
                    }
                }

                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir a empresa";
                    return erro;
                }
            }

            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro NovoGenero(Model.ArtigoGenero registo)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();

            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    StdBERegistoUtil objRegisto = new StdBERegistoUtil();
                    StdBECampos campos = new StdBECampos();
                    StdBECampo cmp1 = new StdBECampo();
                    StdBECampo cmp2 = new StdBECampo();

                    cmp1.Nome = "CDU_idArtigo";
                    cmp2.Nome = "CDU_idGenero";

                    cmp1.Valor = registo.idArtigo;
                    cmp2.Valor = registo.idGenero;

                    campos.Insere(cmp1);
                    campos.Insere(cmp2);

                    objRegisto.set_Campos(campos);
                    PriEngine.Engine.TabelasUtilizador.Actualiza("TDU_ArtigoGenero", objRegisto);

                    erro.Erro = 0;
                    erro.Descricao = "Sucesso";
                    return erro;
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;
                }
            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro InsereClienteObj(Model.Cliente cli)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();
            GcpBECliente myCli = new GcpBECliente();

            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    myCli.set_Cliente(cli.CodCliente);
                    myCli.set_Nome(cli.NomeCliente);
                    myCli.set_NumContribuinte(cli.NumContribuinte);
                    myCli.set_Moeda(cli.Moeda);
                    myCli.set_Morada(cli.Morada);

                    PriEngine.Engine.Comercial.Clientes.Actualiza(myCli);

                    erro.Erro = 0;
                    erro.Descricao = "Sucesso";
                    return erro;
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;
                }
            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro Registar(View.AcessoLogin2 registo)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();

            try
            {
                StdBELista objList;

                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    string query = "Execute PDU_RegistarCliente @codigo = '" + registo.CodCliente + "', @nome = '" + registo.NomeCliente + "', @contribuinte = " + registo.NumContribuinte + ", @morada = '" + registo.Morada + "', @contacto = " + registo.contacto + ", @email = '" + registo.email + "', @sexo = '" + registo.sexo + "', @password = '******'";

                    objList = PriEngine.Engine.Consulta(query);

                    erro.Erro = 0;
                    erro.Descricao = "Sucesso";
                    return erro;
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;
                }
            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Model.RespostaErro VGR_New(Model.DocCompra dc)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();

            GcpBEDocumentoCompra myGR = new GcpBEDocumentoCompra();
            GcpBELinhaDocumentoCompra myLin = new GcpBELinhaDocumentoCompra();
            GcpBELinhasDocumentoCompra myLinhas = new GcpBELinhasDocumentoCompra();

            PreencheRelacaoCompras rl = new PreencheRelacaoCompras();
            List<Model.LinhaDocCompra> lstlindv = new List<Model.LinhaDocCompra>();

            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    // Atribui valores ao cabecalho do doc
                    //myEnc.set_DataDoc(dv.Data);
                    myGR.set_Entidade(dc.Entidade);
                    myGR.set_NumDocExterno(dc.NumDocExterno);
                    myGR.set_Serie(dc.Serie);
                    myGR.set_Tipodoc("VGR");
                    myGR.set_TipoEntidade("F");
                    // Linhas do documento para a lista de linhas
                    lstlindv = dc.LinhasDoc;
                    PriEngine.Engine.Comercial.Compras.PreencheDadosRelacionados(myGR, rl);
                    foreach (Model.LinhaDocCompra lin in lstlindv)
                    {
                        PriEngine.Engine.Comercial.Compras.AdicionaLinha(myGR, lin.CodArtigo, lin.Quantidade, lin.Armazem, "", lin.PrecoUnitario, lin.Desconto);
                    }

                    PriEngine.Engine.IniciaTransaccao();
                    PriEngine.Engine.Comercial.Compras.Actualiza(myGR, "Teste");
                    PriEngine.Engine.TerminaTransaccao();
                    erro.Erro = 0;
                    erro.Descricao = "Sucesso";
                    return erro;
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;

                }

            }
            catch (Exception ex)
            {
                PriEngine.Engine.DesfazTransaccao();
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro Registar(Model.Artigo registo)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();

            try
            {
                StdBELista objList;

                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    Double v = registo.Preco;

                    NumberFormatInfo nfi = new NumberFormatInfo();
                    nfi.NumberDecimalSeparator = ".";
                    string add = v.ToString(nfi);

                    string query = "Execute PDU_RegistarArtigo @codigo = '" + registo.CodArtigo + "', @empresa = '" + registo.Empresa + "', @ano = " + registo.Ano + ", @idade = " + registo.Idade + ", @descricao = '" + registo.Descricao + "', @stock = " + registo.Stock + ", @preco = " + add;

                    objList = PriEngine.Engine.Consulta(query);

                    erro.Erro = 0;
                    erro.Descricao = "Sucesso";
                    return erro;
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;
                }
            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro UpdCliente(Lib_Primavera.Model.Cliente cliente)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();
            GcpBECliente objCli = new GcpBECliente();

            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    if (PriEngine.Engine.Comercial.Clientes.Existe(cliente.CodCliente) == false)
                    {
                        erro.Erro = 1;
                        erro.Descricao = "O cliente não existe";
                        return erro;
                    }
                    else
                    {
                        objCli = PriEngine.Engine.Comercial.Clientes.Edita(cliente.CodCliente);
                        objCli.set_EmModoEdicao(true);

                        objCli.set_Nome(cliente.NomeCliente);
                        objCli.set_NumContribuinte(cliente.NumContribuinte);
                        objCli.set_Moeda(cliente.Moeda);
                        objCli.set_Morada(cliente.Morada);

                        PriEngine.Engine.Comercial.Clientes.Actualiza(objCli);

                        erro.Erro = 0;
                        erro.Descricao = "Sucesso";
                        return erro;
                    }
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir a empresa";
                    return erro;
                }

            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro IncrementarVisitas(Model.Artigo registo)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();
            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    if (PriEngine.Engine.Comercial.Artigos.Existe(registo.CodArtigo) == false)
                    {
                        erro.Erro = 1;
                        erro.Descricao = "O artigo não existe";
                        return erro;
                    }
                    else
                    {
                        StdBECamposChave chave = new StdBECamposChave();
                        StdBECampos campos = new StdBECampos();
                        StdBECampo cmp1 = new StdBECampo();

                        cmp1.Nome = "CDU_Visitas";
                        cmp1.Valor = registo.Visitas + 1;
                        campos.Insere(cmp1);

                        PriEngine.Engine.Comercial.Artigos.ActualizaValorAtributos(registo.CodArtigo, campos);
                        erro.Erro = 0;
                        erro.Descricao = "Sucesso";
                        return erro;
                    }
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;
                }
            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Lib_Primavera.Model.RespostaErro AlterarDadosMain(Model.Artigo registo)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();
            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    if (PriEngine.Engine.Comercial.Artigos.Existe(registo.CodArtigo) == false)
                    {
                        erro.Erro = 1;
                        erro.Descricao = "O artigo não existe";
                        return erro;
                    }
                    else
                    {
                        /* Artigo */
                        GcpBEArtigo obj = new GcpBEArtigo();
                        obj = PriEngine.Engine.Comercial.Artigos.Edita(registo.CodArtigo);
                        obj.set_EmModoEdicao(true);

                        obj.set_Descricao(registo.Descricao); // Nome do producto

                        PriEngine.Engine.Comercial.Artigos.Actualiza(obj);

                        /* ArtigoMoeda */
                        GcpBEArtigoMoeda obj2 = new GcpBEArtigoMoeda();
                        obj2 = PriEngine.Engine.Comercial.ArtigosPrecos.Edita(registo.CodArtigo, registo.Moeda, "UN");

                        obj2.set_EmModoEdicao(true);

                        obj2.set_PVP1(registo.Preco);

                        PriEngine.Engine.Comercial.ArtigosPrecos.Actualiza(obj2);

                        /* TDU_ArtigoAuxiliar */
                        StdBECamposChave chave = new StdBECamposChave();
                        StdBECampos campos = new StdBECampos();
                        StdBECampo cmp1 = new StdBECampo();
                        StdBECampo cmp2 = new StdBECampo();
                        StdBECampo cmp3 = new StdBECampo();
                        StdBECampo cmp4 = new StdBECampo();

                        chave.AddCampoChave("CDU_codArtigo", registo.CodArtigo);

                        cmp1.Nome = "CDU_Ano";
                        cmp1.Valor = registo.Ano;
                        cmp2.Nome = "CDU_Idade";
                        cmp2.Valor = registo.Idade;
                        cmp3.Nome = "CDU_Empresa";
                        cmp3.Valor = registo.Empresa;
                        cmp4.Nome = "CDU_Oculto";
                        cmp4.Valor = (registo.Oculto ? 1 : 0);

                        campos.Insere(cmp1);
                        campos.Insere(cmp2);
                        campos.Insere(cmp3);
                        campos.Insere(cmp4);

                        PriEngine.Engine.TabelasUtilizador.ActualizaValorAtributos("TDU_ArtigoAuxiliar", chave, campos);

                        erro.Erro = 0;
                        erro.Descricao = "Sucesso";
                        return erro;
                    }
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;
                }
            }
            catch (Exception ex)
            {
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }
        public static Model.RespostaErro TransformaDoc(Model.DocCompra dc)
        {
            Lib_Primavera.Model.RespostaErro erro = new Model.RespostaErro();
            GcpBEDocumentoCompra objEnc = new GcpBEDocumentoCompra();
            GcpBEDocumentoCompra objGR = new GcpBEDocumentoCompra();
            GcpBELinhasDocumentoCompra objLinEnc = new GcpBELinhasDocumentoCompra();
            PreencheRelacaoCompras rl = new PreencheRelacaoCompras();

            List<Model.LinhaDocCompra> lstlindc = new List<Model.LinhaDocCompra>();

            try
            {
                if (PriEngine.InitializeCompany(FirstREST.Properties.Settings.Default.Company.Trim(), FirstREST.Properties.Settings.Default.User.Trim(), FirstREST.Properties.Settings.Default.Password.Trim()) == true)
                {
                    objEnc = PriEngine.Engine.Comercial.Compras.Edita("000", "ECF", "2013", 3);

                    // --- Criar os cabeçalhos da GR
                    objGR.set_Entidade(objEnc.get_Entidade());
                    objEnc.set_Serie("2013");
                    objEnc.set_Tipodoc("ECF");
                    objEnc.set_TipoEntidade("F");

                    objGR = PriEngine.Engine.Comercial.Compras.PreencheDadosRelacionados(objGR, rl);

                    // façam p.f. o ciclo para percorrer as linhas da encomenda que pretendem copiar
                    //double QdeaCopiar;
                    //PriEngine.Engine.Comercial.Internos.CopiaLinha("C", objEnc, "C", objGR, lin.NumLinha, QdeaCopiar);

                    // precisamos aqui de um metodo que permita actualizar a Qde Satisfeita da linha de encomenda.  Existe em VB mas ainda não sei qual é em c#

                    PriEngine.Engine.IniciaTransaccao();
                    PriEngine.Engine.Comercial.Compras.Actualiza(objEnc, "");
                    PriEngine.Engine.Comercial.Compras.Actualiza(objGR, "");

                    PriEngine.Engine.TerminaTransaccao();

                    erro.Erro = 0;
                    erro.Descricao = "Sucesso";
                    return erro;
                }
                else
                {
                    erro.Erro = 1;
                    erro.Descricao = "Erro ao abrir empresa";
                    return erro;

                }

            }
            catch (Exception ex)
            {
                PriEngine.Engine.DesfazTransaccao();
                erro.Erro = 1;
                erro.Descricao = ex.Message;
                return erro;
            }
        }