///*******************************************************************************************************
        ///NOMBRE_FUNCIÓN: Imprimir_Recibo
        ///DESCRIPCIÓN: Formar un string con la información del recibo de pago y anviar a la impresora
        ///PARÁMETROS:
        ///CREO: Roberto González Oseguera
        ///FECHA_CREO: 24-oct-2013
        ///MODIFICÓ:
        ///FECHA_MODIFICÓ:
        ///CAUSA_MODIFICACIÓN:
        ///*******************************************************************************************************
        private void Imprimir_Recibo()
        {
            StringBuilder Texto_Imprimir = new StringBuilder(120);
            // consultar parámetros
            var Obj_Parametros = new Cls_Apl_Parametros_Negocio();

            Obj_Parametros = Obj_Parametros.Obtener_Parametros();
            int     Cantidad_Producto;
            decimal Total_Producto;
            decimal Total_Pagado;
            Dictionary <string, string> Dic_Formas_Pago = Obtener_Formas_Pago();

            // validar que la tabla no sea nulo
            if (Dt_Datos_Pago != null && Dt_Datos_Pago.Columns.Contains("ACCESOS"))
            {
                // formar texto del recibo
                Texto_Imprimir.AppendLine(Obj_Parametros.P_Encabezado_Recibo + "\n");
                Texto_Imprimir.AppendLine("Fecha " + DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss").ToLower());
                // encabezado detalles:
                Texto_Imprimir.AppendLine("".PadLeft(40, '-') + "\n" + "  Producto                       Precio\n" + "".PadLeft(40, '-'));
                // recorrer la tabla
                foreach (DataRow Fila_Venta in Dt_Datos_Pago.Rows)
                {
                    // obtener la cantidad de productos y validar que sea mayor que cero
                    if (int.TryParse(Fila_Venta["CANTIDAD"].ToString(), out Cantidad_Producto) == true && Cantidad_Producto > 0)
                    {
                        // obtener el tipo de producto y recortar si excede la longitud
                        Tipo_Acceso = Fila_Venta["PRODUCTO"].ToString();
                        if (Tipo_Acceso.Length > 23)
                        {
                            Tipo_Acceso = Tipo_Acceso.Substring(0, 23);
                        }
                        decimal.TryParse(Fila_Venta["TOTAL"].ToString(), out Total_Producto);
                        // agregar línea producto
                        Texto_Imprimir.AppendLine(
                            Cantidad_Producto.ToString().PadLeft(4, '0') + " "
                            + Tipo_Acceso.PadRight(23) + " "
                            + Total_Producto.ToString("#,##0.00").PadLeft(10)
                            );
                        // si es un SERVICIO y se imprime, enviar impresión a la impresora de servicios
                        if (string.Compare(Fila_Venta["TIPO"].ToString(), "Servicio", true) == 0 && string.Compare(Fila_Venta["IMPRIMIR"].ToString(), "True", true) == 0 && !string.IsNullOrEmpty(Obj_Impresora_Caja.P_Impresora_Servicios))
                        {
                            string Imprimir_Servicio = Tipo_Acceso + "\n\n\n\n\n";
                            // enviar a imprimir productos
                            for (int i = 0; i < Cantidad_Producto; i++)
                            {
                                RawPrinterHelper.Enviar_Texto_Impresora(Obj_Impresora_Caja.P_Impresora_Servicios, Reemplazo_StringBuilder(new StringBuilder(Imprimir_Servicio)).ToString(), "Servicio " + i + 1 + No_Venta);
                            }
                        }
                    }
                }
                // separador y total
                Texto_Imprimir.AppendLine("".PadLeft(40, '-') + "\n" + "Subtotal".PadRight(24) + Subtotal_Pago.ToString("c").PadLeft(15));
                // si hay descuento: mostrar
                if (Descuento_Pago > 0)
                {
                    Texto_Imprimir.AppendLine(("Descuento " + Motivo_Descuento).PadRight(29) + Descuento_Pago.ToString("c").PadLeft(10));
                }
                Texto_Imprimir.AppendLine("Total".PadRight(24) + Total_Pago.ToString("c").PadLeft(15));
                // agregar forma de pago
                if (Dt_Formas_Pago != null)
                {
                    string Tarjeta = "";
                    string Str_Forma_Pago;
                    foreach (DataRow Fila in Dt_Formas_Pago.Rows)
                    {
                        Str_Forma_Pago = "";
                        if (Dic_Formas_Pago.ContainsKey(Fila["Forma_Id"].ToString()))
                        {
                            Str_Forma_Pago = Dic_Formas_Pago[Fila["Forma_Id"].ToString()];
                        }
                        decimal.TryParse(Fila["Monto_Pago"].ToString(), out Total_Pagado);
                        Texto_Imprimir.AppendLine(("Su pago " + Str_Forma_Pago).PadRight(24) + Total_Pagado.ToString("c").PadLeft(15));
                        Tarjeta = Fila["Numero_Tarjeta_Banco"].ToString().Trim();
                        // si hay un número de tarjeta, mostrar últimos 3 caracteres
                        if (!string.IsNullOrEmpty(Tarjeta))
                        {
                            Texto_Imprimir.AppendLine(Tarjeta.Substring(Tarjeta.Length - 3, 3).PadLeft(16, '*'));
                        }
                    }
                }

                // folio y cajero
                Texto_Imprimir.AppendLine("\nFolio: " + No_Venta);
                Texto_Imprimir.AppendLine("Cajero: Usuario Punto Venta Web");

                // obtener datos del grupo
                Cls_Ope_Grupos_Negocio Obj_Grupos_Negocio = new Cls_Ope_Grupos_Negocio();
                Obj_Grupos_Negocio.P_No_Venta = No_Venta;
                DataTable Dt_Grupos = Obj_Grupos_Negocio.Consultar_Grupos();
                if (Dt_Grupos != null && Dt_Grupos.Rows.Count > 0)
                {
                    // agregar datos del grupo
                    Texto_Imprimir.AppendLine("".PadLeft(40, '-') + "\n" + "Grupo " + Dt_Grupos.Rows[0][Ope_Ventas.Campo_Empresa].ToString());
                    Texto_Imprimir.AppendLine(Dt_Grupos.Rows[0][Ope_Ventas.Campo_Persona_Tramita].ToString());
                }

                // separador y mensaje del día
                Texto_Imprimir.AppendLine("\n" + Obj_Parametros.P_Mensaje_Dia_Recibo + "\n\n\n\n\n\n\n\n");

                //// enviar a la impresora
                RawPrinterHelper.Enviar_Texto_Impresora(Obj_Impresora_Caja.P_Impresora_Pago, Reemplazo_StringBuilder(Texto_Imprimir).ToString(), "Venta " + No_Venta);
                //RawPrinterHelper.Enviar_Texto_Impresora(Obj_Impresora_Caja.P_Impresora_Pago, Texto_Imprimir.ToString().Replace("ñ", "\x0A4").Replace("á", "\x0A0"), "Venta " + No_Venta);
            }
        }