El ajuste manual seleccione opciones de valor

Tengo un programa que, entre otras cosas, recupera los datos de la tabla RESB basado en la bdter campo, un DAT tipo. En la pantalla de selección que el usuario especifica un rango o de rango estándar (inicio de mes – el día de hoy) se utiliza.

Sin embargo, si trato de re-uso de seleccionar la opción que he creado para la fecha en aquellos casos donde no está lleno (el usuario no introduce el rango de fecha), mis cambios a esta área de trabajo no parecen ser reconocido cuando yo lo uso en mi instrucción select.

Relevantes segmentos de código de seguimiento. Después de algunas pruebas he llegado a la conclusión de que:

  • si s_bdter no es modificada por el usuario y, posteriormente, establecido en el código, no hay registros filtrados
  • si s_bdter es modificada por el usuario, los registros están correctamente filtrada
  • si s_bdter es modificada por el usuario y posteriormente modificado en el código, los registros están correctamente filtrada

    SELECT-OPTIONS: s_bdter FOR ls_itab-bdter MODIF ID sbd.
    
    START-OF-SELECTION.
    " Set the interval.
    s_bdter-sign = 'I'.
    s_bdter-option = 'BT'.
    s_bdter-low = lc_bdter_start.
    s_bdter-high = sy-datum + 30.
    
    " This select doesn't filter on bdter unless the selection parameter was set by the user.
    SELECT r~aufnr p~psphi
        FROM resb AS r
        INNER JOIN afpo AS o ON o~aufnr = r~aufnr
        INNER JOIN prps AS p ON p~pspnr = o~projn
        INTO TABLE lt_resb_ss
        WHERE r~bdter IN s_bdter.
    

Es este conocido y documentado en el comportamiento? Lo resolvió mediante la creación de mi propia RANGE tabla, ¿es esto lo que estás siempre se supone que debe hacer? Es ahí, entonces, no hay forma de volver a utilizar unset seleccione opciones para evitar la duplicación de código?

InformationsquelleAutor Lilienthal | 2013-12-27

1 Kommentar

  1. 4

    Sólo llenar el encabezado de la línea de s_bdter. También debe anexar:

    " Set the interval.
    s_bdter-sign = 'I'.
    s_bdter-option = 'BT'.
    s_bdter-low = lc_bdter_start.
    s_bdter-high = sy-datum + 30.
    append s_bdter. "<- this was missing
    

    Con esto, usted no llega, si no está lleno.
    Esta comprobación debe hacerse explícito:

    describe table s_bdter.
    if sy-tfill = 0.
      " Set the interval.
      s_bdter-sign = 'I'.
      s_bdter-option = 'BT'.
      s_bdter-low = lc_bdter_start.
      s_bdter-high = sy-datum + 30.
      append s_bdter. "<- this was missing
    endif. " sy-tfill = 0.
    

    Espero que mi código sea el correcto de la sintaxis y sy-tfill es el valor correcto. No puedo comprobarlo real. Pero el principio debe ser clara.

    • Ah, por supuesto. No había considerado que seleccione opciones todavía utilizan el desuso de la tabla de objetos con líneas de cabecera.
    • Una de las alternativas: Se puede rellenar el rango durante la inicialización y hacer la opción seleccionar obligatorio. El relleno durante la inicialización hace que el defecto visible para el usuario, obligatorio garantiza que los valores no son eliminados. Pero atención, si se utiliza en lotes de inicialización no se ejecuta.
    • Es que debido a un lote especifica una variante que sobrescribe la pantalla de selección de parámetros después de la inicialización de paso completa?
    • Yo memorizar INITIALIZATION no se ejecuta en el lote. Pero tal vez esta es una falsa opinión, tal vez los valores se sobrescriben de la variante. Problemas similares pueden ocurrir con presentar.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea