FAQ

No aparece botón de borrar port al entrar en Libra

A partir de la versión 4.x.x.5.7 y 5.0.1.0.1 del entorno el menú de Libra detecta por las sesiones de Oracle si el usuario tiene realmente programas abiertos, si no tiene automáticamente borra el port. En el caso de que no apareza el botón de borrado de borrado de port se debe a uno de estos dos motivos:

  • El usuario tiene otro Libra abierto.
  • Hay alguna sesión de Oracle colgada en el servidor.

Para el caso de que el usuario tenga otro Libra abierto y eso se vaya a dar de manera habiltual lo ideal es activar la check “Permitir multisesión” en el mantenimiento de Usuarios, para el caso de que quede alguna sesión de Oracle y no hay un administrador que pueda matarlas, se puede hacer que aparezca el botón de borrado de port como en versiones anteriores, para ello hay que ir al programa “Parámetros Menú” (U_MPRMEN) y activar la check “Permitir Borrar Port”.

Passwords en base de datos en UTF8

La “encripta” en UTF8 no funciona, lo ideal es tener al cliente en versión 2 de cifrado de password antes de hacer la migración, para eso vas al programa U_MPRMEN y ahí pones 2 en “Versión cifrado de password” y activas la check “Forzar migración de versión de cifrado” para que según vayan entrando los usuarios se migre su password de una versión a otra.

Si ya se hizo la importación en UTF8 ya no se va a poder compilar la encripta, por lo que ya no se pueden migrar las contraseñas por lo que hay que inicializarlas y activar la versión 2 de cifrado en los usuarios, para ello hacemos esto:

UPDATE menu_param
SET version_password = 2;

UPDATE usuarios
SET version_password = 2,
password = NULL;

COMMIT;

Como saber qué plantilla está seleccionada en un programa dinámico

La plantilla en un programa dinámico se encuentra en el campo :PLANTILLA.CODIGO_PLANTILLA que es accesible desde cualquier código pl/sql de personalización

No se tiene en cuenta la propiedad de Desactivar Modificación por personalización

Puede ser que al intentar indicar por personalización que un campo no pueda ser modificado no lo tenga en cuenta ya que dentro del propio fuente del programa se fuerza a que sea modificable. La explicación es que la condición “Desactivar Modificación” se establece únicamente al entrar en el programa, si dentro del código fuente se cambia se invalida la personalización.

Hay otras formas que pueden dar resultado para solucionar este problema:

  • Deshabilitar el campo desde la validación de otro campo:

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘SIP’, ‘BLOQUE.CAMPO’, ‘ENABLED’, ‘PROPERTY_FALSE’);

  • Hacer que al entrar el cursor en el campo salte al siguiente, mediante el código pl/sql de entrada en campo:

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘DO_KEY’, ‘NEXT_ITEM’);

Deshabilitar campo por pl/sql

Hay dos opciones:

  • En programas personalizados en la pestaña “Campo” activar la check “Deshabilitar” para ese campo.
  • Desde un código pl/sql con este código:

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘SIP’, ‘BLOQUE.CAMPO’, ‘ENABLED’, ‘PROPERTY_FALSE’);

Como borrar elementos de un list-item por personalización

Por ejemplo en el programa PASOIMPA (Paso a perjudicial / Abogado / Fallido) para dejar en las situaciones de destino únicamente “Abogado” y “No Impagado” habría que meter este “Código pl/sql de Inicialización” en la pestaña “Avanzadas de Programa”

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘DLE’, ‘B1.SITUACION_DESTINO’, 7);
PKPANTALLAS.COMANDO_PLUG_IN(‘DLE’, ‘B1.SITUACION_DESTINO’, 5);
PKPANTALLAS.COMANDO_PLUG_IN(‘DLE’, ‘B1.SITUACION_DESTINO’, 3);
PKPANTALLAS.COMANDO_PLUG_IN(‘DLE’, ‘B1.SITUACION_DESTINO’, 2);
PKPANTALLAS.COMANDO_PLUG_IN(‘DLE’, ‘B1.SITUACION_DESTINO’, 1);

  • DLE: Significa DELETE_LIST_ELEMENT
  • B1.SITUACION_DESTINO: Es el campo con el list-item que queremos modificar.
  • x: Es el número de elemento que queremos eliminar. Es recomendable comenzar de abajo para arriba.

