Herramientas de usuario

Herramientas del sitio


ada:sicoferp:financiero:presupuesto:compromisos:rp_consulta

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
ada:sicoferp:financiero:presupuesto:compromisos:rp_consulta [2021/10/07 00:50]
181.132.78.221 creado
ada:sicoferp:financiero:presupuesto:compromisos:rp_consulta [2026/07/14 21:28] (actual)
192.168.175.197 [Inclusión de Código CPC DANE - Reporte de Compromisos]
Línea 5: Línea 5:
 ===== Pestaña: Lista Compromisos ===== ===== Pestaña: Lista Compromisos =====
  
-{{ :​ada:​sicoferp:​financiero:​presupuesto:​compromisos:​2021-10-06_19h45_31.png?nolink&​600 ​|}}+{{:​ada:​sicoferp:​financiero:​presupuesto:​compromisos:​compromiso_lista.png?400|}}
  
 En esta pestaña se listan los compromisos. En esta pestaña se listan los compromisos.
Línea 14: Línea 14:
  
 En esta pestaña se encuentra la información asociada al compromiso En esta pestaña se encuentra la información asociada al compromiso
 + 
 +==== Contratos ====
 +{{:​ada:​sicoferp:​financiero:​presupuesto:​compromisos:​captura_contrato1.png?​400|}}
  
 ===== Pestaña: Rubros ===== ===== Pestaña: Rubros =====
Línea 20: Línea 23:
  
 En esta pestaña se encuentra el rubro, la disponibilidad y el articulo que quedara asociado al compromiso. 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 ===
 +
 +
 +===== Inclusión de Código CPC DANE - Reporte de Compromisos =====
 +=== 1. Descripción del Cambio ===
 +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.
 +
 +
 +=== 2. Solución Funcional ===
 +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.
 +
 +
 +=== 3. Solución Técnica ===
 +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.
 +
 +
 +=== 4. Datos del Objeto ===
 +Módulo: Presupuesto
 +Reporte: Detalle de Compromisos (CEFIT).
 +DataWindow: r_compromiso_doc_det_cefit.
  
  
ada/sicoferp/financiero/presupuesto/compromisos/rp_consulta.1633567843.txt.gz · Última modificación: 2021/10/07 00:50 por 181.132.78.221