IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AS/400 Discussion :

SQLRPGLE et PRTF


Sujet :

AS/400

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut SQLRPGLE et PRTF
    Bonjour à tous j'aurais aimé savoir comment envoyer des variables vers un fichier PRTF depuis un programme en SQLRPGLE ?
    Merci de vos réponses !

    R4ndy

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    C'est du même tonneau que pour un fichier écran (DSPF). Tu définis ta ou tes pages sous PDM + RLU (option 19) ou WDSc et tu définis "à l'intérieur" les constantes et variables à y insérer.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Salut,
    Donc je fais un WRITE vers mon PRTF et ça devrai passer ?

    R4ndy.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Oui, un WRITE du format.
    Si tu utilises RLU (Report Layout Utility), tu peux le démarrer par STRRLU comme tu démarrerais SDA avec STRSDA.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Salut,
    J'utilise CODE400
    Je laisse ce topic ouvert en attendant d'autres petits problèmes.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 123
    Points : 146
    Points
    146
    Par défaut
    Bjr,

    La question est trop vaste pour donner une réponse réellement utile.
    Seul un minimum de formation pourra t'aider (ou alors te plonger pendant des jours dans les docs IBM).
    AMHA

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Salut tout le monde !
    Je remet ce topic d'actualité puisque j'ai, à ce jour, quelques petits problèmes.

    J'ai un programme en SQLRPGLE qui récupère des données les stocke dans une nouvelle bases de données.
    Jusque là tout va bien.
    Par la suite j'aimerais récupérer les données stockées, et les envoyer vers un PRTF.
    Je procède comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FPRTF  O    E             PRINTER  
    (...)
    Requête SQL qui me récupère la valeur VAR1, et on l'attribue à la variable présente dans mon PRTF
    
    Eval $VAR1 = VAR1;
    WRITE $VAR1;
    Bien ou pas ?!

    Voilà pour une première chose.

    Ensuite, j'ai mon prtf qui se présente comme ceci :
    $HAUTDEPAGE
    $VAR1
    $VAR2
    ...
    $DETAILS
    $VAR5
    $VAR6
    ...
    $DETAILS
    $VAR5
    $VAR6
    ...
    $BASDEPAGE
    $VAR3
    $VAR4
    ...
    Le "haut et le bas de page" seront toujours présents.
    Le "Détail" pourra apparaître au moins une fois. Dans les 2 "$DETAIL", les variables $VAR5 et $VAR6 sont identiques (même définition), cependant d'un "$DETAIL" à l'autre la valeur des variables diffère (puisque la requête récupère un élément différent).

    Est ce que vous auriez une idée de comment je pourrai faire apparaitre "$DETAIL" plusieurs fois d'affilée avec des valeurs de variables changeantes ?!
    Je vous montre une ébauche de ce à quoi j'avais pensé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Eval X = 0;
    Eval Y = 1;
    
    DOW X<>10
    Exec sql Select VAR5, VAR6 into :VAR5, :VAR6
                           From TABLE1
                           Where VAR10 = X AND VAR11 = Y;
    
    Eval $VAR5 = VAR5;
    Eval $VAR6 = VAR6;
    
    WRITE $VAR5;
    WRITE $VAR6;
    
    Eval X = X+1;
    
    ENDDO;
    Des idées ?! Suis-je sur la bonne voie ?

    Si je n'ai pas été assez clair faites le moi savoir j'essayerai de vous ré-expliquer ça le plus clairement possible.

    R4ndy

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 123
    Points : 146
    Points
    146
    Par défaut
    Bonjour,

    Sur le principe général c'est pas mal, mais il y a deux petites choses à préciser :
    - L'écriture des PRTF se fait par format (une ou plusieurs lignes) et non pas zone à zone.
    - D'une manière générale, sur l'AS400 (et ses prédécesseurs 32 34 36 38...) la gestion des fins de page ne se fait pas par comptage des lignes. Un mécanisme gère ça automatiquement.

    Donc pour le PRTF, les DDS décrivent des formats avec des constantes et des variables. Dans ton cas il y aura 3 formats.
    Lors de la création du PRTF (CRTPRTF) il y a des paramètres donnant le nombre de colonnes (défaut 132, max 254 en externe) et le nombre de lignes par page (défaut 66, mais pour du A4 il vaut mieux mettre 72) Ces valeurs dépendent de la police, des CPI (Characters Per Inch) LPI (Lines Per Inch) ...
    Mais il y a un autre paramètre très important : OVRFLW (Numéro de ligne de fin de page). Par défaut à 60, sa valeur doit être inférieure ou égale au nombre de ligne par page.
    Ainsi lorsque l'on écrit des lignes dans le PRTF, nous serons informé lorsque la ligne d'overflow sera franchie
    Pas besoin donc de compter les lignes, il faut juste règler la "marge" de bas de page avec ce n° de ligne d'overflow de manière à nous laisser la place d'écrire le bas de page.

    En RPG IV l'information d'OverFlow est récupérée par un indicateur spécifié dans la spec F, mot clé OFLIND:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FPRTF  O    E             PRINTER     OFLIND(*IN33)
    Ensuite, donc l'on écrit le format après alimentation des zones de ce format.

    Je reprends ton exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Eval X = 0;
    Eval Y = 1;
    *IN33 = *ON;  // On force la première en-tête
    DOW X<>10
    Exec sql Select VAR5, VAR6 into :VAR5, :VAR6
                           From TABLE1
                           Where VAR10 = X AND VAR11 = Y;
    
    Eval $VAR5 = VAR5;
    Eval $VAR6 = VAR6;
    IF *IN33;
       WRITE $HAUTDEPAGE;  // Impression en tête
       *IN33 = *OFF;
    EndIf; 
    WRITE $DETAILS; // Ligne détail
    IF *IN33;
       WRITE $BASDEPAGE; // Impression pied
    EndIf; 
    
    Eval X = X+1;
    
    ENDDO;
    En général la boucle se fait jusqu'à EOF

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Même si ça a un aspect "vieillerie", le cycle GAP (RPG) est tout indiqué pour gérer ce genre de traitement. Tu n'as pas besoin de SQL.

    Tu ferais bien de :
    • laisser tomber les spécifs O et définir ton printer file en externe (DDS)
    • d'employer le cycle pour faire automatiquement avancer ton fichier de données et tester les niveaux de contrôle (L1, L2, etc)

    Tu apprendrais ainsi probablement à utiliser intelligemment le cycle que t'offre RPG et à créer les printer files en externe.

    Remarque
    Si ça se trouve, un simple Query/400 pourrait faire l'affaire et t'éviter de créer un prtf et un programme d'édition.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Merci pour vos réponses.

    @jump400 : je check tout ce que tu m'a donné comme info, et je teste ça dès que je suis au boulot

    @Mercure : j'ai déjà créé mon programme (en partie) et mon prtf, il me faut juste le remplir avec les variables, et l'imprimer (sur imprimante) donc je ne vais pas tout recommencer...
    Si ?!

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Citation Envoyé par R4ndy
    je ne vais pas tout recommencer...
    A ton avis, qui est le plus fort, l'envie d'apprendre ou bricoler ?

  12. #12
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,
    ma petite pierre à l'édifice.

    Le cycle RPG : Beurk.
    Aucune lisibilité.

    Moi je te recommande de programmer en format variable ce qui devrait se rapprocher d'un autre langage récent, si tu en connais un.

    Mais c'est juste mon avis.

    Sorry Mercure pour cet avis à rebrousse poil, mais bon j'ai quelques millier de lignes de RPG3 et IV à mon actif, et quand tu programmes par exemple en VBA en en RPG III avec le cycle, c'est je trouve pour pêter une case.

    Mais il est vrai qu'avec le cycle le code est "vachement plus court".

    Bonne soirée.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    A mon tour d'être désolé pour toi, mais ce que vais dire est malheureusement un fait.

    La plupart du temps, pour ne pas dire à tous les coups, ceux qui critiquent négativement le cycle RPG sont les mêmes que ceux qui n'y ont rien compris. Il faut faire un petit effort pour le comprendre et puis aussi il fait peur. Du coup, on dit "c'est obsolète, c'est une vieillerie" et on utilise son incompréhension comme un bouclier de protection.

    Qu'on me dise que c'est une usine-à-gaz d'utiliser le rapprochement de fichiers dans le cycle (vous savez, l'indicateur MR), je serai totalement d'accord avec vous. En revanche, je trouve qu'il n'y a pas photo quand on utilise le cycle de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    IMyRecord                                                                                      
    I                                          KeyField1     L4                                    
    I                                          KeyField2     L2 
    C   L4              Exsr      L4Init                                                           
    C   L2              Exsr      L2Init                                                           
    C                   Exsr      ProcRcd                                                          
    CL2                 Exsr      L2Tots                                                           
    CL4                 Exsr      L4Tots                                                           
    CLR                 Exsr      LRTots                                                           
     **********************************************************************************************
     /FREE                                                                                         
      //*******************************************************************************************
      BegSR L4Init;                                                                                
      //-------------------------------------------------------------------------------------------
                                                                                                   
      ETC
    J'utilise le format colonné du RPG pour appeler mes sous-routines qui sont le coeur du programme. J'utilise les niveaux de contrôle (L2, L4, ...) qui me permettent d'insérer également des breaks supplémentaires si besoin. Une fois que les sous-routines sont fixées dans le cycle, je passe en format libre (free) pour les écrire.

    Quoi de plus simple ? Vaut-il mieux réinventer la roue ?

    Il y a peu, j'ai réduit à 20 lignes, je dis bien 20 lignes, un programme qui en faisait 300 ! Il lisait explicitement le fichier depuis le début (*LOVAL SETLL) et générait les niveaux de contrôle au fur et à mesure de son avancement. J'ai récrit ce programme en mettant le fichier en Input Primaire (IP) et en utilisant les indicateurs Ln. 20 lignes, c'est autrement plus facile à maintenir que 300 !

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Donc j'ai modifié mon SQLRPGLE pour faire simplement apparaitre le haut de page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FPSDPRINT  O    E
    (...)
    WRITE $HAUT;
    et lors de la compilation j'ai une erreur :
    Définition externe du fichier PSDPRINT non trouvée.
    J'ai cherché...mais je n'ai pas trouvé mon erreur

  15. #15
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    R4ndy
    Définition externe du fichier PSDPRINT non trouvée.
    Cela veut dire que le compilateur ne trouve pas ton fichier externe car il n'est pas dans la library list et il n'y a pas non plus d'override dessus (si tu compiles en interactif).

    Trouve la libraie de ton fichier et fait un ADDLIBLE de cette librairie avant de compiler.

    Attention, à l'exécution le même problème pourrait se poser.

    Mercure
    La plupart du temps, pour ne pas dire à tous les coups, ceux qui critiquent négativement le cycle RPG sont les mêmes que ceux qui n'y ont rien compris. Il faut faire un petit effort pour le comprendre et puis aussi il fait peur. Du coup, on dit "c'est obsolète, c'est une vieillerie" et on utilise son incompréhension comme un bouclier de protection.
    Je ne suis pas de cette catégorie, mais je ne suis pas fan. Il est vrai que pour certains traitements batchs de flux logiques, il n'y a pas plus court. Mais pour tous les autres cas, c'est inutile.
    C'est vrai que le court, c'est beau et apparement facile.
    Moi par gout je préfère une structre visuelle dans mon code, quitte à devoir réinventer la roue.
    Si tu travailles avec des squellettes de programmes standard, pas de soucis de ce côté.
    L'avantage que j'y trouve est une constance dans l'aspect visuels des programmes ainsi qu'un accès en lecture plus aisé pour quelqu'un qui ne connait rien au RPG. Donc, à mon sens plus portable, si une telle gageure existe.
    Autre aspect, peut-être banal: si tu fais au quotidien du RPG en cycle, pas de soucis. Si tu développes sur toutes les plateformes, et que tu y reviens rarement, bonjour la galère.

    Mais il est vrai que la puissance du RPG en cycle à côté d'une usine à gaz JAVA pour faire exactement la même chose, est totallement indéniable.

    Bonne journée.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Salut,
    J'ai ajouté ma Lib aux LIBL, ça ne change rien.
    Le PRTF et le RPG sont pourtant dans la meme Lib...

    Pour l'override je n'ai pas trop compris... comment puis je faire ?!

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Salut,
    Ce que tu me dis Fabrice_44 est un peu flou... je vais essayer de faire ce que tu me dis avec OVRDBF, cependant, peux tu m'éclaircir un peu les idées stp ?!
    Bibliothèque en ligne ? quoi que c'est ?!

    Merci

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Ah, c'est la LIBL. C'est ton terme bibliothèque en ligne qui me dérangeait.

    - soit ton fichier imprimante n'existe pas sous le même nom que celui utilisé dans ton programme et dans ce cas il faut utiliser la commande override pour le créer temporairement,
    - soit le fichier existe mais il n'est pas en ligne, c'est à dire que le job de compilation ne le trouve pas dans la liste de bibliothèque qu'on lui a donné et dans ce cas il faut ajouter la bibliothèque concernée dans la liste
    Le fichier imprimante existe. Il est créé et compilé. J'ai re-vérifier les noms dans mon SQLRPGLE et tout est bon.
    Le PRTF et le SQLRPGLE sont dans la même Lib, et cette Lib est dans la LibL.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Fabrice_44 Voir le message
    Tu compiles en interactif ou en batch ?

    Quand tu dis que la bibliothèque est dans la liste des bibliothèques, peux-tu préciser de quelle liste tu parles (valeurs système, liste de bibliothèque de ton job ...)
    Je compile en Batch (option 14 de PDM)

    J'ai fait comme Godzestla me l'a conseillé, c'est à dire un ADDLIBLE de ma Lib (en *first en plus).

    Edit : Bon je poste les principales parties de mon prtf.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
         A                                      REF(QGPL/QINVREC INVREC)
         A          R $HAUT
         A                                     1' _________________________________-
         A                                      ___________________________________-
         A                                      ___________________________________-
         A                                      ___________________________'
         A                                      SPACEA(1)
         
    (...)
    
         A            $PSDPEXP      25A  O    +0TEXT('BLABLABLA')
         A                                   106'!'
    
    (...)
    
         A          R $DETAIL
         A                                  1  1'!'
         A                                  1  8'BLALBLABLA '
    
    (...)
    
         A            $PSDNOBL      30A  O  4  3TEXT('BLABLABLA')
         A                                  3 34'!'
         A                                  3 59'!'
    
    (...)
    
         A          R $DESI
         A                                  1  1'!'
         A            $PSDDESF     100A  O  2 17TEXT('BLABLABLA')
    
    (...)
    
         A          R $BAS
         A                                      SPACEB(1)
         A                                     1'!_________________________________-
         A                                      ___________________________________-
         A                                      ___________________________________-
         A                                      ___________________________!'
         A                                      SPACEA(1)
    
    (...)
    Vous en pensez quoi ?! Une erreur quelque part ?

  20. #20
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    @Fabrice,
    C'est bien dans la JOBD de soumission qu'il faut effectivement ajouter la bibliothèque en question puisque R4ndy compile en batch.

    @R4ndy,
    Va sous PDM dans la gestion des membres et fais F18.
    Relève le nom de la JOBD de soumission et,avec la commande CHGJOBD, ajoutes-y la bibliothèque en question au niveau du mot clé INLLIBL puis recompile.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Option de compilation PRTF
    Par Arrnno dans le forum AS/400
    Réponses: 10
    Dernier message: 04/09/2008, 20h42
  2. Problème agrandissement police PRTF
    Par POP70 dans le forum AS/400
    Réponses: 4
    Dernier message: 26/08/2008, 12h04
  3. Recompilation paramétrée de PRTF
    Par Green Hornet dans le forum AS/400
    Réponses: 7
    Dernier message: 20/08/2008, 00h44
  4. [AS400-SQLRPGLE] Insert avec des variables ?
    Par axine dans le forum DB2
    Réponses: 4
    Dernier message: 21/12/2006, 17h43
  5. Réponses: 2
    Dernier message: 20/12/2006, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo