♥ 0 | Boa tarde,
Tenho um formulário com uma datagridview com dados para lançar documentos de venda em várias empresas em simultâneo, na datagridview existe uma coluna com o código da empresa.
Vou percorrendo a datadridview e trocando de empresa com o método “AbreEmpresaTrabalho”, os documentos são criados no módulo de vendas corretamente em todas as empresas, no entanto, ao imprimir (logo após gravar cada documento) através do método “ImprimeDocumento” o pdf fica sempre com os dados da empresa de onde está a correr o formulário. A única coisa que fica correta é a numeração do documento ex: FA 2023/123.
Atualmente estou a fazer isto na v10 em c#. Tinha algo parecido em vba na v9 que funcionava a partir de um Excel e funcionava corretamente.
Já tentei forçar fechar a empresa antes de abrir a nova, mas não resolveu: BSO.FechaEmpresaTrabalho();
Tentei também fazer a impressão através de dois métodos distintos e ambos tiveram o mesmo comportamento: BSO.Vendas.Documentos.ImprimeDocumento( BSO.Base.FuncoesGlobais.ImprimeDocumento(
Alguém já se deparou com isto ou estarei a fazer alguma coisa errada? Obrigado Marcado como spam |
Resposta privada Viva @brunosilvamarques, Obrigado pelo comentário, não consegui dessa forma (que é similar à que tenho), mas entretanto consegui de outra forma com algum código que por aqui encontrei. No entanto tive de acrescenter a linha "SetDataBaseConnection": //Alterar esta selection formula. var strSelFormula = $"{{CabecDoc.TipoDoc}}='{pObjDocVenda.Tipodoc}' and {{CabecDoc.Serie}} = '{pObjDocVenda.Serie}' AND {{CabecDoc.NumDoc}}={Convert.ToString(pObjDocVenda.NumDoc)}"; PSO.Mapas.Inicializar("VND"); var strFormula = new StringBuilder(); strFormula.Append($"StringVar Nome:='{BSO.Contexto.IDNome}';"); strFormula.Append($"StringVar Morada:='{BSO.Contexto.IDMorada}';"); strFormula.Append($"StringVar Localidade:='{BSO.Contexto.IDLocalidade}';"); strFormula.Append($"StringVar CodPostal:='{BSO.Contexto.IDCodPostal} {BSO.Contexto.IDCodPostalLocal}';"); strFormula.Append($"StringVar Telefone:='{BSO.Contexto.IDTelefone}';"); strFormula.Append($"StringVar Fax:='{BSO.Contexto.IDFax}';"); strFormula.Append($"StringVar Contribuinte:='{BSO.Contexto.IFNIF}';"); strFormula.Append($"StringVar CapitalSocial:='{BSO.Contexto.ICCapitalSocial}';"); strFormula.Append($"StringVar Conservatoria:='{BSO.Contexto.ICConservatoria}';"); strFormula.Append($"StringVar Matricula:='{BSO.Contexto.ICMatricula}';"); strFormula.Append($"StringVar MoedaCapitalSocial:='{BSO.Contexto.ICMoedaCapSocial}';"); PSO.Mapas.SetFormula("DadosEmpresa", strFormula.ToString()); //A existir parametros devem ir aqui var strParametros = new StringBuilder(); 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:=0;"); strParametros.Append("UltimaPag:=False;"); strParametros.Append($"NumVia:='{i}';"); //strParametros.Append($"PRI_TextoCertificacao:='{PriEngine.Engine.Comercial.Vendas.DevolveTextoAssinaturaDoc(tipoDoc, serie, numDocm, "000")}';"); PSO.Mapas.SetFormula("InicializaParametros", strParametros.ToString()); PSO.Mapas.Destino = 0; PSO.Mapas.SetFileProp(StdBSTipos.CRPEExportFormat.efPdf, pdfFilename); PSO.Mapas.SetDataBaseConnection("server", "bd", "user", "senha"); PSO.Mapas.ImprimeListagem(mapaImpressao, "Invoice", "P", 1, "N", strSelFormula, 0, false, true);
Agora só me falta descobrir onde está o "DevolveTextoAssinaturaDoc"... Marcado como spam Comentários BSO.Vendas.Documentos.DevolveTextoAssinaturaDoc() | |
Resposta privada Viva Hélder existem várias situações que podes implementar para resolver. Lançar os documentos e guardar os ids após gravação com sucesso e imprimir depois. public class DocumentoIntegrado { public string idDoc{ get; set; } public bool Sucesso { get; set; } } public IntegraDocumentos() { Hashtable documentosIngrados = new Hashtable(); while (true) //Para cada rigisto { var id = "id_docummento"; //após integração //codigoEpresa => Exemplo "DEMO" if (!(documentosIngrados["codigoEpresa"] as List<DocumentoIntegrado>).Exists(d => d.idDoc.Equals(id))) (documentosIngrados["codigoEpresa"] as List<DocumentoIntegrado>).Add(new DocumentoIntegrado() { idDoc = id, Sucesso = true }); } //Para cada Empresa foreach (var empresa in documentosIngrados.Keys) { //AbreEmpresa(empresa) foreach (var documento in (documentosIngrados[empresa] as List<DocumentoIntegrado>)) { //ImprimeDocumento(documento.idDoc)... //... } //FechaEmpresa(empresa) } //... }
Marcado como spam |