Quelquepart

Blog d'un développeur ABAP

Vous êtes ici : Accueil

ZTOAD : Requêteur Open SQL

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

Vous avez surement déjà été confronté à un bug dans un programme en production qui ne semble pas être reproductible en environnement de test.

Dans ces cas là, il n'est pas toujours évident de débugger directement le programme en production (problème de droits, sensibilité des données, risque de mauvaise exécution, documents créés avec votre user...). Quand le bug semble venir d'une requête SQL un peu compliquée (jointure sur 5 tables, subquery...), vous voila embarqué dans de fastidieuses recherches via SE16 avec 3 ou 4 modes ouverts pour essayer de comprendre le problème avec la requête (et encore... le problème ne vient peut-être même pas de cette requête la !)

Dans d'autres mondes, les développeurs n'ont pas ce genre de problèmes et peuvent composer en temps réel leur requêtes personnalisées directement sur la base de données. Sur SAP ce n'est pas possible. Vraiment ? Pas en standard en tout cas. Il suffit donc de créer un programme spécifique.

Dérivé de Z_TETARD lui même dérivé de YES4SQL, voici ZTOAD, mon requêteur SQL. Il permet de faire vos propres requêtes multi-tables, ou de copier coller celle du programme à débugger.

Les commentaires ABAP sont supprimés avant exécution, les alias de table sont compris, les requêtes sont mémorisées pour réutilisation (jusqu'à 99 requêtes).

ZTOAD nouveau se présente sous la forme d'une transaction à écran unique :

  • A gauche vos requêtes sauvegardées et votre historique de requête exécutées.
  • Au milieu votre éditeur de requête, qui accepte toute forme de select, mais également insert, delete, update...
  • A droite un explorateur de DDIC qui vous affiche les champs des tables présentes dans votre requête.
  • Et en bas une grille ALV affichant les résultats de la requête exécutée
  • Une gestion d'opnglet vous permet de lancer plusieurs requêtes

L'aide ABAP est disponible lors de la saisie de requête, ainsi que l'aide intégrée du programme. Vous pouvez saisir plusieurs requêtes et choisir celle a exécuter sans avoir a effacer les autres. Vous pouvez partager vos requêtes avec les autres utilisateurs.

A noter : vous pouvez définir finement les autorisations par utilisateur pour chaque type de requête (SELECT, INSERT, UPDATE, DELETE). A la manière initiée dans ZAL11, cette gestion est simple et accessible au début du programme : Vous pouvez désactiver certaines commandes en quelques secondes sans avoir à comprendre les méandres du code.

Cette nouvelle version utilise une table pour stocker les requêtes, il faudra donc utiliser l'extension SAPLINK de gestion de tables pour pouvoir l'installer.

Télécharger ZTOAD - version pour SAP 4.6 n'est plus mis à jour

A noter : n’oubliez pas que vous aurez besoin de SAPLINK et son extension de gestion de table pour installer le programme.

Fonction RV_CALL_DISPLAY_TRANSACTION

Rédigé par Sébastien Hermann dans Fonction - 1 commentaire

Petit focus sur une fonction "magique" de SAP.

RV_CALL_DISPLAY_TRANSACTION permet d'ouvrir en mode transactionnel tout type (ou presque) de documents SD/MM dans SAP.

function rv_call_display_transaction.
*"----------------------------------------------------------------------
*"*"Globale Schnittstelle:
*"       IMPORTING
*"             VALUE(BUKRS) DEFAULT '    '
*"             VALUE(FCODE) DEFAULT '    '
*"             VALUE(GJAHR) DEFAULT '0000'
*"             VALUE(LGNUM) LIKE  VBFA-LGNUM DEFAULT '   '
*"             VALUE(POSNR) LIKE  VBAP-POSNR DEFAULT '000000'
*"             VALUE(VBELN) LIKE  VBUK-VBELN
*"             VALUE(AUFNR) LIKE  VBAK-AUFNR OPTIONAL
*"             VALUE(VBTYP) LIKE  VBUK-VBTYP DEFAULT ' '
*"             VALUE(FI_APPLI) LIKE  VBFAL-APPLI DEFAULT '  '
*"----------------------------------------------------------------------

Il suffit de renseigner le numéro de document (VBELN) pour ouvrir commande, contrat, livraison sortante ou facture. Mieux, ajouter le numéro de poste (POSNR) et le document ouvert arrive directement sur ce poste.

Mais ce n'est pas tout. Si vous spécifiez le type de document (VBTYP), vous pouvez ouvrir une multitude d'autres documents. Voici un petit tableau des transactions gérées par cette fonction :

VBTYPTransactionDocumentChamps pris en compte
1VC03, VC02ContactVBELN
3 ou 4VF23, VF22Liste de facturesVBELN
5, 6, M, N, O, P, S, UVF03, VF02FactureVBELN POSNR
7VL33N, VL32NLivraison entranteVBELN
8VT03N, VT02NTransportVBELN
AVA13, VA12Demande d'offreVBELN POSNR
BVA23, VA22OffreVBELN POSNR
C, H, I, K, LVA03, VA02CommandeVBELN POSNR
DVA53, VA52PropositionVBELN POSNR
E, FVA33, VA32Programme de livraisonVBELN POSNR
F, G, 0VA43, VA42ContratVBELN POSNR
QLT21Ordre de transfertVBELN LGNUM
R, h, iMB03, MB02Doc articleVBELN
J, TVL03N, VL02NLivraison sortanteVBELN POSNR
VME23N, ME33, ME43, ME53N, ML81N, ME22, ME32K, ME32L, ME42, ME52Document achat (demande, commande, VBELN
vME53NDemande d'achatVBELN
WMD83, MD82Plan de besoinVBELN POSNR
Xfct HU_DISPLAY (?)Unité de manutentionVBELN
&LX44Document magasinVBELN LGNUM
aVI03Frais de transportVBELN
YVB03Liste d'exclusionVBELN
.IW33OrdreAUFNR
:IQS3AvisAUFNR
1 et FI_APPLI=MMMB03Doc articleVBELN (comme doc article)+GJAHR+BUKRS
2, 3 et FI_APPLI=MMFB03Piece comptableVBELN (comme doc article)+GJAHR+BUKRS
A et FI_APPLI=MMMIR4Doc de facturationVBELN (comme doc article)+GJAHR
vide et BUKRS renseignéFB02Piece comptableVBELN (comme doc article)+GJAHR+BUKRS

Légende : Document accessible sans indiquer de VBTYP
Uniquement pour la fonction DISPLAY
Uniquement pour la fonction CHANGE

Vous pouvez utiliser RV_CALL_CHANGE_TRANSACTION pour ouvrir en modification les mêmes documents.
Ces fonctions sont très utilisées par le standard pour afficher des documents.
A noter, les USEREXIT de LV06AFZZ sont utilisés.

ZSPRO : La boite à outils

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

Lors de l'implémentation d'une solution SAP, il n'est pas rare de devoir écrire des programmes spécifiques. Les bonnes pratiques recommandant de ne jamais écrire de code "en dur", il est fréquent de créer des tables Z... pour piloter ces programmes.

Au fil du temps, il y a de plus en plus de programmes spécifiques, et de plus en plus de tables pour les piloter. Lors du projet d'implémentation en lui même, cela pose rarement de problèmes, l'équipe ayant bien en tête l'ensemble des développements (enfin, sauf dans le cas d'un très gros projet ou d'un offshore).

Mais après le passage en maintenance, ou après avoir subit du turnover sur le projet, il devient difficile d'appréhender l'ensemble de ces spécifiques et il n'est pas rare de perdre des jours à rechercher comment modifier tel spécifique (voir d'en créer un nouveau !) alors que celui livré initialement pouvait gérer l'évolution grâce a sa table de pilotage...

Voila pourquoi il est intéressant d'avoir une transaction ZSPRO. Cette dernière permet de centraliser l'ensemble des tables spécifiques du système. La documentation de chacune apparait clairement, permettant au consultant fonctionnel d'avoir un aperçu de toutes les possibilités offertes par les spécifiques en place.

L'organisation des dossiers et des tables est réalisée directement au sein de la transaction ZSPRO (en mode édition). Un outil de recherche est disponible, ainsi qu'un outil d'import de tables en masse.

Techniquement, cette transaction utilise plusieurs objets SAP standards (container, spliter, tree, html view)

ZSPRO a un peu évolué depuis sa version initiale. Il gère désormais les programmes, les modules fonctions, les urls et les activités IMG en plus des tables et peut donc servir de boite à outils IT (arborescence de programmes techniques / utilitaires)

Télécharger ZSPRO - compatible 4.6c (n'est plus à jour, installation manuelle)

A noter : n’oubliez pas que vous aurez besoin de SAPLINK et son extension de gestion de table pour installer le programme.

Mots clés : aucun

Reprise de données SAP Standard

Rédigé par Sébastien Hermann dans Liste mémo - aucun commentaire

Voici une petite liste de programmes standards de reprise de données.

Solution Business Object Prog/Transaction Code
Financial Acounting Accounting Documents RFBIBL00
Financial Acounting Assets RAALTD01 (Batch Input)
Financial Acounting RAALTD11 (Direct Input)
Financial Acounting G/L Account Master RFBISA00
Financial Acounting Customer Master RFBIDE00
Financial Acounting Vendor Master RFBIKR00
FI-Bank Data Transfer of Bank Data
FI-Bank Data (Austria) RFBVAT_0
FI-Bank Data (German) RFBVD__2
FI-Bank Data (Great Britain) RFBVGB_0
FI-Bank Data (Italian) RFBVIT_0
FI-Bank Data (Spanish) RFBVES_0
FI-Bank Data (Swiss) RFBVCH_0
Human Resources Master Data (Org. Units) RPUSTD00
Human Resources Payroll Account RPULKT00
Human Resources Personal Planning Data RHALTD00
Materials Management Create Characteristics RCCTBI01
Materials Management Create Classes RCCLBI01
Materials Management Create Classification RCCLBI02
Materials Management Change Classification RCCLRI03
Materials Management Material Master RMDATIND
Materials Management Purchase Info. Records RM06IBI0
Materials Management Purchase Requisitions RM06BBI0
Materials Management Reservations RM07RRES
Materials Management Stocks (Inventory Mgmt) RM07MMBL
Materials Management Vendor Master RFBIKR00
MM (Physical Inventory Doc) Create PID For Cycle Counting RM07ICN1
MM (Physical Inventory Doc) Create PID For Sales Order RM07IE31
MM (Physical Inventory Doc) Create PID For Standard Stock RM07II31
MM (Physical Inventory Doc) Block Material for Phys. Inv. RM07II32
MM (Physical Inventory Doc) Block Material for Phys. Inv. RM07II37
MM (Physical Inventory Doc) Create PID vendor consignmnt RM07IK31
MM (Physical Inventory Doc) Cre. PID ret. transp. packaging RM07IM31
MM (Physical Inventory Doc) Cre. PID Mat. Prov. to Vendor RM07IO31
MM (Physical Inventory Doc) Create PID for project RM07IQ31
MM (Physical Inventory Doc) Cre. PID ret. packaging at cust RM07IV31
MM (Physical Inventory Doc) Cre. PID consignment at cust. RM07IW31
MM (Physical Inventory Doc) Inventory Sampling RM07SVOR
Materials Management (EH & S) Phrases CG31
Materials Management (EH & S) Sources CG32
Materials Management (EH & S) Substances CG33
Plant Maintenance Measuring Point RIIBIP00/IBIP
Plant Maintenance Measurement Document RIIBIP00/IBIP
Plant Maintenance Notifications-General RIIBIP00/IBIP
Plant Maintenance Functional Location RIIBIP00/IBIP
Plant Maintenance Object Link RIIBIP00/IBIP
Plant Maintenance Equipment RIIBIP00/IBIP
Plant Maintenance Maintenance Plan RIIBIP00/IBIP
Plant Maintenance Scheduling Maintenance Plan RIIBIP00/IBIP
Plant Maintenance Order Confirmation RIIBIP00/IBIP
Plant Maintenance Equipment Task List RIIBIP00/IBIP
Plant Maintenance General Maintenance Task List RIIBIP00/IBIP
Plant Maintenance Functional Location Task List RIIBIP00/IBIP
Production Master Data Create BOM RCSBI010 (Batch Input)
Production Master Data Change BOM RCSBI020 (Batch Input)
Production Master Data Create Variant BOM RCSBI030 (Batch Input)
Production Master Data Create BOM With Long Text RCSBI040 (Batch Input)
Production Master Data Routing / Task Lists RCPTRA01 (Batch Input)
Production Planning Demand Management RMMM60BI (Bacth Input)
Production Planning RM60IN00 (Direct Input)
SAP-EIS Several Records for SAP-EIS RKCFILE0
Sales and Distribution Condition Records (Pricing) RV14BTC1
Sales and Distribution Customer Master RFBIDE00
Sales and Distribution Open Sales Orders RVINVB00
Sales and Distribution Invoice External Transactions RVAFSS00
Warehouse Management Storage Bins RLPLAT00
Warehouse Management Stocks on Storage Bins RLBEST00

Conserver ses programmes ABAP

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

Etant prestataire de service, je suis amené régulièrement à changer de client. Cela présente certains avantages mais aussi des inconvénients. Et parmi eux celui de "perdre" toutes ses réalisations.

Afin de capitaliser mon temps passé à rechercher des fonctions standards cachées, à réaliser des algorithmes tordus hyper optimisés ou à réinventer la roue, j'essaie de conserver mes codes sources.

Au fil des ans et des versions de SAP, j'ai utilisé différents programmes pour le faire car chacun devenait incompatible avec la version de SAP suivante (4.5/4.6, 4.7, ECCx...)

Récemment j'ai découvert SAPLink, un programme ABAP "open source" pour essayer de standardiser cette opération. Ce programme est très bien fait, est ouvert aux "plugins" pour en étendre les fonctionnalités, et possède l'énorme avantage de permettre d'uniformiser les échanges de programmes entre développeurs via un format de fichier commun.

L'installation se fait en 2 temps. Il y a un programme temporaire (zsaplink_installer) dont le seul usage est de charger le .nugg (format de fichier utilisé par saplink) afin d'installer complètement Saplink.

Sur leur site ils se définissent comme : "an open source project that aims to make it easier to share ABAP developments between programmers. It provides the ability to easily distribute and package custom objects."

J'ai décidé de l'utiliser et de proposer ici mes réalisations sous ce format, que je pense pérenne.
Malheureusement, SAPLink ne fonctionne qu'a partir de SAP 4.7
Aussi pour les codes compatibles 4.6, j'utiliserai le programme ZAPC0007. Bien que moins abouti, il permettra néanmoins de passer l'essentiel des éléments d'un programme. Seul le ddic restera à recréer manuellement.

SAPLINK évolue avec le temps et perd malheureusement sa compatibilité avec les vieilles versions de SAP. Les déménagements successifs du projet ont rendu compliqué l'accès aux différentes versions aussi je vais proposer sur mon site le téléchargement des principales versions exploitées.

Si la dernière version stable proposée ne fonctionne pas, voici de plus anciennes versions :

Sans oublier l'extension de gestion de tables indispensable pour certains de mes applications.