La siguiente funcionalidad permite realizar la consulta de los compromisos.
En esta pestaña se encuentra la información asociada al compromiso
En esta pestaña se encuentra el rubro, la disponibilidad y el articulo que quedara asociado al compromiso.
Se ha implementado una funcionalidad que permite a los usuarios exportar los detalles de los registros consultados a formato PDF. Esta característica mejora la portabilidad y el archivo de los documentos generados por el sistema.
La funcionalidad se ha agregado a las siguientes ventanas de consulta:
Disponibilidades (w_disponibilidad_cons) Compromisos (w_compromiso_cons) Recepciones de pedido (w_causacion_documento) Órdenes de pago (w_ordenes_pago_cons)
La implementación se basa en los siguientes elementos de PowerBuilder:
Botón: cb_exportar_pdf Evento clicked: Llama a la función principal de generación de PDF. Función Principal: wf_generar_pdf() Responsabilidad: Contiene toda la lógica para iterar sobre los registros seleccionados, configurar las propiedades del PDF y generar los archivos.
El proceso que sigue el sistema al hacer clic en el botón es el siguiente:
Verificación de Directorios: El sistema comprueba si la ruta C:\COMPROBANTES\[Modulo] existe. Si no, la crea. Iteración de Registros: Se recorre la lista principal (dw_lista) para identificar todas las filas que el usuario ha seleccionado. Preparación del DataStore: Para cada registro seleccionado: Se crea un uo_datastore en memoria. Se le asigna el DataObject del reporte correspondiente (ej: f_formato_documento(2, '01')). Se ejecuta el Retrieve() para cargar los datos específicos del registro. Configuración de Exportación a PDF: Se establecen las propiedades del DataWindow para la correcta generación del PDF. Este es el paso más crítico. Generación del Archivo: Se invoca la función ldw_dw.SaveAs(ls_pathfilename, PDF!, TRUE). Notificación: Al finalizar el bucle, se informa al usuario si la exportación fue exitosa o si no se seleccionó ningún registro.
Para que la exportación a PDF funcione correctamente en los equipos de los usuarios, se deben cumplir los siguientes requisitos, ya que se utiliza el método Distill!.
Método de Exportación: DataWindow.Export.PDF.Method = Distill!
Este método utiliza un motor externo para “destilar” un archivo PostScript a PDF, lo que ofrece alta fidelidad con el diseño original. Dependencia 1: Ghostscript
Requisito: Debe estar instalado en cada máquina cliente que vaya a utilizar esta funcionalidad. Configuración: La carpeta bin de la instalación de Ghostscript (que contiene gswin32c.exe) debe estar agregada a la variable de entorno PATH del sistema. De lo contrario, PowerBuilder no lo encontrará y el SaveAs devolverá un error -1. Dependencia 2: Impresora Virtual “Sybase DataWindow PS”
Requisito: Debe existir una impresora con el nombre exacto Sybase DataWindow PS. Instalación Manual: Ir a Dispositivos e Impresoras y Agregar una impresora. Seleccionar “Agregar una impresora local o de red con configuración manual”. Elegir “Usar un puerto existente” y seleccionar FILE: (Imprimir a un archivo). Seleccionar un controlador (driver) PostScript (PS). Uno genérico como HP LaserJet 2200 Series PS es una opción segura. Asignar el nombre exacto: Sybase DataWindow PS. No compartirla y finalizar la instalación.
Durante el desarrollo, se encontraron y solucionaron los siguientes inconvenientes:
Problema: El contenido del reporte se cortaba horizontalmente, generando una segunda página en blanco a la derecha. Causa: Discrepancias entre el tamaño de papel del diseño del DataWindow y la configuración de la impresora virtual o los márgenes por defecto del motor de PDF. Solución: Se realiza configuración con la resolución de la pantalla para que permita la exportación correcta resolución de 1366 x 768.
String ls_tipo, ls_ruta, ls_pathfilename,ls_valor,ls_estado long ll_selected, ll_count, ll_reintentos, ll_filesize, i, ll_estado_valido Decimal ld_cod_documento, ld_consecutivo_recep_pedido integer li_ret
uo_datastore ldw_dw ldw_dw = Create uo_datastore
ll_count = carpeta.pagina1.dw_lista.RowCount() ll_selected = 0
ls_ruta = “C:\COMPROBANTES\Causaciones” IF NOT DirectoryExists(“C:\COMPROBANTES”) THEN CreateDirectory(“C:\COMPROBANTES”) IF NOT DirectoryExists(ls_ruta) THEN CreateDirectory(ls_ruta)
FOR i = 1 TO ll_count
ll_estado_valido = 0
ld_consecutivo_recep_pedido = carpeta.pagina1.dw_lista.GetItemDecimal(i, "consecutivo")
ls_estado = carpeta.pagina1.dw_lista.GetItemString(i, "estado")
IF carpeta.pagina1.dw_lista.IsSelected(i) AND ld_consecutivo_recep_pedido <> 0 THEN
IF ls_estado = 'Y' or ls_estado = 'P' or ls_estado = 'p' THEN
MessageBox("Error", "No se pudo exportar la causación: " + String(ld_consecutivo_recep_pedido) &
+ " El estado actual no es válido para este proceso.")
ll_estado_valido = 1
END IF
ld_cod_documento = carpeta.pagina1.dw_lista.GetItemDecimal(i, "codigo_documento")
guo_app.of_sql_embedded_context( sqlca )
SELECT VALOR_ALFA
INTO :ls_valor
FROM M_CONSTANTES
WHERE TRIM(DESCRIPCION) = 'CAUSACION CONTABLE'
USING SQLCA;
ldw_dw.DataObject = ls_valor // f_formato_documento(4, '01')
ldw_dw.SetTransObject(ts_transaccion)
li_ret = ldw_dw.Retrieve(ld_cod_documento)
ls_pathfilename = ls_ruta + "\CXP" +' '+ String(ld_consecutivo_recep_pedido) + ".pdf"
ldw_dw.Object.DataWindow.Export.PDF.Method = Distill!
ldw_dw.Object.DataWindow.Printer = "Sybase DataWindow PS"
ldw_dw.Modify("DataWindow.PDF.XSLFOP.Print=NO")
ldw_dw.object.DataWindow.Export.PDF.Distill.CustomPostScript = "YES"
li_ret = ldw_dw.SaveAs(ls_pathfilename, PDF!, TRUE)
IF li_ret <> 1 OR ll_estado_valido = 1 THEN
MessageBox("Error", "No se pudo exportar la recepción de pedido: " + String(ld_consecutivo_recep_pedido))
END IF
ll_selected++
END IF
NEXT
IF ll_selected > 0 THEN
MessageBox("Información", "Se finalizó la exportación.")
ELSE
MessageBox("Sin acción", "No se seleccionó ningún documento válido para ser exportado.")
END IF
RETURN 1
Se integró el campo “Código CPC DANE” en el reporte de detalles de compromiso. Para lograr una visualización limpia, se optimizó el diseño del reporte ocultando espacios innecesarios y priorizando la aparición de este nuevo dato.
Nueva Información: Ahora el reporte muestra el Código CPC DANE asociado a los artículos del compromiso, un dato necesario para la clasificación y reportes de la entidad. Mejora Visual: Se ajustó el diseño del reporte para ocultar campos que estaban en blanco o sin uso. Esto permitió liberar espacio y “pintar” el nuevo código de forma clara y ordenada sin saturar el documento.
Librería Modificada: sf01cmps.pbl Objeto Modificado: DataWindow r_compromiso_doc_det_cefit Detalles del Cambio: Consulta SQL: Se modificó la sentencia SQL del DataWindow para incluir un nuevo campo proveniente de la tabla maestra de artículos: MAESTRO_ARTICULOS.CODIGO_DANE. Ajuste de Layout: En el diseñador del DataWindow, se reorganizaron los objetos. Se ocultaron los campos que no contenían información para posicionar y hacer visible el nuevo campo de código DANE en el espacio recuperado.
Módulo: Presupuesto Reporte: Detalle de Compromisos (CEFIT). DataWindow: r_compromiso_doc_det_cefit.