WCF Bytaarray Return Method gives error

Asked

Viewed 207 times

0

I was trying to use a par method to adevolver a bytearray using ERP but get an exception spent some time saying Object Variable or With Block Not Set, which may be ?

PS. Yes I know that the engine has a native function but I wanted to use this to then do the settlement document and do not know what can 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;
}
  • This error seems to me to be relative to how you are referencing objects and accessing them within blocks Try/Catch. Have you tried running in Debug to see where the exception is being cast?

  • @Fláviojardim of course yes, the error occurs in the line of printing and listing and in addition it is done like dozens of other methods that work well as Transformadocumentex2... etc... It must be something that I do not understand in the method of Imprimelistagem...

  • 1

    @Brunomarques, is PDF actually generated? Why not simplify the method ImprimeListagem? Plataforma.Mapas.Inicializar "GCP" &#xA; Plataforma.Mapas.Destino = edFicheiro &#xA; Plataforma.Mapas.SetFileProp efPdf, "C:\NomeDoFicheiro.pdf"&#xA; Plataforma.Mapas.ImprimeListagem sReport:="ACTCOB01", sTitulo:="Report ACTCOB01...", sDestino:="W", iNumCopias:=1, bMapaSistema:=True

  • 1

    There was an error in the method Printing in a build previous, which I think is corrected in the last build of the Platform. What build of PLT has installed?

  • @Joãomartins have the following versions of the modules: - PLT and BAS: 09.1509.1046 - GCP: 09.1509.1111

  • It didn’t simplify because besides having to work like this, I need to generate settlement Pdfs and other maps.... Anyone have any idea? Will be engine bug?

  • If it is version 9 then the bug question does not arise, since it was in V10.

  • @Joãomartins It is in version 9 yes I have the problem....

  • @Brunomarques what is the right goal? You want to use PDF after printing?

Show 4 more comments

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 way it 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);    

}
  • After verifying that your code works (if it is opened as 'GCP' and not 'ERP' when opening the company), I have appeared more changes that do not appear in the printing this way versus the ERP, ie the company data do not appear in the document (can be internally the formula pricontexto that is not being called correctly since we did not pass it)... And the format of the document printing is "FA A/1" for example in ERP and in this method is "No 1/A" example. Yet I have said that the formula Paths also does not appear, even passing it. :(

Browser other questions tagged

You are not signed in. Login or sign up in order to post.