Trucs et Astuces ABAP et SapScripts

page d'accueil

En général je n'ai pas traduit les commentaires. Les commentaires d'origine SAP sont plutôt en allemand, les miens en français et ceux trouvés sur le web en anglais.

Table des matières

  1. ABAP depuis un formulaire
  2. Administration des utilisateurs
  3. Autorisations
  4. call transaction and skip first screen
  5. Copie de fichiers SAP <-> PC
  6. Copie de formulaires
  7. DEFINE dans un formulaire
  8. difference between ALE EDI IDocs BAPI
  9. Distinction DEV QUA PRO
  10. Documentation Unix AIX Risc/6000
  11. exploitation des batch input
  12. Export vers Excel pour mailing
  13. Field symbol
  14. Formatting Options
  15. Forms and Untransmitted fields
  16. FORMS communs à plusieurs programmes
  17. FTP vers un autre serveur
  18. Html
  19. Icones et symboles dans un sapscript
  20. Icones et symboles   
  21. Implementation of SAP
  22. Importation de formulaire
  23. Jointure SQL
  24. La chasse aux user exit
  25. Liste des menus
  26. Liste des utilisateurs
  27. Logos
  28. Macro
  29. Mail
  30. Maintenance des formulaires
  31. match code et batch input
  32. Matrice de Batch Input
  33. Native sql
  34. Nombres en lettres
  35. OLE vers Excel
  36. Parameter ID
  37. PDF
  38. Report dynamique
  39. Report interactif
  40. Report spécifique et Batch input
  41. Retrieving the user IP address and logon ID
  42. SapScript - paramètres
  43. SAPscript Control Commands
  44. SAPscript Symbols
  45. Sapscript Unités
  46. Sauvegarde ABAP
  47. Sauvegarde Tables
  48. Sauvegarde Texte et formulaires
  49. Selection-Screen
  50. Shell d'application PC, synchrone et asynchrone
  51. Shell Unix
  52. SQL ... where not in
  53. Transactions
  54. Transport - Ré affectation d’objets
  55. Trouver le nom du formulaire
  56. Unicode, Tab & Enter hexa strings
  57. WS_Query

ABAP depuis un formulaire Table des matières

le formulaire

