/// <summary> /// Registra la información de control interno en el legado para la generación de asientos /// </summary> /// <param name="UUID">Código único de registro del asiento.</param> /// <param name="datosAsiento">Objeto que contiene la información del asiento que se desea registrar.</param> /// <param name="usuario">Usuario responsable de la creación del asiento y de su respectivo control.</param> /// <param name="cn">Objeto que representa la conexión a la BD.</param> /// <param name="trans">Objeto que representa la transacción con la cual se realiza el proceso de registro.</param> public void RegistrarControlAsiento(string UUID, Asiento.LISTA_ASIENTORow datosAsiento, string usuario, SqlConnection cn, SqlTransaction trans) { SqlCommand cmd = new SqlCommand("dbo.FMPR_INS_CONTROL_ASIENTO", cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Transaction = trans; try { cmd.Parameters.Add("@UUID", SqlDbType.VarChar).Value = UUID; cmd.Parameters.Add("@tipoAsiento", SqlDbType.VarChar).Value = datosAsiento.TIPO_ASIENTO; cmd.Parameters.Add("@moneda", SqlDbType.VarChar).Value = datosAsiento.MONEDA; cmd.Parameters.Add("@fecha", SqlDbType.Date).Value = datosAsiento.FECHA_PROCESO; cmd.Parameters.Add("@fondo", SqlDbType.VarChar).Value = datosAsiento.IsFONDONull()? null: datosAsiento.FONDO; object valor = DBNull.Value; if (!datosAsiento.IsID_OPERACIONNull() && datosAsiento.ID_OPERACION != "") { valor = datosAsiento.ID_OPERACION; } cmd.Parameters.Add("@idOperacion", SqlDbType.VarChar).Value = valor; cmd.Parameters.Add("@usuario", SqlDbType.VarChar).Value = usuario; cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { cmd.Dispose(); } }
/// <summary> /// Método que se encarga de generar los asientos contables a partir de la selección del usuario. /// </summary> /// <param name="lvAsientos">Objeto ListViewItem que contienen los asientos que posiblemente desea el usuario que se generem</param> /// <param name="usuario">Usuario responsable de la creación de los asientos.</param> public void GenerarAsientos(System.Windows.Forms.ListView lvAsientos, string usuario, bool sapActivo) { ParametrosDA parametroDA = new ParametrosDA(); string estadoEjecutado = parametroDA.ObtenerValoresParametros("ESTEJE", "ESTEJE").Rows[0]["CAMPO1"].ToString(); FacturacionDA facturacionDA = new FacturacionDA(); facturacionDA.Server = Conexiones.ServidorPremBanco13; facturacionDA.Database = Conexiones.BaseDeDatosPremBanco13; facturacionDA.CrearConexion(); facturacionDA.AbrirConexion(); facturacionDA.AbrirTransaccion(); da.Server = INGFondos.Constants.Conexiones.ServidorSAP; da.Database = INGFondos.Constants.Conexiones.BaseDeDatosSAP; SqlConnection cn = da.GetConnection2(); cn.Open(); SqlTransaction trans = cn.BeginTransaction(); Asiento asiento = new Asiento(); string host = Dns.GetHostName(); IPHostEntry ip = Dns.GetHostEntry(host); string direccionIP = ip.AddressList[0].ToString(); string glosaVT_ING = string.Empty; string glosaVT_CRA = string.Empty; string descripcionVT_ING = string.Empty; string descripcionVT_CRA = string.Empty; Hashtable ht = new Hashtable(); Comprobante comprobanteAsiento = null; try { DataTable dtParametroGlosas = parametroDA.ObtenerValoresParametros(ConstantesING.TABLA_COMPROBANTES, ConstantesING.GLOSA_ASIENTO_INGRESOS); glosaVT_ING = dtParametroGlosas.Rows[0]["CAMPO3"].ToString(); dtParametroGlosas = parametroDA.ObtenerValoresParametros(ConstantesING.TABLA_COMPROBANTES, ConstantesING.GLOSA_ASIENTO_COMISIONES); glosaVT_CRA = dtParametroGlosas.Rows[0]["CAMPO3"].ToString(); dtParametroGlosas = parametroDA.ObtenerValoresParametros(ConstantesING.TABLA_COMPROBANTES, ConstantesING.DESCRIPCION_ASIENTO_INGRESOS); descripcionVT_ING = dtParametroGlosas.Rows[0]["CAMPO3"].ToString(); dtParametroGlosas = parametroDA.ObtenerValoresParametros(ConstantesING.TABLA_COMPROBANTES, ConstantesING.DESCRIPCION_ASIENTO_COMISIONES); descripcionVT_CRA = dtParametroGlosas.Rows[0]["CAMPO3"].ToString(); DataTable dtCabecerasTipo = null; DataTable dtDetallesTipo = null; dtCabecerasTipo = da.ObtenerAsientoTipoCabecera(cn, trans); dtDetallesTipo = da.ObtenerAsientoTipoDetalle(cn, trans); DataRow drCabeceraTipo = null; DataRow[] drDetallesTipo = null; DataRow drDetalleTipo = null; int codigoAsiento = 0; StringBuilder filtro = null; //OT7999 INI //setear dblPorcentajeDetraccion, si es posible usar un metodo propio bool valorDetraccionHallado = ObtenerDetraccion(); double montoSoles = 0; //OT7999 FIN foreach (ListViewItem item in lvAsientos.CheckedItems) { Asiento.LISTA_ASIENTORow datosAsiento = (Asiento.LISTA_ASIENTORow)item.Tag; decimal cantidadSubDetalle = 0; for (int j = 1; j <= 5; j++) { if (Convert.ToDecimal(datosAsiento["MONTO" + j.ToString()]) != 0) { cantidadSubDetalle++; } } filtro = new StringBuilder(); filtro.Append("DESCRIPCION = '" + datosAsiento.TIPO_ASIENTO + "'"); filtro.Append(" AND MONEDA_DOCUMENTO = '" + datosAsiento.MONEDA + "'"); if (datosAsiento.FONDO != "") { filtro.Append(" AND FONDO = '" + datosAsiento.FONDO + "'"); } drCabeceraTipo = dtCabecerasTipo.Select(filtro.ToString(), "CODIGO_ASIENTO")[0]; codigoAsiento = Convert.ToInt32(drCabeceraTipo["CODIGO_ASIENTO"]); drDetallesTipo = dtDetallesTipo.Select("CODIGO_ASIENTO = " + codigoAsiento.ToString()); string generaAsiento = null; string referencia = null; generaAsiento = datosAsiento.IsID_OPERACIONNull() || datosAsiento.ID_OPERACION == "" ? (datosAsiento.IsFONDONull() || datosAsiento.FONDO == "" ? drCabeceraTipo["DESCRIPCION"].ToString().Trim() + datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd") + datosAsiento.MONEDA : datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd") + datosAsiento.FONDO) : drCabeceraTipo["DESCRIPCION"].ToString().Trim() + datosAsiento.ID_OPERACION; referencia = generaAsiento; //datosAsiento.IsID_OPERACIONNull() || datosAsiento.ID_OPERACION == "" ? datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd") + "|" + generaAsiento : generaAsiento; if (!datosAsiento.IsUUIDNull() && datosAsiento.UUID.Trim() != "" && datosAsiento.ESTADO != estadoEjecutado) { da.EliminarAsientoAntiguo(datosAsiento.UUID, cn, trans); } int idComprobante = 0; string referenciaComprobante = string.Empty; //LOGICA DE GENERACION DE FACTURA if (datosAsiento.TIPO_ASIENTO == ConstantesING.TIPO_ASIENTO_INGRESO || datosAsiento.TIPO_ASIENTO == ConstantesING.TIPO_ASIENTO_COMISION) { comprobanteAsiento = new Comprobante(); comprobanteAsiento.Cliente = new Cliente(); asiento.CLIENTE.ImportRow(datosAsiento); comprobanteAsiento.Cliente.TipoDocumento = asiento.CLIENTE[0].TIPO_DOCUMENTO; comprobanteAsiento.Cliente.CodigoCliente = asiento.CLIENTE[0].CODIGO_CLIENTE; comprobanteAsiento.Cliente.RazonSocial = asiento.CLIENTE[0].RAZON_SOCIAL.Replace(",", ""); comprobanteAsiento.Cliente.Direccion = asiento.CLIENTE[0].DIRECCION; comprobanteAsiento.Cliente.Distrito = asiento.CLIENTE[0].DISTRITO; comprobanteAsiento.Cliente.Ciudad = asiento.CLIENTE[0].PROVINCIA; comprobanteAsiento.Cliente.Departamento = asiento.CLIENTE[0].DEPARTAMENTO; comprobanteAsiento.Cliente.IdPais = Convert.ToInt32(asiento.CLIENTE[0].ID_PAIS); comprobanteAsiento.Cliente.Pais = asiento.CLIENTE[0].CODIGO_PAIS; if (comprobanteAsiento.Cliente.IdPais.ToString().Equals(ConstantesING.CODIGO_PAIS_PERU)) { comprobanteAsiento.Cliente.IdDepartamento = Convert.ToInt32(asiento.CLIENTE[0].ID_DEPARTAMENTO); comprobanteAsiento.Cliente.IdCiudad = Convert.ToInt32(asiento.CLIENTE[0].ID_CIUDAD); comprobanteAsiento.Cliente.IdDistrito = Convert.ToInt32(asiento.CLIENTE[0].ID_DISTRITO); comprobanteAsiento.Cliente.Departamento = asiento.CLIENTE[0].DEPARTAMENTO; comprobanteAsiento.Cliente.Ciudad = asiento.CLIENTE[0].PROVINCIA; comprobanteAsiento.Cliente.Distrito = asiento.CLIENTE[0].DISTRITO; comprobanteAsiento.Cliente.Ubigeo = asiento.CLIENTE[0].UBIGEO; comprobanteAsiento.Cliente.CodigoPostal = ""; } else { comprobanteAsiento.Cliente.IdDepartamento = 0; comprobanteAsiento.Cliente.IdCiudad = 0; comprobanteAsiento.Cliente.IdDistrito = 0; comprobanteAsiento.Cliente.Departamento = ""; comprobanteAsiento.Cliente.Ciudad = ""; comprobanteAsiento.Cliente.Distrito = ""; comprobanteAsiento.Cliente.Ubigeo = ""; comprobanteAsiento.Cliente.CodigoPostal = asiento.CLIENTE[0].CODIGO_POSTAL; } comprobanteAsiento.Cliente.Correo = asiento.CLIENTE[0].CORREO; comprobanteAsiento.Cliente.Usuario = usuario; facturacionDA.RegistrarCliente(comprobanteAsiento.Cliente); asiento.CLIENTE.Clear(); #region CODIGO COMENTADO //DataTable dtInfoCliente = facturacionDA.ObtenerCliente(datosAsiento.CODIGO_CLIENTE); //if (dtInfoCliente.Rows.Count == 0) //{ // asiento.CLIENTE.ImportRow(datosAsiento); // facturacionDA.InsertarCliente(asiento.CLIENTE[0].CODIGO_CLIENTE, // asiento.CLIENTE[0].RAZON_SOCIAL, asiento.CLIENTE[0].DIRECCION, // asiento.CLIENTE[0].DISTRITO, asiento.CLIENTE[0].PROVINCIA, // asiento.CLIENTE[0].DEPARTAMENTO, usuario); // asiento.CLIENTE.Clear(); //} //else //{ // //asiento.CLIENTE.ImportRow(dtInfoCliente.Rows[0]); // //deberia actualizarse //} #endregion //UNA VEZ OBTENIDO EL CLIENTE, PREPARAR LA DATA DEL COMPROBANTE Y DE SU DETALLE Asiento.COMPROBANTERow comprobante = asiento.COMPROBANTE.NewCOMPROBANTERow(); comprobante.CODIGO_CLIENTE = datosAsiento.CODIGO_CLIENTE; string descripcionComprobante = string.Empty; switch (datosAsiento.TIPO_ASIENTO) { case ConstantesING.TIPO_ASIENTO_INGRESO: comprobante.TIPO_DOCUMENTO = ConstantesING.TIPO_DOCUMENTO_FACTURA; comprobante.COD_CONCEPTO = datosAsiento.MONEDA == "PEN" ? ConstantesING.CONCEPTO_INGRESO_SOLES : ConstantesING.CONCEPTO_INGRESO_DOLARES; comprobante.GLOSA = glosaVT_ING; descripcionComprobante = descripcionVT_ING; comprobanteAsiento.TipoDocumento = ConstantesING.TIPO_DOCUMENTO_FACTURA; comprobanteAsiento.CodigoConcepto = datosAsiento.MONEDA == "PEN" ? ConstantesING.CONCEPTO_INGRESO_SOLES : ConstantesING.CONCEPTO_INGRESO_DOLARES; comprobanteAsiento.Glosa = glosaVT_ING; descripcionComprobante = descripcionVT_ING; break; case ConstantesING.TIPO_ASIENTO_COMISION: comprobante.TIPO_DOCUMENTO = ConstantesING.TIPO_DOCUMENTO_BOLETA; comprobante.COD_CONCEPTO = datosAsiento.MONEDA == "PEN" ? ConstantesING.CONCEPTO_COMISION_SOLES : ConstantesING.CONCEPTO_COMISION_DOLARES; comprobante.GLOSA = glosaVT_CRA; descripcionComprobante = descripcionVT_CRA; comprobanteAsiento.TipoDocumento = ConstantesING.TIPO_DOCUMENTO_BOLETA; comprobanteAsiento.CodigoConcepto = datosAsiento.MONEDA == "PEN" ? ConstantesING.CONCEPTO_COMISION_SOLES : ConstantesING.CONCEPTO_COMISION_DOLARES; comprobanteAsiento.Glosa = glosaVT_CRA; descripcionComprobante = descripcionVT_CRA; break; } if (!datosAsiento.IsUUIDNull() && datosAsiento.UUID.Equals("")) { //OT 7349 INI } else { DataTable dtComprobante2 = facturacionDA.ObtenerComprobantePorUUID(datosAsiento.UUID); asiento.COMPROBANTE.ImportRow(dtComprobante2.Rows[0]); Comprobante comprobanteAntiguo = new Comprobante(); comprobanteAntiguo.IdComprobante = Convert.ToInt32(asiento.COMPROBANTE.Rows[0]["ID_COMPROBANTE"].ToString().Trim()); comprobanteAntiguo.Usuario = usuario; facturacionDA.AnularComprobante(comprobanteAntiguo); asiento.COMPROBANTE.Rows.Remove(asiento.COMPROBANTE[0]); #region CODIGO_COMENTADO //facturacionDA.EliminarComprobante(asiento.COMPROBANTE.Rows[0]["ID_COMPROBANTE"].ToString().Trim(), ConstantesING.ESTADO_INACTIVO, usuario); //facturacionDA.ActualizarComprobante(ConstantesING.ACCION_ACTUALIZAR, asiento.COMPROBANTE[0].ID_COMPROBANTE, // asiento.COMPROBANTE[0].TIPO_DOCUMENTO, asiento.COMPROBANTE[0].MONEDA, asiento.COMPROBANTE[0].FECHA_EMISION, // asiento.COMPROBANTE[0].CODIGO_CLIENTE, "", "", asiento.COMPROBANTE[0].COD_CONCEPTO, // "", "", Convert.ToDateTime("01/01/1900"), ConstantesING.ESTADO_ACTIVO, ConstantesING.NO, ConstantesING.NO, ConstantesING.SI, // asiento.COMPROBANTE[0].GLOSA, 1, asiento.COMPROBANTE[0].PRECIO_UNITARIO, // asiento.COMPROBANTE[0].VALOR_VENTA, asiento.COMPROBANTE[0].IGV, asiento.COMPROBANTE[0].TOTAL, usuario, ""); //facturacionDA.ActualizarDetalle(asiento.COMPROBANTE[0].ID_COMPROBANTE, 1, string.Format(descripcionComprobante, datosAsiento.FONDO, datosAsiento.TEXTO1, datosAsiento.TEXTO2), // null, ConstantesING.SI, datosAsiento.SUBF, usuario); //referenciaComprobante = dtComprobante.Rows[0]["SERIE"].ToString() + "-" + dtComprobante.Rows[0]["NUMERO"].ToString(); //if (!datosAsiento.IsID_OPERACIONNull() && datosAsiento.TIPO_ASIENTO == "VT_CRA") //{ // ht.Add(datosAsiento.ID_OPERACION, referenciaComprobante); //} #endregion } //OT 7349 FIN //OT7999 INI //comprobanteAsiento.Total = datosAsiento.TOTALF; //datosAsiento.TOTALF -- de tipo double if (comprobanteAsiento.TipoDocumento.Equals(ConstantesING.TIPO_DOCUMENTO_FACTURA)) { //se calcula la detraccion sólo si el documento es Factura bool tipoCambioHallado = setearTipoCambio(datosAsiento.FECHA_PROCESO); montoSoles = 0; if (datosAsiento.MONEDA != "PEN") { //dolares, convertir a soles //bool tipoCambioHallado = setearTipoCambio(); if (!tipoCambioHallado) { MessageBox.Show("No existe el valor del tipo de cambio para la fecha.", "Comprobantes"); //salir del proceso... } else { montoSoles = datosAsiento.TOTALF * tipoCambio; } } else { montoSoles = datosAsiento.TOTALF; } if (montoSoles >= 700) { //calcular detraccion //txtMontoDetrac.Text = (double.Parse(txtTotal.Text) * (dblPorcentajeDetraccion / 100)).ToString("0.00"); if (!valorDetraccionHallado) { MessageBox.Show("No existe el valor del porcentaje de detracción.", "Comprobantes"); //salir del proceso... } else { comprobanteAsiento.PorcentajeDetraccion = dblPorcentajeDetraccion; //comprobanteAsiento.MontoDetraccion = montoSoles * (dblPorcentajeDetraccion / 100); comprobanteAsiento.MontoDetraccion = datosAsiento.TOTALF * (dblPorcentajeDetraccion / 100); } } } else { //No es factura comprobanteAsiento.PorcentajeDetraccion = 0; comprobanteAsiento.MontoDetraccion = 0; } //OT7999 FIN comprobanteAsiento.Moneda = datosAsiento.MONEDA == "PEN" ? "S" : "D"; comprobanteAsiento.FechaEmision = datosAsiento.FECHA_PROCESO; comprobanteAsiento.Cliente.CodigoCliente = datosAsiento.CODIGO_CLIENTE; comprobanteAsiento.Proceso = ""; comprobanteAsiento.Expediente = ""; comprobanteAsiento.TipoDocumentoRelacionado = ""; comprobanteAsiento.NumeroDocumentoRelacionado = ""; comprobanteAsiento.FechaDocumentoRelacionado = Convert.ToDateTime("01/01/1900"); comprobanteAsiento.Estado = ConstantesING.ESTADO_ACTIVO; comprobanteAsiento.FlagImpresion = ConstantesING.NO; comprobanteAsiento.FlagEnviado = ConstantesING.NO; comprobanteAsiento.FlagAfectoIgv = ConstantesING.SI; comprobanteAsiento.Glosa = comprobante.GLOSA; comprobanteAsiento.Cantidad = 1; comprobanteAsiento.ValorVenta = datosAsiento.SUBF; comprobanteAsiento.PrecioUnitario = datosAsiento.SUBF; comprobanteAsiento.Igv = datosAsiento.IGVF; comprobanteAsiento.Total = datosAsiento.TOTALF; comprobanteAsiento.Usuario = usuario; comprobanteAsiento.TipoNotaCredito = ""; facturacionDA.RegistrarComprobante(comprobanteAsiento); comprobanteAsiento.ListaDetalle = new List <DetalleFactura>(); DetalleFactura detalle = new DetalleFactura(); detalle.id_comprobante = comprobanteAsiento.IdComprobante; detalle.descripcion = string.Format(descripcionComprobante, datosAsiento.FONDO, datosAsiento.TEXTO1, datosAsiento.TEXTO2); detalle.cuenta = ""; detalle.afectoImpuesto = ConstantesING.SI; detalle.importe = datosAsiento.SUBF; facturacionDA.RegistrarDetalleComprobante(detalle, usuario); referenciaComprobante = comprobanteAsiento.Serie + "-" + comprobanteAsiento.Numero; if (!datosAsiento.IsID_OPERACIONNull() && datosAsiento.TIPO_ASIENTO == "VT_CRA") { ht.Add(datosAsiento.ID_OPERACION, referenciaComprobante); } #region CODIGO_COMENTADO //string respuesta = facturacionDA.InsertarComprobante(comprobante.TIPO_DOCUMENTO, // datosAsiento.MONEDA == "PEN" ? "S" : "D", datosAsiento.FECHA_PROCESO, // datosAsiento.CODIGO_CLIENTE, "", "", comprobante.COD_CONCEPTO, "", "", Convert.ToDateTime("01/01/1900"), // //OT 7349 INI // ConstantesING.ESTADO_ACTIVO, ConstantesING.SI, ConstantesING.SI, ConstantesING.NO, // //OT 7349 FIN // comprobante.GLOSA, 1, datosAsiento.SUBF, datosAsiento.SUBF, datosAsiento.IGVF, // datosAsiento.TOTALF, usuario, ""); //idComprobante = 0; //bool esNumero = Int32.TryParse(respuesta, out idComprobante); //DataTable dtComprobante = facturacionDA.ObtenerComprobante(comprobanteAsiento.IdComprobante.ToString()); //referenciaComprobante = comprobanteAsiento.Serie + "-" + comprobanteAsiento.Numero; //if (!datosAsiento.IsID_OPERACIONNull() && datosAsiento.TIPO_ASIENTO == "VT_CRA") //{ // ht.Add(datosAsiento.ID_OPERACION, referenciaComprobante); //} ////OT 7349 INI //if (esNumero) //{ // facturacionDA.IngresarDetalle(idComprobante, string.Format(descripcionComprobante, datosAsiento.FONDO, datosAsiento.TEXTO1, datosAsiento.TEXTO2), "", // ConstantesING.SI, datosAsiento.SUBF, usuario); //} //OT 7349 FIN //VERIFICAR SI datosAsiento TIENE VALOR EN UUID. SI TIENE, SE ACTUALIZA EL COMPROBANTE, SINO SE INSERTA #endregion } string uuid = null; if (sapActivo) //solo se generan los asientos si es que el flag de sap se encuentra activo. { //string uuid = da.RegistrarControl(usuario, direccionIP, referencia, cn, trans); uuid = da.RegistrarControl(usuario, direccionIP, referencia, cantidadSubDetalle, datosAsiento.TIPO_ASIENTO, cn, trans); //cantidadSubDetalle if (datosAsiento.TIPO_ASIENTO == "PD_CRA") { referenciaComprobante = ht[datosAsiento.ID_OPERACION].ToString(); } //continuar validando, probablemente este bloque tambien puede ir dentro Asiento.SAPAR1Row sapar1Row = asiento.SAPAR1.NewSAPAR1Row(); sapar1Row.SAPUUI = uuid; sapar1Row.SAPSOC = drCabeceraTipo["SOCIEDAD_FI"].ToString().Trim(); #region CODIGO_COMENTADO //if (datosAsiento.TIPO_ASIENTO == "PD_CRA") //{ // sapar1Row.SAPNU5 = datosAsiento.REFERENCIA; // datosAsiento.REFERENCIA = ""; //} //else //{ //} #endregion sapar1Row.SAPNU5 = generaAsiento; sapar1Row.SAPCLA = drCabeceraTipo["CLASE_DOCUMENTO"].ToString().Trim(); sapar1Row.SAPMON = drCabeceraTipo["MONEDA_DOCUMENTO"].ToString().Trim(); sapar1Row.SAPFEC = datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd"); sapar1Row.SAPFE1 = datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd"); //sapar1Row.SAPFE2 = datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd"); //colocando tipo de cambio para asientos con TC if (datosAsiento.TIPO_CAMBIO > 0) { sapar1Row.SAPTAS = datosAsiento.TIPO_CAMBIO; } else { sapar1Row.SAPFE2 = datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd"); } sapar1Row.SAPREF = datosAsiento.IsREFERENCIANull() || datosAsiento.REFERENCIA == "" ? (drCabeceraTipo.IsNull("REFERENCIA") || drCabeceraTipo["REFERENCIA"].ToString().Trim() == "" ? referencia : drCabeceraTipo["REFERENCIA"].ToString().Trim()) : datosAsiento.REFERENCIA; if (datosAsiento.TIPO_ASIENTO == "VT_ING" || datosAsiento.TIPO_ASIENTO == "VT_CRA" || datosAsiento.TIPO_ASIENTO == "PD_CRA") { sapar1Row.SAPREF = referenciaComprobante; } string textoCabecera1 = string.Format(drCabeceraTipo["TEXTO_CABECERA"].ToString(), datosAsiento.TEXTO1, datosAsiento.TEXTO2); if (textoCabecera1.Length > 25) { textoCabecera1 = textoCabecera1.Substring(0, 25); } sapar1Row.SAPTEX = textoCabecera1; sapar1Row.SAPLIB = string.Empty; asiento.SAPAR1.AddSAPAR1Row(sapar1Row); da.RegistrarCabeceraAsiento(sapar1Row, cn, trans); int i = 1; int k = 1; foreach (DataRow filaMovimiento in drDetallesTipo) { if (Convert.ToDecimal(datosAsiento["MONTO" + i.ToString()]) == 0) { i++; continue; } Asiento.SAPAR2Row sapar2Row = asiento.SAPAR2.NewSAPAR2Row(); sapar2Row.SetParentRow(sapar1Row); sapar2Row.SAPNU7 = k; sapar2Row.SAPTI4 = filaMovimiento["CLAVE_CONTABILIZACION"].ToString().Trim(); //TIPO_MOVIMIENTO sapar2Row.SAPCL2 = string.Empty; //CLASE MOVIMIENTO sapar2Row.SAPIMP = Convert.ToDecimal(datosAsiento["MONTO" + i.ToString()]); i++; k++; string glosa = string.Format(filaMovimiento["TEXTO_POSICION"].ToString(), datosAsiento.TEXTO1, datosAsiento.TEXTO2); if (glosa.Length > 50) { glosa = glosa.Substring(0, 50); } sapar2Row.SAPTE1 = glosa; sapar2Row.SAPASI = filaMovimiento["ASIGNACION"].ToString().Trim(); string referencia1 = string.Format(filaMovimiento["REFERENCIA1"].ToString(), datosAsiento.REFERENCIA1); if (referencia1.Length > 12) { referencia1 = referencia1.Substring(0, 12); } sapar2Row.SAPRE3 = referencia1; string referencia3 = string.Format(filaMovimiento["REFERENCIA3"].ToString(), datosAsiento.REFERENCIA3); if (referencia3.Length > 20) { referencia3 = referencia3.Substring(0, 20); } sapar2Row.SAPR04 = referencia3; sapar2Row.SAPCUE = filaMovimiento["CUENTA"].ToString().Trim().PadRight(10, '0'); if (filaMovimiento["TIPO_OBJETO_IMPUTACION"] != null) { sapar2Row.SAPTI5 = filaMovimiento["TIPO_OBJETO_IMPUTACION"].ToString().Trim(); sapar2Row.SAPOBJ = filaMovimiento["OBJETO_IMPUTACION"].ToString().Trim(); } sapar2Row.SAPIND = filaMovimiento["INDICADOR_IGV"].ToString().Trim(); sapar2Row.SAPFE3 = datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd"); sapar2Row.SAPCON = ""; sapar2Row.SAPVIA = ""; asiento.SAPAR2.AddSAPAR2Row(sapar2Row); da.RegistrarDetalleAsiento(sapar2Row, cn, trans); } da.ActualizarControl(uuid, cn, trans); da.RegistrarControlAsiento(uuid, datosAsiento, usuario, cn, trans); if (datosAsiento.TIPO_ASIENTO == "VT_ING" || datosAsiento.TIPO_ASIENTO == "VT_CRA") { facturacionDA.ActualizarComprobanteIdentificador(comprobanteAsiento.IdComprobante, uuid); } } } trans.Commit(); facturacionDA.CommitTransaccion(); } catch (Exception ex) { trans.Rollback(); facturacionDA.RollbackTransaccion(); throw ex; } finally { trans.Dispose(); cn.Close(); cn.Dispose(); facturacionDA.LiberarConexion(); } }