Ejecutar consulta de un bloque, aplicando una condición y volver a dejar la condición original del bloque

Ejemplo:

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘SBP’, ‘B1’, ‘DEFAULT_WHERE’, ‘numero_parte = ‘ || :b1.numero_parte || ‘ AND codigo_org_calidad = ”’ || :b1.codigo_org_calidad || ”’ AND codigo_empresa = :global.codigo_empresa’);
PKPANTALLAS.COMANDO_PLUG_IN(‘DO_KEY’, ‘EXECUTE_QUERY’);
PKPANTALLAS.COMANDO_PLUG_IN(‘SBP’, ‘B1’, ‘DEFAULT_WHERE’, :GBP:B1:DEFAULT_WHERE);
PKPANTALLAS.COMANDO_PLUG_IN(‘GO_ITEM’, :system.cursor_item);

Los usuarios de Terminal Server se quejan de que Libra va lento

Antes en el archivo libra6.ini se indicaba menu_mdi_ts para los puestos de terminal server. En las últimas versiones de entorno no existe el menu_mdi_ts y en el libra6.ini únicamente hay que dejar el menu_mdi normal ya que ahora la gestión se realiza desde el mantenimiento de puestos (programa “PUESTOS”) en donde hay que crear / modificar el puesto y en el campo “Tipo Puesto” hay que indicar que es “Terminal Server”, una vez está creado el puesto en el libra6.ini hay que indicar:

LIBRA_ID=<codigo_puesto>

Ejemplo:

  • Creamos en PUESTOS el puesto con código TS y en Tipo Puesto ponemos “Terminal Server”.
  • Modificamos el libra6.ini con
    • LIBRA_ID=TS

Al imprimir a Excel genera un archivo .dflt en vez de un .xls

Eso quiere decir que el programa no tiene bien definido el campo “Archivo Excel” en el mantenimiento de programas. Tiene puesto “Si – Desde Report” pero el report no tiene el código para enviarse a Excel. Para solucionarlo hay dos opciones:

  • Meter el código el el report para que genere la excel.
  • Cambiar en el mantenimiento de programas el campo “Archivo Excel” a “Si – Usando Rep2excel”.

Cambiar por pl/sql de personalización el atributo visual de un campo

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘SIIP’, ‘BLOQUE.CAMPO’, ‘VISUAL_ATTRIBUTE’, ‘ROJO’);

Cambiar la fuente de un campo text-item

Se haría por pl/sql, por ejemplo en el de inicialización de programa de la siguiente forma:

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘SIP’, ‘PROGRAMAS_ERP_CAMPOS.LV_CODIGO_LISTA’, ‘FONT_NAME’, ‘Courier’);
PKPANTALLAS.COMANDO_PLUG_IN(‘SIP’, ‘PROGRAMAS_ERP_CAMPOS.LV_CODIGO_LISTA’, ‘CURRENT_ROW_FONT_NAME’, ‘Courier’);

Hacer obligatorio por pl/sql un campo y poner a la vez su etiqueta en negrita

Para hacer las dos cosas a la vez hay que hacerlo por código pl/sql de la siguiente forma:

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘SIP’, ‘BLOQUE.CAMPO’, ‘REQUIRED’, ‘PROPERTY_FALSE’);
PKPANTALLAS.COMANDO_PLUG_IN(‘SIP’, ‘BLOQUE.CAMPO’, ‘PROMPT_VISUAL_ATTRIBUTE’, ‘CAMPO_OBLIGATORIO_PROMPT’);

Este proceso es útil cuando se quiere hacer obligatorio un campo de forma condicional, ya que si el campo se quiere hacer obligatorio de forma permanente en el mantenimiento de programas lo más simple es activar la check “Obligar” del campo.

Libra se queda colgado en Forms10g al enviar una opción de menú al escritorio

Si al enviar una opción de menú al escritorio en Forms10g Libra se queda colgado, la causa más probable es que no esté especificada la variable UI_ICON en el archivo libra.env. Para solucionarlo hay que añadir la siguiente línea al archivo $ORACLE_HOME/forms/server/libra.env (cambiar /libra/iconos por la ruta correcta en caso de que Libra no esté montado en /libra)

UI_ICON=/libra/iconos

Cambiar la alineación de un campo por pl/sql de personalización

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘SIP’, ‘<BLOQUE>.<CAMPO>, ‘ALIGNMENT’, ‘<tipo_alineado>’);

