public RespuestaComunConArchivo2 EnviarXMLFE(string RutaWS, string usuario, string clave, string RucEmisor, string TipoDocumento, string IdentificadorArchivo, bool EsResumen, string CarpetaXML, string CarpetaCdr) { ServicioEnviarComprobanteFE.FEServiceClient ServicioFE = new ServicioEnviarComprobanteFE.FEServiceClient(); ServicioEnviarComprobanteFE.RespuestaComunConArchivo2 RespuestaSunat = ServicioFE.EnviarXML(RutaWS, usuario, clave, RucEmisor, TipoDocumento, IdentificadorArchivo, EsResumen, CarpetaXML, CarpetaCdr); RespuestaComunConArchivo2 objrespuesta = new RespuestaComunConArchivo2(); objrespuesta.NombreArchivo = RespuestaSunat.NombreArchivo; objrespuesta.Exito = RespuestaSunat.Exito; objrespuesta.MensajeError = RespuestaSunat.MensajeError; objrespuesta.Pila = RespuestaSunat.Pila; objrespuesta.CodigoRespuesta = RespuestaSunat.CodigoRespuesta; objrespuesta.MensajeRespuesta = RespuestaSunat.MensajeRespuesta; objrespuesta.TramaZipCdr = RespuestaSunat.TramaZipCdr; objrespuesta.NroTicket = RespuestaSunat.NroTicket; return(objrespuesta); }
public string GenerarSunat(Int32 TipoComprobanteID, string NumComprobante, string EmpresaID, string Tipo, string TipoNotaCredito, string DescripcionAnulacion) { /* * TipoDocumento = 07 nota de credito * NumComprobante2 para notacredito */ try { DataSet ds = GetComprobanteFE(TipoComprobanteID, NumComprobante, EmpresaID, null, Tipo); DataTable dtc = ds.Tables[0]; DataTable dtd = ds.Tables[1]; if (dtc.Rows[0]["EmiteFE"].ToString() == "S" & (Tipo == "01" | Tipo == "03" | Tipo == "07")) { string RUTA_WS_SUNAT = ConfigurationManager.AppSettings["RUTA_WS_SUNAT"]; ServicioEnviarComprobanteFE.FEServiceClient ServicioFE = new ServicioEnviarComprobanteFE.FEServiceClient(); ServicioEnviarComprobanteFE.Contribuyente emisor = new ServicioEnviarComprobanteFE.Contribuyente(); ServicioEnviarComprobanteFE.Contribuyente receptor = new ServicioEnviarComprobanteFE.Contribuyente(); ServicioEnviarComprobanteFE.DetalleDocumento[] detalle = new ServicioEnviarComprobanteFE.DetalleDocumento[dtd.Rows.Count]; ServicioEnviarComprobanteFE.DatoAdicional[] datosadicionales = new ServicioEnviarComprobanteFE.DatoAdicional[0]; //ServicioEnviarComprobanteFE.DocumentoRelacionado[] relacionados = new ServicioEnviarComprobanteFE.DocumentoRelacionado[0]; receptor.TipoDocumento = dtc.Rows[0]["TipoDocumentoIdentidadCliente"].ToString(); receptor.NroDocumento = dtc.Rows[0]["NumeroDocumentoIdentidadCliente"].ToString(); receptor.NombreLegal = dtc.Rows[0]["RazonSocialCliente"].ToString(); emisor.TipoDocumento = dtc.Rows[0]["TipoDocumentoEmisor"].ToString(); emisor.NroDocumento = dtc.Rows[0]["RUC"].ToString(); emisor.NombreLegal = dtc.Rows[0]["RazonSocial"].ToString(); TextFunctions ObjTextFunctions = new TextFunctions(); string TotalPagarLetras = ObjTextFunctions.enletras(dtc.Rows[0]["ImporteTotal"].ToString()); //ServicioEnviarComprobanteFE.DocumentoRelacionado sss = new ServicioEnviarComprobanteFE.DocumentoRelacionado(); //sss.NroDocumento = ""; //sss.TipoDocumento = ""; //ServicioEnviarComprobanteFE.DatoAdicional dar = new ServicioEnviarComprobanteFE.DatoAdicional(); //dar.Codigo = ""; //dar.Contenido = ""; int id = 0; foreach (DataRow DR in dtd.Rows) { //ServicioEnviarComprobanteFE.DetalleDocumento dd = new ServicioEnviarComprobanteFE.DetalleDocumento(); ServicioEnviarComprobanteFE.DetalleDocumento dd = new ServicioEnviarComprobanteFE.DetalleDocumento(); dd.Cantidad = Convert.ToDecimal(DR["Cantidad"]); dd.CodigoItem = DR["CodigoProducto"].ToString(); dd.Descripcion = DR["DescripcionProducto"].ToString(); dd.Descuento = Convert.ToDecimal(DR["DescuentoItem"]); dd.Id = id + 1; dd.Impuesto = Convert.ToDecimal(DR["MontoIgvItem"]); dd.ImpuestoSelectivo = Convert.ToDecimal(DR["MontoISCItem"]); dd.OtroImpuesto = 0; dd.PrecioReferencial = Convert.ToDecimal(DR["ValorVentaItem"]); dd.PrecioUnitario = Convert.ToDecimal(DR["PrecioVentaItem"]); dd.Suma = Convert.ToDecimal(DR["Suma"]); dd.TipoImpuesto = DR["AfectacionIGVItem"].ToString(); dd.TipoPrecio = "01"; dd.TotalVenta = Convert.ToDecimal(DR["TotalVenta"]); dd.UnidadMedida = DR["CodigoUM"].ToString(); detalle[id] = dd; id = id + 1; } //ServicioEnviarComprobanteFE.DocumentoElectronico _documento = new ServicioEnviarComprobanteFE.DocumentoElectronico() ServicioEnviarComprobanteFE.DocumentoElectronico _documento = new ServicioEnviarComprobanteFE.DocumentoElectronico() { FechaEmision = DateTime.Today.ToShortDateString(), IdDocumento = dtc.Rows[0]["NumComprobante2"].ToString(), TotalIgv = Convert.ToDecimal(dtc.Rows[0]["SumatoriaIGV"]), TotalIsc = Convert.ToDecimal(dtc.Rows[0]["SumatoriaISC"]), TotalOtrosTributos = Convert.ToDecimal(dtc.Rows[0]["SumatoriaOtrosTributos"]), Gravadas = Convert.ToDecimal(dtc.Rows[0]["OperacionesGravadas"]), Exoneradas = Convert.ToDecimal(dtc.Rows[0]["ValorVentaOperacionesExoneradas"]), Inafectas = Convert.ToDecimal(dtc.Rows[0]["OperacionesInafectas"]), Gratuitas = Convert.ToDecimal(dtc.Rows[0]["Gratuitas"]), TotalVenta = Convert.ToDecimal(dtc.Rows[0]["ImporteTotal"]), DescuentoGlobal = Convert.ToDecimal(dtc.Rows[0]["DescuentosGlobales"]), Moneda = dtc.Rows[0]["TipoMoneda"].ToString(), CalculoIgv = Convert.ToDecimal(dtc.Rows[0]["DescuentosGlobales"]), CalculoDetraccion = Convert.ToDecimal(dtc.Rows[0]["DescuentosGlobales"]), CalculoIsc = Convert.ToDecimal(dtc.Rows[0]["DescuentosGlobales"]), MonedaAnticipo = "", TipoDocumento = dtc.Rows[0]["TipoDocumento"].ToString(), TipoOperacion = dtc.Rows[0]["TipoOperacion"].ToString(), TipoDocAnticipo = "", MontoAnticipo = 0, MontoDetraccion = 0, MontoEnLetras = TotalPagarLetras, MontoPercepcion = 0, Emisor = emisor, Receptor = receptor, Items = detalle, //Relacionados = relacionados, DatoAdicionales = datosadicionales, RutaXML = dtc.Rows[0]["RutaXMLFE"].ToString() }; int NotaID = 0; if (Tipo == "07") { ServicioEnviarComprobanteFE.Discrepancia[] discrepancias = new ServicioEnviarComprobanteFE.Discrepancia[1]; ServicioEnviarComprobanteFE.Discrepancia Discre = new ServicioEnviarComprobanteFE.Discrepancia(); Discre.NroReferencia = dtc.Rows[0]["NumComprobante2"].ToString(); Discre.Descripcion = DescripcionAnulacion; Discre.Tipo = TipoNotaCredito; discrepancias[0] = Discre; //obtener nota credito DataTable dtnota = InsertarNotaCreditoFE("07", EmpresaID, dtc.Rows[0]["NumComprobante2"].ToString().Substring(0, 4), Convert.ToInt32(dtc.Rows[0]["NumComprobante2"].ToString().Substring(5, 8)), TipoComprobanteID, Convert.ToDecimal(dtc.Rows[0]["ImporteTotal"]), DescripcionAnulacion, 0, Convert.ToInt32(dtc.Rows[0]["ClienteID"].ToString()), 51, ""); _documento.IdDocumento = dtnota.Rows[0]["NumeroComprobante"].ToString(); _documento.TipoDocumento = Tipo; _documento.Discrepancias = discrepancias; NotaID = Convert.ToInt32(dtnota.Rows[0]["NotaID"]); ServicioEnviarComprobanteFE.DocumentoRelacionado[] Relacionados = new ServicioEnviarComprobanteFE.DocumentoRelacionado[1]; ServicioEnviarComprobanteFE.DocumentoRelacionado relacion = new ServicioEnviarComprobanteFE.DocumentoRelacionado(); relacion.NroDocumento = dtc.Rows[0]["NumComprobante2"].ToString(); relacion.TipoDocumento = dtc.Rows[0]["TipoDocumento"].ToString(); Relacionados[0] = relacion; _documento.Relacionados = Relacionados; } else { ServicioEnviarComprobanteFE.DocumentoRelacionado[] Relacionados = new ServicioEnviarComprobanteFE.DocumentoRelacionado[0]; _documento.Relacionados = Relacionados; } ServicioEnviarComprobanteFE.DocumentoResponse respu = ServicioFE.GenerarXMLFactura(_documento); if (respu.Exito == true) { //solo se envia factura, nota credito a sunat, boleta solo se guarda if (Tipo == "01" | Tipo == "07") { ServicioEnviarComprobanteFE.RespuestaComunConArchivo2 RespuestaSunat = ServicioFE.EnviarSunat(Tipo, dtc.Rows[0]["RutaXMLFE"].ToString(), dtc.Rows[0]["RutaCDRFE"].ToString(), dtc.Rows[0]["RutaCertificado"].ToString(), dtc.Rows[0]["ClaveCertificado"].ToString(), dtc.Rows[0]["RUC"].ToString(), dtc.Rows[0]["UsuarioSOL"].ToString(), dtc.Rows[0]["ClaveSol"].ToString(), _documento.IdDocumento, RUTA_WS_SUNAT, false); if (Tipo == "07") { ActualizarNotaCredito(NotaID, Convert.ToInt64(RespuestaSunat.NroTicket), RespuestaSunat.MensajeError, (RespuestaSunat.Exito == true) ? "S" : "N", Convert.ToInt32(dtc.Rows[0]["ComprobanteId"])); } DataTable dtres; if (Tipo == "01") { dtres = ActualizarComprobanteSunat(Convert.ToInt32(dtc.Rows[0]["ComprobanteId"]), (RespuestaSunat.Exito == true) ? "S" : "N", RespuestaSunat.MensajeRespuesta); } if (RespuestaSunat.Exito == false) { throw new Exception(RespuestaSunat.MensajeError); } else { if (Tipo == "01") { //GENERAR EMISIÓN FISICA if (dtc.Rows[0]["GenerarFisico"].ToString() == "S") { //string mensajeresp = ServicioFE.GenerarPdf(ds, dtc.Rows[0]["RutaXMLFE"].ToString(), dtc.Rows[0]["NumComprobante2"].ToString(), RespuestaSunat.MensajeRespuesta); //if (mensajeresp != "OK") //{ // return respu.MensajeError; //} } } } return("OK"); } } else { return(respu.MensajeError); } } return("OK"); } catch (Exception ex) { return(ex.Message); } }