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;
}