<tipo_alineado> puede contener alguno de estos valores:

  • ALIGNMENT_START: Al principo.
  • ALIGNMENT_END: Al final.
  • ALIGNMENT_LEFT: A la izquierda.
  • ALIGNMENT_ CENTER: Al centro.
  • ALIGNMENT_RIGHT: A la derecha.

Ejemplo:

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘SIP’, ‘PROGRAMAS_ERP_CAMPOS.LV_CODIGO_LISTA’, ‘ALIGNMENT’, ‘ALIGNMENT_END’);

Ocultar la botonera vertical completa por personalización

Meter en el código pl/sql de incialización a nivel de programa lo siguiente:

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘SMIP’,’MENU_PRINCIPAL.BOTONES_VERTICALES’,’ENABLED’, ‘PROPERTY_FALSE’);

Cambiar desde un campo la lista de valores de otro

Ejemplo: Cambiar la lista de valores del campo B1.NUMERO_PED_CLIENTE desde la validación del campo B1.TIPO_PEDIDO

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
IF :b1.tipo_pedido = 'EN' THEN
  PKPANTALLAS.COMANDO_PLUG_IN('PKLIBPNT_SIP', 'B1.NUMERO_PED_CLIENTE', 'LV_CODIGO_LISTA', 'ENCARGOS');
ELSIF IF :b1.tipo_pedido = 'AP' THEN
  PKPANTALLAS.COMANDO_PLUG_IN('PKLIBPNT_SIP', 'B1.NUMERO_PED_CLIENTE', 'LV_CODIGO_LISTA', 'APARTADOS');
ELSE
  PKPANTALLAS.COMANDO_PLUG_IN('PKLIBPNT_SIP', 'B1.NUMERO_PED_CLIENTE', 'LV_CODIGO_LISTA', 'V_DOCANTICIPOS');
END IF;

La ventaja de hacerlo de esta forma es que el campo B1.NUMERO_PED_CLIENTE si tiene marcada la propiedad validar desde lista de valores, aplicará la validación según la lista de valores que tenga en ese momento. Hay que tener en cuenta que en este ejemplo únicamente se está cambiando cuando se modifica el valor de B1.TIPO_PEDIDO, para contemplar el 100% de las casuisticas habría que contemplar cuando el usuario navega de un registro a otro, para ello habría que meter este mismo código pl/sql en el código pl/sql de entrada en registro a nivel de bloque.

Deshabilitar por código pl/sql de personalizacion un botón de la botonera vertical que está dentro del fuente.

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘SMIP’,’BOTONES_VERTICALES.B01′,’ENABLED’, ‘PROPERTY_FALSE’);
PKPANTALLAS.COMANDO_PLUG_IN(‘SMIP’,’OPCIONES.B01′,’ENABLED’, ‘PROPERTY_FALSE’);

Es importante tener en cuenta que a partir del entorno 6.0.5, se podría personalizar en el mantenimiento de programas personalizados el botón B01, en la pestaña Botonera, para indicar los perfiles de usuarios que lo pueden usar.

Navegar a un determinado campo al entrar en un programa dinámico

Si al navegar a un programa dinámico nos interesa que el cursor se posicione en un determinado campo de la primera pestaña hay que hacer lo siguiente en el código pl/sql de entrada en registro del primer bloque navegable del programa:

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘GO_ITEM’, ‘BLOQUE.CAMPO’);
PKPANTALLAS.COMANDO_PLUG_IN(‘PKLIBPNT_SBP’, ‘BLOQUE’, ‘CODIGO_PL_SQL_ENTRADA’, NULL);

NOTA: La última línea lo que hace es borrar el código pl/sql para que únicamente se ejecute una vez.

En caso de que el campo al que se quiere navegar no esté en la primera pestaña lo que hay que hacer es posicionar el cursor en el último campo de la pestaña anterior, forzar un salto de campo y luego posicionarnos en el campo que se quiere:

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘GO_ITEM’, ‘BLOQUE.ULTIMO_CAMPO_PESTAÑA’);
PKPANTALLAS.COMANDO_PLUG_IN(‘EXECUTE_TRIGGER’, ‘KEY-NEXT-ITEM’);
PKPANTALLAS.COMANDO_PLUG_IN(‘GO_ITEM’, ‘BLOQUE.CAMPO’);
PKPANTALLAS.COMANDO_PLUG_IN(‘PKLIBPNT_SBP’, ‘BLOQUE’, ‘CODIGO_PL_SQL_ENTRADA’, NULL);

