WCF BytAarray Return Method gives error

0

I was trying to use a method to return a bytearray using ERP but I get an exception after some time saying Object Variable or With Block Not Set, what can it be?

PS. Yes I know the engine has a native function but I wanted to use this one to later do the document settlement and I do not know what could be, any suggestions?

public ImpressaoVendaERP ImprimeDocumentoVenda(string filial, string tipoDoc, string serie, int numdoc, int numeroVias, out string mensagem, bool usarViasERP = true)
{
    mensagem = "A iniciar ligação ERP." + Environment.NewLine;
    ImpressaoVendaERP pdf = new ImpressaoVendaERP();

    try
    {
        mensagem = "";
        if (ERP == null)
        {
            mensagem += "Não foi efetuado o login ou a sessão expirou" + Environment.NewLine;
            return pdf;
        }
        else
        {
            //Se não foi efetuado Login
            if (Modelo == null)
            {
                mensagem += "Empresa não aberta ou ligação não efetuada." + Environment.NewLine;
                return pdf;
            }

            try
            {
                var documentoExiste = ERP.Comercial.Vendas.Existe(filial, tipoDoc, serie, numdoc);

                //Se não existe o documento
                if (!documentoExiste)
                {
                    mensagem += "O Documento não Existe." + Environment.NewLine;

                    return pdf;
                }

                //string id = ERP.Comercial.Vendas.DaValorAtributo(filial, tipoDoc, serie, numdoc, "ID").ToString();
                //string strSelFormula = String.Format("{{CabecDoc.Id}}='{0}'", id);

                int NVias = usarViasERP ? int.Parse(ERP.Comercial.Series.DaValorAtributo("V", tipoDoc, serie, "NumVias").ToString()) : numeroVias;
                string Mapa = ERP.Comercial.Series.DaValorAtributo("V", tipoDoc, serie, "Config").ToString();
                Mapa = (String.Compare(Mapa, "", false) == 0 ? "GcpVls01.rpt" : Mapa + ".rpt");

                Plataforma.Mapas.Inicializar("VND");

                for (int i = 0; i < NVias; i++)
                {
                    string dadosEmpresa = @"StringVar Nome; 
                                            StringVar Morada;
                                            StringVar Localidade; 
                                            StringVar CodPostal; 
                                            StringVar Telefone; 
                                            StringVar Fax; 
                                            StringVar Contribuinte; 
                                            StringVar CapitalSocial; 
                                            StringVar Conservatoria; 
                                            StringVar Matricula;
                                            StringVar MoedaCapitalSocial;

                                            Nome:='" + ERP.Contexto.IDNome.Replace("'", "''") + @"';
                                            Morada:='" + ERP.Contexto.IDMorada.Replace("'", "''") + @"';
                                            Localidade:='" + ERP.Contexto.IDLocalidade.Replace("'", "''") + @"';
                                            CodPostal:='" + ERP.Contexto.IDCodPostal.Replace("'", "''") + @"';
                                            Telefone:='" + ERP.Contexto.IDTelefone.Replace("'", "''") + @"';
                                            Fax:='" + ERP.Contexto.IDFax.Replace("'", "''") + @"';
                                            Contribuinte:='" + ERP.Contexto.IFNIF.Replace("'", "''") + @"';
                                            CapitalSocial:= '" + ERP.Contexto.ICCapitalSocial.ToString().Replace(",", ".") + @"';
                                            Conservatoria:='" + ERP.Contexto.ICConservatoria.Replace("'", "''") + @"';
                                            Matricula:='" + ERP.Contexto.ICMatricula.Replace("'", "''") + @"';
                                            MoedaCapitalSocial:='" + ERP.Contexto.MoedaBase.Replace("'", "''") + @"'";

                    String percursoMapa = Plataforma.RegistryPRIMAVERA.DaPercursoMapasEx("GCP", ERP.Contexto.Instancia) + Mapa;
                    if (!File.Exists(percursoMapa))
                    {
                        percursoMapa = Plataforma.RegistryPRIMAVERA.DaPercursoMapasNovosEx(ERP.Contexto.Instancia) + Mapa;
                    }

                    if (File.Exists(percursoMapa))
                    {
                        string inicializaParametros = @"NumberVar TipoDesc;
                        NumberVar DecQde;
                        NumberVar DecPrecUnit;
                        StringVar MotivoIsencao;
                        BooleanVar UltimaPag;
                        StringVar PRI_TextoCertificacao;
                        TipoDesc:= 0;
                        DecQde:=3;
                        DecPrecUnit:=" + Plataforma.FuncoesGlobais.DaCasasDecimais("Moedas", "DecArredonda") + @";
                        UltimaPag:=False;
                        PRI_TextoCertificacao:='" + ERP.Comercial.Vendas.DevolveTextoAssinaturaDoc(tipoDoc, serie, numdoc, filial) + "';";

                        Plataforma.Mapas.SetFormula("InicializaParametros", inicializaParametros);

                        try
                        {
                            //Diretoria com o Nome do Ficheiro
                            string nomeDocumentoExportado = (String.Format("{0}TEMP\{1}_{2}_{3}.PDF", AppDomain.CurrentDomain.BaseDirectory, tipoDoc, serie, numdoc)).ToUpper();

                            Plataforma.Mapas.set_Destino(CRPEExportDestino.edFicheiro);
                            Plataforma.Mapas.SetFileProp(Interop.StdPlatBS900.CRPEExportFormat.efPdf, nomeDocumentoExportado);

                            //Atribui a Fórmula de REgisto
                            string strSelFormula = "(({CabecDoc.NumDoc} = " + numdoc.ToString() + "  AND {CabecDoc.Serie} = \"" + serie + "\") AND {CabecDoc.TipoDoc} = \"" + tipoDoc + "\")";

                            if (Plataforma.Mapas.ImprimeListagem(percursoMapa.Substring(0, percursoMapa.Length - 4), "Documento de Venda", "P", 1, "N", strSelFormula, 0, false, true) != 0)
                            {
                                //Espera que o documento esteja exportado
                                int contador = 0;
                                while (!File.Exists(nomeDocumentoExportado))
                                {
                                    contador++;

                                    if (contador >= 10000)
                                    {
                                        break;
                                    }
                                }

                                //Abre o ficheiro e converte para ByteArray
                                pdf.Dados = File.ReadAllBytes(nomeDocumentoExportado);

                                //Apaga o Ficheiro
                                File.Delete(nomeDocumentoExportado);
                            }
                            //Fim de impressão
                        }
                        catch (Exception ex)
                        {
                            //ignorar...
                            mensagem += ex.Message;
                            return pdf;
                        }
                    }
                    else
                    {
                        mensagem += "Não existe o mapa: " + percursoMapa + Environment.NewLine;
                        return pdf;
                    }
                }
            }
            catch (Exception ex)
            {
                mensagem += ex.Message;
                return pdf;
            }
        }
    }
    catch (Exception ex)
    {
        mensagem += ex.Message;
        return pdf;
    }

    mensagem += "Impressão efetuada com sucesso.";
    return pdf;
}
    
asked by anonymous 12.07.2018 / 23:04

1 answer

1

The error may be in the part where you are initializing the company data. Alternatively, I suggest you compare your code with the following, because this works:

public void ImprimeDocumentoVenda(string filial, string tipoDoc, string serie, int numdoc, int numeroVias, bool usarViasERP = true)
{
    StdBSConfApl objAplConf = new StdBSConfApl();
    StdPlatBS Plataforma = new StdPlatBS();
    ErpBS MotorLE = new ErpBS();

    EnumTipoPlataforma objTipoPlataforma;
    objTipoPlataforma = EnumTipoPlataforma.tpEmpresarial;

    objAplConf.Instancia = "Default";
    objAplConf.AbvtApl = "ERP";
    objAplConf.PwdUtilizador = "PASSWORD";
    objAplConf.Utilizador = "USER";
    objAplConf.LicVersaoMinima = "9.00";

    StdBETransaccao objStdTransac = new StdBETransaccao();
    StdPlatBS plat_;
    StdBSConfApl conf_;
    StringBuilder strFormula_ = new StringBuilder();
    StringBuilder strParametros_ = new StringBuilder();
    StringBuilder strSelFormula_ = new StringBuilder();

    try
    {
        Plataforma.AbrePlataformaEmpresa("NOME_EMPRESA", objStdTransac, objAplConf, objTipoPlataforma, "");
    }
    catch (Exception ex)
    {
        throw (ex);
    }

    if (Plataforma.Inicializada)
    {
        MotorLE.AbreEmpresaTrabalho(objTipoPlataforma, "NOME_EMPRESA", "USER", "", objStdTransac, "Default");
    }

    string sComp = "NOME_EMPRESA";
    plat_ = new StdPlatBS();
    conf_ = new StdBSConfApl();

    conf_.AbvtApl = "GCP";
    conf_.Instancia = "default";
    conf_.Utilizador = "USER";

    conf_.PwdUtilizador = "PASSWORD";
    conf_.LicVersaoMinima = "09.00";

    StdBETransaccao oTrans = null;

    plat_.AbrePlataformaEmpresa(sComp, oTrans, conf_, 0, string.Empty);

    strSelFormula_ = new StringBuilder("{CabecDoc.TipoDoc}='" + tipoDoc + "' and {CabecDoc.Serie} = '" + serie + "' AND {CabecDoc.NumDoc}=" + numdoc);

    plat_.Mapas.Inicializar("GCP");
    strFormula_.Append("StringVar Nome:='" + plat_.Contexto.Empresa.IDNome + "';");
    strFormula_.Append("StringVar Morada:='" + plat_.Contexto.Empresa.IDMorada + "';");
    strFormula_.Append("StringVar Localidade:='" + plat_.Contexto.Empresa.IDLocalidade + "';");
    strFormula_.Append("StringVar CodPostal:='" + plat_.Contexto.Empresa.IDCodPostal + " " + plat_.Contexto.Empresa.IDCodPostalLocal + "';");
    strFormula_.Append("StringVar Telefone:='" + plat_.Contexto.Empresa.IDTelefone + "';");
    strFormula_.Append("StringVar Fax:='" + plat_.Contexto.Empresa.IDFax + "';");
    strFormula_.Append("StringVar Contribuinte:='" + plat_.Contexto.Empresa.IFNIF + "';");
    strFormula_.Append("StringVar CapitalSocial:='" + plat_.Contexto.Empresa.ICCapitalSocial + "';");
    strFormula_.Append("StringVar Conservatoria:='" + plat_.Contexto.Empresa.ICConservatoria + "';");
    strFormula_.Append("StringVar Matricula:='" + plat_.Contexto.Empresa.ICMatricula + "';");
    strFormula_.Append("StringVar MoedaCapitalSocial:='" + plat_.Contexto.Empresa.ICMoedaCapSocial + "';");

    plat_.Mapas.SetFormula("DadosEmpresa", strFormula_.ToString());

    strParametros_.Append("NumberVar TipoDesc;");
    strParametros_.Append("NumberVar DecQde;");
    strParametros_.Append("NumberVar DecPrecUnit;");
    strParametros_.Append("StringVar MotivoIsencao;");
    strParametros_.Append("BooleanVar UltimaPag;");
    strParametros_.Append("StringVar PRI_TextoCertificacao;");
    strParametros_.Append("TipoDesc:= 0;");
    strParametros_.Append("DecQde:=3;");
    strParametros_.Append("DecPrecUnit:=" + plat_.FuncoesGlobais.DaCasasDecimais("Moedas", "DecArredonda") + ";");
    strParametros_.Append("UltimaPag:=False;");

    string filep = @"C:\temp\teste.pdf";

    plat_.Mapas.SetFormula("InicializaParametros", strParametros_.ToString());

    plat_.Mapas.set_Destino(0);
    plat_.Mapas.SetFileProp(Interop.StdPlatBS900.CRPEExportFormat.efPdf, ref filep);

    plat_.Mapas.ImprimeListagem("GCPVLS01", "Factura", "P", 1, "N", strSelFormula_.ToString(), 0, false, true);    

}
    
16.07.2018 / 14:19