OPALE
Utilisation de la commande MAPSORTPAG et MAPQUALSPL
Sommaire
Introduction
Les commandes MAPSORTPAG et MAPQUALSPL permettent de trier, éclater et qualifier avec des codes OMR et numéro de page un fichier spool.
Principe de fonctionnement
Le principe est la mise en base d'un ou plusieurs fichiers spools afin d'en générer un autre à partir de ceux mis en base. Le ou les fichiers spool résultants peuvent être triés, éclatés ou qualifier avec les numéros de page ainsi que les code OMR de mise sous pli automatique.
Voici un exemple d'utilisation avec la mise en base de 3 spools différents :
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
La commande MAPQUALSPL va prendre le contenu du fichier physique afin de créer un fichier spool. Dans ce cas le fichier créé s'appellera OUTPUT et sera créé dans l'OUTQ MAPFIL_JDI/JDIEU_OUTQ
MAPQUALSPL NAME(SORTDBFILE) SPLFNAME(OUTPUT) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT)
Quelques mots concernant le fichier physique
Généralités
Le fichier physique temporaire créé peut etre visualisé via des requêtes SQL.
strsql select PRTDTA from LIBSORT/SORTDBFILE
En UCS2
Dans le cas où le paramétrage du serveur est en UCS, alors l'insertion dans le fichier physique se fera en Unicode. Son contenu via sql sera alors pas possible. (l'émulateur 5250 attendant de l'EBCDIC, ne pourra pas afficher des caractères encodés en Unicode)
Pour pouvoir lire son contenu, il faudra l'afficher en HexaDécimale.
select hex(PRTDTA) from LIBSORT/SORTDBFILE
Le contenu ressemblera alors à cela :
746F3A6A64696575406D617070696E6773756974652E636F6D20202020202020202020202020202020202020202020202020202020202020202020202020202020220202020204D617070696E6720537569746520532E412E2020202020202020202020202020202020202020202020202020202020202020202020202020202020202
Explications :
Le résultat est en unicode : 74 représente le "t", 6F le "o" 3A le ":" etc
Les premiers caractères du spool mis en base est donc to:
Plus d'information sur l'encodage des caractères en Unicode : https://ss64.com/ascii.html
Structure du fichier physique
PAGES | CRITERE0 | CRITERE1 | CRITERE2 | CRITERE3 | CRITERE4 | CRITERE5 | CRITERE6 | CRITERE7 | CRITERE8 | CRITERE9 | NUMSPL | NUMPAG | NUMLGN | PRTDTA |
0012601 | 1 | 0 | 0 | (contenu de la 1er ligne de la 1er page du 1er spool) | ||||||||||
0012601 | 1 | 0 | 1 | (contenu de la 2ième ligne de la 1er page du 1er spool) | ||||||||||
… | … | … | … | … | ||||||||||
0012601 | 1 | 1 | 0 | (contenu de la 1er ligne de la 2ième page du 1ère spool) | ||||||||||
0012601 | 1 | 1 | 1 | (contenu de la 2ièmeligne de la 2ième page du 1ère spool) | ||||||||||
… | … | … | … | … | ||||||||||
0012601 | 2 | 0 | 0 | (contenu de la 1er ligne de la 1er page du 2ième spool) | ||||||||||
Spool généré :
1 6111111
Mapping Suite S.A. page 1
FACTURE n° 0012600 du 14/10/99
De 1 à 6 : Le numéro de la page à l’intérieur de la rupture.
De 7 à 12 : Le nombre total de pages à l’intérieur de la rupture.
De 13 à 13 : Le code de rupture. 1 pour la première page de la rupture
2 pour une page de suite dans la rupture
3 pour la dernière page de la rupture
De 14 à 18 : Code de mise sous pli type kern :
Bit de parité. Si la somme des bits de sécurité et d’ejection est paire, alors valeur 1. (dans notre cas, si la somme des bits violet et jaune est paire, alors 1 sinon 0)
Bits de sécurité :
Si modulo 7, valeur décroissante de 7 à 1 (de 111 à 001 en binaire). Cela pour tout le lot de feuille, sans tenir compte des ruptures
8, valeur décroissante de 7 à 0 (de 111 à 000 en binaire)
T, valeur croissante de 1 à 7 (de 001 à 111 en binaire)
R, valeur croissante de 0 à 7 (de 000 à 111 en binaire)
4, valeur décroissante de 3 à 0 (de 11 à 00 en binaire)
F, valeur croissante de 1 à 15 (de 0001 à 1111 en binaire)
De 19 à 19 : Code de fermeture enveloppe. Suivant la machine de mise sous pli, le code se situe sur la première page du paquet ou sur la dernière. Dans la commande MAPQUALSPL, paramétrer la valeur du paramètre « Insert tag on last page » est à O ou Y, alors le code sera sur la dernière page du paquet. Sinon, il sera sur la première page du paquet. (un paquet correspond à une enveloppe soit une facture par exemple)
De 20 à 25 : Le numéro de pli (de rupture) en cours, si demandé (Si BREAKNB=Y)
De 26 à 29 : Le code de sécurité pour le numéro du pli en cours, si demandé (SI BREAKNB=Y)
Effet du BREAKNB = Y
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPQUALSPL NAME(SORTDBFILE) SPLFNAME(OUTPUT) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) BREAKNB(Y) LIB(LIBSORT)
Spool généré :
1 6111111 1 3
Mapping Suite S.A. page 1
FACTURE n° 0012600 du 14/10/99
De 20 à 25 : Le numéro de pli (de rupture) en cours, si demandé (Si BREAKNB=Y)
De 26 à 29 : Le code de sécurité pour le numéro du pli en cours, si demandé (SI BREAKNB=Y)
Effet du QUOTA= 2 (exemple de valeur)
On souhaite éditer un spool avec mise sous pli, mais on a un code client ou plus qui ont trop de pages. La machine de mise sous pli n’arrive pas à mettre plus de 10 pages dans le même pli. Dans ce cas, utilisez la zone quota pour limiter le nombre de pages dans un seul pli.
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPQUALSPL NAME(SORTDBFILE) SPLFNAME(OUTPUT) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) QUOTA(2) LIB(LIBSORT)
Comportement : Cela aura pour effet de changer le bit du code de fermeture enveloppe. Etant donnée que celui-ci vaut 1 à chaque début d'enveloppe, celui-ci vaudra donc 1 pour les page 1, 3, 5 (vu qu'on demande de faire rentrer uniquement 2 pages par enveloppe)
Page 1 : 1 6111111
Page 2 : 2 6211100
Page 3 : 3 6201011
Page 4 : 4 6201000
1 si 1er page du lot
2 si pages du milieu
3 si dernière page
Bit de parité
Bit de sécurité (ici modulo 7)
Bit de première page du pli (enveloppe)
Effet du DUPLEX= Y
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPQUALSPL NAME(SORTDBFILE) SPLFNAME(OUTPUT) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) DUPLEX(Y) LIB(LIBSORT)
Page 1 : 1 1311111
Page 2 : 1 1311111
Page 3 : 1 2101101
Page 4 : 1 2101101
Page 5 : 2 2311010
Page 6 : 2 2311010
Page 7 : 1 2111001
Page 8 : 1 2111001
Page 9 : 2 2310110
Page 10 : 2 2310110
Nous pouvons voir que la séquence retournée par le MAPQUALSPL est la même sur 2 pages consécutives.
Cela est normal vu que la page 2 se situe sur la 1er feuille. Donc les valeurs de la page 1 et 2 sont les mêmes (idem pour 3 et 4, 5 et 6, etc)
Dans notre cas, nous avons
Paramètre INSLAST :
Selon les machines de mise sous pli,,le code de fermeture enveloppe indiquant qu’il faut changer d’enveloppe doit figurer sur la première page du nouveau paquet ou sur la dernière page de l’ancien paquet.
Saisir O ou Y imprimera ce code sur la dernière page du paquet. N l’imprimera sur la première page.
Exemples :
Avec MODULO=7 :
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPQUALSPL NAME(SORTDBFILE) SPLFNAME(OUTPUT) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) SORTPAGE(N) BREAKNB(N) LIB(LIBSORT)
Page | Code retournée par MAPQUALSPL |
1 | 1 2111111 |
2 | 2 2311100 |
RUPTURE DE FACTURE | |
3 | 1 4101011 |
4 | 2 4201000 |
5 | 3 4210110 |
6 | 4 4300100 |
RUPTURE DE FACTURE | |
7 | 1 4110011 |
8 | 2 4201110 |
9 | 3 4211100 |
10 | 4 4311010 |
Avec MODULO=F
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPQUALSPL NAME(SORTDBFILE) SPLFNAME(OUTPUT) OUTQ(JDIEU_OUTQ) OUTQ LIB(MAPFIL_JDI) MODULO(F) SORTPAGE(N) BREAKNB(N) LIB(LIBSORT)
Page | Code retournée par MAPQUALSPL |
1 | 1 21100011 |
2 | 2 23000100 |
RUPTURE DE FACTURE | |
3 | 1 41000111 |
4 | 2 42001000 |
5 | 3 42101010 |
6 | 4 43101100 |
RUPTURE DE FACTURE | |
7 | 1 41101111 |
8 | 2 42010000 |
9 | 3 42110010 |
10 | 4 43110100 |
On peut voir qu'il y a un bit en plus pour le code de sécurité. (avec le modulo=7 on avait 3 bits alors qu'avec le F on en a 4 (pour aller des valeurs 1 à 15)
Dans notre exemple, on va de 1 à 10.
Avec MODULO=7 et MODSEQ=7 :
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPQUALSPL NAME(SORTDBFILE) SPLFNAME(OUTPUT) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) SORTPAGE(N) BREAKNB(N) LIB(LIBSORT) MODSEQ(7)
Page | Ligne ajoutée dans le spool automatiquement par le MAPQUALSPL |
1 | 1 2101111 111 |
2 | 2 2301100 111 |
RUPTURE DE FACTURE | |
3 | 1 4101011 110 |
4 | 2 4201000 110 |
5 | 3 4210110 110 |
6 | 4 4300100 110 |
RUPTURE DE FACTURE | |
7 | 1 4110011 101 |
8 | 2 4201110 101 |
9 | 3 4211100 101 |
10 | 4 4311010 101 |
La valeur de séquence de modulo change à chaque rupture de lot. Dans notre exemple, le MODSEQ=7 génère 3 bits commençant par 15 (111) et décroit à chaque changement de lot (110,etc)
Avec option BREAKNB = Y et MODULO=7 (7 valeur par défaut)
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPQUALSPL NAME(SORTDBFILE) SPLFNAME(OUTPUT) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) SORTPAGE(N) BREAKNB(Y) LIB(LIBSORT)
Page | Code retournée par MAPQUALSPL |
1 | 1 2111111 1 3 |
2 | 2 2311100 1 3 |
RUPTURE DE FACTURE | |
3 | 1 4101011 2 3 |
4 | 2 4201000 2 3 |
5 | 3 4210110 2 3 |
6 | 4 4300100 2 3 |
RUPTURE DE FACTURE | |
7 | 1 4110011 3 3 |
8 | 2 4201110 3 3 |
9 | 3 4211100 3 3 |
10 | 4 4311010 3 3 |
Avec option DUPLEX=Y et MODULO=7 (7 valeur par défaut)
MAPSORTPAG SPLF(SORTPAG1) SPLNUM(000002) JOB(QPADEV000C) JOBNUM(693999) USER(JDIEU) KEYLINE(3) KEYCOL(71) KEYLGN(7) CREATE(*NO) SPLFNAME(MAPSORTPAG) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) LIB(LIBSORT) NAME(SORTDBFILE)
MAPQUALSPL NAME(SORTDBFILE) SPLFNAME(OUTPUT) OUTQ(JDIEU_OUTQ) OUTQLIB(MAPFIL_JDI) SORTPAGE(N) DUPLEX(Y) LIB(LIBSORT)
Page | Code retournée par MAPQUALSPL |
1 | 1 1311111 |
2 | 1 1311111 |
RUPTURE DE FACTURE | |
3 | 1 2101101 |
4 | 1 2101101 |
5 | 2 2311010 |
6 | 2 2311010 |
RUPTURE DE FACTURE | |
7 | 1 2111001 |
8 | 1 2111001 |
9 | 2 2310110 |
10 | 2 2310110 |
Questions en suspens :
MAPSORTPAG :
- NAMFORCTRL : Donner une documentation sur cela. Cela marche comment ?
- A creuser pour savoir les lots créés avec l'option Control Sort = V
- Colonne PAGES toujours vide. Dans quels cas il y a une valeur ? (quand on mets sortcontrol=YES)
- Bug ?
Dans le paramètre ID, indiquez Y ou O pour ajouter le numéro de spool ajouté sur la dernière ligne du spool généré.
Voir si c'est normal qu'un saut de page est généré juste pour l'ID
MAPQUALSPL :
Bug sur le numéro de page en DUPLEX=Y :
Page | Code retournée par MAPQUALSPL |
1 | 1 1311111 |
2 | 1 1311111 |
RUPTURE DE FACTURE | |
3 | 1 2101101 |
4 | 1 2101101 |
5 | 2 2311010 |
6 | 2 2311010 |
RUPTURE DE FACTURE | |
7 | 1 2111001 |
8 | 1 2111001 |
9 | 2 2310110 |
10 | 2 2310110 |
Utilisation des autres paramètres : ????????
Autres paramètres
Nom du fichier spool . . . . . . SPLF
Numéro du fichier spool . . . . SPLNUM
Travail . . . . . . . . . . . . JOB *CURRENT
Numéro de travail . . . . . . . JOBNUM
Nom sur 10 caractères maxi . . . USER *CURRENT