Herramientas de usuario

Herramientas del sitio


ada:sicoferp:financiero:presupuesto:compromisos:rp_consulta

¡Esta es una revisión vieja del documento!


Compromisos - Consulta

La siguiente funcionalidad permite realizar la consulta de los compromisos.

Pestaña: Lista Compromisos

En esta pestaña se listan los compromisos.

Pestaña: Compromisos

En esta pestaña se encuentra la información asociada al compromiso

Contratos

Pestaña: Rubros

En esta pestaña se encuentra el rubro, la disponibilidad y el articulo que quedara asociado al compromiso.

Implementación del Botón "Exportar a PDF"

1. Propósito

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.

2. Módulos Afectados

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)

3. Componentes Técnicos Clave

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.

4. Flujo de Ejecución

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.

5. Configuración Técnica y Dependencias (¡Muy Importante!)

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.

6. Solución a Problemas Comunes Implementada en el Código

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.

continuación, se muestra el fragmento de código relevante de la función wf_generar_pdf en w_causacion_documentos.srw:

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

Desarrollado por: [Miguel Muñoz] Fecha: [02/07/2026] Versión de PB: 12.5

ada/sicoferp/financiero/presupuesto/compromisos/rp_consulta.1782995074.txt.gz · Última modificación: 2026/07/02 12:24 por brahian.castaneda