Ejemplo:

PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
PKPANTALLAS.COMANDO_PLUG_IN(‘GO_ITEM’, ‘CAMPOS.COMENTARIOS’);
PKPANTALLAS.COMANDO_PLUG_IN(‘EXECUTE_TRIGGER’, ‘KEY-NEXT-ITEM’);
PKPANTALLAS.COMANDO_PLUG_IN(‘GO_ITEM’, ‘CAMPOS.ITEMA021’);
PKPANTALLAS.COMANDO_PLUG_IN(‘PKLIBPNT_SBP’, ‘CAMPOS’, ‘CODIGO_PL_SQL_ENTRADA’, NULL);

 

Cambiar la apariencia del programa U_MSG

Con este pl/sql se puede hacer que los mensajes que gestiona U_MSG le ponga fondo blanco a la pantalla, la haga un poco más pequeña, cambie la fuente de del texto y posicione la ventana en unas determinadas coordenadas. Para que funcione habría que personalizar el programa U_MSG y en código pl/sql de inicialización de programa habría que meter lo siguiente:

IF :global.tipo_puesto = 'P' AND  NVL(:parameter.p_forzar_confirmacion, 'N') = 'N' THEN
  PKPANTALLAS.INICIALIZAR_CODIGO_PLUG_IN;
  PKPANTALLAS.COMANDO_PLUG_IN('SCP', 'CANVAS_MENSAJE', 'BACKGROUND_COLOR', 'r255g255b255');
  PKPANTALLAS.COMANDO_PLUG_IN('SIP', 'BMENSAJE.SI', 'Y_POS', '0,543');
  PKPANTALLAS.COMANDO_PLUG_IN('SIP', 'BMENSAJE.SI', 'X_POS', '0,028');
  PKPANTALLAS.COMANDO_PLUG_IN('SIP', 'BMENSAJE.NO', 'Y_POS', '0,543');
  PKPANTALLAS.COMANDO_PLUG_IN('SIP', 'BMENSAJE.NO', 'X_POS', '0,857');
  PKPANTALLAS.COMANDO_PLUG_IN('SIP', 'BMENSAJE.ACEPTAR', 'Y_POS', '0,543');
  PKPANTALLAS.COMANDO_PLUG_IN('SIP', 'BMENSAJE.ACEPTAR', 'X_POS', '0,028');
  PKPANTALLAS.COMANDO_PLUG_IN('SIP', 'BMENSAJE.CANCELAR', 'Y_POS', '0,543');
  PKPANTALLAS.COMANDO_PLUG_IN('SIP', 'BMENSAJE.CANCELAR', 'X_POS', '1,687');
  PKPANTALLAS.COMANDO_PLUG_IN('SIP', 'BMENSAJE.TEXTO', 'WIDTH', '2,26');
  PKPANTALLAS.COMANDO_PLUG_IN('SIP', 'BMENSAJE.TEXTO', 'HEIGHT', '0,364');
  PKPANTALLAS.COMANDO_PLUG_IN('SCP', 'CANVAS_MENSAJE', 'HEIGHT', '0,875');
  PKPANTALLAS.COMANDO_PLUG_IN('SCP', 'CANVAS_MENSAJE', 'WIDTH', '2,375');
  PKPANTALLAS.COMANDO_PLUG_IN('SWP', 'VENTANA_MENSAJE', 'HEIGHT', '0,875');
  PKPANTALLAS.COMANDO_PLUG_IN('SWP', 'VENTANA_MENSAJE', 'WIDTH', '2,375');
  PKPANTALLAS.COMANDO_PLUG_IN('SWP', 'VENTANA_MENSAJE', 'Y_POS', '1,97');
  PKPANTALLAS.COMANDO_PLUG_IN('SWP', 'VENTANA_MENSAJE', 'X_POS', '0,04');
  PKPANTALLAS.COMANDO_PLUG_IN('SVAP', 'BLOQUE_REGISTRO_UNICO', 'FONT_SIZE', '900');
  PKPANTALLAS.COMANDO_PLUG_IN('SVAP', 'BLOQUE_REGISTRO_UNICO', 'FONT_WEIGHT', '7');
END IF;