Quelquepart

Blog d'un développeur

Vous êtes ici : Accueil>Mots clés>sap

SAP

SAP : Générer un document Word DOCX en ABAP

Rédigé par Sébastien Hermann dans Application - 12 commentaires

Le mois dernier je vous ai présenté ma classe d'abstraction pour faire communiquer SAP et Word en utilisant les liens OLE. Bien que j'adore cette méthode pleine de poésie, ce n'est pas très rapide ni pratique pour générer de gros ou nombreux documents. J'ai donc du réfléchir à une autre méthode : créer des fichiers DOCX directement sans utiliser Microsoft.

Afin de pouvoir transformer rapidement mes différents projets clients utilisant l'ancienne classe, j'en ai repris l'interface : les méthodes portent le même nom et utilisent les mêmes paramètres (autant que possible)

Je vous livre donc cette nouvelle classe d'abstraction qui permet de générer un fichier DOCX directement en ABAP. Contrairement aux différents projets balbutiants et aux tutos que j'ai pu voir sur le net, ici la prise en main est ultra simple : un document "hello world" se génère en quelques lignes !

Sont gérés par la classe :

  • Création de document vierge ou via template (docx/docm/dotx/dotm)
  • Écriture de texte avec ou sans style (style de paragraphe et/ou de police)
  • Option bold, italique, souligné, barré, indice, exposant, petite majuscules, choix de police et taille, couleur, surlignage, espacement de caractères
  • Gestion de l'alignement, de l'indentation, du retrait, des espaces avant et après le paragraphe, de l'interligne, des bordures de paragraphe et couleur de fond
  • Saut de ligne, de page, de section et section continue
  • Écriture de tableau avec ou sans style de tableau (et possibilité de définir des option de formatage par cellule : gras, couleur...)
  • Écriture d’entête/pied de page simples
  • Gestion de l'orientation (portrait/paysage) et des bordures de page
  • Insertion d'image
  • Insertion de note de bas de page ou de fin de document
  • Insertion de commentaires
  • Insertion de dessin (canvas)
  • Insertion de table des matières
  • Insertion de libellés numérotés (figure, table...)
  • Insertion de table de libellés (figures, tables...)
  • Insertion de propriété de document et de champs personnalisés (custom fields)
  • Mise à jour des propriétés de document
  • Création de style (caractère, paragraphe)
  • Prise en charge des images/templates dans le SAP Web Repository (SAPWR via la stransaction SMW0)
  • Pour les utilisateurs avancées ayant des besoins non gérés, possibilité d'inclure un fragment XML de votre composition dans le document en cours

Pour le téléchargement, je livre un programme de démo de la classe qui montre comment l'utiliser. Le zip contient :

  • Le package NUGG avec programme de démo et classe dans un "include" séparé
  • Un template word et 3 images utilisés par le programme démo
  • Un fichier TXT contenant la classe pour ceux qui veulent jeter un oeil au code sans saplink

Prochainement, un cas d'usage sur BW...

Faire communiquer SAP et MS WORD grâce à OLE

Rédigé par Sébastien Hermann dans Application - Aucun commentaire

Cela fait des années que je pratique cette méthode de communication, pour des petites "bidouilles" entre SAP et Microsoft. C'est rapide et ludique (j'adore voir Word se remplir tout seul, c'est "magique", un peu comme quand je regarde un piano automatique dont les touches s'enfoncent seules lorsqu'il joue).

Enfin rapide... une fois qu'on a réussi a trouver les bonnes commandes ! Car c'est assez galère à programmer :

  • commande obscure
  • pas ou peu de documentation ou d'exemple
  • de nombreuses questions sur le net, mais les réponses sont rares

Cette fois j'ai eu un gros besoin. Je devais générer un document complet, sous word, à partir de tonnes de données SAP. Prenant mon courage à 2 mains, j'ai de nouveau déguainé OLE, et pour que ca soit réutilisable, j'en ai fait une classe d'abstraction.

En utilisant ma classe, fini la galère, vous avez juste a l'inclure en début de votre programme, et ensuite de simples appels aux méthod write_text ou write_table vont vous permettre de remplir votre document... magiquement !

Sont gérés par la classe :

  • Création de document vierge ou via template dotx
  • Ecriture de texte avec ou sans style (style de paragraphe et/ou de police)
  • Option bold, italique, souligné, choix de police et taille, couleur
  • Saut de ligne, de page, de section et section continue
  • Ecriture de tableau avec ou sans style de tableau (et possibilité de définir des option de formatage par cellule : gras, couleur...)
  • Note de bas de page
  • Ecriture d'entete/pied de page simples
  • Gestion de l'orientation (portrait/paysage)
  • Insertion d'image
  • Insertion de dessin (canvas)
  • Insertion de table des matières
  • Insertion de champs personnalisés (custom fields)
  • Mise a jour du titre de la fenetre word
  • Sauvegarde du document et fermeture de word

