Example #1
1
        private void button3_Click(object sender, EventArgs e)
        {
            int Factura = TipoDeFactura(TipoFactura.SelectedIndex);

            WSAFIPFE.Factura fe = new WSAFIPFE.Factura();
            Boolean bResultado = false;
            bResultado = fe.iniciar(0, "20217264732", @"c:\Xela1970.pfx", @" ");
            // la ubicacion del certificado digital Xela1970.pfx lo tengo guardado en AFIP
            // 0 es en modo testeo u homologacion, tendria que reemplazarlo por 1 en modo real
            // la ultima comilla es la que contiene la licencia del wasfipfe3100
            if (bResultado)
            {
                fe.ArchivoCertificadoPassword = "Xela1970";
                // password del certificado electronico de la pagina
                bResultado = fe.f1ObtenerTicketAcceso();
                if (bResultado)
                {

                    fe.F1CabeceraCantReg = 1;
                    // esta linea es para que yo pida a la AFIP un CAE por factura (se pueden pedir por cantidad pero se recomienda por facilidad pedir de a una no es mejor ni peor solo mas facil
                    fe.F1CabeceraPtoVta = PuntoVenta.SelectedIndex + 1;
                    // Punto de venta de los comprobantes eso se ve en las facturas en la cabecera como 000X-092394389 numero de factura. Lo de adelante es el punto de venta
                    fe.F1CabeceraCbteTipo = Factura;
                    // tipo de comprobante 1-factura A 2- Nota de Debito A 3- Nota de Credito A (6-7-8 con B) y (11, 12,13 con C)

                    //fe.f1Indice = fe.F1CompUltimoAutorizado(fe.F1CabeceraPtoVta, fe.F1CabeceraCbteTipo);
                    fe.f1Indice = 0;
                    // hace que comienze de la factura numero 1 (asi que este valor debe ser variable segun el ultimo valor tomado menos uno)
                    fe.F1DetalleConcepto = 3;
                    // 1- productos <> 2-servicio <> 3-producto y servicio
                    fe.F1DetalleDocTipo = TipoDocumento;
                    // facturacion A = 80 ingresar abajo el CUIT en fe.F1DetalleDocNro
                    // Facturacion B = 80 ingresar abajo el cuit en fe.F1DetalleDocNro
                    // Facturacion B = 80 ingresar abajo el cuit 23000000000 (que es no categorizado)
                    // Facturacion B = 99 ingresar 0 en el cuit
                    // Facturacion B = 80 si es mayor la compra que de 1000 pesos
                    // Facturacion C = 99 ingresar 0 en el cuit
                    fe.F1DetalleDocNro = Documento;
                    // se inserta el cuit segun se requiera arriba
                    fe.F1DetalleCbteDesde = fe.F1CompUltimoAutorizado(PuntoVenta.SelectedIndex + 1, Factura) + 1;
                    fe.F1DetalleCbteHasta = fe.F1CompUltimoAutorizado(PuntoVenta.SelectedIndex + 1, Factura) + 1;
                    // pues quiero un solo comprobante
                    DateTime dt = DateTime.Now;
                    string hoy = dt.ToString("yyyyMMdd");
                    fe.F1DetalleCbteFch = hoy;
                    // fecha de emision del comprobante aaaammdd
                    fe.F1DetalleImpTotal = Convert.ToDouble(I13.Text);
                    fe.F1DetalleImpTotalConc = 0;
                    fe.F1DetalleImpNeto = Convert.ToDouble(I13.Text);
                    fe.F1DetalleImpOpEx = 0;
                    fe.F1DetalleImpTrib = 0;
                    fe.F1DetalleImpIva = 0;
                    // aca van todos los valores de la factura general
                    fe.F1DetalleFchServDesde = hoy;
                    fe.F1DetalleFchServHasta = hoy;
                    fe.F1DetalleFchVtoPago = hoy;
                    fe.F1DetalleMonId = "PES";
                    fe.F1DetalleMonCotiz = 1;

                    //fe.F1DetalleTributoItemCantidad = 1;
                    //fe.f1IndiceItem = 0;
                    //fe.F1DetalleTributoId = 3;
                    //fe.F1DetalleTributoDesc = "Impuesto Municipal Matanza";
                    //fe.F1DetalleTributoBaseImp = 150;
                    //fe.F1DetalleTributoAlic = 5.2;
                    //fe.F1DetalleTributoImporte = 7.8;

                    //fe.F1DetalleIvaItemCantidad = 2;
                    //fe.f1IndiceItem = 0;
                    //fe.F1DetalleIvaId = 5;
                    //fe.F1DetalleIvaBaseImp = 100;
                    //fe.F1DetalleIvaImporte = 21;

                    //fe.f1IndiceItem = 1;
                    //fe.F1DetalleIvaId = 4;
                    //fe.F1DetalleIvaBaseImp = 50;
                    //fe.F1DetalleIvaImporte = 5.25;

                    fe.F1DetalleCbtesAsocItemCantidad = 0;
                    fe.F1DetalleOpcionalItemCantidad = 0;

                    bResultado = fe.F1CAESolicitar();
                    //if (bResultado)
                    //{
                    //    MessageBox.Show("resultado verdadero ");
                    //}
                    //else
                    //{
                    //    MessageBox.Show("resultado falso ");
                    //}
                    //MessageBox.Show("resultado global AFIP: " + fe.F1RespuestaResultado);
                    //MessageBox.Show("es reproceso? " + fe.F1RespuestaReProceso);
                    //MessageBox.Show("registros procesados por AFIP: " + fe.F1RespuestaCantidadReg.ToString());
                    //MessageBox.Show("error genérico global:" + fe.f1ErrorMsg1);
                    if (fe.F1RespuestaCantidadReg > 0)
                    {
                        fe.f1Indice = 0;
                        //MessageBox.Show("resultado detallado comprobante: " + fe.F1RespuestaDetalleResultado);
                        string CAE = fe.F1RespuestaDetalleCae;
                        string Vencimiento_CAE = fe.F1RespuestaDetalleCAEFchVto;
                        string Delantera = "20217264739" + Factura.ToString() + "000" + fe.F1CabeceraPtoVta.ToString() + fe.F1RespuestaDetalleCae.ToString() + fe.F1RespuestaDetalleCAEFchVto.ToString();
                        string Codigo_De_Barras = Delantera + DigitoVerificador(Delantera);
                        //MessageBox.Show("número comprobante:" + fe.F1RespuestaDetalleCbteDesdeS);
                        //MessageBox.Show("error detallado comprobante: " + fe.F1RespuestaDetalleObservacionMsg1);
                    }
                }
                else
                {
                    MessageBox.Show("fallo acceso " + fe.UltimoMensajeError);
                }
            }
            else
            {
                MessageBox.Show("error inicio " + fe.UltimoMensajeError);
            }

            Form2 Form = new Form2();

            switch(TipoFactura.SelectedIndex)
            {
                case 0:
                    Form.Letra.Text = "C";
                    Form.Tipo_de_Factura.Text = "";
                    break;
                case 1:
                    Form.Letra.Text = "C";
                    Form.Tipo_de_Factura.Text = "Nota de Débito";
                    break;
                case 2:
                    Form.Letra.Text = "C";
                    Form.Tipo_de_Factura.Text = "Nota de Crédito";
                    break;
                case 3:
                    Form.Letra.Text = "B";
                    Form.Tipo_de_Factura.Text = "";
                    break;
                case 4:
                    Form.Letra.Text = "B";
                    Form.Tipo_de_Factura.Text = "Nota de Débito";
                    break;
                case 5:
                    Form.Letra.Text = "B";
                    Form.Tipo_de_Factura.Text = "Nota de Crédito";
                    break;
                case 6:
                    Form.Letra.Text = "A";
                    Form.Tipo_de_Factura.Text = "";
                    break;
                case 7:
                    Form.Letra.Text = "A";
                    Form.Tipo_de_Factura.Text = "Nota de Débito";
                    break;
                case 8:
                    Form.Letra.Text = "A";
                    Form.Tipo_de_Factura.Text = "Nota de Crédito";
                    break;
            }

            Form.textBox5.Text = C1.Text;
            Form.textBox12.Text = C2.Text;
            Form.textBox16.Text = C3.Text;
            Form.textBox20.Text = C4.Text;
            Form.textBox24.Text = C5.Text;
            Form.textBox44.Text = C6.Text;
            Form.textBox40.Text = C7.Text;
            Form.textBox36.Text = C8.Text;
            Form.textBox32.Text = C9.Text;
            Form.textBox28.Text = C10.Text;

            Form.textBox6.Text = textBox12.Text;
            Form.textBox11.Text = textBox13.Text;
            Form.textBox15.Text = textBox14.Text;
            Form.textBox19.Text = textBox15.Text;
            Form.textBox23.Text = textBox16.Text;
            Form.textBox43.Text = textBox17.Text;
            Form.textBox39.Text = textBox18.Text;
            Form.textBox35.Text = textBox19.Text;
            Form.textBox31.Text = textBox20.Text;
            Form.textBox27.Text = textBox21.Text;

            Form.textBox7.Text = PU1.Text;
            Form.textBox10.Text = PU2.Text;
            Form.textBox14.Text = PU3.Text;
            Form.textBox18.Text = PU4.Text;
            Form.textBox22.Text = PU5.Text;
            Form.textBox42.Text = PU6.Text;
            Form.textBox38.Text = PU7.Text;
            Form.textBox34.Text = PU8.Text;
            Form.textBox30.Text = PU9.Text;
            Form.textBox26.Text = PU10.Text;

            Form.textBox8.Text = I1.Text;
            Form.textBox9.Text = I2.Text;
            Form.textBox13.Text = I3.Text;
            Form.textBox17.Text = I4.Text;
            Form.textBox21.Text = I5.Text;
            Form.textBox41.Text = I6.Text;
            Form.textBox37.Text = I7.Text;
            Form.textBox33.Text = I8.Text;
            Form.textBox29.Text = I9.Text;
            Form.textBox25.Text = I10.Text;

            Form.textBox45.Text = I11.Text;
            Form.textBox49.Text = I12.Text;
            Form.textBox47.Text = I13.Text;

            Form.Factura.Text = "Nº: " + fe.F1CabeceraPtoVta.ToString("D4") + "-" + fe.F1CompUltimoAutorizado(PuntoVenta.SelectedIndex + 1, Factura).ToString("D8");

            Form.Envio = Correo.Text;

            DateTime ahora = DateTime.Now;
            Form.Fecha.Text = ahora.ToString("dd/MM/yyyy");
            Form.Nombre.Text = RazonSocial.Text;
            Form.Domicilio.Text = DomicilioComprador.Text;
            Form.Loclidad.Text = LocalidadComprador.Text;
            Form.Provincia.Text = ProvinciaComprador.Text;
            Form.CAE.Text = fe.F1RespuestaDetalleCae;
            string FechaCAE = fe.F1RespuestaDetalleCAEFchVto;
            string Año = FechaCAE.Substring(0, 4);
            string Mes = FechaCAE.Substring(4, 2);
            string Dia = FechaCAE.Substring(6, 2);
            Form.VtoCAE.Text = Dia + "/" + Mes + "/" + Año;
            string Delante = "20217264739" + Factura.ToString() + fe.F1CabeceraPtoVta.ToString("D4") + fe.F1RespuestaDetalleCae.ToString() + fe.F1RespuestaDetalleCAEFchVto.ToString();
            string Codigo_Barras = Delante + DigitoVerificador(Delante);
            Form.Codigo.Text = Codigo_Barras;
            Form.Show();
        }
        private void bckIniciarComponetes_DoWork(object sender, DoWorkEventArgs e)
        {
            if (BL.Utilitarios.HayInternet())
            {
                DataRow[] foundCliente = tblClientes.Select("IdClienteCLI = '" + idCliente + "'");
                string condicionIva = foundCliente[0]["CondicionIvaCLI"].ToString();
                int cabeceraCbteTipo = 0;
                int detalleDocTipo;
                string detalleDocNro;
                if (condicionIva == "RESPONSABLE INSCRIPTO")
                {
                    detalleDocTipo = 80;
                    detalleDocNro = foundCliente[0]["CUIT"].ToString();
                    switch (strTipo)
                    {
                        case "factura":
                            cabeceraCbteTipo = 1;
                            this.strTipo = "FACTURA";
                            break;
                        case "debito":
                            cabeceraCbteTipo = 2;
                            this.strTipo = "NOTA DE DÉBITO";
                            break;
                        case "credito":
                            cabeceraCbteTipo = 3;
                            this.strTipo = "NOTA DE CRÉDITO";
                            break;
                    }
                }
                else
                {
                    detalleDocTipo = 99;
                    detalleDocNro = "0";
                    switch (strTipo)
                    {
                        case "factura":
                            cabeceraCbteTipo = 6;
                            this.strTipo = "FACTURA";
                            break;
                        case "debito":
                            cabeceraCbteTipo = 7;
                            this.strTipo = "NOTA DE DÉBITO";
                            break;
                        case "credito":
                            this.strTipo = "NOTA DE CRÉDITO";
                            cabeceraCbteTipo = 8;
                            break;
                    }
                }

                // Ver WSFEv1 Fallos conexión en Camuzzo
                fe = new WSAFIPFE.Factura();
                bResultado = false;
                tblRazonSocial = BL.RazonSocialBLL.GetRazonSocial();
                string cuit = tblRazonSocial.Rows[0]["CuitRAZ"].ToString();
                bResultado = fe.iniciar(WSAFIPFE.Factura.modoFiscal.Test, cuit, @"C:\Trend\Factura-electronica\Carolina Navarro\pedido.pfx", @" ");
                if (bResultado)
                {
                    fe.ArchivoCertificadoPassword = "";
                    label1.Text = "Obteniendo ticket de acceso . . .";
                    bResultado = fe.f1ObtenerTicketAcceso();
                    if (bResultado)
                    {
                        fe.F1CabeceraCantReg = 1;
                        fe.F1CabeceraPtoVta = 1;  //poner el punto de venta de la tabla razonSocial

                        /*Según el manual del desarrollador (pagina 15), el error 10007 se da por que no informas alguno de los
                         * tipos validos son 01 02 03 04 05 34 39 60 63 para comprobantes A y 06 07 08 09 10 35 40 64 y 61 para los B.*/
                        fe.F1CabeceraCbteTipo = cabeceraCbteTipo;
                        int nroComp = fe.F1CompUltimoAutorizado(1, cabeceraCbteTipo) + 1;
                        fe.f1Indice = 0;
                        fe.F1DetalleConcepto = 1;  //Concepto del comprobante.  01-Productos, 02-Servicios, 03-Productos y Servicios
                        fe.F1DetalleDocTipo = detalleDocTipo;    // 96: DNI, 80: CUIT, 99: Consumidor Final
                        fe.F1DetalleDocNro = detalleDocNro;
                        //   fe.F1DetalleDocNro = "30570135585";
                        fe.F1DetalleCbteDesde = nroComp;
                        fe.F1DetalleCbteHasta = nroComp; // Número de comprobante hasta. En caso de ser un solo comprobante, este dato coincide con el anterior.

                        /* F1DetalleCbteFch: Fecha del comprobante, cuyo formato es "aaaammdd". Para un concepto de factura igual a 1,
                            la fecha de emisión puede ser hasta 5 días posteriores a la de generación.
                            Si el concepto es 2 o 3, puede ser hasta 10 días anteriores o posteriores a la fecha de generación.
                            Al ser un dato opcional, si no se asigna fecha, por defecto se asignará la fecha del proceso.*/
                        string fecha = DateTime.Now.ToString("yyyyMMdd");
                        fe.F1DetalleCbteFch = fecha;

                        /*  fe.F1DetalleTributoItemCantidad = 1;  //preguntar Ariel Cantidad de Tributos relacionados al comprobante
                          fe.f1IndiceItem = 0;
                          fe.F1DetalleTributoId = 3;
                          fe.F1DetalleTributoDesc = "Impuesto Municipal Matanza";
                          fe.F1DetalleTributoBaseImp = 0;
                          fe.F1DetalleTributoAlic = 5.2;
                          fe.F1DetalleTributoImporte = 0;*/
                        var groupedData = from b in tblIVA.AsEnumerable()
                                          group b by b.Field<int>("IdAlicuota") into g
                                          select new
                                          {
                                              DetalleIvaId = g.Key,
                                              Count = g.Count(),
                                              DetalleIvaBaseImp = g.Sum(x => x.Field<decimal>("SubtotalSinIva")),
                                              DetalleIvaImporte = g.Sum(x => x.Field<decimal>("SubtotalIva"))
                                          };
                        int DetalleIvaItemCantidad = groupedData.Count();
                        fe.F1DetalleIvaItemCantidad = DetalleIvaItemCantidad;
                        int indiceItem = 0;
                        foreach (var registro in groupedData)
                        {
                            fe.f1IndiceItem = indiceItem;
                            //En F1DetalleIvaId va el código de la alícuota o tasa (obtenido de una lista de AFIP: 5 para 21% 4 para 10.50%, etc).
                            fe.F1DetalleIvaId = registro.DetalleIvaId;
                            fe.F1DetalleIvaBaseImp = Convert.ToDouble(registro.DetalleIvaBaseImp);  //El precio del producto
                            fe.F1DetalleIvaImporte = Convert.ToDouble(registro.DetalleIvaImporte);  //El importe del impuesto.
                            indiceItem++;
                        }

                        /*     fe.f1IndiceItem = 0;
                             fe.F1DetalleIvaId = 5;  //El código de la alícuota o tasa (obtenido de una lista de AFIP: 5 para 21% 4 para 10.50%, etc).
                             fe.F1DetalleIvaBaseImp = 100;  //El precio del producto
                             fe.F1DetalleIvaImporte = 21;  //El importe del impuesto.

                             fe.f1IndiceItem = 1;
                             fe.F1DetalleIvaId = 4;
                             fe.F1DetalleIvaBaseImp = 50;
                             fe.F1DetalleIvaImporte = 5.25;*/

                        var detalleImpNeto = tblIVA.AsEnumerable().Sum(x => x.Field<decimal>("SubtotalSinIva"));
                        var detalleImpIva = tblIVA.AsEnumerable().Sum(x => x.Field<decimal>("SubtotalIva"));
                        double detalleImpTotal = Convert.ToDouble(detalleImpNeto + detalleImpIva);

                        fe.F1DetalleImpTotal = detalleImpTotal; // total factura
                        fe.F1DetalleImpTotalConc = 0; // preguntar Ariel  Importe Neto No Grabado, debe ser mayor a cero y menor o igual al importe total (F1DetalleImpTotal).
                        fe.F1DetalleImpNeto = Convert.ToDouble(detalleImpNeto); // total bases imponibles
                        fe.F1DetalleImpOpEx = 0; // preguntar Ariel
                        fe.F1DetalleImpTrib = 0; // preguntar Ariel
                        fe.F1DetalleImpIva = Convert.ToDouble(detalleImpIva);  // total ivas
                        fe.F1DetalleFchServDesde = ""; // se debe poner fecha para servicios o para productos y servicios. Para productos solos puede ser vacío
                        fe.F1DetalleFchServHasta = ""; // Idem anterior completar si F1DetalleConcepto > 1
                        fe.F1DetalleFchVtoPago = ""; // Idem anterior completar si F1DetalleConcepto > 1
                        fe.F1DetalleMonId = "PES";
                        fe.F1DetalleMonCotiz = 1;

                        fe.F1DetalleCbtesAsocItemCantidad = 0;
                        fe.F1DetalleOpcionalItemCantidad = 0;

                        fe.ArchivoXMLRecibido = @"c:\recibido.xml";
                        fe.ArchivoXMLEnviado = @"c:\enviado.xml";
                        label1.Text = "Solicitando CAE . . .";
                        bResultado = fe.F1CAESolicitar();
                        if (bResultado)
                        {
                            if (this.InvokeRequired) //si da true es porque estoy en un subproceso distinto al hilo principal
                            {
                                this.Invoke((Action)delegate
                                {
                                    MessageBox.Show(this, "resultado verdadero ", "Trend Sistemas", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                });
                            }
                        }
                        else
                        {
                            if (this.InvokeRequired) //si da true es porque estoy en un subproceso distinto al hilo principal
                            {
                                this.Invoke((Action)delegate
                                {
                                    MessageBox.Show(this, "resultado falso ", "Trend Sistemas", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                });
                            }
                        }
                        if (this.InvokeRequired) //si da true es porque estoy en un subproceso distinto al hilo principal
                        {
                            this.Invoke((Action)delegate
                            {
                                MessageBox.Show("resultado global AFIP: " + fe.F1RespuestaResultado);
                                MessageBox.Show("es reproceso? " + fe.F1RespuestaReProceso);
                                MessageBox.Show("registros procesados por AFIP: " + fe.F1RespuestaCantidadReg.ToString());
                                MessageBox.Show("error genérico global:" + fe.f1ErrorMsg1);
                            });
                        }
                        if (fe.F1RespuestaCantidadReg > 0)
                        {
                            fe.f1Indice = 0;
                            if (this.InvokeRequired) //si da true es porque estoy en un subproceso distinto al hilo principal
                            {
                                this.Invoke((Action)delegate
                                {
                                    MessageBox.Show("resultado detallado comprobante: " + fe.F1RespuestaDetalleResultado);
                                    MessageBox.Show("cae comprobante: " + fe.F1RespuestaDetalleCae);
                                    MessageBox.Show("número comprobante:" + fe.F1RespuestaDetalleCbteDesdeS);
                                    MessageBox.Show("error detallado comprobante: " + fe.F1RespuestaDetalleObservacionMsg1);
                                });
                            }

                        }
                        tblCliente = tblClientes.Clone();
                        tblCliente.ImportRow(foundCliente[0]);
                        strNroCbte = nroComp.ToString();
                    }
                    else
                    {
                        MessageBox.Show("fallo acceso " + fe.UltimoMensajeError);
                    }
                }
                else
                {
                    MessageBox.Show("error inicio " + fe.UltimoMensajeError);
                }
            }
            else
            {
                if (this.InvokeRequired) //si da true es porque estoy en un subproceso distinto al hilo principal
                {
                    string mensaje = "No se puede iniciar la aplicación sin internet.";
                    //invoca al hilo principal através de un delegado
                    this.Invoke((Action)delegate
                    {
                        MessageBox.Show(this, mensaje, "Trend Sistemas", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        Application.Exit();
                    });
                }
            }
        }
        private void ImprimirFactura()
        {
            DataTable tblIVA = new DataTable();
            tblIVA.Columns.Add("Articulo", typeof(string));
            tblIVA.Columns.Add("Descripcion", typeof(string));
            tblIVA.Columns.Add("Cantidad", typeof(int));
            tblIVA.Columns.Add("IdAlicuota", typeof(int));
            tblIVA.Columns.Add("PorcentajeIva", typeof(decimal));
            tblIVA.Columns.Add("Precio", typeof(decimal));
            tblIVA.Columns.Add("SubtotalSinIva", typeof(decimal));
            tblIVA.Columns.Add("SubtotalIva", typeof(decimal));
            foreach (DataGridViewRow rowGrid in dgvDatos.Rows)
            {
                string articulo = rowGrid.Cells["IdArticuloDVEN"].Value.ToString();
                DataRow[] foundRow = tblArticulos.Select("IdArticuloART = '" + articulo + "'");
                string descripcion = foundRow[0]["DescripcionART"].ToString();
                int cantidad = Convert.ToInt32(rowGrid.Cells["CantidadDVEN"].Value.ToString());
                int idAlicuota = Convert.ToInt16(foundRow[0]["IdAliculotaIvaART"].ToString());
                decimal porcentajeIva = Convert.ToDecimal(foundRow[0]["PorcentajeALI"].ToString()) / 100 + 1;
                decimal precio = decimal.Round(Convert.ToDecimal(foundRow[0]["PrecioPublicoART"].ToString()) / porcentajeIva, 2);
                decimal ivaImporte = decimal.Round(Convert.ToDecimal(foundRow[0]["PrecioPublicoART"].ToString()) - precio, 2);
                DataRow fila = tblIVA.NewRow();
                fila["Articulo"] = articulo;
                fila["Descripcion"] = descripcion;
                fila["Cantidad"] = cantidad;
                fila["IdAlicuota"] = idAlicuota;
                fila["PorcentajeIva"] = porcentajeIva;
                fila["Precio"] = precio;
                fila["SubtotalSinIva"] = cantidad * precio;
                fila["SubtotalIva"] = cantidad * ivaImporte;
                tblIVA.Rows.Add(fila);
            }

            string idCliente = cmbCliente.SelectedValue.ToString();
            DataRow[] foundCliente = tblClientes.Select("IdClienteCLI = '" + idCliente + "'");
            string condicionIva = foundCliente[0]["CondicionIvaCLI"].ToString();
            int cabeceraCbteTipo = 0;
            int detalleDocTipo;
            string detalleDocNro;
            if (condicionIva == "RESPONSABLE INSCRIPTO")
            {
                detalleDocTipo = 80;
                detalleDocNro = foundCliente[0]["CUIT"].ToString();
                switch (strTipo)
                {
                    case "factura":
                        cabeceraCbteTipo = 1;
                        this.strTipo = "FACTURA";
                        break;
                    case "debito":
                        cabeceraCbteTipo = 2;
                        this.strTipo = "NOTA DE DÉBITO";
                        break;
                    case "credito":
                        cabeceraCbteTipo = 3;
                        this.strTipo = "NOTA DE CRÉDITO";
                        break;
                }
            }
            else
            {
                detalleDocTipo = 99;
                detalleDocNro = "0";
                switch (strTipo)
                {
                    case "factura":
                        cabeceraCbteTipo = 6;
                        this.strTipo = "FACTURA";
                        break;
                    case "debito":
                        cabeceraCbteTipo = 7;
                        this.strTipo = "NOTA DE DÉBITO";
                        break;
                    case "credito":
                        this.strTipo = "NOTA DE CRÉDITO";
                        cabeceraCbteTipo = 8;
                        break;
                }
            }

            // Ver WSFEv1 Fallos conexión en Camuzzo
            WSAFIPFE.Factura fe = new WSAFIPFE.Factura();
            Boolean bResultado = false;
            DataTable tblRazonSocial = BL.RazonSocialBLL.GetRazonSocial();
            string cuit = tblRazonSocial.Rows[0]["CuitRAZ"].ToString();
            bResultado = fe.iniciar(WSAFIPFE.Factura.modoFiscal.Test, cuit, @"C:\Trend\Factura-electronica\Carolina Navarro\pedido.pfx", @" ");
            if (bResultado)
            {
                fe.ArchivoCertificadoPassword = "";
                bResultado = fe.f1ObtenerTicketAcceso();
                if (bResultado)
                {
                    fe.F1CabeceraCantReg = 1;
                    fe.F1CabeceraPtoVta = 1;

                    /*Según el manual del desarrollador (pagina 15), el error 10007 se da por que no informas alguno de los
                     * tipos validos son 01 02 03 04 05 34 39 60 63 para comprobantes A y 06 07 08 09 10 35 40 64 y 61 para los B.*/
                    fe.F1CabeceraCbteTipo = cabeceraCbteTipo;
                    int nroComp = fe.F1CompUltimoAutorizado(1, cabeceraCbteTipo) + 1;
                    fe.f1Indice = 0;
                    fe.F1DetalleConcepto = 1;  //Concepto del comprobante.  01-Productos, 02-Servicios, 03-Productos y Servicios
                    fe.F1DetalleDocTipo = detalleDocTipo;    // 96: DNI, 80: CUIT, 99: Consumidor Final
                    fe.F1DetalleDocNro = detalleDocNro;
                    //   fe.F1DetalleDocNro = "30570135585";
                    fe.F1DetalleCbteDesde = nroComp;
                    fe.F1DetalleCbteHasta = nroComp; // Número de comprobante hasta. En caso de ser un solo comprobante, este dato coincide con el anterior.

                    /* F1DetalleCbteFch: Fecha del comprobante, cuyo formato es "aaaammdd". Para un concepto de factura igual a 1,
                        la fecha de emisión puede ser hasta 5 días posteriores a la de generación.
                        Si el concepto es 2 o 3, puede ser hasta 10 días anteriores o posteriores a la fecha de generación.
                        Al ser un dato opcional, si no se asigna fecha, por defecto se asignará la fecha del proceso.*/
                    string fecha = DateTime.Now.ToString("yyyyMMdd");
                    fe.F1DetalleCbteFch = fecha;

                    /*  fe.F1DetalleTributoItemCantidad = 1;  //preguntar Ariel Cantidad de Tributos relacionados al comprobante
                      fe.f1IndiceItem = 0;
                      fe.F1DetalleTributoId = 3;
                      fe.F1DetalleTributoDesc = "Impuesto Municipal Matanza";
                      fe.F1DetalleTributoBaseImp = 0;
                      fe.F1DetalleTributoAlic = 5.2;
                      fe.F1DetalleTributoImporte = 0;*/
                    var groupedData = from b in tblIVA.AsEnumerable()
                                      group b by b.Field<int>("IdAlicuota") into g
                                      select new
                                      {
                                          DetalleIvaId = g.Key,
                                          Count = g.Count(),
                                          DetalleIvaBaseImp = g.Sum(x => x.Field<decimal>("SubtotalSinIva")),
                                          DetalleIvaImporte = g.Sum(x => x.Field<decimal>("SubtotalIva"))
                                      };
                    int DetalleIvaItemCantidad = groupedData.Count();
                    fe.F1DetalleIvaItemCantidad = DetalleIvaItemCantidad;
                    int indiceItem = 0;
                    foreach (var registro in groupedData)
                    {
                        fe.f1IndiceItem = indiceItem;
                        //En F1DetalleIvaId va el código de la alícuota o tasa (obtenido de una lista de AFIP: 5 para 21% 4 para 10.50%, etc).
                        fe.F1DetalleIvaId = registro.DetalleIvaId;
                        fe.F1DetalleIvaBaseImp = Convert.ToDouble(registro.DetalleIvaBaseImp);  //El precio del producto
                        fe.F1DetalleIvaImporte = Convert.ToDouble(registro.DetalleIvaImporte);  //El importe del impuesto.
                        indiceItem++;
                    }

                    /*     fe.f1IndiceItem = 0;
                         fe.F1DetalleIvaId = 5;  //El código de la alícuota o tasa (obtenido de una lista de AFIP: 5 para 21% 4 para 10.50%, etc).
                         fe.F1DetalleIvaBaseImp = 100;  //El precio del producto
                         fe.F1DetalleIvaImporte = 21;  //El importe del impuesto.

                         fe.f1IndiceItem = 1;
                         fe.F1DetalleIvaId = 4;
                         fe.F1DetalleIvaBaseImp = 50;
                         fe.F1DetalleIvaImporte = 5.25;*/

                    var detalleImpNeto = tblIVA.AsEnumerable().Sum(x => x.Field<decimal>("SubtotalSinIva"));
                    var detalleImpIva = tblIVA.AsEnumerable().Sum(x => x.Field<decimal>("SubtotalIva"));
                    double detalleImpTotal = Convert.ToDouble(detalleImpNeto + detalleImpIva);

                    fe.F1DetalleImpTotal = detalleImpTotal; // total factura
                    fe.F1DetalleImpTotalConc = 0; // preguntar Ariel  Importe Neto No Grabado, debe ser mayor a cero y menor o igual al importe total (F1DetalleImpTotal).
                    fe.F1DetalleImpNeto = Convert.ToDouble(detalleImpNeto); // total bases imponibles
                    fe.F1DetalleImpOpEx = 0; // preguntar Ariel
                    fe.F1DetalleImpTrib = 0; // preguntar Ariel
                    fe.F1DetalleImpIva = Convert.ToDouble(detalleImpIva);  // total ivas
                    fe.F1DetalleFchServDesde = ""; // se debe poner fecha para servicios o para productos y servicios. Para productos solos puede ser vacío
                    fe.F1DetalleFchServHasta = ""; // Idem anterior completar si F1DetalleConcepto > 1
                    fe.F1DetalleFchVtoPago = ""; // Idem anterior completar si F1DetalleConcepto > 1
                    fe.F1DetalleMonId = "PES";
                    fe.F1DetalleMonCotiz = 1;

                    fe.F1DetalleCbtesAsocItemCantidad = 0;
                    fe.F1DetalleOpcionalItemCantidad = 0;

                    fe.ArchivoXMLRecibido = @"c:\recibido.xml";
                    fe.ArchivoXMLEnviado = @"c:\enviado.xml";
                    bResultado = fe.F1CAESolicitar();
                    if (bResultado)
                    {
                        MessageBox.Show("resultado verdadero ");
                    }
                    else
                    {
                        MessageBox.Show("resultado falso ");
                    }
                    MessageBox.Show("resultado global AFIP: " + fe.F1RespuestaResultado);
                    MessageBox.Show("es reproceso? " + fe.F1RespuestaReProceso);
                    MessageBox.Show("registros procesados por AFIP: " + fe.F1RespuestaCantidadReg.ToString());
                    MessageBox.Show("error genérico global:" + fe.f1ErrorMsg1);
                    if (fe.F1RespuestaCantidadReg > 0)
                    {
                        fe.f1Indice = 0;
                        MessageBox.Show("resultado detallado comprobante: " + fe.F1RespuestaDetalleResultado);
                        MessageBox.Show("cae comprobante: " + fe.F1RespuestaDetalleCae);
                        MessageBox.Show("número comprobante:" + fe.F1RespuestaDetalleCbteDesdeS);
                        MessageBox.Show("error detallado comprobante: " + fe.F1RespuestaDetalleObservacionMsg1);
                    }
                    DataTable tblCliente = tblClientes.Clone();
                    tblCliente.ImportRow(foundCliente[0]);
                    string strNroCbte = nroComp.ToString();
                    string strFechaEmision = dateTimePicker1.Value.ToString("dd/MM/yyyy");
                    rptFactura informeFactura = new rptFactura(tblIVA, tblCliente, tblRazonSocial, strNroCbte, strFechaEmision, strTipo);

                    informeFactura.Show();
                }
                else
                {
                    MessageBox.Show("fallo acceso " + fe.UltimoMensajeError);
                }
            }
            else
            {
                MessageBox.Show("error inicio " + fe.UltimoMensajeError);
            }
        }