/:DEFINE &DATAMJ& = 'AAAAMMJJ'
/:DEFINE &DATSA& = 'WW.AAAA'
/:SET DATE MASK = 'YYYYMMDD'
/:PERFORM DATE_LIVRAISON IN PROGRAM Z_FORMULAIRE
/:USING &PEKKO-EINDT&
/:CHANGING &DATAMJ&
/:CHANGING &DATSA&
/:ENDPERFORM
/*<D>&DATAMJ&</>
= &DATSA&
/:SET DATE MASK = ''
/*** fin jpl

le code ABAP

PROGRAM Z_FORMULAIRE .
FORM DATE_LIVRAISON
     TABLES IN_PAR STRUCTURE ITCSY
           OUT_PAR STRUCTURE ITCSY.
  DATA:
  _KEINDT(8),
  _DATAMJ(8) VALUE '########',
  _DATTYP(1),
  _DATSA(7) VALUE '##/####',
  _JOUR TYPE D.
*en entree, les infos récupérées dans le formulaire :
* pekko-eindt pekko-lpein pekpo-eindt pekpo-lpein
*en sortie, la date AAAAMMJJ (char 8)
*mettre en place les valeurs 'incident'
* BREAK-POINT.
  READ TABLE OUT_PAR WITH KEY 'DATAMJ'.
  CHECK SY-SUBRC = 0.
  OUT_PAR-VALUE = _DATAMJ.
  MODIFY OUT_PAR INDEX SY-TABIX.

  READ TABLE OUT_PAR WITH KEY 'DATSA'.
  CHECK SY-SUBRC = 0.
  OUT_PAR-VALUE = _DATSA.
  MODIFY OUT_PAR INDEX SY-TABIX.

* parametres recus
  LOOP AT IN_PAR.
    CASE IN_PAR-NAME.
      WHEN 'PEKKO-EINDT'.
        _KEINDT = IN_PAR-VALUE.
    ENDCASE.
  ENDLOOP.

*date de reception souhaitée
  IF _KEINDT = SPACE.
    _DATAMJ = _PEINDT.
    _DATTYP = _PLPEIN.
  ELSE.
    _DATAMJ = _KEINDT.
    _DATTYP = _KLPEIN.
  ENDIF.
*maj formulaire
  READ TABLE OUT_PAR WITH KEY 'DATAMJ'.
  OUT_PAR-VALUE = _DATAMJ.
  MODIFY OUT_PAR INDEX SY-TABIX.
*
  _JOUR = _DATAMJ.

* convertion en semaine
  CALL FUNCTION 'DATE_GET_WEEK'
       EXPORTING
            DATE         = _JOUR
       IMPORTING
            WEEK         = _WEEK
       EXCEPTIONS
            DATE_INVALID = 1
            OTHERS       = 2.
* WRITE _week TO _datsa.
  CONCATENATE _WEEK+4(2)  _WEEK(4) INTO _DATSA SEPARATED BY '/'.
*maj formulaire
  READ TABLE OUT_PAR WITH KEY 'DATSA'.
  OUT_PAR-VALUE = _DATSA.
  MODIFY OUT_PAR INDEX SY-TABIX.
ENDFORM.

Icones et symboles Table des matières

DATA: X10(10) VALUE '**********'.

INCLUDE <LIST>.

ULINE.
WRITE: / '  Icones'.
WRITE: / ' '.
ULINE.

write: / ICON_DUMMY as icon, 'ICON_DUMMY '.
write: / ICON_CHECKED as icon, 'ICON_CHECKED '.
write: / ICON_INCOMPLETE as icon, 'ICON_INCOMPLETE '.
write: / ICON_FAILURE as icon, 'ICON_FAILURE '.
write: / ICON_POSITIVE as icon, 'ICON_POSITIVE '.
write: / ICON_NEGATIVE as icon, 'ICON_NEGATIVE '.
write: / ICON_LOCKED as icon, 'ICON_LOCKED '.
write: / ICON_UNLOCKED as icon, 'ICON_UNLOCKED '.
write: / ICON_GREEN_LIGHT as icon, 'ICON_GREEN_LIGHT '.
write: / ICON_YELLOW_LIGHT as icon, 'ICON_YELLOW_LIGHT '.
write: / ICON_RED_LIGHT as icon, 'ICON_RED_LIGHT '.
write: / ICON_TOTAL_LEFT as icon, 'ICON_TOTAL_LEFT '.
write: / ICON_TOTAL_RIGHT as icon, 'ICON_TOTAL_RIGHT '.
write: / ICON_COLUMN_LEFT as icon, 'ICON_COLUMN_LEFT '.
write: / ICON_COLUMN_RIGHT as icon, 'ICON_COLUMN_RIGHT '.
write: / ICON_PAGE_RIGHT as icon, 'ICON_PAGE_RIGHT '.
write: / ICON_PAGE_LEFT as icon, 'ICON_PAGE_LEFT '.
write: / ICON_PREVIOUS_VALUE as icon, 'ICON_PREVIOUS_VALUE '.
write: / ICON_NEXT_VALUE as icon, 'ICON_NEXT_VALUE '.
write: / ICON_ANNOTATION as icon, 'ICON_ANNOTATION '.
write: / ICON_CREATE_NOTE as icon, 'ICON_CREATE_NOTE '.
write: / ICON_DISPLAY_NOTE as icon, 'ICON_DISPLAY_NOTE '.
write: / ICON_CALCULATION as icon, 'ICON_CALCULATION '.
write: / ICON_GRAPHICS as icon, 'ICON_GRAPHICS '.
write: / ICON_CREATE_TEXT as icon, 'ICON_CREATE_TEXT '.
write: / ICON_DISPLAY_TEXT as icon, 'ICON_DISPLAY_TEXT '.
write: / ICON_CHANGE_TEXT as icon, 'ICON_CHANGE_TEXT '.
write: / ICON_VARIANTS as icon, 'ICON_VARIANTS '.
write: / ICON_INFORMATION as icon, 'ICON_INFORMATION '.
write: / ICON_ADDRESS as icon, 'ICON_ADDRESS '.
write: / ICON_VIEWER_OPTICAL_ARCHIVE as icon, 'ICON_VIEWER_OPTICAL_ARCHIVE '.
write: / ICON_OKAY as icon, 'ICON_OKAY '.
write: / ICON_CANCEL as icon, 'ICON_CANCEL '.
write: / ICON_PRINT as icon, 'ICON_PRINT '.
write: / ICON_CREATE as icon, 'ICON_CREATE '.
write: / ICON_CHANGE as icon, 'ICON_CHANGE '.
write: / ICON_DISPLAY as icon, 'ICON_DISPLAY '.
write: / ICON_DELETE as icon, 'ICON_DELETE '.
write: / ICON_TEST as icon, 'ICON_TEST '.
write: / ICON_SEARCH as icon, 'ICON_SEARCH '.
write: / ICON_COPY_OBJECT as icon, 'ICON_COPY_OBJECT '.
write: / ICON_EXECUTE_OBJECT as icon, 'ICON_EXECUTE_OBJECT '.
write: / ICON_SELECT_DETAIL as icon, 'ICON_SELECT_DETAIL '.
write: / ICON_INSERT_ROW as icon, 'ICON_INSERT_ROW '.
write: / ICON_DELETE_ROW as icon, 'ICON_DELETE_ROW '.
write: / ICON_MESSAGE_INFORMATION as icon, 'ICON_MESSAGE_INFORMATION '.
write: / ICON_MESSAGE_WARNING as icon, 'ICON_MESSAGE_WARNING '.
write: / ICON_MESSAGE_ERROR as icon, 'ICON_MESSAGE_ERROR '.
write: / ICON_MESSAGE_QUESTION as icon, 'ICON_MESSAGE_QUESTION '.
write: / ICON_MESSAGE_CRITICAL as icon, 'ICON_MESSAGE_CRITICAL '.
write: / ICON_DISPLAY_MORE as icon, 'ICON_DISPLAY_MORE '.
write: / ICON_ENTER_MORE as icon, 'ICON_ENTER_MORE '.
write: / ICON_EQUAL as icon, 'ICON_EQUAL '.
write: / ICON_NOT_EQUAL as icon, 'ICON_NOT_EQUAL '.
write: / ICON_GREATER as icon, 'ICON_GREATER '.
write: / ICON_LESS as icon, 'ICON_LESS '.
write: / ICON_GREATER_EQUAL as icon, 'ICON_GREATER_EQUAL '.
write: / ICON_LESS_EQUAL as icon, 'ICON_LESS_EQUAL '.
write: / ICON_INTERVAL_INCLUDE as icon, 'ICON_INTERVAL_INCLUDE '.
write: / ICON_INTERVAL_EXCLUDE as icon, 'ICON_INTERVAL_EXCLUDE '.
write: / ICON_PATTERN_INCLUDE as icon, 'ICON_PATTERN_INCLUDE '.
write: / ICON_PATTERN_EXCLUDE as icon, 'ICON_PATTERN_EXCLUDE '.
write: / ICON_PHONE as icon, 'ICON_PHONE '.
write: / ICON_FAX as icon, 'ICON_FAX '.
write: / ICON_MAIL as icon, 'ICON_MAIL '.
write: / ICON_TIME as icon, 'ICON_TIME '.
write: / ICON_DATE as icon, 'ICON_DATE '.
write: / ICON_ALARM as icon, 'ICON_ALARM '.
write: / ICON_PROSHARE as icon, 'ICON_PROSHARE '.
write: / ICON_VIDEO as icon, 'ICON_VIDEO '.
write: / ICON_VOICE_INPUT as icon, 'ICON_VOICE_INPUT '.
write: / ICON_VOICE_OUTPUT as icon, 'ICON_VOICE_OUTPUT '.
write: / ICON_EQUAL_GREEN as icon, 'ICON_EQUAL_GREEN '.
write: / ICON_NOT_EQUAL_GREEN as icon, 'ICON_NOT_EQUAL_GREEN '.
write: / ICON_GREATER_GREEN as icon, 'ICON_GREATER_GREEN '.
write: / ICON_LESS_GREEN as icon, 'ICON_LESS_GREEN '.
write: / ICON_GREATER_EQUAL_GREEN as icon, 'ICON_GREATER_EQUAL_GREEN '.
write: / ICON_LESS_EQUAL_GREEN as icon, 'ICON_LESS_EQUAL_GREEN '.
write: / ICON_INTERVAL_INCLUDE_GREEN as icon, 'ICON_INTERVAL_INCLUDE_GREEN '.
write: / ICON_INTERVAL_EXCLUDE_GREEN as icon, 'ICON_INTERVAL_EXCLUDE_GREEN '.
write: / ICON_PATTERN_INCLUDE_GREEN as icon, 'ICON_PATTERN_INCLUDE_GREEN '.
write: / ICON_PATTERN_EXCLUDE_GREEN as icon, 'ICON_PATTERN_EXCLUDE_GREEN '.
write: / ICON_EQUAL_RED as icon, 'ICON_EQUAL_RED '.
write: / ICON_NOT_EQUAL_RED as icon, 'ICON_NOT_EQUAL_RED '.
write: / ICON_GREATER_RED as icon, 'ICON_GREATER_RED '.
write: / ICON_LESS_RED as icon, 'ICON_LESS_RED '.
write: / ICON_GREATER_EQUAL_RED as icon, 'ICON_GREATER_EQUAL_RED '.
write: / ICON_LESS_EQUAL_RED as icon, 'ICON_LESS_EQUAL_RED '.
write: / ICON_INTERVAL_INCLUDE_RED as icon, 'ICON_INTERVAL_INCLUDE_RED '.
write: / ICON_INTERVAL_EXCLUDE_RED as icon, 'ICON_INTERVAL_EXCLUDE_RED '.
write: / ICON_PATTERN_INCLUDE_RED as icon, 'ICON_PATTERN_INCLUDE_RED '.
write: / ICON_PATTERN_EXCLUDE_RED as icon, 'ICON_PATTERN_EXCLUDE_RED '.
write: / ICON_SYSTEM_OKAY as icon, 'ICON_SYSTEM_OKAY '.
write: / ICON_SYSTEM_SAVE as icon, 'ICON_SYSTEM_SAVE '.
write: / ICON_SYSTEM_BACK as icon, 'ICON_SYSTEM_BACK '.
write: / ICON_SYSTEM_END as icon, 'ICON_SYSTEM_END '.
write: / ICON_SYSTEM_CANCEL as icon, 'ICON_SYSTEM_CANCEL '.
write: / ICON_SYSTEM_PRINT as icon, 'ICON_SYSTEM_PRINT '.
write: / ICON_OTHER_OBJECT as icon, 'ICON_OTHER_OBJECT '.
write: / ICON_PREVIOUS_OBJECT as icon, 'ICON_PREVIOUS_OBJECT '.
write: / ICON_NEXT_OBJECT as icon, 'ICON_NEXT_OBJECT '.
write: / ICON_SYSTEM_CUT as icon, 'ICON_SYSTEM_CUT '.
write: / ICON_SYSTEM_COPY as icon, 'ICON_SYSTEM_COPY '.
write: / ICON_SYSTEM_PASTE as icon, 'ICON_SYSTEM_PASTE '.
write: / ICON_SYSTEM_UNDO as icon, 'ICON_SYSTEM_UNDO '.
write: / ICON_SYSTEM_MARK as icon, 'ICON_SYSTEM_MARK '.
write: / ICON_FIRST_PAGE as icon, 'ICON_FIRST_PAGE '.
write: / ICON_PREVIOUS_PAGE as icon, 'ICON_PREVIOUS_PAGE '.
write: / ICON_NEXT_PAGE as icon, 'ICON_NEXT_PAGE '.
write: / ICON_LAST_PAGE as icon, 'ICON_LAST_PAGE '.
write: / ICON_SYSTEM_MODUS_CREATE as icon, 'ICON_SYSTEM_MODUS_CREATE '.
write: / ICON_SYSTEM_MODUS_DELETE as icon, 'ICON_SYSTEM_MODUS_DELETE '.
write: / ICON_SYSTEM_USERMENU as icon, 'ICON_SYSTEM_USERMENU '.
write: / ICON_SYSTEM_HELP as icon, 'ICON_SYSTEM_HELP '.
write: / ICON_TABLE_SETTINGS as icon, 'ICON_TABLE_SETTINGS '.
write: / ICON_REPLACE as icon, 'ICON_REPLACE '.
write: / ICON_CHECK as icon, 'ICON_CHECK '.
write: / ICON_GENERATE as icon, 'ICON_GENERATE '.
write: / ICON_REFERENCE_LIST as icon, 'ICON_REFERENCE_LIST '.
write: / ICON_STACK as icon, 'ICON_STACK '.
write: / ICON_ACTIVATE as icon, 'ICON_ACTIVATE '.
write: / ICON_ICON_LIST as icon, 'ICON_ICON_LIST '.
write: / ICON_SORT_UP as icon, 'ICON_SORT_UP '.
write: / ICON_SORT_DOWN as icon, 'ICON_SORT_DOWN '.
write: / ICON_LAYOUT_CONTROL as icon, 'ICON_LAYOUT_CONTROL '.
write: / ICON_CONVERT as icon, 'ICON_CONVERT '.
write: / ICON_TOGGLE_DISPLAY_CHANGE as icon, 'ICON_TOGGLE_DISPLAY_CHANGE '.
write: / ICON_SET_STATE as icon, 'ICON_SET_STATE '.
write: / ICON_PREVIOUS_NODE as icon, 'ICON_PREVIOUS_NODE '.
write: / ICON_NEXT_NODE as icon, 'ICON_NEXT_NODE '.
write: / ICON_TREE as icon, 'ICON_TREE '.
write: / ICON_INSERT_RELATION as icon, 'ICON_INSERT_RELATION '.
write: / ICON_FINAL_DATE as icon, 'ICON_FINAL_DATE '.
write: / ICON_HEADER as icon, 'ICON_HEADER '.
write: / ICON_OVERVIEW as icon, 'ICON_OVERVIEW '.
write: / ICON_DETAIL as icon, 'ICON_DETAIL '.
write: / ICON_EXPAND as icon, 'ICON_EXPAND '.
write: / ICON_COLLAPSE as icon, 'ICON_COLLAPSE '.
write: / ICON_BREAKPOINT as icon, 'ICON_BREAKPOINT '.
write: / ICON_FOREIGN_KEY as icon, 'ICON_FOREIGN_KEY '.
write: / ICON_LIST as icon, 'ICON_LIST '.
write: / ICON_CLOSE as icon, 'ICON_CLOSE '.
write: / ICON_POSITION as icon, 'ICON_POSITION '.
write: / ICON_SUM as icon, 'ICON_SUM '.
write: / ICON_MOVE as icon, 'ICON_MOVE '.
write: / ICON_RETRIEVE as icon, 'ICON_RETRIEVE '.
write: / ICON_REFRESH as icon, 'ICON_REFRESH '.
write: / ICON_SKIP as icon, 'ICON_SKIP '.
write: / ICON_SYSTEM_SETTINGS as icon, 'ICON_SYSTEM_SETTINGS '.
write: / ICON_TOOLS as icon, 'ICON_TOOLS '.
write: / ICON_COMPARE as icon, 'ICON_COMPARE '.
write: / ICON_SHORT_MESSAGE as icon, 'ICON_SHORT_MESSAGE '.
write: / ICON_IMPORT as icon, 'ICON_IMPORT '.
write: / ICON_EXPORT as icon, 'ICON_EXPORT '.
write: / ICON_TRANSPORT as icon, 'ICON_TRANSPORT '.
write: / ICON_SELECT_ALL as icon, 'ICON_SELECT_ALL '.
write: / ICON_SELECT_BLOCK as icon, 'ICON_SELECT_BLOCK '.
write: / ICON_DESELECT_ALL as icon, 'ICON_DESELECT_ALL '.
write: / ICON_SEARCH_NEXT as icon, 'ICON_SEARCH_NEXT '.
write: / ICON_RENAME as icon, 'ICON_RENAME '.
write: / ICON_FILTER as icon, 'ICON_FILTER '.
write: / ICON_NEXT_HIERARCHY_LEVEL as icon, 'ICON_NEXT_HIERARCHY_LEVEL '.
write: / ICON_PREVIOUS_HIERARCHY_LEVEL as icon, 'ICON_PREVIOUS_HIERARCHY_LEVEL '.
write: / ICON_SYSTEM_POSSIBLE_ENTRIES as icon, 'ICON_SYSTEM_POSSIBLE_ENTRIES '.
write: / ICON_INTENSIFY as icon, 'ICON_INTENSIFY '.
write: / ICON_PERSONAL_HELP as icon, 'ICON_PERSONAL_HELP '.
write: / ICON_VARIABLE as icon, 'ICON_VARIABLE '.
write: / ICON_SYSTEM_LOCAL_CUT as icon, 'ICON_SYSTEM_LOCAL_CUT '.
write: / ICON_SYSTEM_LOCAL_COPY as icon, 'ICON_SYSTEM_LOCAL_COPY '.
write: / ICON_SYSTEM_LOCAL_PASTE as icon, 'ICON_SYSTEM_LOCAL_PASTE '.
write: / ICON_SYSTEM_LOCAL_MARK as icon, 'ICON_SYSTEM_LOCAL_MARK '.
write: / ICON_SYSTEM_REDO as icon, 'ICON_SYSTEM_REDO '.
write: / ICON_BUSINAV_PROCESS as icon, 'ICON_BUSINAV_PROCESS '.
write: / ICON_BUSINAV_PROCESSMATRIX as icon, 'ICON_BUSINAV_PROCESSMATRIX '.
write: / ICON_BUSINAV_SYSORGI as icon, 'ICON_BUSINAV_SYSORGI '.
write: / ICON_BUSINAV_SZENARIO as icon, 'ICON_BUSINAV_SZENARIO '.
write: / ICON_BUSINAV_OBJECTS as icon, 'ICON_BUSINAV_OBJECTS '.
write: / ICON_BUSINAV_INFODIAG as icon, 'ICON_BUSINAV_INFODIAG '.
write: / ICON_BUSINAV_ENTITY as icon, 'ICON_BUSINAV_ENTITY '.
write: / ICON_BUSINAV_PROC_EXIST as icon, 'ICON_BUSINAV_PROC_EXIST '.
write: / ICON_BUSINAV_COMMDIAG as icon, 'ICON_BUSINAV_COMMDIAG '.
write: / ICON_BUSINAV_DATAMODEL as icon, 'ICON_BUSINAV_DATAMODEL '.
write: / ICON_ALIGN as icon, 'ICON_ALIGN '.
write: / ICON_CUT_RELATION as icon, 'ICON_CUT_RELATION '.
write: / ICON_FIX_COLUMN as icon, 'ICON_FIX_COLUMN '.
write: / ICON_RELEASE_COLUMN as icon, 'ICON_RELEASE_COLUMN '.
write: / ICON_NET_GRAPHIC as icon, 'ICON_NET_GRAPHIC '.
write: / ICON_PLANNING_TABLE as icon, 'ICON_PLANNING_TABLE '.
write: / ICON_PERIOD as icon, 'ICON_PERIOD '.
write: / ICON_ZOOM_IN as icon, 'ICON_ZOOM_IN '.
write: / ICON_ZOOM_OUT as icon, 'ICON_ZOOM_OUT '.
write: / ICON_LED_GREEN as icon, 'ICON_LED_GREEN '.
write: / ICON_LED_RED as icon, 'ICON_LED_RED '.
write: / ICON_LED_YELLOW as icon, 'ICON_LED_YELLOW '.
write: / ICON_SYSTEM_EXTENDED_HELP as icon, 'ICON_SYSTEM_EXTENDED_HELP '.
write: / ICON_SPACE as icon, 'ICON_SPACE '.
write: / ICON_BUSINAV_VALUE_CHAIN as icon, 'ICON_BUSINAV_VALUE_CHAIN '.
write: / ICON_WORKFLOW_ACTIVITY as icon, 'ICON_WORKFLOW_ACTIVITY '.
write: / ICON_WORKFLOW_CONDITION as icon, 'ICON_WORKFLOW_CONDITION '.
write: / ICON_WORKFLOW_DECISION as icon, 'ICON_WORKFLOW_DECISION '.
write: / ICON_WORKFLOW_CONT_OPERATION as icon, 'ICON_WORKFLOW_CONT_OPERATION '.
write: / ICON_WORKFLOW_EXTERNAL_EVENT as icon, 'ICON_WORKFLOW_EXTERNAL_EVENT '.
write: / ICON_WORKFLOW_INTERNAL_EVENT as icon, 'ICON_WORKFLOW_INTERNAL_EVENT '.
write: / ICON_WORKFLOW_MULT_CONDITION as icon, 'ICON_WORKFLOW_MULT_CONDITION '.
WRITE: / ICON_WORKFLOW_PARALLEL_SECTION AS ICON,'ICON_WORKFLOW_PARALLEL_SECTION.'.
write: / ICON_WORKFLOW_EVENT_PRODUCER as icon, 'ICON_WORKFLOW_EVENT_PRODUCER '.
write: / ICON_WORKFLOW_FLOW_OF_CONTROL as icon, 'ICON_WORKFLOW_FLOW_OF_CONTROL '.
write: / ICON_WORKFLOW_INDEFINITE_STEP as icon, 'ICON_WORKFLOW_INDEFINITE_STEP '.
write: / ICON_WORKFLOW_UNTIL as icon, 'ICON_WORKFLOW_UNTIL '.
write: / ICON_WORKFLOW_WAIT_FOR_EVENTS as icon, 'ICON_WORKFLOW_WAIT_FOR_EVENTS '.
write: / ICON_WORKFLOW_WHILE as icon, 'ICON_WORKFLOW_WHILE '.
write: / ICON_INTERMEDIATE_SUM as icon, 'ICON_INTERMEDIATE_SUM '.
write: / ICON_EMPLOYEE as icon, 'ICON_EMPLOYEE '.
write: / ICON_TIME_ZONE as icon, 'ICON_TIME_ZONE '.
write: / ICON_RELEASE as icon, 'ICON_RELEASE '.
write: / ICON_QUALIFY as icon, 'ICON_QUALIFY '.
write: / ICON_ISO_CODE as icon, 'ICON_ISO_CODE '.
write: / ICON_MODIFY as icon, 'ICON_MODIFY '.
write: / ICON_GET_AREA as icon, 'ICON_GET_AREA '.
write: / ICON_INTERFACE as icon, 'ICON_INTERFACE '.
write: / ICON_ROUTING_OPERATION as icon, 'ICON_ROUTING_OPERATION '.
write: / ICON_ROUTING_REF_OPERATION as icon, 'ICON_ROUTING_REF_OPERATION '.
write: / ICON_ROUTING_TASK as icon, 'ICON_ROUTING_TASK '.
write: / ICON_ROUTING_TODO as icon, 'ICON_ROUTING_TODO '.
write: / ICON_EXPAND_ALL as icon, 'ICON_EXPAND_ALL '.
write: / ICON_COLLAPSE_ALL as icon, 'ICON_COLLAPSE_ALL '.
write: / ICON_SYSTEM_SAP_MENU as icon, 'ICON_SYSTEM_SAP_MENU '.
write: / ICON_SYSTEM_COMP_MENU as icon, 'ICON_SYSTEM_COMP_MENU '.
write: / ICON_SYSTEM_USER_MENU as icon, 'ICON_SYSTEM_USER_MENU '.
write: / ICON_SYSTEM_FAVORITES as icon, 'ICON_SYSTEM_FAVORITES '.
write: / ICON_BIW_INFO_SOURCE as icon, 'ICON_BIW_INFO_SOURCE '.
write: / ICON_BIW_APPLICATION as icon, 'ICON_BIW_APPLICATION '.
write: / ICON_BIW_INFO_AREA as icon, 'ICON_BIW_INFO_AREA '.
write: / ICON_BIW_INFO_CUBE as icon, 'ICON_BIW_INFO_CUBE '.
write: / ICON_BIW_RULES_INA as icon, 'ICON_BIW_RULES_INA '.
write: / ICON_BIW_SOURCE_SYS_GEN as icon, 'ICON_BIW_SOURCE_SYS_GEN '.
write: / ICON_BIW_SOURCE_SYS_R3 as icon, 'ICON_BIW_SOURCE_SYS_R3 '.
write: / ICON_BIW_SOURCE_SYS_EXT as icon, 'ICON_BIW_SOURCE_SYS_EXT '.
write: / ICON_BIW_SOURCE_SYS_FILE as icon, 'ICON_BIW_SOURCE_SYS_FILE '.
write: / ICON_BIW_INFO_CATALOG as icon, 'ICON_BIW_INFO_CATALOG '.
write: / ICON_BIW_INFO_OBJECT as icon, 'ICON_BIW_INFO_OBJECT '.
write: / ICON_BIW_MONITOR as icon, 'ICON_BIW_MONITOR '.
write: / ICON_BIW_SCHEDULER as icon, 'ICON_BIW_SCHEDULER '.
write: / ICON_BIW_FORMULA as icon, 'ICON_BIW_FORMULA '.
write: / ICON_BIW_REF_STRUCTURE as icon, 'ICON_BIW_REF_STRUCTURE '.
write: / ICON_BIW_REPORT as icon, 'ICON_BIW_REPORT '.
write: / ICON_BIW_REPORT_VIEW as icon, 'ICON_BIW_REPORT_VIEW '.
write: / ICON_MASTER_DATA_ACT as icon, 'ICON_MASTER_DATA_ACT '.
write: / ICON_MASTER_DATA_INA as icon, 'ICON_MASTER_DATA_INA '.
write: / ICON_TEXT_ACT as icon, 'ICON_TEXT_ACT '.
write: / ICON_TEXT_INA as icon, 'ICON_TEXT_INA '.
write: / ICON_HIERARCHY_ACT as icon, 'ICON_HIERARCHY_ACT '.
write: / ICON_HIERARCHY_INA as icon, 'ICON_HIERARCHY_INA '.
write: / ICON_MOVING_DATA_ACT as icon, 'ICON_MOVING_DATA_ACT '.
write: / ICON_MOVING_DATA_INA as icon, 'ICON_MOVING_DATA_INA '.
write: / ICON_DEBUGGER_STEP_INTO as icon, 'ICON_DEBUGGER_STEP_INTO '.
write: / ICON_DEBUGGER_STEP_OVER as icon, 'ICON_DEBUGGER_STEP_OVER '.
write: / ICON_DEBUGGER_STEP_OUT as icon, 'ICON_DEBUGGER_STEP_OUT '.
write: / ICON_DEBUGGER_CONTINUE as icon, 'ICON_DEBUGGER_CONTINUE '.
write: / ICON_PARAMETER as icon, 'ICON_PARAMETER '.
write: / ICON_PARAMETER_IMPORT as icon, 'ICON_PARAMETER_IMPORT '.
write: / ICON_PARAMETER_EXPORT as icon, 'ICON_PARAMETER_EXPORT '.
write: / ICON_PARAMETER_CHANGING as icon, 'ICON_PARAMETER_CHANGING '.
write: / ICON_PARAMETER_RESULT as icon, 'ICON_PARAMETER_RESULT '.
write: / ICON_OO_CLASS as icon, 'ICON_OO_CLASS '.
write: / ICON_OO_INTERFACE as icon, 'ICON_OO_INTERFACE '.
write: / ICON_OO_ATTRIBUTE as icon, 'ICON_OO_ATTRIBUTE '.
write: / ICON_OO_CLASS_ATTRIBUTE as icon, 'ICON_OO_CLASS_ATTRIBUTE '.
write: / ICON_OO_INST_ATTRIBUTE as icon, 'ICON_OO_INST_ATTRIBUTE '.
write: / ICON_OO_METHOD as icon, 'ICON_OO_METHOD '.
write: / ICON_OO_CLASS_METHOD as icon, 'ICON_OO_CLASS_METHOD '.
write: / ICON_OO_INST_METHOD as icon, 'ICON_OO_INST_METHOD '.
write: / ICON_OO_EVENT as icon, 'ICON_OO_EVENT '.
write: / ICON_OO_CONSTANT as icon, 'ICON_OO_CONSTANT '.
write: / ICON_OO_OVERWRITE as icon, 'ICON_OO_OVERWRITE '.
write: / ICON_OO_CONNECTION as icon, 'ICON_OO_CONNECTION '.
write: / ICON_OO_INHERITANCE as icon, 'ICON_OO_INHERITANCE '.
write: / ICON_OO_INTERFACE_IC as icon, 'ICON_OO_INTERFACE_IC '.
write: / ICON_WS_TRUCK as icon, 'ICON_WS_TRUCK '.
write: / ICON_WS_RAIL as icon, 'ICON_WS_RAIL '.
write: / ICON_WS_SHIP as icon, 'ICON_WS_SHIP '.
write: / ICON_WS_PLANE as icon, 'ICON_WS_PLANE '.
write: / ICON_WS_POST as icon, 'ICON_WS_POST '.
write: / ICON_WS_TRANSFER as icon, 'ICON_WS_TRANSFER '.
write: / ICON_WS_DOUANE as icon, 'ICON_WS_DOUANE '.
write: / ICON_SELECTION as icon, 'ICON_SELECTION '.
write: / ICON_SYSTEM_STOP_RECORDING as icon, 'ICON_SYSTEM_STOP_RECORDING '.
write: / ICON_FENCING as icon, 'ICON_FENCING '.
write: / ICON_BIW_RULES_ACT as icon, 'ICON_BIW_RULES_ACT '.
write: / ICON_CHARACTERISTICS_ACT as icon, 'ICON_CHARACTERISTICS_ACT '.
write: / ICON_CHARACTERISTICS_INA as icon, 'ICON_CHARACTERISTICS_INA '.
write: / ICON_KEYFIGURE_ACT as icon, 'ICON_KEYFIGURE_ACT '.
write: / ICON_KEYFIGURE_INA as icon, 'ICON_KEYFIGURE_INA '.

ULINE.
WRITE: / 'Symboles'.
WRITE: / ' '.
ULINE.

write: / SYM_SPACE as symbol, 'SYM_SPACE '.
write: / SYM_PLUS_BOX as symbol, 'SYM_PLUS_BOX '.
write: / SYM_MINUS_BOX as symbol, 'SYM_MINUS_BOX '.
write: / SYM_PLUS_CIRCLE as symbol, 'SYM_PLUS_CIRCLE '.
write: / SYM_MINUS_CIRCLE as symbol, 'SYM_MINUS_CIRCLE '.
write: / SYM_FILLED_SQUARE as symbol, 'SYM_FILLED_SQUARE '.
write: / SYM_HALF_FILLED_SQUARE as symbol, 'SYM_HALF_FILLED_SQUARE '.
WRITE: / SYM_SQUARE AS SYMBOL, 'SYM_SQUARE '.
write: / SYM_FILLED_CIRCLE as symbol, 'SYM_FILLED_CIRCLE '.
write: / SYM_HALF_FILLED_CIRCLE as symbol, 'SYM_HALF_FILLED_CIRCLE '.
write: / SYM_CIRCLE as symbol, 'SYM_CIRCLE '.
write: / SYM_FILLED_DIAMOND as symbol, 'SYM_FILLED_DIAMOND '.
write: / SYM_DIAMOND as symbol, 'SYM_DIAMOND '.
write: / SYM_BOLD_X as symbol, 'SYM_BOLD_X '.
write: / SYM_NOTE as symbol, 'SYM_NOTE '.
write: / SYM_DOCUMENT as symbol, 'SYM_DOCUMENT '.
write: / SYM_CHECKED_DOCUMENT as symbol, 'SYM_CHECKED_DOCUMENT '.
write: / SYM_DOCUMENTS as symbol, 'SYM_DOCUMENTS '.
write: / SYM_FOLDER as symbol, 'SYM_FOLDER '.
write: / SYM_PLUS_FOLDER as symbol, 'SYM_PLUS_FOLDER '.
write: / SYM_MINUS_FOLDER as symbol, 'SYM_MINUS_FOLDER '.
write: / SYM_OPEN_FOLDER as symbol, 'SYM_OPEN_FOLDER '.
write: / SYM_BOLD_MINUS as symbol, 'SYM_BOLD_MINUS '.
write: / SYM_BOLD_PLUS as symbol, 'SYM_BOLD_PLUS '.
write: / SYM_CHECKBOX as symbol, 'SYM_CHECKBOX '.
write: / SYM_RADIOBUTTON as symbol, 'SYM_RADIOBUTTON '.
write: / SYM_LEFT_TRIANGLE as symbol, 'SYM_LEFT_TRIANGLE '.
write: / SYM_RIGHT_TRIANGLE as symbol, 'SYM_RIGHT_TRIANGLE '.
write: / SYM_UP_TRIANGLE as symbol, 'SYM_UP_TRIANGLE '.
write: / SYM_DOWN_TRIANGLE as symbol, 'SYM_DOWN_TRIANGLE '.
write: / SYM_LEFT_HAND as symbol, 'SYM_LEFT_HAND '.
write: / SYM_LEFT_ARROW as symbol, 'SYM_LEFT_ARROW '.
write: / SYM_RIGHT_ARROW as symbol, 'SYM_RIGHT_ARROW '.
write: / SYM_UP_ARROW as symbol, 'SYM_UP_ARROW '.
write: / SYM_DOWN_ARROW as symbol, 'SYM_DOWN_ARROW '.
write: / SYM_CHECK_MARK as symbol, 'SYM_CHECK_MARK '.
write: / SYM_PENCIL as symbol, 'SYM_PENCIL '.
write: / SYM_GLASSES as symbol, 'SYM_GLASSES '.
write: / SYM_LOCKED as symbol, 'SYM_LOCKED '.
write: / SYM_UNLOCKED as symbol, 'SYM_UNLOCKED '.
write: / SYM_PHONE as symbol, 'SYM_PHONE '.
write: / SYM_PRINTER as symbol, 'SYM_PRINTER '.
write: / SYM_FAX as symbol, 'SYM_FAX '.
write: / SYM_ASTERISK as symbol, 'SYM_ASTERISK '.
write: / SYM_RIGHT_HAND as symbol, 'SYM_RIGHT_HAND '.
write: / SYM_SORTED_UP as symbol, 'SYM_SORTED_UP '.
write: / SYM_SORTED_DOWN as symbol, 'SYM_SORTED_DOWN '.
write: / SYM_CUMULATED as symbol, 'SYM_CUMULATED '.
write: / SYM_DELETE as symbol, 'SYM_DELETE '.
write: / SYM_EXECUTABLE as symbol, 'SYM_EXECUTABLE '.
write: / SYM_WORKFLOW_ITEM as symbol, 'SYM_WORKFLOW_ITEM '.
write: / SYM_CAUTION as symbol, 'SYM_CAUTION '.
write: / SYM_FLASH as symbol, 'SYM_FLASH '.
write: / SYM_LARGE_SQUARE as symbol, 'SYM_LARGE_SQUARE '.

WRITE: / ' '.
ULINE.
WRITE: / 'Coins et traits'.
WRITE: / ' '.
ULINE.

write: / LINE_SPACE as line, 'LINE_SPACE '.
write: / LINE_TOP_LEFT_CORNER as line, 'LINE_TOP_LEFT_CORNER '.
write: / LINE_BOTTOM_LEFT_CORNER as line, 'LINE_BOTTOM_LEFT_CORNER '.
write: / LINE_TOP_RIGHT_CORNER as line, 'LINE_TOP_RIGHT_CORNER '.
write: / LINE_BOTTOM_RIGHT_CORNER as line, 'LINE_BOTTOM_RIGHT_CORNER '.
write: / LINE_HORIZONTAL_LINE as line, 'LINE_HORIZONTAL_LINE '.
write: / LINE_VERTICAL_LINE as line, 'LINE_VERTICAL_LINE '.
write: / LINE_LEFT_MIDDLE_CORNER as line, 'LINE_LEFT_MIDDLE_CORNER '.
write: / LINE_RIGHT_MIDDLE_CORNER as line, 'LINE_RIGHT_MIDDLE_CORNER '.
write: / LINE_BOTTOM_MIDDLE_CORNER as line, 'LINE_BOTTOM_MIDDLE_CORNER'.
write: / LINE_TOP_MIDDLE_CORNER as line, 'LINE_TOP_MIDDLE_CORNER '.
write: / LINE_CROSS as line, 'LINE_CROSS '.

* voir aussi le programme SHOWCOLO

WRITE: / X10 COLOR = COL_BACKGROUND.
WRITE: / X10 COLOR = COL_HEADING.
WRITE: / X10 COLOR = COL_NORMAL.
WRITE: / X10 COLOR = COL_TOTAL.
WRITE: / X10 COLOR = COL_KEY.
WRITE: / X10 COLOR = COL_POSITIVE.
WRITE: / X10 COLOR = COL_NEGATIVE.
WRITE: / X10 COLOR = COL_GROUP.
WRITE: / X10.

Jointure SQL Table des matières

TABLES: LFA1, MARA, MAKT, EINE, EINA, SSCRFIELDS.

DATA:
      I TYPE I,
*parameters:
  O_LIFNR LIKE EINA-LIFNR,
  O_MATKL LIKE EINA-MATKL,
  O_EKORG LIKE EINE-EKORG,
  P_I TYPE I.

DATA:
  BEGIN OF JOIN,
    LIFNR LIKE EINA-LIFNR,
    MATNR LIKE MARA-MATNR,
    MATKL LIKE MARA-MATKL,
    INFNR LIKE EINE-INFNR,
    EKORG LIKE EINE-EKORG,
  END OF JOIN.
*initialization.
O_LIFNR = '0000100033'.
O_MATKL = '01       '.
O_EKORG = '0001                 '.

WRITE: / 'lifnr', 'matnr', 'matkl', 'infnr', 'ekorg'.
SELECT F1~LIFNR  F1~MATNR  F2~MATKL  F1~INFNR  F3~EKORG
    INTO CORRESPONDING FIELDS OF JOIN
    FROM EINA AS F1  JOIN MARA AS F2
           ON F1~MATNR = F2~MATNR
           JOIN EINE AS F3
           ON F1~INFNR = F3~INFNR
    WHERE F1~LIFNR = O_LIFNR AND
          F2~MATKL = O_MATKL AND
          F3~EKORG = O_EKORG
                            .
WRITE: / JOIN-LIFNR, JOIN-MATNR, JOIN-MATKL, JOIN-INFNR, JOIN-EKORG.
ENDSELECT.

SELECT COUNT( * )
    INTO I
    FROM EINA AS F1  JOIN MARA AS F2
           ON F1~MATNR = F2~MATNR
           JOIN EINE AS F3
           ON F1~INFNR = F3~INFNR
    WHERE F1~LIFNR = O_LIFNR AND
          F2~MATKL = O_MATKL AND
          F3~EKORG = O_EKORG
                            .
WRITE: / I.
*endcase.

SQL ... where not in Table des matières

* codage équivalent au select imbriqué.
* objectif : liste des articles pour lesquels un quota
* n'existe pas sur la période considérée.
* en SQL standard :
*select * from mara where matnr not in
*  (select matnr from equk where
*  vdatu = '19980903' and bdatu = '99991231')

TABLES: MARA, EQUK.

RANGES: I_MATNR FOR MARA-MATNR OCCURS 0.
DATA:
  BEGIN OF _M OCCURS 0,
  MATNR LIKE MARA-MATNR,
  END OF _M.
* liste des cas non satisfaisant
SELECT MATNR INTO TABLE _M FROM EQUK
      WHERE VDATU = '19980903' AND BDATU = '99991231' .
* transformer la liste en critere de selection
WRITE: / 'trouver les MATNR sauf ceux-ci:'.
LOOP AT _M.
    MOVE 'I' TO I_MATNR-SIGN.
    MOVE 'EQ' TO I_MATNR-OPTION.
    MOVE _M-MATNR TO I_MATNR-LOW.
    CLEAR I_MATNR-HIGH.
WRITE:/ I_MATNR.
    APPEND I_MATNR.
ENDLOOP.
ULINE.
* resultat final
SELECT * FROM MARA
WHERE MATNR NOT IN I_MATNR.

WRITE: / MARA-MATNR.

ENDSELECT.

Liste des utilisateurs Table des matières

TABLES:
  UINFO.
DATA:
  BEGIN OF USR_TABL OCCURS 10.
        INCLUDE STRUCTURE UINFO.
DATA:
  END OF USR_TABL,
  TRACE_STATE(5),
  TRACE_VALUE TYPE X,
  OPCODE TYPE X.
FREE USR_TABL.
OPCODE = 2.
CALL 'ThUsrInfo' ID 'OPCODE' FIELD OPCODE
  ID 'TAB' FIELD USR_TABL-*SYS*.
LOOP AT USR_TABL.

  WRITE: /   USR_TABL-MANDT,
             USR_TABL-BNAME ,
             USR_TABL-TERM ,
             USR_TABL-TCODE ,
             USR_TABL-ZEIT ,
             USR_TABL-EXTMODI,
             USR_TABL-INTMODI .
ENDLOOP.

Copie de formulaires Table des matières

Utiliser RSTXCPFS

Report interactif Table des matières

Coller le code dans l'éditeur, ajouter un menu nommé INLI (ça, c'est pas une mince affaire, je n'ai jamais vraiment compris la logique de ce programme), générer les textes d'entête de page (editeur abap / symboles de texte / comparer ...).

Modèle de menu (statut) pour liste : SAPMSSY0 – INLI

Ou alors, pour un menu à jour, exécuter un programme abap simpliste (Write ‘toto’.) + systeme status ; ce qui donne le nom du programme standard SAP qui contient le menu standard.

*ce report nécessite un menu dessiné à peu près comme ceci :
*menu
*----                    list
*f pri  @0x@               print
*                          save
*f %sl  office               office
*f %st  report tree          report tree
*f %pc  file...              file...
*f %ex  exit               exit
*                        edit
*f pick @16@               choose
*f %sc  @13@               find
*f %sc+ @4e@               find next
*f rw   @0w@               cancel
*                        goto
*f back @0w@               back
*
*boutons
*-------
*f veri @4k@ vérifier        vérifier
*f exec @15@ exécuter        exécuter
*f tout @4b@ sélect tout     sélectionner tout
*f rien @4d@ sélect rien     désélectionner tout
*
*icones
*------
*@15@ icon_execute_object
*@16@ icon_select_detail
*@0w@ icon_cancel
*@13@ icon_search
*@4e@ icon_search_next
*@0x@ icon_print
*@4d@ icon_deselect_all
*@4b@ icon_select_all
*@4k@ icon_intensify
*@0w@ icon_cancel

REPORT ZZJPL030
*largeur du report
               LINE-SIZE 255
*hauteur du saut de page (hauteur du pied de page)
               LINE-COUNT 65(1)
*prise de controle sur les entetes
               NO STANDARD PAGE HEADING.
* les indications de largeur et de hauteur permettent au pilote
* d'impression de choisir le format d'impression applicable. Par exemple
* pour une imprimante HPLJ4, on trouve :
* X_65_80 X_65_132 X_90_120 X_65_255 X_65_320
* X_58_170 X_48_255 X_44_120 X_24_255

INCLUDE <LIST>.
TABLES: MAKT, EINE, EINA.

DATA: MARKFIELD(1) TYPE C VALUE 'X'.
DATA LIGNEOK(1).
DATA I TYPE I.
DATA TYPELIGNE(1).

*=--------------------------------------------------------------------=*
TOP-OF-PAGE.
*=--------------------------------------------------------------------=*
*  typeligne = 'C'. hide typeligne.
*  write: / '123456789', '123456789', '123456789', '123456789',
*           '123456789', '123456789', '123456789', '123456789',
*           '123456789', '123456789', '123456789', '123456789',
*           '123456789', '123456789', '123456789', '123456789'.
  TYPELIGNE = 'H'. HIDE TYPELIGNE.

  WRITE:/
    TEXT-H01 NO-GAP,
    TEXT-H21 NO-GAP,
    TEXT-H41 NO-GAP,
    TEXT-H61 NO-GAP,
    TEXT-H81 NO-GAP.
  TYPELIGNE = 'H'. HIDE TYPELIGNE.
  WRITE:/
    TEXT-H02 NO-GAP,
    TEXT-H22 NO-GAP,
    TEXT-H42 NO-GAP,
    TEXT-H62 NO-GAP,
    TEXT-H82 NO-GAP.
  TYPELIGNE = 'H'. HIDE TYPELIGNE.
  WRITE 75 SY-PAGNO.

  WRITE:/
    TEXT-H03 NO-GAP,
    TEXT-H23 NO-GAP,
    TEXT-H43 NO-GAP,
    TEXT-H63 NO-GAP,
    TEXT-H83 NO-GAP.
  TYPELIGNE = 'H'. HIDE TYPELIGNE.
WRITE 101 SY-REPID.
  WRITE:/
    TEXT-H04 NO-GAP,
    TEXT-H24 NO-GAP,
    TEXT-H44 NO-GAP,
    TEXT-H64 NO-GAP,
    TEXT-H84 NO-GAP.
  TYPELIGNE = 'H'. HIDE TYPELIGNE.
WRITE 101 SY-DATUM.
  WRITE:/
    TEXT-H05 NO-GAP,
    TEXT-H25 NO-GAP,
    TEXT-H45 NO-GAP,
    TEXT-H65 NO-GAP,
    TEXT-H85 NO-GAP.
  TYPELIGNE = 'H'. HIDE TYPELIGNE.
WRITE 101 SY-UZEIT.
*=--------------------------------------------------------------------=*
END-OF-PAGE.
*=--------------------------------------------------------------------=*
  TYPELIGNE = 'H'. HIDE TYPELIGNE.
  WRITE:/
    TEXT-H08 NO-GAP,
    TEXT-H28 NO-GAP,
    TEXT-H48 NO-GAP,
    TEXT-H68 NO-GAP,
    TEXT-H88 NO-GAP.

*=--------------------------------------------------------------------=*
START-OF-SELECTION.
*=--------------------------------------------------------------------=*
*report dynamique : monter le menu et le titre
  SET PF-STATUS 'INLI'.
  SET TITLEBAR 'T01'.
*=--------------------------------------------------------------------=*

  MARKFIELD  = 'x'.
  EINA-MATNR = '000000000123456789'.
  MAKT-MAKTX = 'article verbeux abcdefghijklmnopqrstuvwxyz'.
  EINE-APLFZ = 123.
  EINE-MINBM = '1234567890.123-'.
  EINA-MEINS = 'PAK'.
  EINE-NETPR = '12345678.90-'.
  EINE-WAERS = 'FRF'.
  EINE-PEINH = 12345.
  EINE-BPRME = 'EA'.


* configuration d'une ligne correcte

  LIGNEOK = '1'.
  EINE-APLFZ = 1.
  PERFORM LIGNE.
  EINE-APLFZ = 2.
  PERFORM LIGNE.
  EINE-APLFZ = 3.
  PERFORM LIGNE.
  PERFORM LIGNE.
  PERFORM LIGNE.
  PERFORM TRAIT.
* configuration d'une ligne incorecte
  LIGNEOK = '0'.
  EINE-APLFZ = 123.
  DO 2 TIMES.
    PERFORM LIGNE.
  ENDDO.
  PERFORM TRAIT.
  DO 100 TIMES.
    LIGNEOK = '1'.
    EINE-APLFZ = 1.
    PERFORM LIGNE.
  ENDDO.


*=--------------------------------------------------------------------=*
END-OF-SELECTION.
*=--------------------------------------------------------------------=*
  WRITE:/
    TEXT-H09 NO-GAP,
    TEXT-H29 NO-GAP,
    TEXT-H49 NO-GAP,
    TEXT-H69 NO-GAP,
    TEXT-H89 NO-GAP.


*=--------------------------------------------------------------------=*
AT USER-COMMAND.
*=--------------------------------------------------------------------=*
* break-point.
*  write sy-ucomm.
  IF SY-LSIND = 1.
    CASE SY-UCOMM.
      WHEN 'EXEC' OR 'VERI'.
        I = 0.
        DO.
          ADD 1 TO I.
          READ LINE I FIELD VALUE MARKFIELD.
*fin de fichier
          IF SY-SUBRC <> 0.
            EXIT.
          ENDIF.
*selectionner les lignes à traiter
          IF TYPELIGNE = '1' .
*lignes hors selection
            IF MARKFIELD = ' '.
              MODIFY CURRENT LINE
                LINE FORMAT INTENSIFIED ON
                            COLOR OFF.
            ELSE.
*conversions et controles supplémentaires
              PERFORM CONTROLE.
              CHECK SY-SUBRC = 0.
*traiter
              IF SY-UCOMM = 'EXEC'.
                                       ".../...
                TYPELIGNE = '2'.
                MARKFIELD = SPACE.
                MODIFY CURRENT LINE
                  LINE FORMAT COLOR COL_POSITIVE INPUT OFF
                  FIELD VALUE MARKFIELD.
              ENDIF.
            ENDIF.
          ENDIF.

        ENDDO.
*** marquer
      WHEN 'TOUT'.
        I = 0.
        DO.
          I = I + 1.
          READ LINE I.
          IF SY-SUBRC <> 0.
            EXIT.
          ENDIF.
          IF TYPELIGNE = '1'.
            MARKFIELD = 'X'.
            MODIFY CURRENT LINE
              FIELD VALUE MARKFIELD.
          ENDIF.
        ENDDO.
*** demarquer
      WHEN 'RIEN'.
        I = 0.
        DO.
          ADD 1 TO I.
          READ LINE I.
          IF SY-SUBRC <> 0.
            EXIT.
          ENDIF.
          IF TYPELIGNE = '1'.
            MARKFIELD = SPACE.
            MODIFY CURRENT LINE
              FIELD VALUE MARKFIELD.
          ENDIF.

        ENDDO.
    ENDCASE.
  ENDIF.
*=--------------------------------------------------------------------=*
AT LINE-SELECTION.
  SET PF-STATUS SPACE.
  SET LANGUAGE 'E'.
  WRITE: /  'typeligne =', TYPELIGNE.
  WRITE: /  'eina-matnr=', EINA-MATNR.
  WRITE: /  'eina-meins=', EINA-MEINS.
  WRITE: /  'eine-waers=', EINE-WAERS.
  WRITE: /  'eine-bprme=', EINE-BPRME.
  WRITE: /  'makt-maktx=', MAKT-MAKTX.
  WRITE: /  'eine-minbm=', EINE-MINBM.
  WRITE: /  'eine-aplfz=', EINE-APLFZ.
  WRITE: /  'eine-netpr=', EINE-NETPR.
  WRITE: /  'eine-peinh=', EINE-PEINH.

*=--------------------------------------------------------------------=*

*&---------------------------------------------------------------------*
*&      Form  LIGNE
*&---------------------------------------------------------------------*
*       ajouter une ligne sur la liste en cours
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM LIGNE.
*lignes correctes : couleur = normal, saisie = possible
*lignes erronnees : couleur = rouge, saisie = verrouillee

  IF LIGNEOK = '1'.
    MARKFIELD = 'X'.
    FORMAT RESET.
    FORMAT COLOR OFF INTENSIFIED  OFF.
  ELSE.
    MARKFIELD = ' '.
    FORMAT RESET.
    FORMAT COLOR COL_NEGATIVE INTENSIFIED  OFF.
  ENDIF.
*fonds de ligne
  WRITE:/
    TEXT-H06 NO-GAP,
    TEXT-H26 NO-GAP,
    TEXT-H46 NO-GAP,
    TEXT-H66 NO-GAP,
    TEXT-H86 NO-GAP.
* champs fixes
  WRITE   4 EINA-MATNR+8(10)   NO-GAP.
  HIDE      EINA-MATNR.
  WRITE  33 EINA-MEINS         NO-GAP.
  HIDE      EINA-MEINS.
  WRITE  56 EINE-WAERS(3)      NO-GAP.
  HIDE      EINE-WAERS.
  WRITE  66 EINE-BPRME         NO-GAP.
  HIDE      EINE-BPRME.
  WRITE  70 MAKT-MAKTX.
  HIDE      MAKT-MAKTX.
  WRITE 16  EINE-MINBM        NO-GAP.
  HIDE EINE-MINBM.
  WRITE 37  EINE-APLFZ        NO-GAP.
  HIDE      EINE-APLFZ.
  WRITE 41  EINE-NETPR        NO-GAP.
  HIDE      EINE-NETPR.
  WRITE 60  EINE-PEINH        NO-GAP.
  HIDE      EINE-PEINH.
  TYPELIGNE = LIGNEOK.
  HIDE TYPELIGNE.

*champ modifiable : markfield
  IF LIGNEOK = '1'.
    FORMAT INPUT ON INTENSIFIED OFF.
    WRITE 2  MARKFIELD           AS CHECKBOX.
  ELSE.
    FORMAT INPUT OFF INTENSIFIED OFF.
    WRITE 2  MARKFIELD           AS CHECKBOX INPUT OFF.
  ENDIF.
  TYPELIGNE = LIGNEOK.
  HIDE TYPELIGNE.
  FORMAT RESET.
ENDFORM.                               " LIGNE

*&---------------------------------------------------------------------*
*&      Form  trait
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM TRAIT.

  WRITE: / SY-ULINE.
  TYPELIGNE = 'U'.
  HIDE TYPELIGNE.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  CONTROLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CONTROLE.
*code retour du controle
  SY-SUBRC = 0.
* controles supplémentaires
  IF EINE-APLFZ = ' 2 '.
    SY-SUBRC = 1.
  ENDIF.
*saisie erronnée : ligne en jaune et champ en rouge
  IF SY-SUBRC > 0.
    MODIFY CURRENT LINE
      LINE FORMAT COLOR COL_TOTAL
                  INTENSIFIED OFF
      FIELD FORMAT EINE-APLFZ COLOR COL_NEGATIVE .
    SY-SUBRC = 2.
  ELSE.
*saisie correcte : refaire la mise en page
    MODIFY CURRENT LINE
        LINE FORMAT COLOR OFF
                    INTENSIFIED OFF.
  ENDIF.
ENDFORM.                               " READ_NUMERIC_FIELD
*&---------------------------------------------------------------------*
*&      Form  NEVER_USED
*&---------------------------------------------------------------------*
*ce form n'est jamais exécuté.Il sert uniquement à l'initialisation des
*symboles de texte (editeur abap / symboles de texte / comparer ...)
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM NEVER_USED.
  DATA _I(60).
*Hxy : H = préfixe pour HEADER
*      x = tranche de l'entete. la largeur maxi d'un report est de 255
*          caractères. les 4 premières tranches font 50 cars de large,
*          la 5° tranche fait 55 cars de large.
*      y = numéro de ligne, ou format d'impression

* première tranche, colonnes 1 à 50

*******'....+....1....+....2....+....3....+....4....+....5'
  _I = '--------------------------------------------------'(H01).
  _I = '| |           |Quantités           |   |Prix      '(H02).
  _I = '| |           |-----------------------------------'(H03).
  _I = '|S|Article    |Qté mini         U  |Dly| unitaire '(H04).
  _I = '--------------------------------------------------'(H05).
  _I = '| |           |                    |   |          '(H06).
  _I = '-------A Suivre-----------------------------------'(H08).
  _I = '-------fin de liste-------------------------------'(H09).

* deuxième tranche, colonnes 51 à 100

*******'....+....6....+....7....+....8....+....9....+...10'
  _I = '--------------------------------------------------'(H21).
  _I = '                  |Page     1                     '(H22).
  _I = '--------------------------------------------------'(H23).
  _I = '     U  |Pour  U  |Désignation                    '(H24).
  _I = '--------------------------------------------------'(H25).
  _I = '        /         |                               '(H26).
  _I = '--------------------------------------------------'(H28).
  _I = '--------------------------------------------------'(H29).

* troisième tranche, colonnes 101 à 150

*******'....+...11....+...12....+...13....+...14....+...15'
  _I = '--------------------------------------------------'(H41).
  _I = '||||||||||||||||||||||||||||||||||||||||||||||||||'(H42).
  _I = '---------| |||||||||||||||||||||||||||||||||||||||'(H43).
  _I = '         |||--||||||||||||||||||||||||||||||||||||'(H44).
  _I = '---------|||||||||||||||||||||||||||||||||||||||||'(H45).
  _I = '---------|||||||||||||||||||||||||||||||||||||||||'(H48).
  _I = '---------|||||||||||||||||||||||||||||||||||||||||'(H49).

* quatrième tranche, colonnes 151 à 200

*******'....+...16....+...17....+...18....+...19....+...20'
  _I = ' -------------------------------------------------'(H61).
  _I = ' ---| |------|--------| |-------------------------'(H62).
  _I = ' ---- --------------------------------------------'(H63).
  _I = ' -------------------------------------------------'(H64).
  _I = ' -------------------------------------------------'(H65).
  _I = ' -------------------------------------------------'(H68).
  _I = ' -------------------------------------------------'(H69).

* cinquième tranche, colonnes 200 à 255

*******'....+...21....+...22....+...23....+...24....+...25....+'
  _I = '||||||||||||||||||||||||||||||||||||||||||||||||||....+'(H81).
  _I = '||||||||||||||||||||||||||||||||||||||||||||||||||....+'(H82).
  _I = '||||||||||||||||||||||||||||||||||||||||||||||||||....+'(H83).
  _I = '||||||||||||||||||||||||||||||||||||||||||||||||||....+'(H84).
  _I = '||||||||||||||||||||||||||||||||||||||||||||||||||....+'(H85).
  _I = '||||||||||||||||||||||||||||||||||||||||||||||||||....+'(H88).
  _I = '||||||||||||||||||||||||||||||||||||||||||||||||||....+'(H89).



*_i = '                                                  '(   ).
*_i = '                                                  '(   ).
*_i = '                                                  '(   ).
*_i = '                                                  '(   ).
*_i = '                                                  '(   ).
*_i = '                                                  '(   ).
*_i = '                                                  '(   ).
*_i = '                                                  '(   ).
*_i = '                                                  '(   ).

ENDFORM.                               " NEVER_USED

Export vers Excel pour mailing Table des matières

Crée un fichier d'extraction, le copie su le PC, ouvre Excel, charge le fichier depuis le PC et se termine en laissant Excel ouvert

Textpool :
----------
I001     Exporter des fiches clients dans EXCEL, limité à 100 fiches
I002     Intitulé des colonnes                       
IJPL     JP Lamontre
R        Shell EXCEL   
SS_KUNNR         N° Client 
SS_NAME          Façon MAILING    
SS_TITLE         compréhensible  
 
Abap :
------
REPORT ZZJPL033 NO STANDARD PAGE HEADING.
INCLUDE OLE2INCL.
*=-------------------------------------------------------------------=*
TABLES: KNA1.
*=-------------------------------------------------------------------=*
DATA: TABLEUR TYPE OLE2_OBJECT.        " define ole application name
DATA: CLASSEUR TYPE OLE2_OBJECT.       " define workbook name
DATA: SHEET TYPE OLE2_OBJECT.          " define excel sheet name
DATA:
  FICHIER_LOGIC LIKE FILENAME-FILEINTERN,
  FICHIER_PHYSIC LIKE FILENAME-FILEEXTERN.
DATA  _PCFILE(128).
DATA CLIENT LIKE KNA1 OCCURS 0.
DATA: FIELD LIKE DFIES OCCURS 0 WITH HEADER LINE,
  BEGIN OF NOM OCCURS 0,
    N(20),
  END OF NOM,
  C80(80).

DATA TABNAME LIKE DCOBJDEF-NAME.
*=-------------------------------------------------------------------=*
* criteres de selection
* demander le type d'entete de colonne désiré
SELECTION-SCREEN COMMENT 1(80) TEXT-JPL.
SELECTION-SCREEN COMMENT /1(80) TEXT-001.
SELECTION-SCREEN BEGIN OF BLOCK HDR WITH FRAME TITLE TEXT-002.
PARAMETERS:
  S_NAME  RADIOBUTTON GROUP HDR,
  S_TITLE  RADIOBUTTON GROUP HDR DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK HDR.
SELECT-OPTIONS S_KUNNR FOR KNA1-KUNNR MATCHCODE OBJECT DEBI.
*=-------------------------------------------------------------------=*
START-OF-SELECTION.
*=-------------------------------------------------------------------=*
  FICHIER_PHYSIC = 'C:\TEMP\CLIENT.DAT'.
*=-récupérer le nom des colonnes
  TABNAME = 'KNA1'.
  CALL FUNCTION 'DDIF_FIELDINFO_GET'
       EXPORTING
            TABNAME   = TABNAME
       TABLES
            DFIES_TAB = FIELD
       EXCEPTIONS
            OTHERS    = 3.
*=-extraire les noms de colonnes
  CLEAR NOM. REFRESH NOM.
  LOOP AT FIELD.
    IF S_NAME = 'X'.
*version avec les noms de colonnes : idéal pour faire un mailing
      NOM-N = FIELD-FIELDNAME.
    ENDIF.
    IF S_TITLE = 'X'.
*version avec les intitulés courts de colonnes
      NOM-N = FIELD-SCRTEXT_S.
    ENDIF.
    APPEND NOM.
  ENDLOOP.
*=-récupérer les données
  SELECT *
  INTO TABLE CLIENT
  FROM KNA1 UP TO 100 ROWS
  WHERE KUNNR IN S_KUNNR.
  SORT CLIENT.
*=-charger le fichier EXCEL
  _PCFILE = FICHIER_PHYSIC.            "pour respecter le typage
  CALL FUNCTION 'WS_DOWNLOAD'
       EXPORTING
            FILENAME   = _PCFILE
            FILETYPE   = 'DAT'
       TABLES
            DATA_TAB   = CLIENT
            FIELDNAMES = NOM
       EXCEPTIONS
            OTHERS     = 9.
*-----------------------------------------------------------------------
* call excel opening export file
*-----------------------------------------------------------------------
*liste des applications : table TOLE, trx SOLE
  CREATE OBJECT TABLEUR 'EXCEL.APPLICATION'.
*liste des propriétés : table OLELOAD(verbtype='P'), trx SOLI
  SET PROPERTY OF TABLEUR 'Visible' = 1.
*liste des méthodes : table OLELOAD(verbtype='M'), trx SOLI
  CALL METHOD OF TABLEUR 'Workbooks' = CLASSEUR.
  CALL METHOD OF CLASSEUR 'Open'  EXPORTING #1 = FICHIER_PHYSIC.

Shell d'application PC, synchrone et asynchrone Table des matières

Html

*=-en SHELL direct, synchrone
CLEAR RC.
CALL FUNCTION 'WS_EXECUTE'
     EXPORTING
*         DOCUMENT       = ' '
*         CD             = ' '
          COMMANDLINE    = 'c:\temp\client.dat'
          INFORM         = 'X'
          PROGRAM        =
'C:\Program Files\Microsoft Office\Office\EXCEL.EXE'
*         STAT           = ' '
          WINID          = 'EXCEL69'
*         OSMAC_SCRIPT   = ' '
*         OSMAC_CREATOR  = ' '
*         WIN16_EXT      = ' '
*         EXEC_RC        = ' '
     IMPORTING
          RBUFF          = RC
     EXCEPTIONS
          FRONTEND_ERROR = 1
          NO_BATCH       = 2
          PROG_NOT_FOUND = 3
          ILLEGAL_OPTION = 4
          OTHERS         = 5.
* ca marche, ABAP s'arrête et attend.
WRITE:  'ce texte devrait s''afficher apres la fermeture de Excel'.


*=-en SHELL direct, synchrone

CALL FUNCTION 'WS_EXECUTE'
     EXPORTING
*         DOCUMENT       = ' '
*         CD             = ' '
          COMMANDLINE    = 'k:\cdrom\sapr3e\booklist.hlp'
          INFORM         = 'X'
          PROGRAM        = 'winhelp'
*         STAT           = ' '
          WINID          = 'HELP88'
*         OSMAC_SCRIPT   = ' '
*         OSMAC_CREATOR  = ' '
*         WIN16_EXT      = ' '
*         EXEC_RC        = ' '
     IMPORTING
          RBUFF          = RC
     EXCEPTIONS
          FRONTEND_ERROR = 1
          NO_BATCH       = 2
          PROG_NOT_FOUND = 3
          ILLEGAL_OPTION = 4
          OTHERS         = 5.
WRITE:  'ce texte devrait s''afficher apres la fermeture du',
'premier affichage de WINHELP'.
*raté, il ne s'arrête pas. winhelp ne permet pas la synchro.
WRITE RC.

*=-en SHELL direct, asynchrone
RC = 'TotO'.
CALL FUNCTION 'WS_EXECUTE'
     EXPORTING
*         DOCUMENT       = ' '
*         CD             = ' '
          COMMANDLINE    = 'k:\cdrom\sapr3e\booklist.hlp'
          INFORM         = ' '
          PROGRAM        = 'winhelp'
*         STAT           = ' '
*         WINID          = ' '
*         OSMAC_SCRIPT   = ' '
*         OSMAC_CREATOR  = ' '
*         WIN16_EXT      = ' '
*         EXEC_RC        = ' '
     IMPORTING
          RBUFF          = RC
     EXCEPTIONS
          FRONTEND_ERROR = 1
          NO_BATCH       = 2
          PROG_NOT_FOUND = 3
          ILLEGAL_OPTION = 4
          OTHERS         = 5.

WRITE RC.

OLE vers Excel Table des matières

* Including OLE types
INCLUDE OLE2INCL.
* Tables and variables for later use
TABLES: KNA1.
DATA W_KNA1 LIKE KNA1 OCCURS 0 WITH HEADER LINE.
DATA: APPLICATION TYPE OLE2_OBJECT,
      WORKBOOK    TYPE OLE2_OBJECT,
      SHEET       TYPE OLE2_OBJECT,
      CELLS       TYPE OLE2_OBJECT.
* Creating an object
CREATE OBJECT APPLICATION 'excel.application'.
IF SY-SUBRC NE 0.
   WRITE: / 'Error when opening excel.application', SY-MSGLI.
ENDIF.
* Setting properties
SET PROPERTY OF APPLICATION 'Visible' = 1.
* Calling methods
CALL METHOD OF APPLICATION 'Workbooks' = WORKBOOK.
PERFORM ERRORS.
CALL METHOD OF WORKBOOK 'Add'.
PERFORM ERRORS.
CALL METHOD OF APPLICATION 'Worksheets' = SHEET EXPORTING #1 = 1.
PERFORM ERRORS.
CALL METHOD OF SHEET 'Activate'.
PERFORM ERRORS.
PERFORM FILL_SHEET.

* Subroutine for filling the spread sheet
FORM FILL_SHEET.
  DATA: ROW_MAX TYPE I VALUE 256,
        INDEX   TYPE I VALUE 1.
  FIELD-SYMBOLS: <NAME>.
  SELECT * FROM KNA1 UP TO 10 ROWS
  INTO TABLE W_KNA1
                                  .
LOOP AT W_KNA1.
KNA1 = W_KNA1.
*    index = row_max * ( sy-dbcnt - 1 ) + 1.
    DO 4 TIMES.
      ASSIGN COMPONENT SY-INDEX OF STRUCTURE KNA1 TO <NAME>.
      CALL METHOD OF SHEET 'Cells' = CELLS
                           EXPORTING #1 = INDEX.
      SET PROPERTY OF CELLS 'Value' = <NAME>.
      ADD 1 TO INDEX.
    ENDDO.
  ENDLOOP.
ENDFORM.
* Subroutine for error handling
FORM ERRORS.
  IF SY-SUBRC NE 0.
    WRITE: / 'Error in OLE call', SY-MSGLI.
    EXIT.
  ENDIF.
ENDFORM.

A étudier

REPORT Z66WORD .
INCLUDE OLE2INCL.
INCLUDE DOCSINCL.
TABLES: MAKT.
DATA F_RETOUR TYPE OLE2_OBJECT.
DATA S_RETOUR TYPE OLE2_OBJECT.
DATA APPLICATION TYPE OLE2_OBJECT.
DATA WORD TYPE OLE2_OBJECT.
DATA: BEGIN OF ITAB OCCURS 100,
      MATNR LIKE MAKT-MATNR,
      SEP1(1),
      SPRAS LIKE MAKT-SPRAS,
      SEP2(1),
      MAKTX LIKE MAKT-MAKTX,
      SEP3(1),
      MAKTG LIKE MAKT-MAKTG,
      END OF ITAB.
SELECT     * FROM  MAKT.
  MOVE MAKT-MATNR TO ITAB-MATNR.
  MOVE MAKT-SPRAS TO ITAB-SPRAS.
  MOVE MAKT-MAKTX TO ITAB-MAKTX.
  MOVE MAKT-MAKTG TO ITAB-MAKTG.
  MOVE ';' TO ITAB-SEP1.
  MOVE ';' TO ITAB-SEP2.
  MOVE ';' TO ITAB-SEP3.
  APPEND ITAB.
ENDSELECT.

LOOP AT ITAB.
  WRITE: / ITAB-MATNR,
          ITAB-SPRAS,
          ITAB-SPRAS,
          ITAB-MAKTX.
ENDLOOP.


*CALL FUNCTION 'WS_DOWNLOAD'
*    EXPORTING
*         FILENAME            = 'C:\titi.txt'
*    TABLES
*          DATA_TAB            = ITAB.

*CALL FUNCTION 'WS_EXECUTE'
*    EXPORTING
*         CD             = 'C:\'
*         COMMANDLINE    = 'c:\titi.txt'
*         PROGRAM        = 'winword.exe'.
*         STAT           = ' '
*         WINID          = ' '
*         OSMAC_SCRIPT   = ' '
*         OSMAC_CREATOR  = ' '
*         WIN16_EXT      = ' '
*         EXEC_RC        = ' '
*    IMPORTING
*         RBUFF          =
CREATE OBJECT APPLICATION 'WORD.BASIC'.
IF SY-SUBRC NE 0.
  WRITE / 'pb ouverture Word'.
ELSE.
  CALL METHOD OF APPLICATION 'FILEOPEN'
       EXPORTING #1 = 'C:\TITI.txt' #2 = '0'.  "ouvre le fichier
CALL METHOD OF APPLICATION 'AppShow'.  "Ouvre word
* CALL METHOD OF APPLICATION 'VIEWTOOLBAR'.    " masque les icones.
*SET PROPERTY OF WORD 'APPSHOW' = S_RETOUR.
*set property of application 'AppShow' = f_retour.
*CALL METHOD OF APPLICATION 'MENUITEMMACRO'."aperçu avant impression
CALL METHOD OF APPLICATION 'FILEPRINTPREVIEW'. "aperçu avant impression
*IF F_RETOUR-HANDLE NE -1.
*CALL METHOD OF APPLICATION 'CLOSEPREVIEW'.
*ENDIF.
*CALL METHOD OF APPLICATION 'FILEEXIT'. "Ferme Word
ENDIF.


REPORT Z66WORD .
INCLUDE OLE2INCL.
INCLUDE DOCSINCL.
DATA: H_WORD TYPE OLE2_OBJECT.
DATA: H_VALS TYPE OLE2_OBJECT.
DATA: H_STAT TYPE OLE2_OBJECT.
DATA VIS TYPE I.
DATA FILENAME(30). DATA STRING(30).

CREATE OBJECT H_WORD 'WORD.APPL'.
FILENAME = 'C:\TITI.TXT'.
*CALL METHOD OF H_WORD 'FILEOPEN' EXPORTING #1 = FILENAME.
*CALL METHOD OF H_WORD 'CurValues' = H_VALS.
GET PROPERTY OF H_WORD 'Visible' = VIS.
*GET PROPERTY OF H_STAT 'filesize' = STRING.
*WRITE: 'Resultat :',STRING.
*CALL METHOD OF APPLICATION 'AppShow'.  "Ouvre word
* CALL METHOD OF APPLICATION 'VIEWTOOLBAR'.    " masque les icones.
*SET PROPERTY OF WORD 'APPSHOW' = S_RETOUR.
*GET PROPERTY OF WORD 'FILEOPEN' = F_RETOUR.
*CALL METHOD OF APPLICATION 'MENUITEMMACRO'."aperçu avant impression
*CALL METHOD OF APPLICATION 'FILEPRINTPREVIEW'. "aperçu avant impression
*IF F_RETOUR-HANDLE NE -1.
*CALL METHOD OF APPLICATION 'CLOSEPREVIEW'.
*ENDIF.
*CALL METHOD OF APPLICATION 'FILEEXIT'. "Ferme Word
*ENDIF.

Copie de fichiers SAP <-> PC Table des matières

Voir aussi transaction AL11

Textpool :
----------
I001     Fichier sur le serveur
I002     Fichier sur le poste de travail
I003     Sens de la copie               
R        Copie de fichiers              
SPCDIR           Répertoire PC          
SPCFILE          Fichier PC             
SPCSFX           Suffixe PC             
SPC_SRV          PC vers serveur        
SSRVDIR          Répertoire serveur     
SSRVFILE         Fichier serveur        
SSRVSFX          Suffixe serveur        
SSRV_PC          Serveur vers PC        

Abap :
------
REPORT ZZJPL040 LINE-SIZE 255.
DATA: BEGIN OF PC OCCURS 0,
      ENR(5000),
      END OF PC.
DATA:
    SRVDIR(64) VALUE '/home/france/' ,
    SRVSFX(4) VALUE '.txt' ,
    PCDIR(64) VALUE 'c:\sappc\',
    PCSFX(4) VALUE '.txt'
    , ZG_DEBUGTEXT(5000)
    , W-LEN TYPE I
    , W-LIN TYPE I
    .
SELECTION-SCREEN BEGIN OF BLOCK SERVEUR WITH FRAME TITLE TEXT-001.
PARAMETERS SRVFILE(128) LOWER CASE.
SELECTION-SCREEN END OF BLOCK SERVEUR.
SELECTION-SCREEN BEGIN OF BLOCK PC WITH FRAME TITLE TEXT-002.
PARAMETERS PCFILE(128) LOWER CASE.
SELECTION-SCREEN END OF BLOCK PC.
SELECTION-SCREEN BEGIN OF BLOCK SENS WITH FRAME TITLE TEXT-003.
PARAMETERS PC_SRV RADIOBUTTON GROUP SENS.
PARAMETERS SRV_PC RADIOBUTTON GROUP SENS.
SELECTION-SCREEN END OF BLOCK SENS.
*----------------------------------------------------------------------
INITIALIZATION.
*----------------------------------------------------------------------
  CONCATENATE SRVDIR '?' SRVSFX INTO SRVFILE.
  CONCATENATE PCDIR '?' PCSFX INTO PCFILE.
*----------------------------------------------------------------------
START-OF-SELECTION.
*----------------------------------------------------------------------
  W-LIN = 0.
  W-LEN = 0.
*copie serveur vers pc
  IF SRV_PC = 'X'.
    OPEN DATASET SRVFILE FOR INPUT IN TEXT MODE.
*lire le serveur
    DO.
      READ DATASET SRVFILE INTO ZG_DEBUGTEXT.
      IF SY-SUBRC <> 0. EXIT. ENDIF.
      APPEND ZG_DEBUGTEXT TO PC.
      WRITE:/ ZG_DEBUGTEXT.
      COMPUTE W-LEN = W-LEN + STRLEN( ZG_DEBUGTEXT ).
    ENDDO.
    CLOSE DATASET SRVFILE.
*ecrire sur le pc
    DESCRIBE TABLE PC LINES W-LIN.
    CALL FUNCTION 'WS_DOWNLOAD'
         EXPORTING
              FILENAME            = PCFILE
         TABLES
              DATA_TAB            = PC
         EXCEPTIONS
              FILE_OPEN_ERROR     = 1
              FILE_WRITE_ERROR    = 2
              INVALID_FILESIZE    = 3
              INVALID_TABLE_WIDTH = 4
              INVALID_TYPE        = 5
              NO_BATCH            = 6
              UNKNOWN_ERROR       = 7
              OTHERS              = 8.
    ULINE.
*compte-rendu
    IF SY-SUBRC <> 0. FORMAT COLOR COL_NEGATIVE. ENDIF.
    WRITE: / 'copie de', SRVFILE.
    WRITE: /   'vers', PCFILE.
    WRITE: /   'sy-subrc=', SY-SUBRC,
             W-LIN, 'lignes',
             W-LEN, 'octets'.
*copie pc vers serveur
  ELSE.
*lire le pc
    CALL FUNCTION 'WS_UPLOAD'
         EXPORTING
              FILENAME = PCFILE
         TABLES
              DATA_TAB = PC
         EXCEPTIONS
              OTHERS   = 9.
    DESCRIBE TABLE PC LINES W-LIN.
*ecrire sur le serveur
    OPEN DATASET SRVFILE FOR OUTPUT IN TEXT MODE.
    LOOP AT PC.
      COMPUTE W-LEN = W-LEN + STRLEN( PC-ENR ).
      TRANSFER PC-ENR TO SRVFILE.
      IF SY-SUBRC <> 0.
        FORMAT COLOR COL_NEGATIVE.
        WRITE: / 'ecriture sur le serveur, sy-subrc=', SY-SUBRC.
        EXIT.
      ENDIF.
      WRITE:/ PC-ENR.
    ENDLOOP.
    CLOSE DATASET SRVFILE.
    ULINE.
*compte-rendu
    IF SY-SUBRC <> 0. FORMAT COLOR COL_NEGATIVE. ENDIF.
    WRITE: / 'copie de', PCFILE.
    WRITE: / 'vers', SRVFILE.
    WRITE: / 'sy-subrc=', SY-SUBRC,
             W-LIN, 'lignes',
             W-LEN, 'octets'.
  ENDIF.

Selection-Screen Table des matières

SELECTION-SCREEN BEGIN OF BLOCK ESSAI WITH FRAME TITLE TEXT-003.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(10) T1.
SELECTION-SCREEN POSITION 20. PARAMETERS C1 AS CHECKBOX.
SELECTION-SCREEN POSITION 40. PARAMETERS C2 AS CHECKBOX.
SELECTION-SCREEN POSITION 60. PARAMETERS C3 AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(15) T2.
SELECTION-SCREEN POSITION POS_LOW.
PARAMETERS R1 RADIOBUTTON GROUP G1.
SELECTION-SCREEN POSITION POS_HIGH.
PARAMETERS R2 RADIOBUTTON GROUP G1.

SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF BLOCK CB2 WITH FRAME.
PARAMETERS C4 AS CHECKBOX.
SELECTION-SCREEN ULINE 35(20).
SELECTION-SCREEN PUSHBUTTON 60(8) POUSSER USER-COMMAND PUSH.
PARAMETERS C5 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK CB2.
SELECTION-SCREEN BEGIN OF BLOCK RB2 WITH FRAME.
PARAMETERS R3 RADIOBUTTON GROUP G2.
PARAMETERS R4 RADIOBUTTON GROUP G2.
PARAMETERS R5 RADIOBUTTON GROUP G2.
SELECTION-SCREEN END OF BLOCK RB2.

SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.
SELECTION-SCREEN FUNCTION KEY 3.
SELECTION-SCREEN FUNCTION KEY 4.
SELECTION-SCREEN FUNCTION KEY 5.
SELECTION-SCREEN END OF BLOCK ESSAI.


INITIALIZATION.
  CONCATENATE 'DEBUG_' SY-UNAME INTO SRVFILE.
  PCFILE = SRVFILE.
T1 = 'Checkbox'.
T2 = 'Radio Bouton'.
POUSSER = 'Pousse !'.
SSCRFIELDS-FUNCTXT_01 = 'fonction 1'.
SSCRFIELDS-FUNCTXT_02 = 'fonction 2'.
SSCRFIELDS-FUNCTXT_03 = 'bouton 3'.
SSCRFIELDS-FUNCTXT_04 = 'bouton 4'.
SSCRFIELDS-FUNCTXT_05 = 'bouton 5'.

Shell Unix Table des matières

Html

T        Shell unix - Change as needed and press F2 (or double-clic) to execute 

DATA: BEGIN OF TABL OCCURS 0, LINE(2000), END OF TABL.
DATA: PARCOM_LOC(100) TYPE C VALUE 'whoami'.
DATA LINE     LIKE TABL-LINE.
*----------------------------------------------------------------------
START-OF-SELECTION.  PERFORM CALL_UNIX.
*-------------------------------------------------------------------*
AT LINE-SELECTION.   PARCOM_LOC = SY-LISEL.    PERFORM CALL_UNIX.
*---------------------------------------------------------------------*
FORM CALL_UNIX.
  REFRESH TABL.
  CALL 'SYSTEM' ID 'COMMAND' FIELD PARCOM_LOC
                ID 'TAB'     FIELD TABL-*SYS*.
  FORMAT RESET. FORMAT INPUT ON . WRITE / PARCOM_LOC.
  LOOP AT TABL. LINE = TABL-LINE. WRITE / LINE. ENDLOOP.
ENDFORM.

Matrice de Batch Input Table des matières

Génération d’un batch input simple :
Utiliser cette façon quand il n’y a pas d’intelligence dans le programme batch input : pas de gestion de rupture, pas de vérification compliquée, ... en gros chaque fois que pour une ligne de fichier en entrée il y a toujours la même suite de transaction(s), dynpros et champs.
* transaction : SM35
* bouton mémoriser
* donner un nom à l’enregistrement
* créer l’enregistrement par F5
* donner le code transaction
* saisir tous les champs ciblés, même si la valeur affichée est déjà correcte
* chaque fois que l’on sort d’une transaction, SM35 affiche la mémorisation
* a ce moment on peux choisir d’en ajouter une autre, ou de terminer. si l’on choisit d’en ajouter une autre, on peux soit reprendre le travail déjà fait soit recommencer depuis le début. Pour terminer : F3
* SM35 affiche la liste des enregistrement. Vérifier si le nombre de transactions est correct
* bouton Créer programme
* adaptation du programme généré : voir la matrice ci-après
dans le corps du programme, remplacer quand c’est nécessaire les constantes par les champs de la table lue par exemple :
remplacer

perform bdc_field       using 'QINF-LIEFERANT' '100080'.
par
perform bdc_field       using 'QINF-LIEFERANT' tab-lifnr.
c’est fini. Tester, ca devrait marcher directement du premier coup.
Textpool :
----------
R        Matrice de Batch Input
SFORTEST         Juste pour voir (sans dossier)
SGROUP           Nom du dossier Batch Input
SPC              ou...de ce PC ?      
SPHY_NAME        Quel fichier lire ?  
SM35             Enchainer sur SM35   
SSRV             .....du serveur SAP ?

Abap :
------
REPORT ZZJPL047 NO STANDARD PAGE HEADING LINE-SIZE 255.
*=------------------------------------------------------------------=*
*constantes
CONSTANTS:
C_BIFOLDER(12) VALUE 'JPL_DEMO',
C_FILENAME(64) VALUE 'C:\jpl\Fichier.txt'
          .
*=--naming-via-FILE-transaction-------------------------------------=*
DATA: IN_NAME LIKE FILENAME-FILEINTERN VALUE '???'.
*=------------------------------------------------------------------=*
*structure du fichier UNIX à plat en entree
DATA DATASET(5000).
*les zones respectent le mappage du fichier à plat
*soit au caractère près, soit par tabulation X'09'
DATA:
  BEGIN OF HPUX OCCURS 0,
    COL_A(9),
    COL_B(20),
    COL_C(40),
    COL_D(1),
    COL_E(1),
    COL_F(4),
    COL_G(1),
    COL_H(1),
    COL_I(10),
  END OF HPUX,
  HPUXLUS TYPE I VALUE 0               "nb lignes lues
  ,TRTLUS TYPE I  VALUE 0              "nb lignes conservees
  ,TRXECRI TYPE I VALUE 0              "nb transactions
  ,TCODE(4),
*------table sbdc.
* Batchinputdata of single transaction
  BEGIN OF BDCDATA OCCURS 0.
        INCLUDE STRUCTURE BDCDATA.
DATA:
  END OF BDCDATA.
DATA RC TYPE I.
*=------------------------------------------------------------------=*
*selection screen
*=------------------------------------------------------------------=*
*description du fichier en lecture
PARAMETERS PHY_NAME LIKE FILENAME-FILEEXTERN.
PARAMETERS SRV RADIOBUTTON GROUP SENS.
PARAMETERS PC RADIOBUTTON GROUP SENS.
SELECTION-SCREEN ULINE.
*description du dossier BI en écriture
PARAMETERS GROUP(12).
PARAMETERS FORTEST AS CHECKBOX.
PARAMETERS SM35 AS CHECKBOX.
SELECTION-SCREEN ULINE.
*----------------------------------------------------------------------*
INITIALIZATION.
*----------------------------------------------------------------------*
*fichier en entree nom du fichier
  PERFORM READ_PHYSICAL_NAME USING IN_NAME
                             CHANGING PHY_NAME.
  GROUP = C_BIFOLDER.
* srv  = 'X'.
  PC = 'X'.
*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*
*  lecture du fichier en entree vers la table interne
  IF SRV = 'X'.
    OPEN DATASET PHY_NAME FOR INPUT IN TEXT MODE.
    DO.
      READ DATASET PHY_NAME INTO DATASET.
      IF SY-SUBRC <> 0.
        EXIT.
      ENDIF.
*format avec tabulation ? ... ou sans : ca roule !
* avec tabulations
      PERFORM FLF2COL USING  DATASET HPUX RC.
* sans tabulations
*     hpux = dataset.
*charger en table interne
      APPEND HPUX.
    ENDDO.
  ELSE.
    DATA FILENAME LIKE RLGRAP-FILENAME .
    FILENAME = PHY_NAME .
    CALL FUNCTION 'WS_UPLOAD'
         EXPORTING
              FILENAME = FILENAME
              FILETYPE = 'DAT'         "avec tabulations
         TABLES
              DATA_TAB = HPUX
         EXCEPTIONS
              OTHERS   = 8.
  ENDIF.
*=------------------------------------------------------------------=*
* decortiquer le fichier -> dossier BI
*=------------------------------------------------------------------=*
  PERFORM OPEN_GROUP.
  LOOP AT HPUX.
    ADD 1 TO HPUXLUS.
*sans les lignes en commentaire
    CHECK HPUX-COL_A(1) <> '*'.
*modèle pour éliminer les lignes inutiles
**eliminer les ___
*  if ___ = '___'.
*    write:/ '___ : ', ___.
*    write:
*    'abandonné : '.
*    continue.
*  endif.
*modèle pour rechercher des infos complémentaires déja dans SAP
**trouver ___
*  data w_matnr like eina-matnr.
*  call function 'CONVERSION_EXIT_ALPHA_INPUT'
*       exporting
*            input  = ___
*       importing
*            output = w_matnr.
*  select  single * from eina where matnr = w_matnr.
*  if sy-subrc <> 0.
*    continue.
*  endif.
*la ligne HPUX est acceptée
    ADD 1 TO TRTLUS.
    PERFORM BDC_POSTE.

  ENDLOOP.
  WRITE: / HPUXLUS, 'lus sur', PHY_NAME.
  WRITE:/ TRTLUS, 'sélectionnés pour le dossier', group.
  IF FORTEST <> SPACE.
    WRITE:/ '          Mode TEST requis, dossier non ouvert'.
  ENDIF.
  WRITE:/ TRXECRI, 'transactions dans le dossier', group.
  PERFORM CLOSE_GROUP.
  IF FORTEST = SPACE AND SM35 = 'X'.
    SET PARAMETER ID 'MPN' FIELD GROUP .
    CALL TRANSACTION 'SM35' AND SKIP FIRST SCREEN.
    LEAVE PROGRAM.
  ENDIF.

*---------------------------------------------------------------------*
*       FORM READ_PHYS_NAME                                           *
*---------------------------------------------------------------------*
*  -->  LOG_NAME                                                      *
*---------------------------------------------------------------------*
FORM READ_PHYSICAL_NAME USING LOG_NAME CHANGING PHY_NAME.
  IF LOG_NAME = '???'.
    PHY_NAME = C_FILENAME.
  ELSE.
    CALL FUNCTION 'FILE_GET_NAME'
         EXPORTING
              LOGICAL_FILENAME = LOG_NAME
         IMPORTING
              FILE_NAME        = PHY_NAME
         EXCEPTIONS
              FILE_NOT_FOUND   = 1
              OTHERS           = 2.
    IF NOT SY-SUBRC IS INITIAL.
      MESSAGE A651(M7) WITH 'V_FILENAME' LOG_NAME.
    ENDIF.
  ENDIF.
ENDFORM.                               " change_ext_int

*----------------------------------------------------------------------*
*   create batchinput session                                          *
*----------------------------------------------------------------------*
FORM OPEN_GROUP.
  IF FORTEST = SPACE.
    REFRESH BDCDATA.
    SKIP.
    WRITE: /(20) 'Create group'(I01), GROUP.
    SKIP.
* open batchinput group
    CALL FUNCTION 'BDC_OPEN_GROUP'
         EXPORTING
              CLIENT = SY-MANDT
              GROUP  = GROUP
              USER   = SY-UNAME
              KEEP   = 'X'.

    WRITE: /(30) 'BDC_OPEN_GROUP'(I02),
            'returncode:'(I05),
                 SY-SUBRC.
  ENDIF.
ENDFORM.

*----------------------------------------------------------------------*
*   end batchinput session                                             *
*----------------------------------------------------------------------*
FORM CLOSE_GROUP.
* close batchinput group
  IF FORTEST = SPACE.
    CALL FUNCTION 'BDC_CLOSE_GROUP'.
    WRITE: /(30) 'BDC_CLOSE_GROUP'(I04),
            'returncode:'(I05),
                 SY-SUBRC.
  ENDIF.

ENDFORM.

*----------------------------------------------------------------------*
*        Start new transaction                                         *
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.
  IF FORTEST = SPACE.
    CALL FUNCTION 'BDC_INSERT'
         EXPORTING
              TCODE     = TCODE
         TABLES
              DYNPROTAB = BDCDATA.
*  write  / bdcdata.
    add 1 to trxecri .
    REFRESH BDCDATA.
  ENDIF.
ENDFORM.
*
*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  IF FORTEST = SPACE.
    CLEAR BDCDATA.
    BDCDATA-PROGRAM  = PROGRAM.
    BDCDATA-DYNPRO   = DYNPRO.
    BDCDATA-DYNBEGIN = 'X'.
    APPEND BDCDATA.

* write / bdcdata.
  ENDIF.
ENDFORM.

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
  IF FORTEST = SPACE.
    CLEAR BDCDATA.
    BDCDATA-FNAM = FNAM.
    BDCDATA-FVAL = FVAL.
    APPEND BDCDATA.
* write / bdcdata.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  BDC_DEBUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BDC_DEBUT.

ENDFORM.                               " BDC_DEBUT
*&---------------------------------------------------------------------*
*&      Form  BDC_POSTE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BDC_POSTE.
  CLEAR BDCDATA.
  REFRESH BDCDATA.

  WRITE: / HPUX.

ENDFORM.                               " BDC_POSTE
*&---------------------------------------------------------------------*
*&      Form  BDC_FIN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BDC_FIN.

ENDFORM.                               " BDC_FIN
*&---------------------------------------------------------------------*
*&      Form  flf2col (cf asc2dat_konvert(saplgrap))
*&---------------------------------------------------------------------*
*       flat file to columned internal table
*       fichier a plat vers table interne colonnée
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FLF2COL USING INPUT TYPE C
                            DATA_TAB
                            KONV_RC TYPE I.
  FIELD-SYMBOLS: <T>, <F>, <H>.
  DATA: AKT_POS LIKE SY-FDPOS.
  DATA: FOUND(1).
  DATA: BEGIN OF HT, X(1) TYPE X VALUE '09', END OF HT.
  DATA: KONV_ERROR TYPE I.
  DATA: LEN TYPE I.
  LEN = STRLEN( INPUT ).
  ASSIGN INPUT TO <T>.
  DO.
    ASSIGN COMPONENT SY-INDEX OF STRUCTURE DATA_TAB TO <F>.
    IF SY-SUBRC NE 0. EXIT. ENDIF.
    CLEAR <F>.
  ENDDO.
  DO.
    IF NOT KONV_ERROR IS INITIAL.
      EXIT.
    ENDIF.
    ASSIGN COMPONENT SY-INDEX OF STRUCTURE DATA_TAB TO <F>.
    IF SY-SUBRC NE 0. EXIT. ENDIF.
    CLEAR FOUND.
    IF <T> CA HT.
      FOUND = 'x'.
    ENDIF.
    IF SY-FDPOS > 0.
      FOUND = 'x'.                     "// last field, no more TABs
    ENDIF.
    AKT_POS = SY-FDPOS.
    CLEAR <F>.
    IF NOT FOUND IS INITIAL.
      IF AKT_POS NE 0.
        ASSIGN <T>(AKT_POS) TO <H>.
        <F> = <H>.
      ENDIF.
      ADD 1 TO AKT_POS.
      LEN = LEN - AKT_POS.
      IF LEN LE 0. EXIT. ENDIF.
      ASSIGN <T>+AKT_POS(LEN) TO <T>.
    ENDIF.
  ENDDO.
  KONV_RC = KONV_ERROR.
ENDFORM.                               " flf2col

FTP vers un autre serveur Table des matières

Textpool :
----------
R        Transfer TFP via SYSTEM-CALL                                                                                                                                                                                                                                   {{{

Abap :
------
REPORT YYJPL049.
*----------------------------------------------------------------------
* Topic : The program uses FTP to exchange files
*----------------------------------------------------------------------*
DATA:  BEGIN OF PC OCCURS 0,   DATA(1000),            END OF PC.
DATA:  FICHIER_UNIX LIKE FILENAME-FILEEXTERN.
DATA:  FICHIER_AS LIKE FILENAME-FILEEXTERN.
DATA:  FICHIER_IN LIKE FILENAME-FILEEXTERN.
DATA:  FICHIER_OUT LIKE FILENAME-FILEEXTERN.
*=-------------------------------------------------------------------=*
* criteres de selection
*=-------------------------------------------------------------------=*
PARAMETERS:
 IP(60) LOWER CASE,
 USER(20) LOWER CASE,
 PASS(20) LOWER CASE,
 UNIXDIR(60) LOWER CASE,
 UNIXFILE(60) LOWER CASE,
 AS4DIR(60) LOWER CASE,
 AS4FILE(60) LOWER CASE.
PARAMETERS GET RADIOBUTTON GROUP G1.
PARAMETERS PUT RADIOBUTTON GROUP G1.
*=-------------------------------------------------------------------=*
INITIALIZATION.
*=-------------------------------------------------------------------=*
  DATA S_BUKRS LIKE LFB1-BUKRS.
  GET PARAMETER ID 'BUK' FIELD S_BUKRS.
  IP = '153.112.118.10'.
  USER = 'SAPFTP'.
  PASS = 'SAPFTP'.
  GET = 'X'.
*=-------------------------------------------------------------------=*
START-OF-SELECTION.
*=-------------------------------------------------------------------=*
  CONCATENATE UNIXDIR UNIXFILE INTO FICHIER_UNIX.
  TRANSLATE FICHIER_UNIX TO LOWER CASE.

  CONCATENATE AS4DIR AS4FILE INTO FICHIER_AS.
  TRANSLATE FICHIER_AS TO UPPER CASE.
* pile de commandes FTP à exécuter
  MOVE '...dossier...unix/yy.ftp' TO FICHIER_IN.
  TRANSLATE FICHIER_IN TO LOWER CASE.
* reponses de FTP
  MOVE '...dossier...unix/yy.log' TO FICHIER_OUT.
  TRANSLATE FICHIER_OUT TO LOWER CASE.

  DATA:  BEGIN OF FTP OCCURS 0,   CMD(1000),  END OF FTP.
* construire la pile FTP dans la table ftp
  CLEAR FTP.
  REFRESH FTP.
  CONCATENATE 'open' IP INTO FTP-CMD SEPARATED BY SPACE .
  APPEND FTP.
  FTP-CMD = ' '. APPEND FTP.
  FTP-CMD = ' '. APPEND FTP.
  CONCATENATE 'user' USER PASS INTO FTP-CMD SEPARATED BY SPACE .
  APPEND FTP.
  FTP-CMD = 'pwd'. APPEND FTP.0
  IF PUT = 'X'.
    CONCATENATE 'put_' FICHIER_UNIX
                '_' FICHIER_AS
                ' (replace' INTO FTP-CMD.
  ELSE.
    CONCATENATE 'get_' FICHIER_AS
                '_' FICHIER_UNIX
                ' (replace' INTO FTP-CMD.
  ENDIF.
  TRANSLATE FTP-CMD USING '_ '.
  APPEND FTP.
  FTP-CMD = 'quit'. APPEND FTP.
*charger la pile FTP
  OPEN DATASET FICHIER_IN FOR OUTPUT IN TEXT MODE.
  IF SY-SUBRC <> 0.
    WRITE: 'erreur ouverture dataset', FICHIER_IN,
           'erreur =', SY-SUBRC.
    EXIT.
  ENDIF.
  LOOP AT FTP.
    TRANSFER FTP-CMD TO FICHIER_IN.
    IF SY-SUBRC <> 0.
      WRITE: 'erreur transfert dataset', FICHIER_IN,
             'erreur =', SY-SUBRC.
      EXIT.
    ENDIF.
    WRITE FTP-CMD.
  ENDLOOP.
  CLOSE DATASET FICHIER_IN.
  ULINE.
*run ftp
  DATA: BEGIN OF TABL OCCURS 0, LINE(2000), END OF TABL.
  DATA: PARCOM_LOC(100) TYPE C.
  DATA LINE     LIKE TABL-LINE.
  CONCATENATE 'ftp <' FICHIER_IN '>' FICHIER_OUT
    INTO PARCOM_LOC SEPARATED BY ' '.
*from call help : before calling a c_func, need to check for
* authority.
  CALL FUNCTION 'AUTHORITY_CHECK_C_FUNCTION'
       EXPORTING
            PROGRAM          = 'COMMAND'
            ACTIVITY         = 'CALL'
            FUNCTION         = 'SYSTEM'
       EXCEPTIONS
            NO_AUTHORITY     = 1
            ACTIVITY_UNKNOWN = 2.
  IF SY-SUBRC <> 0.
    WRITE:/'No authority to run File Transfer. Send the file manually'.
    ULINE.
    EXIT.
  ENDIF.

  REFRESH TABL.
  CALL 'SYSTEM' ID 'COMMAND' FIELD PARCOM_LOC
                ID 'TAB'     FIELD TABL-*SYS*.
* show log
  OPEN DATASET FICHIER_OUT FOR INPUT IN TEXT MODE.
  IF SY-SUBRC <> 0.
    WRITE: 'erreur ouverture dataset', FICHIER_OUT,
           'erreur =', SY-SUBRC.
    EXIT.
  ENDIF.
  WRITE / PARCOM_LOC.
  DO.
    READ DATASET FICHIER_OUT INTO LINE.
    IF SY-SUBRC <> 0. EXIT. ENDIF.
    WRITE / LINE.
  ENDDO.
  CLOSE DATASET FICHIER_OUT.
  DELETE DATASET FICHIER_IN.
  DELETE DATASET FICHIER_OUT.

Sauvegarde ABAP Table des matières

Cet outil de sauvegarde permet d'exporter

Il n'y a pas d'outil de restauration correspondant, c'est exprès parce que le but n'est pas de faire un outil de sauvegarde/restauration, il y bien déjà assez comme ça (enfin, juste pour voir, demandez à votre administrateur de restaurer uniquement le programme xxx, sauvegardé vendredi il y a trois semaines. En général la réponse est non : les sauvegardes de l'administrateur sont là pour permettre de restaurer un disque en cas de crash, pas pour récupérer les conneries d'un utilisateur, fût-il programmeur). En plus, je n'ai jamais pris le temps de vérifier si on peux réinjecter un DYNPRO dans les bases de SAP sans véroller les tables de références croisées.

L'objectif est d'archiver l'état d'un ou plusieurs programmes à une date donnée, un peu à la façon du gestionnaire de version, mais hors de SAP. Utilisation courante : faire une recherche avec l'explorateur de windows pour retrouver un texte particulier, ce qui permet de couvrir les cas où les références croisées de SAP ne répondent pas (c'est possible), par exemple dans les textpools des ABAP.

Textpool :
----------
IJPL     JP Lamontre
R        exporter des ABAP
SAUTHOR          Auteur   
SMODIF           Date de modification
SOBJ_NAME        Objet               
SSEP             Séparateur CSV      
------------------------------------
Abap :
------
REPORT ZZJPL100 LINE-SIZE 255.
TABLES: TRDIR.
DATA:
  _TRDIR LIKE TRDIR OCCURS 0 WITH HEADER LINE,
  BEGIN OF SOMMAIRE OCCURS 0,
    PROG LIKE TRDIR-NAME,
    TITRE(70),
  END OF SOMMAIRE,

  PCSFX(4) VALUE '.DAT',
  PCFILE(64),
  ZG_PCFILE(128).
SELECTION-SCREEN COMMENT 1(80) TEXT-JPL.
PARAMETERS:
  PCDIR(64) DEFAULT 'c:\sappc\'.
SELECT-OPTIONS:
  OBJ_NAME FOR TRDIR-NAME   DEFAULT 'Z*' OPTION CP  ,
  AUTHOR   FOR TRDIR-CNAM   ,
  MODIF    FOR TRDIR-UDAT   .

DATA:
  BEGIN OF NOM OCCURS 0,
    N(20),
  END OF NOM.


START-OF-SELECTION.
  SELECT * INTO TABLE _TRDIR FROM TRDIR WHERE
               NAME IN OBJ_NAME AND
               CNAM IN AUTHOR AND
               UDAT IN MODIF
           ORDER BY NAME.
  LOOP AT _TRDIR.

    WRITE: / _TRDIR.

    PERFORM EXTRACT_PROG USING _TRDIR-NAME.
  ENDLOOP.
  MOVE 'SOMMAIRE.TXT' TO PCFILE.
  CONCATENATE PCDIR PCFILE  INTO ZG_PCFILE.
  CALL FUNCTION 'WS_DOWNLOAD'
       EXPORTING
            FILENAME = ZG_PCFILE
       TABLES
            DATA_TAB = SOMMAIRE
       EXCEPTIONS
            OTHERS   = 9.
*&---------------------------------------------------------------------*
*&      Form  EXTRACT_PROG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TADIR_OBJ_NAME  text                                       *
*----------------------------------------------------------------------*
FORM EXTRACT_PROG USING    P_NAME.
  DATA
  BEGIN OF TTAB OCCURS 0.
          INCLUDE STRUCTURE TEXTPOOL.
  DATA:
  END OF TTAB,
  BEGIN OF PC OCCURS 0,
    ENR(5000),
  END OF PC,
  W100(100).

  CLEAR PC.
  REFRESH PC.
  PC-ENR = 'TRDIR='.
  APPEND PC.
  PC-ENR =
'-----------------------------------------------------------------------
-----------------------------------------------------------------------'
  .
  APPEND PC.
  PC-ENR = _TRDIR.
  APPEND PC.
  PC-ENR =
'-----------------------------------------------------------------------
-----------------------------------------------------------------------'
  .
  APPEND PC.
  READ TEXTPOOL P_NAME INTO TTAB LANGUAGE SY-LANGU.
  PC-ENR = 'Textpool :'.
  APPEND PC.

  PC-ENR =
'-----------------------------------------------------------------------
-----------------------------------------------------------------------'
  .
  APPEND PC.
  LOOP AT TTAB.
    PC-ENR = TTAB.
    APPEND PC.
    IF TTAB-ID = 'R'.
      SOMMAIRE-PROG = P_NAME.
      SOMMAIRE-TITRE = TTAB-ENTRY.
      APPEND SOMMAIRE.
      WRITE : / P_NAME, TTAB-ENTRY(70).
    ENDIF.
  ENDLOOP.
  PC-ENR =
'-----------------------------------------------------------------------
-----------------------------------------------------------------------'
  .
  APPEND PC.
  DATA: BEGIN OF SOURCE OCCURS 0,
          LINE(72),
        END OF SOURCE.
  PC-ENR = 'Abap :'.
  APPEND PC.
  PC-ENR =
'-----------------------------------------------------------------------
-----------------------------------------------------------------------'
  .
  APPEND PC.
  READ REPORT P_NAME INTO SOURCE.
  LOOP AT SOURCE.
    PC-ENR = SOURCE-LINE.
    APPEND PC.
  ENDLOOP.
  PC-ENR =
'-----------------------------------------------------------------------
-----------------------------------------------------------------------'
  .
  APPEND PC.
  CONCATENATE P_NAME '-ABAP.TXT' INTO PCFILE.
  CONCATENATE PCDIR PCFILE  INTO ZG_PCFILE.
  CALL FUNCTION 'WS_DOWNLOAD'
       EXPORTING
            FILENAME = ZG_PCFILE
       TABLES
            DATA_TAB = PC
       EXCEPTIONS
            OTHERS   = 9.

  DATA:
* main node table
  TREE LIKE SNODE OCCURS 5000 WITH HEADER LINE,
  CURRENT_ROOT_ID LIKE SNODE-ID VALUE '1',
  CUCOL LIKE SY-CUCOL,
  CUROW LIKE SY-CUROW,
  LICOL LIKE SY-STACO,
  LIROW LIKE SY-STARO,
* expanded nodes
  EXPAND LIKE SEUTEXPAND OCCURS 100 WITH HEADER LINE,
  DEVCLASS LIKE  TDEVC-DEVCLASS,
  DB,
  CURRENT_TREENAME LIKE DWTREE-NAME.

  CONCATENATE 'PG_' P_NAME INTO CURRENT_TREENAME.
  EXPORT TREE CURRENT_ROOT_ID CUCOL CUROW LICOL LIROW EXPAND
              TO MEMORY ID CURRENT_TREENAME.
  CALL FUNCTION 'WB_TREE_INIT'
       EXPORTING
            NAME          = CURRENT_TREENAME
       IMPORTING
            DEVCLASS      = DEVCLASS
            FROM_DATABASE = DB.
  IMPORT TREE CURRENT_ROOT_ID CUCOL CUROW LICOL LIROW EXPAND
              FROM MEMORY ID CURRENT_TREENAME.
*BREAK-POINT.
  CONCATENATE P_NAME '-TREE.TXT' INTO PCFILE.
  CONCATENATE PCDIR PCFILE  INTO ZG_PCFILE.
  CALL FUNCTION 'WS_DOWNLOAD'
       EXPORTING
            FILENAME = ZG_PCFILE
            FILETYPE = 'DAT'
       TABLES
            DATA_TAB = TREE
       EXCEPTIONS
            OTHERS   = 9.


  LOOP AT TREE.
*  CASE tree-tlevel.
*    WHEN '01'.
*      WRITE / tree-id.
*    WHEN '02'.
*      WRITE: / '  ', tree-id.
*    WHEN '03'.
*      WRITE: / '    ', tree-id.
*    WHEN OTHERS.
*      WRITE: / '    >>', tree-id.
*  ENDCASE.
*
*  WRITE tree-type  .
*  WRITE tree-name  .
*  WRITE tree-parent.
*  WRITE tree-child .
*  WRITE tree-next  .
*  WRITE tree-tlevel.
*  WRITE tree-tlock .
*  WRITE tree-status .
*  WRITE tree-include.
*  WRITE tree-link.

    IF TREE-TYPE = 'OPS'.
      PERFORM EXTRACT_DYNPRO USING P_NAME TREE-NAME.
    ENDIF.
  ENDLOOP.



ENDFORM.                               " EXTRACT_PROG

*&---------------------------------------------------------------------*
*&      Form  EXTRACT_DYNPRO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_NAME  text                                               *
*      -->P_TREE_NAME  text                                            *
*----------------------------------------------------------------------*
FORM EXTRACT_DYNPRO USING    P_PROG
                             P_DYNP.
  TABLES:
    D020S.
  DATA:
    BEGIN OF DYNP,
      PROG LIKE D020S-PROG,
      DNUM LIKE D020S-DNUM,
    END OF DYNP,
    H LIKE D020S,
    WH LIKE SCR_CHHEAD,
    WHT LIKE SCR_CHHEAD OCCURS 0,
    F LIKE D021S  OCCURS 0 WITH HEADER LINE,
    WF LIKE SCR_CHFLD OCCURS 0 WITH HEADER LINE,
    E LIKE D022S OCCURS 0 WITH HEADER LINE,
    M LIKE D023S OCCURS 0 WITH HEADER LINE,

    BEGIN OF PC OCCURS 0,
      ENR(5000),
    END OF PC,
    PCFILE(64),
    ZG_PCFILE(128).

  DYNP-PROG = P_PROG.
  DYNP-DNUM = P_DYNP.

  IMPORT DYNPRO H F E M ID DYNP.
  IF SY-SUBRC <> 0.
    MESSAGE E010(37) WITH P_PROG P_DYNP.
  ENDIF.
  PERFORM ACTUALIZE_LANGUAGE_FOR_TEXTS(SAPMSEUS)
  TABLES F
  USING H SY-LANGU.

*entete de dynpro
  CONCATENATE DYNP-PROG '-' DYNP-DNUM '-HEADER' INTO PCFILE.
  CONCATENATE PCDIR PCFILE PCSFX INTO ZG_PCFILE.
  CLEAR PC.
  REFRESH PC.
*conversion
  CALL FUNCTION 'RS_SCRP_HEADER_RAW_TO_CHAR'
       EXPORTING
            HEADER_INT  = H
       IMPORTING
            HEADER_CHAR = WH
       EXCEPTIONS
            OTHERS      = 1.


*nom des colonnes
CLEAR NOM. REFRESH NOM.
NOM-N = 'PROG'. APPEND NOM.
NOM-N = 'DNUM'. APPEND NOM.
NOM-N = 'TYPE'. APPEND NOM.
NOM-N = 'FNUM'. APPEND NOM.
NOM-N = 'DGRP'. APPEND NOM.
NOM-N = 'BZMX'. APPEND NOM.
NOM-N = 'BZBR'. APPEND NOM.
NOM-N = 'MILI'. APPEND NOM.
NOM-N = 'MICO'. APPEND NOM.
NOM-N = 'MALI'. APPEND NOM.
NOM-N = 'MACO'. APPEND NOM.
NOM-N = 'NOLI'. APPEND NOM.
NOM-N = 'NOCO'. APPEND NOM.
NOM-N = 'VALP'. APPEND NOM.
NOM-N = 'CUAN'. APPEND NOM.
NOM-N = 'HDAT'. APPEND NOM.
NOM-N = 'SPRA'. APPEND NOM.
NOM-N = 'CUPO'. APPEND NOM.
NOM-N = 'DGEN'. APPEND NOM.
NOM-N = 'TGEN'. APPEND NOM.

CLEAR WHT. REFRESH WHT.
APPEND WH TO WHT.
  CALL FUNCTION 'WS_DOWNLOAD'
       EXPORTING
            FILENAME = ZG_PCFILE
            FILETYPE = 'DAT'
       TABLES
            DATA_TAB = WHT
            FIELDNAMES = NOM
       EXCEPTIONS
          FILE_OPEN_ERROR     = 1
          FILE_WRITE_ERROR    = 2
          INVALID_FILESIZE    = 3
          INVALID_TABLE_WIDTH = 4
          INVALID_TYPE        = 5
          NO_BATCH            = 6
          UNKNOWN_ERROR       = 7
          OTHERS              = 8.


*champs du dynpro
  CONCATENATE DYNP-PROG '-' DYNP-DNUM '-FIELD' INTO PCFILE.
  CONCATENATE PCDIR PCFILE PCSFX INTO ZG_PCFILE.
  CLEAR PC.
  REFRESH PC.
*conversion
  CALL FUNCTION 'RS_SCRP_FIELDS_RAW_TO_CHAR'
       TABLES
            FIELDS_INT  = F
            FIELDS_CHAR = WF
       EXCEPTIONS
            OTHERS      = 1.


CLEAR NOM. REFRESH NOM.
NOM-N = 'FELDNAME'. APPEND NOM.
NOM-N = 'INTTYP'. APPEND NOM.
NOM-N = 'FELDFORMAT'. APPEND NOM.
NOM-N = 'LAENGE'. APPEND NOM.
NOM-N = 'FLG1'. APPEND NOM.
NOM-N = 'FLG2'. APPEND NOM.
NOM-N = 'FLG3'. APPEND NOM.
NOM-N = 'FMB1'. APPEND NOM.
NOM-N = 'FMB2'. APPEND NOM.
NOM-N = 'LINE'. APPEND NOM.
NOM-N = 'COLN'. APPEND NOM.
NOM-N = 'LOOPTYPE'. APPEND NOM.
NOM-N = 'LOOPBEGIN'. APPEND NOM.
NOM-N = 'LOOPBLOCK'. APPEND NOM.
NOM-N = 'LOOPREPEAT'. APPEND NOM.
NOM-N = 'FMKY'. APPEND NOM.
NOM-N = 'DIDX'. APPEND NOM.
NOM-N = 'FILL'. APPEND NOM.
NOM-N = 'COLR'. APPEND NOM.
NOM-N = 'PAID'. APPEND NOM.
NOM-N = 'UCNV'. APPEND NOM.
NOM-N = 'AGLT'. APPEND NOM.
NOM-N = 'ADEZ'. APPEND NOM.
NOM-N = 'AUTH'. APPEND NOM.
NOM-N = 'WNAM'. APPEND NOM.
NOM-N = 'DMAC'. APPEND NOM.
NOM-N = 'GRP1'. APPEND NOM.
NOM-N = 'GRP2'. APPEND NOM.
NOM-N = 'GRP3'. APPEND NOM.
NOM-N = 'GRP4'. APPEND NOM.
NOM-N = 'STXT'. APPEND NOM.


  CALL FUNCTION 'WS_DOWNLOAD'
       EXPORTING
            FILENAME = ZG_PCFILE
            FILETYPE = 'DAT'
       TABLES
            DATA_TAB = WF
            FIELDNAMES = NOM
       EXCEPTIONS
            OTHERS   = 9.

*PAI PBO
  CONCATENATE DYNP-PROG '-' DYNP-DNUM '-ABAP' INTO PCFILE.
  CONCATENATE PCDIR PCFILE PCSFX INTO ZG_PCFILE.
  CLEAR PC.
  REFRESH PC.

*nom des colonnes
CLEAR NOM. REFRESH NOM.
  NOM-N = 'LINE'.      APPEND NOM.


  CALL FUNCTION 'WS_DOWNLOAD'
       EXPORTING
            FILENAME = ZG_PCFILE
            FILETYPE = 'DAT'
       TABLES
            DATA_TAB = E
            FIELDNAMES = NOM
       EXCEPTIONS
            OTHERS   = 9.

*Matchcodes
  CONCATENATE DYNP-PROG '-' DYNP-DNUM '-MCODE' INTO PCFILE.
  CONCATENATE PCDIR PCFILE PCSFX INTO ZG_PCFILE.
  CLEAR PC.
  REFRESH PC.

*nom des colonnes
CLEAR NOM. REFRESH NOM.
NOM-N = 'FNAM'. APPEND NOM.
NOM-N = 'FLDP'. APPEND NOM.
NOM-N = 'FLDN'. APPEND NOM.



*ecrire sur le pc

  CALL FUNCTION 'WS_DOWNLOAD'
       EXPORTING
            FILENAME = ZG_PCFILE
            FILETYPE = 'DAT'
       TABLES
            DATA_TAB = M
            FIELDNAMES = NOM
       EXCEPTIONS
            OTHERS   = 9.

ENDFORM.                               " EXTRACT_DYNPRO

Sauvegarde Tables Table des matières

Textpool :
----------
IJPL     JP Lamontre
R        exporter des TABLES
SAUTHOR          Auteur     
SDEVCLASS        Classe de développement     
SOBJECT          Objet                       
SPCDIR           Répertoire sur le PC        
SPGMID           Programme                   
SSRCDEP          system-specific or repaired 
S_CSV            Séparateur CSV              
---------------------------------------------
Abap :
------
REPORT ZZJPL101 LINE-SIZE 255.
SELECTION-SCREEN COMMENT 1(80) TEXT-JPL.
TABLES: TADIR.
DATA:
  _TADIR LIKE TADIR OCCURS 0 WITH HEADER LINE,
  PCFILE(64),
  ZG_PCFILE(128).
PARAMETERS:  PCDIR(64) DEFAULT 'c:\sappc\'.
SELECT-OPTIONS:
   PGMID    FOR TADIR-PGMID      DEFAULT 'R3TR'   ,
   OBJECT FOR TADIR-OBJECT       DEFAULT 'TABL'  ,
   OBJ_NAME FOR TADIR-OBJ_NAME   DEFAULT 'Z*' OPTION CP  ,
   AUTHOR   FOR TADIR-AUTHOR     ,
   SRCDEP   FOR TADIR-SRCDEP        ,
   DEVCLASS FOR TADIR-DEVCLASS      .

START-OF-SELECTION.
  SELECT * INTO TABLE _TADIR
           FROM TADIR WHERE PGMID    IN PGMID
                        AND OBJECT   IN OBJECT
                        AND OBJ_NAME IN OBJ_NAME
                        AND AUTHOR   IN AUTHOR
                        AND SRCDEP   IN SRCDEP
                        AND DEVCLASS IN DEVCLASS.
  LOOP AT _TADIR.

    WRITE: / _TADIR.
    CASE _TADIR-OBJECT.
      WHEN 'TABL'.
        PERFORM EXTRACT_TABL USING    _TADIR-OBJ_NAME.
    ENDCASE.
  ENDLOOP.
*&---------------------------------------------------------------------*
*&      Form  EXTRACT_TABL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TADIR_OBJ_NAME  text                                       *
*----------------------------------------------------------------------*
FORM EXTRACT_TABL USING    P_NAME.

  DATA: FIELD LIKE DFIES OCCURS 0 WITH HEADER LINE,
    BEGIN OF NOM OCCURS 0,
      N(20),
    END OF NOM,
    C80(80).

  DATA TABNAME LIKE DCOBJDEF-NAME. TABNAME = P_NAME.
  CALL FUNCTION 'DDIF_FIELDINFO_GET'
       EXPORTING
            TABNAME        = TABNAME
*         FIELDNAME      = ' '
*         LANGU          = SY-LANGU
*    IMPORTING
*         X030L_WA       =
       TABLES
            DFIES_TAB      = FIELD
       EXCEPTIONS
            NOT_FOUND      = 1
            INTERNAL_ERROR = 2
            OTHERS         = 3.

  CLEAR NOM. REFRESH NOM.
  NOM-N = 'TABNAME'. APPEND NOM.
  NOM-N =    'FIELDNAME'. APPEND NOM.
  NOM-N =    'LANGU'. APPEND NOM.
  NOM-N =    'POSITION'. APPEND NOM.
  NOM-N =    'OFFSET'. APPEND NOM.
  NOM-N =    'DOMNAME'. APPEND NOM.
  NOM-N =     'ROLLNAME'. APPEND NOM.
  NOM-N =    'CHECKTABLE'. APPEND NOM.
  NOM-N =    'LENG'. APPEND NOM.
  NOM-N =    'INTLEN'. APPEND NOM.
  NOM-N =    'OUTPUTLEN'. APPEND NOM.
  NOM-N =    'DECIMALS'. APPEND NOM.
  NOM-N =    'DATATYPE'. APPEND NOM.
  NOM-N =    'INTTYPE'. APPEND NOM.
  NOM-N =    'REFTABLE'. APPEND NOM.
  NOM-N =    'REFFIELD'. APPEND NOM.
  NOM-N =    'PRECFIELD'. APPEND NOM.
  NOM-N =    'AUTHORID'. APPEND NOM.
  NOM-N =    'MEMORYID'. APPEND NOM.
  NOM-N =    'LOGFLAG'. APPEND NOM.
  NOM-N =    'MASK'. APPEND NOM.
  NOM-N =    'MASKLEN'. APPEND NOM.
  NOM-N =    'CONVEXIT'. APPEND NOM.
  NOM-N =    'HEADLEN'. APPEND NOM.
  NOM-N =    'SCRLEN1'. APPEND NOM.
  NOM-N =    'SCRLEN2'. APPEND NOM.
  NOM-N =    'SCRLEN3'. APPEND NOM.
  NOM-N = 'FIELDTEXT'. APPEND NOM.
  NOM-N =    'REPTEXT'. APPEND NOM.
  NOM-N =    'SCRTEXT_S'. APPEND NOM.
  NOM-N =    'SCRTEXT_M'. APPEND NOM.
  NOM-N =    'SCRTEXT_L'. APPEND NOM.
  NOM-N =    'KEYFLAG'. APPEND NOM.
  NOM-N =   'LOWERCASE'. APPEND NOM.
  NOM-N =    'MAC'. APPEND NOM.
  NOM-N =    'GENKEY'. APPEND NOM.
  NOM-N =    'NOFORKEY'. APPEND NOM.
  NOM-N =    'VALEXI'. APPEND NOM.
  NOM-N =    'NOAUTHCH'. APPEND NOM.
  NOM-N =    'SIGN'. APPEND NOM.
  NOM-N =    'DYNPFLD'. APPEND NOM.

  CONCATENATE P_NAME '-TABL.DAT' INTO PCFILE.
  CONCATENATE PCDIR PCFILE  INTO ZG_PCFILE.
  CALL FUNCTION 'WS_DOWNLOAD'
       EXPORTING
            FILENAME   = ZG_PCFILE
            FILETYPE   = 'DAT'
       TABLES
            DATA_TAB   = FIELD
            FIELDNAMES = NOM
       EXCEPTIONS
            OTHERS     = 9.

ENDFORM.

Sauvegarde Texte et formulaires Table des matières

Le programme de restauration correspondant est juste après.

Textpool :
----------
IJPL     JP Lamontre
R        exporter : Textes et formulaires
SAUTHOR          Auteur                  
SMODIF           Date de modification    
SOBJ_NAME        Objet                   
-----------------------------------------
Abap :
------
REPORT ZZJPL101 LINE-SIZE 255.
SELECTION-SCREEN COMMENT 1(80) TEXT-JPL.
TABLES: STXH.
DATA:
  _STXH  LIKE STXH  OCCURS 0 WITH HEADER LINE,

  PCFILE(64),
  ZG_PCFILE(128).
PARAMETERS:   PCDIR(64) DEFAULT 'c:\sappc\'.
SELECT-OPTIONS:
            OBJ_NAME FOR STXH-TDNAME   DEFAULT 'Z*' OPTION CP  ,
            AUTHOR   FOR STXH-TDFUSER       ,
            MODIF    FOR STXH-TDLDATE    .
START-OF-SELECTION.
  SELECT * INTO TABLE _STXH
           FROM STXH  WHERE TDNAME   IN OBJ_NAME
                        AND TDFUSER  IN AUTHOR
                        AND TDLDATE  IN MODIF .
  LOOP AT _STXH .
    WRITE: / _STXH .
    PERFORM EXTRACT_TEXT.
  ENDLOOP.


*&---------------------------------------------------------------------*
*&      Form  EXTRACT_TEXT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TADIR_OBJ_NAME  text                                       *
*----------------------------------------------------------------------*
FORM EXTRACT_TEXT .

  DATA: LINE LIKE TLINE OCCURS 0 WITH HEADER LINE,
       HEAD LIKE THEAD,
    BEGIN OF PC OCCURS 0,
      TDFORMAT LIKE TLINE-TDFORMAT,
      TDLINE LIKE TLINE-TDLINE,
      FILLER(500),
    END OF PC.
  REFRESH PC.

  CALL FUNCTION 'READ_TEXT'
       EXPORTING
*         CLIENT                  = SY-MANDT
            ID                      = _STXH-TDID
            LANGUAGE                = _STXH-TDSPRAS
            NAME                    = _STXH-TDNAME
            OBJECT                  = _STXH-TDOBJECT
*         ARCHIVE_HANDLE          = 0
       IMPORTING
            HEADER                  = HEAD
       TABLES
            LINES                   = LINE
       EXCEPTIONS
            ID                      = 1
            LANGUAGE                = 2
            NAME                    = 3
            NOT_FOUND               = 4
            OBJECT                  = 5
            REFERENCE_CHECK         = 6
            WRONG_ACCESS_TO_ARCHIVE = 7
            OTHERS                  = 8.

  PC = HEAD.
  APPEND PC.

  LOOP AT LINE.
    CLEAR PC.
    MOVE-CORRESPONDING LINE TO PC.
    APPEND PC.
  ENDLOOP.


  CONCATENATE _STXH-TDNAME '-' _STXH-TDOBJECT '-'
              _STXH-TDID '-'   _STXH-TDSPRAS
              '.TXT' INTO PCFILE.
  CONCATENATE PCDIR PCFILE  INTO ZG_PCFILE.
  CALL FUNCTION 'WS_DOWNLOAD'
       EXPORTING
            FILENAME = ZG_PCFILE
       TABLES
            DATA_TAB = PC
       EXCEPTIONS
            OTHERS   = 9.
ENDFORM.

Importation de formulaire Table des matières

Permet d'écraser un sapscript actif. Utile lorsque l'on change de machine de développement (par exemple pendant une migration) : la prochaine machine contient le code à une date X, le Sapscript a été modifié depuis sur la machine actuelle, et il faut re-synchroniser les modifications.

Utilisé avec Sauvegarde Texte et formulaires il fournit un service identique à l'export / import de code ABAP dans l'éditeur

Textpool :
----------
R        import formulaire, style ou textes                                                                                                                                                                                                                             {{{"
-------------------------------------------
Abap :
------
REPORT ZZJPL106 LINE-SIZE 255.
SELECTION-SCREEN COMMENT 1(80) TEXT-JPL.
TABLES: STXH.
DATA:
  _STXH  LIKE STXH  OCCURS 0 WITH HEADER LINE,

  PCFILE(64),
  ZG_PCFILE(128).
PARAMETERS:   PCDIR(64) DEFAULT 'c:\sap\'.
PARAMETERS:
            _OBJECT LIKE STXH-TDOBJECT DEFAULT 'FORM',
            _NAME LIKE STXH-TDNAME  DEFAULT 'Z*',
            _ID LIKE STXH-TDID  DEFAULT 'DEF',
            _SPRAS LIKE STXH-TDSPRAS DEFAULT 'E'     .


START-OF-SELECTION.
  SELECT SINGLE *
    FROM STXH
    WHERE TDOBJECT   = _OBJECT
      AND     TDNAME   = _NAME
      AND     TDID   = _ID
      AND TDSPRAS = _SPRAS.
  IF SY-SUBRC <> 0.
    WRITE:/'Cet objet n''existe pas, essaie encore'.
    EXIT.
  ENDIF.
  DATA: LINE LIKE TLINE OCCURS 0 WITH HEADER LINE,
       HEAD LIKE THEAD,
    BEGIN OF PC OCCURS 0,
      TDFORMAT LIKE TLINE-TDFORMAT,
      TDLINE LIKE TLINE-TDLINE,
      FILLER(500),
    END OF PC.
  REFRESH PC.

  CALL FUNCTION 'READ_TEXT'
       EXPORTING
*         CLIENT                  = SY-MANDT
            ID                      = _ID
            LANGUAGE                = _SPRAS
            NAME                    = _NAME
            OBJECT                  = _OBJECT
*         ARCHIVE_HANDLE          = 0
       IMPORTING
            HEADER                  = HEAD
       TABLES
            LINES                   = LINE
       EXCEPTIONS
            ID                      = 1
            LANGUAGE                = 2
            NAME                    = 3
            NOT_FOUND               = 4
            OBJECT                  = 5
            REFERENCE_CHECK         = 6
            WRONG_ACCESS_TO_ARCHIVE = 7
            OTHERS                  = 8.
  IF SY-SUBRC <> 0.
    WRITE:/'objet endommagé : READ_TEXT retourne', SY-SUBRC.
    EXIT.
  ENDIF.


  CONCATENATE _NAME '-' _OBJECT '-'
              _ID '-'   _SPRAS
              '.TXT' INTO PCFILE.
  CONCATENATE PCDIR PCFILE  INTO ZG_PCFILE.

  CALL FUNCTION 'WS_QUERY'
       EXPORTING
*         ENVIRONMENT    =
            FILENAME       = ZG_PCFILE
            QUERY          = 'FE'
*         WINID          =
*    IMPORTING
*         RETURN         =
      EXCEPTIONS
          INV_QUERY      = 1
          NO_BATCH       = 2
          FRONTEND_ERROR = 3
          OTHERS         = 4
            .
  IF SY-SUBRC <> 0.
    WRITE:/'Le fichier', ZG_PCFILE, 'n''existe pas, abandon'.
    EXIT.
  ENDIF.
  CALL FUNCTION 'WS_UPLOAD'
      EXPORTING
*                               CODEPAGE                = ' '
           FILENAME                = ZG_PCFILE
*                               FILETYPE                = ' '
*                               HEADLEN                 = ' '
*                               LINE_EXIT               = ' '
*                               TRUNCLEN                = ' '
*                               USER_FORM               = ' '
*                               USER_PROG               = ' '
*                          IMPORTING
*                               FILELENGTH              =
       TABLES
            DATA_TAB                = PC
      EXCEPTIONS
           CONVERSION_ERROR        = 1
           FILE_OPEN_ERROR         = 2
           FILE_READ_ERROR         = 3
           INVALID_TABLE_WIDTH     = 4
           INVALID_TYPE            = 5
           NO_BATCH                = 6
           UNKNOWN_ERROR           = 7
           GUI_REFUSE_FILETRANSFER = 8
           CUSTOMER_ERROR          = 9
           OTHERS                  = 10
            .
  IF SY-SUBRC <> 0.
    WRITE:/'Le fichier', ZG_PCFILE, 'est illisible : code=', SY-SUBRC.
    EXIT.
  ENDIF.
  REFRESH LINE.
  LOOP AT PC FROM 2.

    CLEAR LINE.
    MOVE-CORRESPONDING PC TO LINE.
    APPEND LINE.
  ENDLOOP.

  CALL FUNCTION 'SAVE_TEXT'
       EXPORTING
*         CLIENT          = SY-MANDT
            HEADER          = HEAD
*         INSERT          = ' '
*         SAVEMODE_DIRECT = ' '
*         OWNER_SPECIFIED = ' '
*    IMPORTING
*         FUNCTION        =
*         NEWHEADER       =
       TABLES
            LINES           = LINE
      EXCEPTIONS
           ID              = 1
           LANGUAGE        = 2
           NAME            = 3
           OBJECT          = 4
           OTHERS          = 5
           .
  IF SY-SUBRC <> 0.
    WRITE:/'objet endommagé : SAVE_TEXT retourne', SY-SUBRC.
    EXIT.
  ENDIF.
*-----------------------------------------------------------------------

Liste des menus Table des matières

Textpool :
----------
R        decortiquer les menus
------------------------------
Abap :
------
REPORT ZZJPL110 LINE-SIZE 255 .
TABLES:     SMENAKTT , SMENAKTNEW.
DATA: BEGIN OF JOIN OCCURS 0,
       CUSTOMIZED LIKE  SMENAKTNEW-CUSTOMIZED ,
       PARENT_ID  LIKE  SMENAKTNEW-PARENT_ID ,
       OBJECT_ID  LIKE  SMENAKTNEW-OBJECT_ID ,
       MENU_LEVEL LIKE  SMENAKTNEW-MENU_LEVEL,
       REPORTTYPE LIKE  SMENAKTNEW-REPORTTYPE ,
       REPORT     LIKE  SMENAKTNEW-REPORT,
       ATTRIBUTES LIKE  SMENAKTNEW-ATTRIBUTES,
       PAR_MENU   LIKE  SMENAKTNEW-PAR_MENU ,
       CUST_FLAG  LIKE  SMENAKTNEW-CUST_FLAG ,
       SAP_GUID   LIKE  SMENAKTNEW-SAP_GUID,
       SORT_ORDER LIKE  SMENAKTNEW-SORT_ORDER ,
       TEXT       LIKE  SMENAKTT-TEXT,
       END OF JOIN.
*_____________________
SELECT
  T_01~CUSTOMIZED
  T_01~PARENT_ID
  T_01~OBJECT_ID
  T_01~MENU_LEVEL
  T_01~REPORTTYPE
  T_01~REPORT
  T_01~ATTRIBUTES
  T_01~PAR_MENU
  T_01~CUST_FLAG
  T_01~SAP_GUID
  T_01~SORT_ORDER
  T_00~TEXT
INTO CORRESPONDING FIELDS OF TABLE JOIN
FROM
     SMENAKTT as T_00
join SMENAKTNEW as T_01  on T_00~OBJECT_ID = T_01~OBJECT_ID
"UP TO 500 ROWS
WHERE
   ( T_01~CUSTOMIZED = 'C'
AND  T_01~ATTRIBUTES = 'X'
"AND  t_01~parent_id < 00010
AND  T_00~SPRAS = 'F' )
ORDER BY  T_01~SORT_ORDER .

LOOP AT JOIN.

WRITE: / ' '.
DO JOIN-MENU_LEVEL TIMES.
WRITE '. '.
ENDDO.
WRITE JOIN-PAR_MENU+4(4).
WRITE JOIN-TEXT.
IF JOIN-REPORTTYPE = 'TR'.
WRITE: 80 JOIN-REPORT             .
ENDIF.


ENDLOOP.

Trouver le nom du formulaire Table des matières

Quel programme utilise quel formulaire pendant ma transaction ?

démarrer le debugger de formulaire et sur l’OPEN FORM, activer le debugger ABAP (menu EDIT) et descendre au niveau du programme appelant

ou

Transaction SE30 : mesure de durée d’exécution. Faire une mesure sur la transaction en précisant Objet de la mesure = Module de fonction START_FORM ou OPEN_FORM
Une fois terminé le travail (exécution de la transaction via le bouton Mesure de durée), choisir le bouton Analyser puis le bouton hiérarchie d’appel. A chaque niveau 0 on trouve le nom du programme appelant. Analyser ce programme avec l’éditeur ABAP : chercher START_FORM ou OPEN_FORM (recherche globale).
Ca y est, vous avez trouvé le programme, la ligne de code qui appelle le formulaire et la zone qui contient le nom du formulaire. Maintenant, avec le debugging classique et la recherche des cas d’emploi, on trouve tout ce qu’on veux, par exemple remonter à la table de customizing qui contient le nom du formulaire.

Logos Table des matières

Rapport de conversion : BMP -> TIFF : 16 couleurs en 96 dpi
TIFF -> SAP via RSTXLDMC : vers du 150 DPI
Dans cette configuration, le rapport est de 1.875 cm de BMP pour 1 cm d’impression SAP. Lors de la correction de la dimension dans Paint Brush, faire la correction en PIXEL, par multiple de 32 sinon rstxldmc en est tout perturbé.
Test d’impression : depuis IMAGING, File / Print / Option / Pixel to Pixel permet d’avoir un aperçu exact selon l’imprimante :300 DPI pour Laser jet 3 ; 600 DPI pour Laser Jet 4 et 5

Sapscript Unités Table des matières

Les unités CH (caractère) et LN (ligne) sont converties en points en fonction des indication CPI et LPI du header du formulaire : 

et des tables de conversions suivantes : 
points par caractère * CPI = 120
points par ligne * LPI = 72

Valeurs « rondes » :
LPI : 2 * 36 ; 3 * 24 ; 4 * 18 ; 6 * 12 ; 8 * 9
CPI : 2 * 60 ; 3 * 40 ; 4 * 30 ; 5 * 24 ; 6 * 20 ; 8 * 15 ; 10 * 12

Autres tables de conversion :
1 TW = 1/20 PT
1 PT = 1/72 IN
1 IN = 2.54 CM
1 CM = 10 MM

Maintenance des formulaires Table des matières


Pour améliorer la lisibilité des formulaires, et donc leur maintenance, indenter le code quand c’est possible :

/*                        colonne 4 : quantité en pack = 5 cars
/:                        IF &PRINT-FKIMG(10)& = &SPACE(10)&   
=    ,,&print-FKIMG(C)&                                        
/:                        ELSE                                 
/    ,,,,,,&print-FKIMG(C)&                                    
/:                        ENDIF                                
 

avec cette présentation la distinction entre la partie logique (commandes, commentaires) et la partie active (texte imprimable) est immédiate.

DEFINE dans un formulaire Table des matières

DEFINE =     le symbole est résolu à l'utilisation
DEFINE :=    le symbole est résolu immédiatement.

dans le premier cas il est donc impératif de tenir à jour les variables dans l'appelant tant qu'on peut en avoir besoin
dans le deuxième cas, les variables de l'appelant peuvent évoluer, le symbole n'est plus dépendant. C'est préférable par exemple si l'appelant utilise un LOOP avec des END-AT (ce qui rend incohérent à la volée chaque champ hors de la rupture)

1) vu dans STXHFORM.HLP + chercher DEFINE:

/: DEFINE &symbol1& = 'mail' 
/: DEFINE &symbol2& = 'SAP&symbol1&' 
/: DEFINE &symbol1& = 'script'      
&symbol2&     ->  SAPscript
DEFINE command written using the ':='
/: DEFINE &symbol1& = 'mail' 
/: DEFINE &symbol2& := 'SAP&symbol1&' 
/: DEFINE &symbol1& = 'script'      
&symbol2&     ->  SAPmail

2) dans la documentation du programme RFFOUS_C

/:  DEFINE  &TXT& := '&REGUP-BUKRS&&REGUP-BELNR&&REGUP-GJAHR&'  
/:  INCLUDE &TXT& OBJECT BELEG ID xyz

Formatting Options Table des matières

(in …\Stxdform.hlp) 
(via R3 library / BC – basis components / basis services / sapscript / style & form maintenance / formatting options)
The value of a symbol is normally output using its full length, although trailing spaces are removed. There is an exception to this rule in the case of program symbols of the following data types: CURR, DEC, QUAN, INT1 INT2, INT4, PREC and FLTP. These are formatted to be right-justified with an output length as specified in the Dictionary. 
You can adapt the standard formatting to your own requirements by using one of the additional formatting options available. You supply the parameters for these options together with the symbol itself. Many of these options are abbreviated to a single letter, which has to be given as a capital letter. You can combine two or more options on a single symbol, as long as the result still makes sense. 

Offset+
Output Length(nn)
Omitting the Leading Sign(S)
Leading Sign to the Left(<)
Leading Sign to the Right(>)
Omitting Leading Zeros(Z)
Space Compression(C)
Number of Decimal Places(.n)
Omitting the Separator for 'Thousands'(T)
Specifying an Exponent for Floating Point Numbers(En)
Right-Justified Output(nR)
Fill Characters(Fx)
Suppress Output of Initial Value(I)
Ignore Conversion Routines(K)
Local Dates (currently only for Japan)(L)
Changing the Value of a Counter(+) (-)
Preceding and Subsequent Texts (Pre-Text / Post-Text)
&'(='BSEG-DMBTR(C)' &RF140-HWAER&)'&&’pre’symbol’post’&
Country-dependent Formatting/: SET COUNTRY
Date Mask/: SET DATE MASK
Time Mask/: SET TIME MASK

SAPscript Control Commands Table des matières

NEW-PAGEExplicit Page Break
PROTECTPreventing Page Breaks
NEW-WINDOWNext Main Window
DEFINEAssigning a Value to a Text Symbol
SET DATE MASKFormatting Date Fields
SET TIME MASKFormatting Time Fields
SET COUNTRYCountry-Dependent Formatting
SET SIGNPosition of the Leading Sign
RESETInitializing Numbered Paragraphs
INCLUDEIncluding Other Texts
STYLEChanging the Style
ADDRESSFormatting Addresses
TOPSetting a Header Text in the Main Window
BOTTOMSetting a Footer Text in the Main Window
IFConditional Text
CASEFinding a Match
PERFORM Calling ABAP Subroutines
PRINT-CONTROLInserting Print Controls
BOX, POSITION, SIZEBoxes, Lines, Shading
HEX, ENDHEXHexadecimal Data
SUMMINGSumming a Program Symbol

SAPscript Symbols Table des matières

System Symbols

&DATE&Current Date
&DAY&Current Day Number
&MONTH&Current Month Number
&YEAR&Current Year Number
&LDATE&Local Date (Currently Only for Japan)
&NAME_OF_DAY&Current Day Name (Long Form)
&NAME_OF_MONTH&Current Month Name (Long Form)
&TIME&Current Time
&HOURS&Hours Component of Current Time
&MINUTES&Minutes Component of Current Time
&SECONDS&Seconds Component of Current Time
&PAGE&Current Page Number
Attention, &PAGE& peut évoluer après traitement si la ligne générée est ensuite poussée par la mise en place d’un BOTTOM
&NEXTPAGE&Page Number of the Next Page
&DEVICE&Selected Device Type
&SPACE&Spaces
&ULINE&Underline
&VLINE&Vertical Line

Program Symbols

SYST: System Fields in the ABAP Programming Environment 
USR03: User Address Data
SAPSCRIPT: General SAPscript Fields 
&SAPSCRIPT-SUBRC&
&SAPSCRIPT-DRIVER&
&SAPSCRIPT-FORMPAGES&
&SAPSCRIPT-JOBPAGES&
&SAPSCRIPT-COUNTER_x&
&SAPSCRIPT-TELELAND&
&SAPSCRIPT-TELENUM&
&SAPSCRIPT-TELENUME&

SapScript - paramètres Table des matières

html

PARAMETERS:
    COMPANY(4)   TYPE C OBLIGATORY.
PARAMETERS:
    PAR_PRIA          LIKE TSP03-PADEST.


*----------------------------------------------------------------------*

DATA: _LFB1 LIKE LFB1 OCCURS 0 WITH HEADER LINE.
DATA: _BSIK LIKE BSIK OCCURS 0 WITH HEADER LINE.

DATA:
  HLP_AFORN         LIKE T042B-AFORN,  "alternative advice name (param.)
  HLP_AUTH          LIKE ITCPO-TDAUTORITY, " print authority
  HLP_ELEMENT(6)    TYPE C,            "name of SAPscript elements
  HLP_FORMULAR      LIKE T042B-AFORN,  "form (customizing, ofi, param.)
  HLP_SPRACHE       LIKE REGUH-ZSPRA,  "language for reading texts
  HLP_XHRFO         LIKE HRXBLNR-XHRFO,"X - use HR form
  FLG_DIALOG(1).


  CLEAR T001.
  SELECT SINGLE * FROM T001
    WHERE BUKRS EQ COMPANY.

  DATA: UP_DEVICE LIKE ITCPP-TDDEVICE.


  HLP_FORMULAR = 'UnFormulaire'.
  PERFORM FILL_ITCPO USING PAR_PRIA
                           'LIST5S'
                           SPACE          "par_sofa via tab_ausgabe!
                           HLP_AUTH.

  UP_DEVICE = 'PRINTER'.
  FLG_DIALOG = 'X'.
  ITCPO-TDNEWID = 'X'.
  CALL FUNCTION 'OPEN_FORM'
       EXPORTING
            FORM     = HLP_FORMULAR
            DEVICE   = UP_DEVICE
            LANGUAGE = T001-SPRAS
            OPTIONS  = ITCPO
            DIALOG   = FLG_DIALOG
       IMPORTING
            RESULT   = ITCPP
       EXCEPTIONS
            FORM     = 1.
  IF SY-SUBRC EQ 1.                    "Abbruch:
    IF SY-BATCH EQ SPACE.              "Formular ist nicht aktiv!
      MESSAGE A069 WITH HLP_FORMULAR.
    ELSE.
      MESSAGE S069 WITH HLP_FORMULAR.
      MESSAGE S094.
      STOP.
    ENDIF.
  ENDIF.
  PAR_PRIA = ITCPP-TDDEST.

    DATA LANGUAGE LIKE THEAD-TDSPRAS.
    CASE LFA1-LAND1.
      WHEN 'FR'. LANGUAGE = 'FR'.
*      WHEN 'IT'. language = 'IT'.
*      WHEN 'DE'. language = 'DE'.
      WHEN OTHERS.  LANGUAGE = 'EN'.
    ENDCASE.

    CALL FUNCTION 'START_FORM'
         EXPORTING
              FORM     = HLP_FORMULAR
              LANGUAGE = LANGUAGE.

    CALL FUNCTION 'WRITE_FORM'
         EXPORTING
              ELEMENT = '615'
         EXCEPTIONS
              WINDOW  = 1
              ELEMENT = 2.
    IF SY-SUBRC EQ 2.
    ENDIF.

    CALL FUNCTION 'WRITE_FORM'
         EXPORTING
              ELEMENT = '615'
              TYPE    = 'TOP'
         EXCEPTIONS
              WINDOW  = 1
              ELEMENT = 2.

    ENDLOOP.
    CALL FUNCTION 'END_FORM'.
    SET COUNTRY SPACE.
  ENDLOOP.
  CALL FUNCTION 'CLOSE_FORM'
       IMPORTING
            RESULT = ITCPP.




*---------------------------------------------------------------------*
*       FORM FILL_ITCPO                                               *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  P_TDDEST                                                      *
*  -->  P_TDDATASET                                                   *
*  -->  P_TDIMMED                                                     *
*  -->  P_TDAUTORITY                                                  *
*---------------------------------------------------------------------*
FORM FILL_ITCPO USING P_TDDEST     LIKE ITCPO-TDDEST
                      P_TDDATASET  LIKE ITCPO-TDDATASET
                      P_TDIMMED    LIKE ITCPO-TDIMMED
                      P_TDAUTORITY LIKE ITCPO-TDAUTORITY.

  CLEAR ITCPO.
  ITCPO-TDPAGESLCT  = SPACE.                "all pages
  ITCPO-TDNEWID     = 'X'.                  "create new spool dataset
  ITCPO-TDCOPIES    = 1.                    "one copy
  ITCPO-TDDEST      = P_TDDEST.             "name of printer
  ITCPO-TDPREVIEW   = SPACE.                "no preview
  ITCPO-TDCOVER     = SPACE.                "no cover page
  ITCPO-TDDATASET   = P_TDDATASET.          "dataset name
*  IF zw_xvorl EQ space.
  ITCPO-TDSUFFIX1 = P_TDDEST.               "name or printer
*  ELSE.
*    itcpo-tdsuffix1 = 'TEST'.              "test run
*  ENDIF.
  ITCPO-TDSUFFIX2   = 'Titre Formulaire'.   "name of report variant
  ITCPO-TDIMMED     = P_TDIMMED.            "print immediately?
  ITCPO-TDDELETE    = SPACE.                "do not delete after print
  ITCPO-TDTITLE     = 'Titre Formulaire'.   "title of pop-up-window
  ITCPO-TDCOVTITLE  = 'Titre Formulaire'.   "title of print-cover
  ITCPO-TDAUTORITY  = P_TDAUTORITY.         "print authority
  ITCPO-TDARMOD     = 1.                    "print only

ENDFORM.                                    " FILL_ITCPO

Transactions Table des matières

html

/$syncsauve les buffers, synchronise la base de données
/bdaSous batch input : passe en mode afficher chaque dynpro
/bdeSous batch input : passe en mode afficher les erreurs seulement
/bdelSous batch input : supprime la transaction en cours (transaction définitivement perdue, voir /n)
/bendSous batch input : tue le batch input en cours (exécution interactive)
/hMode Debuggage.
/itue la session courante
/ntue la transaction courante
/nSous batch input : arrête la transaction courante + marquage incorrect + passe à la suivante (la transaction est récupérable, voir /bdel)
/nendlog off
/ocrée une liste des sessions
AL11consulter un fichier dos du repertoire \\(serveur SAP)\usr\sap\tmp
PP30SAPOffice rooms: event
PP31SAPOffice rooms:furnishing
SE01suivi d’un transport
SE09transport des modifs
SE10transport du custo
SE14Tables, index, convertisseurs et parametres GPA
SE16consulter le contenu d’une table, sans passer par l’affichage SE11 (très long) de la structure de la table
SE30analyse d’exécution
SE43gestion des menus de domaine, différent de SE41, gestion des statuts de programme
SE91Gestion des messages
SM04gérer les verrouillages
SM12gérer les sessions
SM13log par utilisateur, donne accès au dump des transactions plantées
SM21log système
SM35gestion des dossiers de batch input
SM36ajouter un travail batch
SM37surveiller les batch
SM50Liste des process en cours
SM51Liste des SAP Servers -> process par serveur
SM59liste des destinations RFC
SDM66shows all active sessions across all servers
SMODIt is possible to … with a customer exit. Transaction /nSMOD can be used to obtain an overview of the customer functions available. The functions are activated with transaction /nCMOD.
SO00SAPOffice short message
SO01SAPOffice inbox
SO02SAPOffice outbox
SO03SAPOffice private folders
SO04SAPOffice public folders
SO05SAPOffice prv.waste basket
SO06SAPOffice login as subst.
SO07SAPOffice resubmission
SO08SAPOffice logout as subst.
SO09SAPOffice path jump to fol
SO10manipuler des textes standard
SO11SAPOffice address
SO12SAPOffice user
SO13SAPOffice substitute
SO14SAPOffice substitution
SO15SAPOffice DL
SO16SAPOffice profile
SO17SAPOffice aut. answer
SO18SAPOffice gen.waste basket
SO19SAPOffice initdocs public
SO20SAPOffice initdocs private
SOADSAPOffice company address
SOCPSAPOffice contact address
SPADadministration des imprimantes
SU53liste des Authorization Values, à utiliser juste après un message « You have no authority … »
SU54gestion des favoris

exploitation des batch input Table des matières

Le programme RSBDCREO ou RSBDCORE réorganise une log de B.I., et ne laisse que les transactions à corriger
Le pgm rsbdcsub permet de soumettre un dossier, et avec une variante, on peut en faire un batch (dans SM36) et suivre le batch (dans SM37)

La chasse aux user exit Table des matières

Contexte : déterminer dans les commandes achat les user exit existant, et leur utilisation.

1) menu : outils / abap workbench
choisir generateur de fonctions
taper EXIT_SAPMM06E_*
cliquer le bouton d'aide (= touche F4)
Grpe fct. Responsable Désignation 
Nom module fonction Désignation 


XM06 User-Exits dans Gestion Articles Achats 
EXIT_SAPMM06E_001 

XMLU MM-SRV : exits utilisateur 
EXIT_SAPMM06E_010 
EXIT_SAPMM06E_011 

.../...

2) recherche des fonctions appelées en UPDATE TASK, dans lesquelles il y a souvent des customer-function

3) Vérification d'activité des user-exit :
ajout d'un break-point sur chaque fonction exit-... : 
par le repository browser, sur chaque ligne de code de type 
call customer-function '010'
double clic sur '010', puis sur la ligne
function exit_sapmm06e_010.
cliquer le bouton STOP (celui avec OK-CODE=PGSB)
puis utiliser de la transaction

Symboles de Texte et textes de messages Table des matières

Fonction 'MESSAGE_PREPARE' : identique à MESSAGE_TEXT_BUILD, retourne le texte de premier niveau (celui qui s’affiche sur la ligne de statut)
Fonction 'DOCU_GET_FOR_F1HELP' : retourne le texte de deuxième niveau (celui qui s’affiche quand on clique un message)

*Ecrire un symbole de texte 
write: /  zg_ms, 'messages de succès (type S)'(102).
*Écrit  TEXT-102, ou la constante si TEXT-102 n’existe pas.
*Récupérer un symbole de texte
cdata = 'fin du travail le &2 à &3 pour &1'(005).
replace '&1' with sy-uname into cdata. …/…
*Envoyer un message
message e004(zascom) with sy-uname sy-datum sy-uzeit sy-repid.
*Récupérer un message
CALL FUNCTION 'MESSAGE_TEXT_BUILD ou MESSAGE_PREPARE ou WRITE_MESSAGE ou …
*Cas d’emploi de cette fonction : DIRECT INPUT
*The specified internal table contains all system messages that
*occur during CALL TRANSACTION USING ... . The internal table
*must have the structure BDCMSGCOLL.
  BEGIN OF MSGTAB OCCURS 10.
        INCLUDE STRUCTURE BDCMSGCOLL.
DATA: END OF MSGTAB.
.../…
REFRESH MSGTAB.
  CALL TRANSACTION 'ME52'
       USING BDCDATA
       MODE 'N'
       MESSAGES INTO MSGTAB.
*vider la table des messages
  LOOP AT MSGTAB.
    CALL FUNCTION 'WRITE_MESSAGE' ou sa soeur
         EXPORTING .../...
         IMPORTING 
              MSGTEXT = CDATA.         

    CONCATENATE MSGTAB-MSGTYP CDATA INTO CDATA SEPARATED BY '-'.
    WRITE: / CDATA.
  ENDLOOP.
  ULINE.

Parameter ID Table des matières

Pour trouver la liste intégrale des Parameter ID et des valeurs de ces paramètres, passer en débugging (/h + entrée) puis 
Goto > system > control blocks (ce qui déverrouille system areas), puis
Goto > system > system areas, puis 
Double click sur SMEM

call transaction and skip first screen Table des matières

S l’on veux appeler une transaction depuis un report interactif, il est de bon gout de préalimenter les champs de saisie à partir des valeurs affichées.
Quel est le nom de paramètre associé aux champs du first-screen de la transaction cible ?

Ce qui donne dans le programme appelant : (exemple : SAPFM06I / FM06IF01 ligne 3051)

set parameter id 'MAT' field matnr.
set parameter id 'WRK' field werks.
call transaction 'ME01' and skip first screen.

Sinon, partir en debugging dans le module PBO, il y a de fortes chances que les valeurs initiales soient gérées à la main via une structure : exemple : transaction SO10 (gérer les textes standard)
(pstxt est une structure du dictionnaire)

  GET PARAMETER ID 'TXT' FIELD PSTXT.
  IF PSTXT-TDNAME  <> SPACE. RSSCE-TDNAME  = PSTXT-TDNAME.  ENDIF.
  IF PSTXT-TDID    <> SPACE. RSSCE-TDID    = PSTXT-TDID.    ENDIF.
  IF PSTXT-TDSPRAS <> SPACE. RSSCE-TDSPRAS = PSTXT-TDSPRAS. ENDIF.

Donc, pour appeler, on procède ainsi (cf SAPMSSCE / MSSCEI00)

*....... SPA/GPA-Parameter setzen ....................................
  MOVE-CORRESPONDING RSSCE TO PSTXT.
  SET PARAMETER ID 'TXT' FIELD PSTXT.

Field symbol Table des matières

form bdc_field using fnam fval.
…/…
  field-symbols: <f>.
  data _i type i.
  data _x(132).
  _x = fval.
  _i = strlen( _x ).
  if _i > 0.
    assign _x(_i) to <f>.
    write <f>.
  endif.

Cas d’emploi : write ne permet pas de variable dans l’offset, mais il le tolère via un field-symbol

FORM CREATE-BI USING MAPPE FEEDID FILEID RECTYP STRUCTUR ONLINE
                     INAREA BIUSER SAVE.
*Structur = le nom de structure dans le programme appelant
*Inarea = le contenu de cette structure 
    ASSIGN (STRUCTUR) TO <INAR>.
    MOVE INAREA TO <INAR>.
*les zones de l’appelant sont maintenant connues et valorisées
    ASSIGN (ZSCR-ZFVAL) TO <FIELDVALUE>.    
    MOVE <FIELDVALUE> TO FVAL.
*on peut maintenant les utiliser.

Macro Table des matières

Exemple : dans INCLUDE <LIST>

DEFINE LINE.
  CONSTANTS: &1 TYPE C VALUE &2.
END-OF-DEFINITION.

LINE LINE_SPACE                    ' '. "SPACE
…
DEFINE ICON_PREPARE_FOR_MODIFY.
  TRANSLATE &1 USING '@ '.
  CONDENSE  &1 NO-GAPS.
END-OF-DEFINITION.

Mail Table des matières

Comment on fait pour envoyer du courrier ? on copie l’exemple fourni par SAP : RHMAIL00. Les courriers sont consultables par la transaction SO01.

FORMS communs à plusieurs programmes Table des matières

Le programme principal appelle un sous-programme (ici general_processing) contenu dans un include, et lui passe en paramètre le nom d'un sous-programme du programme principal (ici printing_fr)

(PGM=RDEXPAI*)
include rvexinro.
perform general_processing using 'PRINTING_FR'.

form printing_fr.
…/…
(INCLUDE=RVEXINRO)
form general_processing using    value(local_printing_routine).
perform special_processing_uk in program (sy-repid) if found.
perform (local_printing_routine) in program (sy-repid) if found.

Transport - Ré affectation d’objets Table des matières

affectation d’objets privés à une classe transportable 
plusieurs objets :Repository brower
    objets privés locaux + afficher, puis sélectionner puis menu Objet / Réaffecter
un programme : Editeur ABAP
    menu Programme / Réaffecter
Formulaires et autres objets fantaisistes
    SM31, table TADIR + Gérer : critère responsable = profil SAP puis cocher puis bouton Gérer

Pour trouver les requêtes (ordres et tâches) associées à un objet : SE16 sur V_E071EU

Ajouter un (des) objets dans un transport : Fonctions TR_OBJECTS_CHECK + TR_OBJECTS_INSERT

Icones et symboles dans un sapscript Table des matières

Question :
I have read note 104272 on this subject, and i am very interested. I have not understand what i have to add as sapscript code in my formulars to obtain icons or symbols as showed by abap reports SHOWICON or SHOWSYMB. Can you provide me an example of printing symbols with sapscript ?
OSS Answer :
let's say you want to print the icon with the printer symbol. Then do the following steps:
1. Call transaction SE38 and run the report SHOWICON. Then choose List - Print.
2. Call transaction SP01, set the cursor on the spool request you just created. Press the Button with the pair of glasses and then the button 'Display Hex'. Now search for the line with the icon you want to print. E.g. you find:

#5 #,0X #5 ICON_PRINT #5 Print
1321235222132444455544522222222222222222221325766722222
B50BC08000B5093FEF029E40000000000000000000B50029E400000
   ----

The underlined characters are the hex sequence, under which the icon is stored. So the printer icon is stored as 1B 2C 30 58.
3. Call transaction SPAD, press the button 'Full Administration',then the button 'Character sets', set the cursor on the characterset 1100 (I suppose this is your system codepage) and press the button 'Edit character set' (the icon with the puzzle). Now search for sequence 1B 2C 30 58. It is the SAP character number 801.
4. So if you add a <801> into your layout set, the <801> is printed as a print icon.
I know this way sounds a little complicated. Usually it might be enough that you start with step 3 and look for names of the icons.E.g. the character name SAPicon0X_PRINT suggest that it is the print icon.

Autre moyen : SP12 / jeux de caractère / Comparer jeux. Choisir la page de code 1100 (page de code pour écran) au moins, chercher l’icône par son nom :

RSPOCP02 : Impression d'1 ou 2 jeux de caractères (codepages)                  1 
	                                                                                 
              Edition des jeux caract. (codepages) 1100 et 1116.                 
                                                                                 
Syst. R/3 DEV      Version 40B  le 23.12.1998 .                                  
          1100       les deux      1116                                          
 L.N°  B1 B2 B3 B4 B1 B2 B3 B4 B1 B2 B3 B4 Caractère et son nom                  
…/…
 00801 1B 2C 30 58             28 50 08    #,0X    SAPicon0X_PRINT               
…/…

Reste à découvrir ce que signifie en termes de code sapscript : add a <801> into your layout set
C’est à prendre au pied de la lettre, ça marche comme un style </> ou <C>
Avant toute chose, il faut vérifier que l’imprimante cible (ou plutot le pilote SAP de l’imprimante) supporte les icones. Pour cela, utiliser le programme RSPOCP02 (outils / ccms / spools / temse administration / jeux de caractère / imprimer jeux) pour générer un spool de contrôle du jeux de caractère. Utiliser les icônes et symboles correctement imprimés SUR LE PAPIER ! le résultat sur écran peux être tout a fait correct, contrairement au résultat sur papier. La différence vient du fait que le jeux de caractère utilisé pour l’aperçu (donc sur un appareil de type SCREEN) est différent du jeux de caractères utilisés pour imprimer. Le jeux de caractère utilisé par l’imprimante est inscrit dans les paramètres du type d’appareil (SPAD + type d’appareil + sélectionner l’appareil cible)

Administration des utilisateurs Table des matières

SAP 4.1

Exemple de groupe d’activité : Réceptions fournisseur

Cette transaction permet, sous assistance de SAP, de constituer des modèles d’organisation pour les menus. Par cette étape, on détermine les “ objets ” autorisés (nécessaires) pour exercer l’activité envisagée :

Liste des menus de domaine : consulter la liste SE43 (F4 sur le premier champ + bouton Système Info)(c’est longuet) ou parcourir les menus SAP et par Système / Statut, quand le nom de programme est MENUxxxx, alors xxxx est un nom de menu de domaine, ou utiliser le programme Liste des menus qui développe toute l’arborescence des menus SAP avec noms de menu de domaine, nom de transaction associée, libellé standard.

Distinction DEV – QUA – PRO Table des matières

En phase finale de test, les données sur DEV, QUA et PRO sont souvent très proches, et normalement on utilise les mêmes imprimantes pour vérifier les cadrages des impressions. La probabilité que deux spools (un de test et un réel) au contenu très proche tombent sur la même imprimante devient très forte.
Pour éviter aux utilisateurs de réaliser par mégarde par exemple une commande client test imprimée sur l’imprimante réelle il est souhaitable d’ajouter une marque distinctive forte sur les spools de test. Personnellement, j’imprime un logo de 10 x 15 cm contenant le texte “ TEST TEST NE PAS ENVOYER ”

dans le formulaire, ajouter une nouvelle fenêtre DEVPRO :

/:WINDOW DEVPRO TYPE CONST;

/:WINDOW DEVPRO TEXT 'distinction dev/pro';

/:PAGE FIRST WINDOW DEVPRO 3 CM 1 CM 16.60 CM 5 CM;


/WDEVPRO
/:INCLUDE DISTINCTION_DEV_PRO OBJECT TEXT ID ST LANGUAGE FR

objet texte :
TEXT      DISTINCTION_DEV_PRO                                                   ST  F                                                  SYSTEM                  00000JPL         40B 19990106115937JPL         40B 1999010613030313200022  0                                                                                                                           100
/:IF &SY-SYSID& <> "PRO"
/:IF &SAPSCRIPT-DRIVER& = "HPL2" OR &SAPSCRIPT-DRIVER& = "POST" OR &SAPSCRIPT-DRIVER& = "PRES"
/:INCLUDE ZHEX-MACRO-BMON OBJECT TEXT ID ST LANGUAGE FR
/:IF &SAPSCRIPT-SUBRC(CZ)& <> "0"
* TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
  TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
  TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
  TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
  TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
  TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
  TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
/:ENDIF
/:ELSE
* TEST NE PAS ENVOYER TEST NE PAS ENVOYER TEST NE PAS ENVOYER TEST NE PAS
  ENVOYER TEST NE PAS ENVOYER TEST NE PAS ENVOYER TEST NE PAS ENVOYER
  TEST NE PAS ENVOYER TEST NE PAS ENVOYER TEST NE PAS ENVOYER TEST NE PAS
  ENVOYER TEST NE PAS ENVOYER TEST NE PAS ENVOYER TEST NE PAS ENVOYER
  TEST NE PAS ENVOYER TEST NE PAS ENVOYER TEST NE PAS ENVOYER TEST NE PAS
  ENVOYER TEST NE PAS ENVOYER TEST NE PAS ENVOYER TEST NE PAS ENVOYER
  TEST NE PAS ENVOYER TEST NE PAS ENVOYER TEST NE PAS ENVOYER TEST
/:ENDIF
/:ENDIF

Objet texte ZHEX-MACRO-BMON

Autorisations Table des matières

L’appel d’une transaction depuis une autre transaction se fait hors contrôle des droits d’accès à cette transaction, puisque ce contrôle est réputé se faire uniquement lors de la demande utilisateur via un menu ou via saisie dans le OK-CODE.
Si votre application nécessite l’appel d’une transaction, par exemple un batch input ou un fast input (call transaction using …), utilisez (au moins) le contrôle d’accès suivant :

FORM START_TRANSACTION USING TCD.
CALL FUNCTION 'AUTHORITY_CHECK_TCODE'
EXPORTING
TCODE = TCD
EXCEPTIONS
OK = 01
NOT_OK = 02.

IF SY-SUBRC = 01.
CALL TRANSACTION TCD.
ELSE.
MESSAGE S112 WITH TCD.
ENDIF.
ENDFORM. " START_TRANSACTION

Ce sous-programme est dans le programme SAPMS01M (transaction Menu dynamique). S’il vous convient tel que, utilisez un appel de routine extérieure

perform start_transaction(sapms01m) using name.

WS_Query Table des matières

Execute query function on presentation server 
Querying the file parameters and environment variables on the presentation server. The length or the existence of files can be determined 
Query command: 
'CD' : Determine current directory
'EN' : Prompt environment variable ENVIRONMENT
'FL' : Determine length of file FILENAME
'FE' : Check if file FILENAME exists
'FC' : Check if Ceator(program) FILENAME is installed (Apple only)
'DE' : Check if directory FILENAME exists
'WI' : Check if a graphic program is running with ID WINID
'WS' : Prompt Windows system of presentation server
'OS' : Prompt operating system of presentation server
'XP' : Determine Execute-Path (Unix only)
'GM' : GMUX-Version: Internal Use Only

Native sql Table des matières

vu dans le programme EXECSQLS V30F

PARAMETERS: REPONAME(8) DEFAULT '*' .
PARAMETERS: TABNAME(30) DEFAULT '*' .
PARAMETERS: DEVCLASS(4) DEFAULT 'STUI' .

DATA: BEGIN OF REPORT_NAMES OCCURS 0 ,
        NAME(8) ,
END OF REPORT_NAMES.
.../...
CASE SY-DBSYS(3) .
WHEN 'ORA'.
   EXEC SQL PERFORMING APPEND_REPORT_NAMES.
<<<<<<<SELECT T.OBJ_NAME
v      FROM TADIR T
v      WHERE T.OBJ_NAME LIKE    :REPONAME  AND
v            ( ( T.PGMID = 'R3TR' AND  T.OBJECT = 'PROG' ) OR
v              ( T.PGMID = 'LIMU' AND  T.OBJECT = 'REPO' ) OR
v              ( T.PGMID = 'LIMU' AND  T.OBJECT = 'REPS' ) ) AND
v            T.DEVCLASS  LIKE :DEVCLASS
v   UNION
v
v<<<<<<SELECT A.PROG
v      FROM D010SINF A
v      WHERE SUBSTR(A.PROG,1,1) = 'L'         AND
v            A.PROG LIKE    :REPONAME         AND
v            A.SUBC = 'I'                     AND
v            SUBSTR(A.PROG,2,4) IN ( SELECT OBJ_NAME
v                                        FROM TADIR
v                                        WHERE
v                                           PGMID  = 'R3TR'   AND
v                                           OBJECT = 'FUGR'   AND
v                                           DEVCLASS  LIKE  :DEVCLASS  )
v>>>INTO :REPORT_NAMES
   ENDEXEC.
WHEN OTHERS.
   EXIT.
ENDCASE.
.../...
FORM APPEND_REPORT_NAMES.
APPEND REPORT_NAMES .
ENDFORM.

Report spécifique et Batch input Table des matières

Quand on utilise un programme perso (un report donc) pendant un Batch input, on ramasse :

"LEAVE TO TRANSACTION" n'est pas autorisé en batch input 
     N° message 00352 
Diagnostic 
     Fonction système spécifiée ne peut être exécutée en batch-input 
Procédure 
     Définissez l'exécution batch-input dans votre application

chaque fois qu'on veux terminer le travail
Question : Comment on termine un report par programmation sans utiliser les verbes LEAVE... ni utiliser les OK-CODE "/E..." ?
Question : pourquoi les dynpro peuvent se terminer par un leave to screen 0 et pas mon report ?
Réponse : cela ne vient pas du programme mais de la transaction : SA38 utilise LEAVE, ce qui n'est pas compatible. 
Solution : faire une transaction dédiée au report, et terminer le report ainsi :

COMMIT WORK.
IF SY-BINPT = 'X'.
  SET SCREEN 0.
  LEAVE SCREEN.
ENDIF.
LEAVE TO TRANSACTION SY-TCODE.

match code et batch input Table des matières

html

* recherche du fournisseur par l'ancien numero (matchcode KRED)
concatenate '=9.' societe '.' numero into c40.
perform bdc_dynpro      using 'SAPMF02K' '0106'.
PERFORM BDC_FIELD       USING 'RF02K-LIFNR'c40.
.../...
PERFORM BDC_TRANSACTION USING 'FK02'.

et ca marche aussi en saisie directe :

Fournisseur            =9.fr20.00002

cette syntaxe permet de s'appuyer sur les tables d'index du match-code, donc gère correctement les problèmes de performance. 
Effet de bord : on n'a aucune idée du résultat, le traitement est réalisé au moment de l'exécution du dossier Batch Input.
Correctif : remplacer la lecture de la table transparente

SELECT LIFNR INTO CORRESPONDING FIELDS OF LFB1 UP TO 1 ROWS
    FROM LFB1 WHERE ALTKN = ....

par la lecture de la table du match-code

SELECT LIFNR INTO CORRESPONDING FIELDS OF M_KRED9 UP TO 1 ROWS
    FROM M_KRED9 WHERE ALTKN = ....

Html Table des matières

Report

If you want to convert an interactive report to html you can use following function module: 

DATA: html LIKE w3html OCCURS 0 WITH HEADER LINE. 

CALL FUNCTION 'WWW_LIST_TO_HTML' 
EXPORTING 
list_index = 0 
TABLES 
html = html 
EXCEPTIONS 
OTHERS = 1. 

Pas terrible, beaucoup d’erreurs de troncature de mots-clés. Nécessite de repasser derrière.

texte complémentaire (ITF) 

function group AWRT_DOCU 
Function module GET_DOKUOBJECT_HTML 
Les textes complémentaires de type NA sont les textes complémentaires de messages.

Fonctions connexes (entre autres)
STXN SAPscript Internet 
CONVERT_ITF_TO_HTML Text Conversion of the Internal SAPscript Format (ITF) to HTML 
SAPSCRIPT_WWW_DOCU_TO_HTML 
SAPSCRIPT_WWW_ITF_TO_HTML 

SURL SAP Internet 
WWW_GET_HTML_OBJECT 
WWW_HTML_ECHO 
WWW_HTML_FROM_LISTOBJECT 
WWW_HTML_MERGER 
WWW_ITAB_TO_HTML 
WWW_ITAB_TO_HTML_HEADERS 
WWW_ITAB_TO_HTML_LAYOUT 
WWW_LIST_TO_HTML 
WWW_L_HTML_LIST_BUTTONS 
WWW_SCREEN_TO_HTML 

PDF Table des matières

Solution SAPSCRIPT vers PDF directe (solution complètement logicielle)  : RSTXPDFT4 Convert SAPscript (OTF) or ABAP List Spool Job to PDF

En particulier, voir aussi tous les abap RSTX*, c’est une mine d’or.

Nombres en lettres Table des matières

Utiliser la fonction SPELL_AMOUNT, comme dans le programme RF_SPELL

Documentation Unix AIX Risc/6000 Table des matières

http://www.rs6000.ibm.com/doc_link/en_US/a_doc_lib/aixgen/ ou
http://www.rs6000.ibm.com/cgi-bin/ds_form

ensuite cliquer sur + référence documentation (=>http://www.rs6000.ibm.com/cgi-bin/ds_rslt#1)
puis choisir le volume Command Reference Volume 1 (=>http://publib.boulder.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds1/toc.htm)
puis ouvrir Alphabetical Listing of Commands 

Write Table des matières

Paramétrage des spoules : 

RFFORI99, FORM PRINT_ON : utilisation du custo via table TLSEP
BATCH-HEADING(RSBTCHH0). Avec la structure BHDGD.
  CLEAR BHDGD.
  BHDGD-INIFL = '0'.
  bhdgd-lines = sy-linsz.
  bhdgd-repid = sy-repid.
  bhdgd-uname = sy-uname.
  BHDGD-SEPAR = SY-ULINE.
  bhdgd-domai = 'BUKRS'.
  BHDGD-BUKRS = COMPANY.
  BHDGD-WERTE = COMPANY.
  bhdgd-line1 = sy-title.
  BHDGD-LINE2 = SPACE.
TOP-OF-PAGE.
  PERFORM BATCH-HEADING(RSBTCHH0).

Paramétrage des spoules : fonction GET_PRINT_PARAMETERS & structure PRI_PARAMS :
  ABAP - The SAP Programming Language 
    Description of Syntax and Concepts 
      List Processing 
        Printing Lists 
          PRINT-CONTROL

Pour fixer la largeur d’une colonne dans un report, en particulier pour les zones numériques :

DATA    DMSHB    LIKE BSEGA-DMSHB VALUE '00345678901.23'.
SET COUNTRY 'FR'.           12345678901234567 
WRITE /     DMSHB.             345.678.901,23
WRITE /(14) DMSHB.          345678.901,23    
WRITE /(13) DMSHB.          345678901,23     
WRITE /(12) DMSHB.          345678901,23     
WRITE /(11) DMSHB.          *5678901,23      
WRITE /(10) DMSHB.          *678901,23       
WRITE /(09) DMSHB.          *78901,23        
WRITE /(08) DMSHB.          *8901,23         
WRITE /(07) DMSHB.          *901,23          
WRITE /(06) DMSHB.          *01,23           

Pour créer un report interactif façon hyper texte

FORMAT HOTSPOT ON/OFF
WRITE HOTSPOT ON/OFF

System Fields for Lists

a) Generating a list
    SY-PAGNO - Number of current page of current list;
    SY-LINNO - Number of current line on current page;
    SY-COLNO - Number of column where cursor is positioned in current list;
    SY-LINCT - Number of lines per page in current list
    SY-LINSZ - Line width of current list;
    SY-TITLE - Title that appears in the title bar of the display window;
    SY-SROWS - Current number of lines in display window;
    SY-SCOLS - Current number of columns in display window;
b) Interactive Reporting
    After each interactive event, the following system fields are set
    automatically:
    SY-LSIND - Index of current list;
    SY-LILLI - Absolute number of a selected line in displayed list;
    SY-LISTI - Index of displayed list after line selection
    SY-LISEL - Contents of a selected line;
    SY-CUROW - Number of line in window to the cursor
    SY-CUCOL - Number of column in window to the cursor
    SY-CPAGE - Number of top displayed page in displayed list;
    SY-STARO - Number of top line on top displayed page
    SY-STACO - Number of first displayed column in the displayed list;
    SY-UCOMM - Function code that triggered the event in the displayed list;
    SY-PFKEY - Status of displayed list;

 

SearchSAP.com Table des matières

Read an area from an Excel sheet and write out a diagnostic
Logos on screen

Debugging : Export internal table to Excel for analysis

Go to your URL using ABAP

Send background job failure alerts by email

Debug background process

Debug pop-up screen

Download internal table data into Excel

Inserting photos into SAPscripts

Use Excel instead of Tab delimited text in BDC programs

How to handle time zones in ABAP

Change logon screen

ABAP Program types

Report dynamique Table des matières

Trouvé dans RFPOSFX0

FORM generieren.
READ REPORT 'RFEPOSX0' INTO reptab.
Adaptation du modèle
INSERT REPORT 'RFEPOSX0' FROM reptab.              
 IF sy-subrc NE 0.                                  
   MESSAGE a308 WITH 'GENERIEREN - INSERT REPORT'.  
 ENDIF.                                             
 GENERATE REPORT 'RFEPOSX1'.                        
 IF sy-subrc NE 0.
MESSAGE a308 WITH 'GENERIEREN - GENERATE REPORT'.
ENDIF.
ENDFORM.

SUBMIT rfeposx1 AND RETURN.
REPORT rfeposx1
INCLUDE  rfeposx0.

Export rapide de structure Table des matières

Structure de dictionnaire > excel en 5 minutes

Tools / dictionnary
(table) / display
Structure / print with setting / sapmininfo / pas print immediat
SP02
Display
Goto list display / system / list / save / local file / spreadsheet

Ouvrir le fichier excel

What is the difference between ALE, EDI, IDocs and BAPI ? Table des matières

The interface concept of the classic R/3 is based on two different strategies: Remote Function Calls (RFC) and data exchange through IDoc message documents. RFC makes direct and synchronous calls of a program in the remote system. If the caller is an external program it will call an RFC-enabled function in R/3 and if the calling program is the R/3 system it will call an RFC-function in another R/3-system or it will call a non-R/3 program through a gateway-proxy (usually rfcexec.exe). BAPIs are a subset of the RFC-enabled function modules, especially designed as Application Programming Interface (API) to the SAP business object, or in other words: are function modules officially released by SAP to be called from external programs.

IDocs are text encoded documents with a rigid structure that are used to exchange data between R/3 and a foreign system. Instead of calling a program in the destination system directly, the data is first packed into an IDoc and then sent to the receiving system, where it is analyzed and properly processed. Therefore an IDoc data exchange is always an asynchronous process. The significant difference between simple RFC-calls and IDoc data exchange is the fact, that every action performed on IDocs are protocolled by R/3 and IDocs can be reprocessed if an error occurred in one of the message steps.

While IDocs have to be understood as a data exchange protocol, EDI and ALE are typical use cases for IDocs. R/3 uses IDocs for both EDI and ALE to deliver data to the receiving system. ALE is basically the scheduling mechanism that defines when and between which partners and what kind of data will be exchanged on a regular or event triggered basis. Such a set-up is called an ALE-scenario.

The philosophical difference between EDI and ALE can be pinned as follows: If we send data to an external partner, we generally speak of EDI, while ALE is a mechanism to reliable replicate data between trusting systems to store a redundant copy of the IDoc data. The difference is made clear, when we think of a purchase order that is sent as an IDoc. If we send the purchase order to a supplier then the supplier will store the purchase order as a sales order. However, if we send the purchase order via ALE to another R/3 system, then the receiving system will store the purchase order also as a purchase order.
html

NetWeaver : a definition Table des matières

searchsap.com :

Grasping the concept of NetWeaver, and understanding its components, isn't a simple task, the company has acknowledged. SAP America CEO Bill McDermott has pledged improved communication to customers on the topic, and analysts are predicting that SAP customers who pay attention can benefit from the integration and development environment. How important is NetWeaver? So important that McDermott advised SAP decision makers who attended the recent SearchSAP.com Chicago conference to change their upgrade plans from R/3 4.7 Enterprise to mySAP ERP, which includes the full power of NetWeaver. That doesn't mean you should, but it does mean that you may want to find out what all the fuss is about.

--------------------------------------------------------------------------------------------------------------------------------------------------------

NetWeaver is a collection of six components currently in ramp-up (Q1/2004) with completion due for (Q3/2004).
1. WebApp Server
2. BW
3. Master Data Management (MDM)
4. Exchange Infrastructure (EI)
5. Enterprise Portals
6. Mobile Infrastructure

In terms of what NetWeaver 'is', SAP describe it as the technical foundation for an Enterprise Services Architecture. I think this means it's best seen as a technical platform for web-enabling SAP's current products (R/3, CRM, BW, etc.) and any other 3rd party product you may have. Combine this with a mechanism for managing your master data across distributed systems (MDM), a business data exchange mechanism (EI), throw in a business data warehouse (BW) (all underpinned by the WebAS) and there's your architecture.

SAP's sales strategy from here on will concentrate on selling NetWeaver as a complete product to new customers and encouraging existing customers to upgrade piecemeal.

The WebApp Server is SAP's long term replacement for the ITS so I don't think ITS will come as standard. However unless SAP come up with replacements for their current ITS products (probably with BSPs or WebDynpro) you can plug in an ITS. I'm guessing however that they won't bother.

If you have an OSS logon I'd suggest you look at https://websmp205.sap-ag.de/netweaver.

--------------------------------------------------------------------------------------------------------------------------------------------------------

I know this much....If you are looking at enterprise to replace your SAP client for your data entry users, it is not recommended because the response time is MUCH slower (due to the ITS layer).

Retrieving the user IP address and logon ID Table des matières

data:
w_terminal like USR41-TERMINAL.
CALL FUNCTION 'TERMINAL_ID_GET'
EXPORTING
USERNAME = SY-UNAME
IMPORTING
TERMINAL = w_terminal
EXCEPTIONS
MULTIPLE_TERMINAL_ID = 1
NO_TERMINAL_FOUND = 2
OTHERS = 3
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF. 

 

Unicode, Tab & Enter hexa strings Table des matières

html



* non unicode method to code an hexadecimal string  SAP 4.5
* DATA: BEGIN OF HT, X(1) TYPE X VALUE '09', END OF HT."it's a .TXT file
*    IF <T> CA HT.

* non unicode for SAP 6.4

data htab(1) type x value '09'.
field-symbols: <fsx1> type x, <fsc1> type c.
assign htab to <fsx1> casting.
assign <fsx1> to <fsc1> casting.
IF <T> CA <fsc1>.

* unicode method

data ht(1).
class cl_abap_char_utilities definition load.
ht = cl_abap_char_utilities=>horizontal_tab.
    IF <T> CA HT.



valeurs proposées par cl_abap_char_utilities :

data boml type string. boml = cl_abap_char_utilities=>BYTE_ORDER_MARK_LITTLE.
data bomb type string. bomb = cl_abap_char_utilities=>BYTE_ORDER_MARK_BIG.
data bomu type string. bomu = cl_abap_char_utilities=>BYTE_ORDER_MARK_UTF8.
data cs type string.   cs = cl_abap_char_utilities=>CHARSIZE.
data en type string.   en = cl_abap_char_utilities=>ENDIAN.
data mi type string.   mi = cl_abap_char_utilities=>MINCHAR.
data ma type string.   ma = cl_abap_char_utilities=>MAXCHAR.
data tab type string.  tab = cl_abap_char_utilities=>HORIZONTAL_TAB.
data vtab type string. vtab = cl_abap_char_utilities=>VERTICAL_TAB.
data nl type string.   nl = cl_abap_char_utilities=>NEWLINE.
data crlf type string. crlf = cl_abap_char_utilities=>CR_LF.
data ff type string.   ff = cl_abap_char_utilities=>FORM_FEED.
data bs type string.   bs = cl_abap_char_utilities=>BACKSPACE.
data char_utilities(50).
concatenate
boml
bomb
bomu
cs
en
mi
ma
tab
vtab
nl
crlf
ff
bs
into char_utilities separated by ';'.

Debug : 

char_utilities=FFFE;FEFF;EFBBBF;1 ;B;#;y;#;#;#;##;#;#   

464646453B464546463B4546424242463B31203B423B003BFF3B093B0B3B0A3B0D0A3B0C3B08202020202020202020202020
F F F E ; F E F F ; E F B B B F ; 1   ; B ; # ; y ; # ; # ; # ; # # ; # ; #   

 
attribute type description initial value
BYTE_ORDER_MARK_LITTLE ABAP_BYTE_ORDER_MARK Unicode - Little Endian 'FFFE'
BYTE_ORDER_MARK_BIG ABAP_BYTE_ORDER_MARK Unicode - Big Endian 'FEFF'
BYTE_ORDER_MARK_UTF8 ABAP_BYTE_ORDER_UTF8 UTF-8 Representation of FEFF 'EFBBBF'
CHARSIZE I Character Length in Bytes %_CHARSIZE
ENDIAN ABAP_ENDIAN Byte Sequence of Application Server %_ENDIAN
MINCHAR ABAP_CHAR1 Minimum Possible Value %_MINCHAR
MAXCHAR ABAP_CHAR1 Maximum Possible Value %_MAXCHAR
HORIZONTAL_TAB ABAP_CHAR1 Horizontal Tab Stop Character %_HORIZONTAL_TAB
VERTICAL_TAB ABAP_CHAR1 Vertical Tab Stop Character %_VERTICAL_TAB
NEWLINE ABAP_CHAR1 New line %_NEWLINE
CR_LF ABAP_CR_LF Carriage Return and Line Feed" Character Pair %_CR_LF
FORM_FEED ABAP_CHAR1 Page Break Character %_FORMFEED
BACKSPACE ABAP_CHAR1 Backspace Character %_BACKSPACE

 

Implementation of SAP Table des matières

Avoid specific tools. There are so much SAP implementation in the world, someone has had the same problems you will encounter. So there is already a solution in SAP.

You will probably will ask for consultants (not probably, surely). Work with them for a standard solution for each issue, it is the key of future upgrades. You will upgrade. 

Consultants know the product. You know your business. choose your best inside professionals, free them half their time, and promote them Key Users. make what is necessary for this to be a promotion. 
And the first job of your key users is to choose the junior that will work their job the half time they are key users.

By this way, after ending SAP implementation you will have a strong product carrying a strong team (normaly, the junior + the senior becomes an effectiveness duo, this is your personnal challenge)

this was for the human point of view.

for the technical side, converting your actual data to SAP database can be done with at least half a dozen of  tools. Your job is to be able to export your data in flat files. Let consultants doing the insertion in SAP. The oldest technique is BCD, I continues to use it daily. It's a way to simulate keying in sap screens in batch mode. The efficiency is based on the fact that loading is made with a batch input folder : you can track the errors and re-run data that are not already loaded. That is the key of loading SAP (or any other soft / database) : the warranty of never missing any data.

 

Forms and Untransmitted fields Table des matières

Depuis un FORM, on peut lire les variables de l'appelant, même si l'appelant est un autre programme.
From a FORM, you can read fields into the caller, even if it's in an other program.

Such as in the degugger, or in a SapScript

Sample :

REPORT  zzjpl001                                .
DATA:
kna1 LIKE kna1
.
FIELD-SYMBOLS: <f>.
START-OF-SELECTION.
  SELECT SINGLE * FROM kna1 INTO kna1 WHERE kunnr = '0000014844'.
* that's to show selected data
  DO.
    ASSIGN COMPONENT sy-index OF STRUCTURE kna1 TO <f>.
    IF sy-subrc NE 0. EXIT. ENDIF.
    WRITE:/ <f>.
  ENDDO.
* that's for setting a debug break point
  kna1 = kna1.
* that's to illustrate this tip
  PERFORM form1 IN PROGRAM zzjpl002.

 

REPORT  zzjpl002                                .
DATA:
kna1 LIKE kna1
.
FIELD-SYMBOLS: <f1> , <f2>, <f3>.

FORM form1.
* kna1 is empty
  kna1 = kna1.
  DATA field(50).
* assign the remote field to F1
  field = '(ZZJPL001)KNA1'.
  ASSIGN (field) TO <f1>.
* assign the local field to F2
  field = 'KNA1'.
  ASSIGN (field) TO <f2>.
* move remote field to local field
  <f2> = <f1>.
ENDFORM.                                                    "form1

debug :

Noms de zones               1 - 4                    Contenus de zones
   <f1>-kunnr                     0000014844
   <f2>-kunnr                     0000014844


SY-SUBRC 0                     SY-TABIX 1                     SY-DBCNT 1

Using this method, you can not only read the remote fields, but you can also update the remote fields

* move local field to remote field
  <f1> = <f2>.

And this is also valid for handling internal tables :

REPORT  zzjpl001                                .
DATA:
kna1 LIKE kna1 occurs 0 with header line
.
FIELD-SYMBOLS: <f>.
START-OF-SELECTION.
  SELECT  * FROM kna1 INTO  table kna1 WHERE kunnr = '0000014844'.
  kna1[] = kna1[].
  PERFORM form1 IN PROGRAM zzjpl002.

 

REPORT  zzjpl002                                .
DATA:
kna1 LIKE kna1 occurs 0 with header line
.
FIELD-SYMBOLS: <f1> , <f2>, <f3>.

*&---------------------------------------------------------------------*
*&      Form  form1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM form1.
  DATA field(50).
  field = '(ZZJPL001)KNA1[]'.
  ASSIGN (field) TO <f1>.
  field = 'KNA1[]'.
  ASSIGN (field) TO <f2>.
  <f2> = <f1>.
ENDFORM.                                                    "form1

Titre Table des matières

html