A l'usage, je me suis malgré tout rendu compte que la génération était assez longue (5 à 10 minutes pour un document de 50 pages). Ce sont les tableaux qui sont particulièrement lents.

Et donc finalement j'ai du changer de méthode pour mon projet, mais je publie malgré tout cette classe car elle est pleinement fonctionnelle, et pourra toujours vous servir de "how to" sur vos petits besoins OLE :)

Pour le téléchargement, je livre un programme de "test" de la classe qui montre comment l'utiliser. Le zip contient également un template, et quelques images qui sont utilisées par le programme test.

Astuce Search-help standard SAP

Rédigé par Sébastien Hermann dans Général - Aucun commentaire

Pour accéder rapidement à une liste de valeur pour une aide à la recherche, il est possible d'utiliser une syntaxe particulière directement dans le champ.
Par exemple sur l'écran d'accueil de SU01, dans le champs User, saisir =...seb puis entrée affichera la liste de tous les utilisateurs dont le prénom commence par "seb".

La syntaxe est la suivante :

  • Commencer par =
  • Ajouter autant de points que la position du champ de recherche a remplir dans le match code
  • Saisir le texte recherché
  • Appuyer sur entrée

Dans l'exemple "=...seb", les 3 points indiquent d'utiliser le 3e champ, donc le prénom

Cette astuce fonctionne avec la plupart des champs standards SAP. Il est également possible de faire une recherche sur plusieurs champs en les enchainant. =...seb.dir pour rechercher tous les "seb*" du département "dir*"

Upload/download de fichiers

Rédigé par Sébastien Hermann dans Non classé - Aucun commentaire

Si la transaction AL11 permet de visualiser les fichiers sur le serveur, elle ne permet ni de les télécharger, ni d'en ajouter. C'est un vrai manque qui se fait resentir de manière chronique chez la plupart des sociétés utilisatrices de SAP.

Généralement, un programme spécifique est déployé pour répondre à ce besoin. J'ai même fait une version améliorée qui historise les fichiers en utilisant une compression tar+bz2, cela fera peut-être l'objet d'un prochain billet.

Les personne ayant déjà travaillés sur un projet de reprise de données connaissent probablement la transaction SXDA et plus spécifiquement SXDA_TOOLS, qui permet de faire des upload/download entre serveur sap et poste client, même si ce n'est pas son but premier. Cette solution standard s'apparente à un hack car on renseigne les paramètres obligatoires avec des données bidons avant d'appeler la fonction de copie. Néanmoins elle évite de développer un programme spécifique.

Mais grâce au module EHS (Environment, Health and Safety), 2 transaction 100% dédiées à ces opérations ont vues le jour :

Testé sur divers systèmes sap, de 4.6b à ECC5, les transactions semblent fonctionner convenablement.

Quelques grammes de GuiXT dans un monde de brutes...

Rédigé par Sébastien Hermann dans Général - Aucun commentaire

La plupart des gens que je connais utilisent des couleurs distinctes pour différencier les environnements SAP (développement/recette/production).

Personnellement je ne suis pas adepte de cette solution. Quel faire quand on a 7 serveurs de production, 2 pre-prod, 2 recettes, 2 dev ? (fréquent en phase de montée de version)

Heureusement GuiXT vient au secours de tous les daltoniens pour les sauver d'erreurs aux conséquences incalculables ( oups, je viens de lancer l'impression de 30000 factures... en production... bon, je vide mon bureau de suite ? ). Grâce à une simple commande GuiXT, vous pouvez préfixer toutes vos fenêtres SAP par le trigramme du serveur. Voici comment faire :

  1. Activer GuiXT
    Cocher l'option "Activer GuiXT" dans les options du sapgui
  2. La fenêtre de GuiXT s'ouvre, cliquer sur le bouton "Profile"
  3. La fenêtre d'options apparaît, renseigner un répertoire ou vous souhaitez placer les scripts (C:guixt par exemple). Attention, vous devrez créer manuellement le répertoire s'il n'existe pas.
    Dans le cadre "Start Window", choisir "Minimized"
    Dans le cadre "Further Options", cocher "No language key in script file name"
    Valider avec le bouton OK
  4. Créer un fichier nommé "session.txt". L'éditer avec Notepad (Blocnote) et copier coller le code suivant :
    titleprefix &V[_database]
  5. Quitter SAP et le relancer.

Le trigramme du serveur vient désormais préfixer l'ensemble de vos fenêtres SAP.