Forum
See question

AbreEmpresaTrabalho e ImprimeDocumento em várias empresas em simultâneo   

124 views
0
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();
BSO.AbreEmpresaTrabalho(objTipoPlataforma, pCodEmp, pUser, pPass, null, “Default”);

 

Tentei também fazer a impressão através de dois métodos distintos e ambos tiveram o mesmo comportamento:

BSO.Vendas.Documentos.ImprimeDocumento(
pObjDocVenda.Tipodoc,
pObjDocVenda.Serie,
pObjDocVenda.NumDoc,
pObjDocVenda.Filial,
numeroVias,
mapaImpressao,
false,
pdfFilename
);

BSO.Base.FuncoesGlobais.ImprimeDocumento(
“V”,
pObjDocVenda.Tipodoc,
pObjDocVenda.Serie,
pObjDocVenda.NumDoc,
pObjDocVenda.Filial,
numeroVias,
mapaImpressao,
false,
pdfFilename
);

 

Alguém já se deparou com isto ou estarei a fazer alguma coisa errada?

Obrigado

Faça login para poder traduzir
V10
Mapas e Relatórios
Marked as spam
Created 1 year and 2 months ago hldersilva
hldersilva Iniciante
2 answers
0
Private answer

Viva Hélder existem várias situações que podes implementar para resolver.
Como desconheço o teu código o melhor seria fazeres por exemplo o seguinte:

Lançar os documentos e guardar os ids após gravação com sucesso e imprimir depois.
Podes por exemplo usar a seguinte abordagem:

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

            //...
    }

 

 

Faça login para poder traduzir
Marked as spam
Created 1 year and 2 months ago brunosilvamarques
    0
    Private answer

    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"...

    Faça login para poder traduzir
    Marked as spam
    Created 1 year and 2 months ago hldersilva
    hldersilva Iniciante
      Comments
      BSO.Vendas.Documentos.DevolveTextoAssinaturaDoc()
      1 year and 2 months ago
      hldersilva