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 = "******"; // 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); } }