none
Documentos PDF, XML RRS feed

  • Pregunta

  • Hola

    Tengo una aplicación de escritorio que ya esta operando en mas de 10 equipos sin ningún problema, pero he decidido mejorarla para ahorrar tiempos a la hora de trabajar con los documentos PDF o XML. Actualmente, ambos documentos los guardo directamente en la base de datos(SQL Server)

    Supongamos el siguiente escenario: Usuario 1, guarda un documento PDF y un documento XML junto con algunos otros campos, como el nombre del proveedor, numero de factura, descripción, cantidad, fecha etc(Todos estos campos y los documentos los captura en un mismo formulario)

    Usuario 2: Para guardar los documentos en una carpeta de su computadora, primero tiene que descargar el PDF y el XML que guardo el usuario 1 en la aplicación(Los puede abrir y visualizar desde otro formulario)

    Que me gustaría hacer para agilizar ese proceso?

    1.- Que el usuario 1 guarde desde que inicia su proceso de captura los documentos en una carpeta y ya no directamente en la base de datos, para que el usuario 2 no tenga que estar descargando uno por uno los documentos y perder demasiado tiempo. Aquí aclaro que no importa si tengo que poner 2 botones en el formulario para hacer 2 diferentes procesos;1 botón con el cual guarde los datos del PDF, como proveedor, factura, monto etc, y el segundo botón para guardar el documento alguna carpeta.

    2.-O bien lo otro podría ser, que desde el formulario donde el usuario 2 consulta los PDF y XML, pueda hacer una descarga masiva desde ese formulario?

    Este es el codigo con el cual el usuario 1, guarda la información que les comente.

      private void Btn3_Click(object sender, EventArgs e)
            {
                try
                {
                    if (TxtBox7.Text.Trim().Equals("") || textBox4.Text.Trim().Equals("") || TxtBox9.Text.Trim().Equals("") ||
                   ComboBox3.Text.Trim().Equals("") || ComboBox1.Text.Trim().Equals("") || textBox6.Text.Trim().Equals("") ||
                   textBox4.Text.Trim().Equals("") || TxtBox10.Text.Trim().Equals("") || TxtBox11.Text.Trim().Equals("") ||
                   TxtBox12.Text.Trim().Equals("") || TxtBox13.Text.Trim().Equals("") || TxtBox14.Text.Trim().Equals("") ||
                   TxtBox15.Text.Trim().Equals("") || TxtBox16.Text.Trim().Equals("") || TxtBox17.Text.Trim().Equals("") ||
                   TxtBox18.Text.Trim().Equals("") || TxtBox8.Text.Trim().Equals(""))
    
                    {
                        MessageBox.Show("No es posible procesar OP existiendo registros vacios.Valide los datos por favor");
                        return;
                    }
    
                    byte[] file = null;
                    byte[] file1 = null;
                    Stream myStream = OpenFileDialog1.OpenFile();
                    Stream myStream1 = OpenFileDialog2.OpenFile();
                    using (MemoryStream ms = new MemoryStream())
                    {
                        myStream.CopyTo(ms);
                        file = ms.ToArray();
                    }
                    using (MemoryStream ms1 = new MemoryStream())
                    {
                        myStream1.CopyTo(ms1);
                        file1 = ms1.ToArray();
                    }
                    using (Model.PagosEntities db = new Model.PagosEntities())
                    {
    
                        Model.Ordenes oDocumento = new Model.Ordenes
                        {
                            FechaCaptura = Convert.ToDateTime(DateTimePicker1.Value),
                            PDF = TxtBox7.Text.Trim(),
                            DocumentoPDF = file,
                            NombreRealPDF = OpenFileDialog1.SafeFileName,
                            DocumentoXML = file1,
                            NombreRealXML = OpenFileDialog2.SafeFileName,
                            FormaPago = TxtBox1.Text.Trim(),
                            Proveedor = ComboBox1.Text.Trim(),
                            Banco = TxtBox4.Text.Trim(),
                            ClabeInterbancaria = TxtBox5.Text.Trim(),
                            Concepto = ComboBox3.Text.Trim(),
                            RAD = TextBox3.Text.Trim(),
                            Nombre = textBox1.Text.Trim(),
                            Departamento = textBox2.Text.Trim(),
                            Factura = TxtBox8.Text.Trim(),
                            Descripcion = TxtBox9.Text.Trim(),
                            Cantidad = Convert.ToDecimal(TxtBox10.Text.Trim()),
                            PrecioUnitario = Convert.ToDecimal(TxtBox11.Text.Trim()),
                            Importe = Convert.ToDecimal(TxtBox12.Text.Trim()),
                            Descuento = Convert.ToDecimal(TxtBox13.Text.Trim()),
                            Subtotal = Convert.ToDecimal(TxtBox14.Text.Trim()),
                            IVA = Convert.ToDecimal(TxtBox15.Text.Trim()),
                            RetencionISR = Convert.ToDecimal(TxtBox16.Text.Trim()),
                            RetencionIVA = Convert.ToDecimal(TxtBox17.Text.Trim()),
                            Total = Convert.ToDecimal(TxtBox18.Text.Trim()),
                            EstatusAdmin = textBox6.Text.Trim(),
                            FirmaAdmin = textBox8.Text,
                            ComentariosAdmin = textBox12.Text.Trim(),
                            EstatusDireccion = textBox9.Text.Trim(),
                            FirmaDireccion = textBox10.Text.Trim(),
                            ComentariosDireccion = textBox13.Text.Trim(),
                            EstatusFinanzas = textBox7.Text.Trim(),
                            FirmaFinanzas = textBox11.Text.Trim(),
                            ComentariosFinanzas = textBox14.Text.Trim()
                        };
                        db.Ordenes.Add(oDocumento);
                        db.SaveChanges();
                        MessageBox.Show("Capturada correctamente.El ID de la orden es el " + oDocumento.IdOrden);
                    }
    
                    Refresh();
                    TxtBox6.Clear();
                    textBox4.Clear();
                    TxtBox8.Clear();
                    TxtBox9.Clear();
                    TxtBox7.Clear();
                    ComboBox1.SelectedIndex = -1;
                    TxtBox4.Clear();
                    TxtBox5.Clear();
                    TextBox3.Clear();
                    ComboBox3.SelectedIndex = -1;
                }
                catch (Exception ex)
                {
                    throw new Exception("Error" + ex.Message);
                }
    
            }

    Con este código, el usuario 2 abre el PDF o el XML

      private void Button1_Click(object sender, EventArgs e)
            {
                try {
                    if (DgvLista2.Rows.Count > 0)
                    {
                        int IdDocumento = int.Parse(DgvLista2.Rows[DgvLista2.CurrentRow.Index].Cells[0].Value.ToString());
    
                        using (Model.PagosEntities db = new Model.PagosProvEntities())
                        {
                            var oDocument = db.Ordenes.Find(IdDocumento);
                            string path = AppDomain.CurrentDomain.BaseDirectory;
                            string folder = path + "temp";
                            string fullFilePath = folder + oDocument.NombreRealPDF;
    
                            File.WriteAllBytes(fullFilePath, oDocument.DocumentoPDF);
                            Process.Start(fullFilePath);
                        }
                    }
    
                }
                
               
                catch (Exception ex)
                {
                    throw new Exception("Error" + ex.Message);
                }
            }

    Anexo imágenes La imagen 1, corresponde al formulario del código con el cual se guardan los documentos con el botón de nombre PROCESAR; La imagen 2 corresponde al formulario desde el cual el usuario 2 abre los documentos PDF o XML

    De antemano mil gracias por tomarse el tiempo en leer, espero me puedan orientar.

    Saludos desde Monterrey NL.

    jueves, 8 de octubre de 2020 18:19

Todas las respuestas

  • Hola MarZav

      

    Gracias por levantar tu consulta en los foros de MSDN. Entendimos su pregunta y vamos a darle seguimiento para buscar la mejor repuesta pertinente al caso.  

    Gracias por usar los foros de MSDN.   

     

     Andres Aguilar

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

     

    jueves, 8 de octubre de 2020 22:08
    Moderador
  • Hola Mario

    Con esto

    File.WriteAllBytes(fullFilePath, oDocument.DocumentoPDF);

    No guardas el PDF en la ruta de archivo que queres?

    Si fullFilePath es el path correcto (la carpeta donde iría el PDF, relativo o absoluto) y oDocument.DocumentoPDF es un array de byte[] con los bytes del PDF, esta linea debería copiar el archivo.

    También podes usar un SaveFileDialog para elegir con más comodidad el path y el nombre del archivo.

    Saludos

    Pablo

    jueves, 8 de octubre de 2020 22:43