¡Esta es una revisión vieja del documento!
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: [Nombre del Módulo, ej: Compras / Almacén] Reporte: Detalle de Compromisos (CEFIT). DataWindow: r_compromiso_doc_det_cefit.