Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Reports
Reports Forum d'entraide sur Oracle Reports
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2007, 13h35   #1
Membre du Club
 
Inscription : février 2004
Messages : 116
Détails du profil
Informations personnelles :
Localisation : France, Maine et Loire (Pays de la Loire)

Informations forums :
Inscription : février 2004
Messages : 116
Points : 56
Points : 56
Par défaut [Report 6i] Edition Etiquettes

Bonjour

J'ai une table qui contient une commande dans un article et une quantité commandée.

Exemple : 2 thuya ou 2 rosiers.

Voici mon problème, je dois éditer en report autant d'etquettes qu'il y a de plantes commandées. Dons l'exemple je dois sortir 2 etiquettes de Thuya et 2 de rosiers. Mais pour report il n'y a que 2 lignes d'articles donc il va sortir seulement une seule etiquette de chaque.
que la quantitée commandée. Ou bien dans une vue d'éclater les lignes pour avoir 4 lignes de 1 article ??

Attention, toutes les plantes doivent sortir a la suite pas sur des feuilles différentes.

J'espère avoir été assez clair. Ce n'est pas facile à expliquer.

Merci d'avance.
gaultier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 21h23   #2
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

Partie plqsql
Essaie cette solution avec pipe row, je l'ai testé avec la 10g
Code :
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
 
--  package refcur_pkg  me permet de dupliquer le record selon la quantité
 
CREATE OR REPLACE PACKAGE refcur_pkg IS
TYPE refcur_t IS REF CURSOR RETURN commande%ROWTYPE;
TYPE outrec_typ IS RECORD (
article varchar2(50),
quantite number);
TYPE outrecset IS TABLE OF outrec_typ;
FUNCTION duplicate_row_table(p_article IN varchar2 ,p_quantite IN NUMBER)
RETURN outrecset PIPELINED;
END refcur_pkg;
 
 
CREATE OR REPLACE PACKAGE BODY refcur_pkg IS
FUNCTION duplicate_row_table(p_article IN varchar2 ,p_quantite IN NUMBER)
RETURN outrecset PIPELINED IS
--out_rec outrec_typ;
BEGIN
FOR out_rec  IN ( SELECT * FROM commande WHERE article=p_article )
loop
FOR i IN 1 .. p_quantite-1 LOOP
        PIPE ROW(out_rec);
   END LOOP;
end LOOP;
RETURN;
END;
END refcur_pkg;
/

Partie reports:
Dans le rapport il faut créer deux requetes:

La première:
Code :
1
2
3
 
SELECT article art1, quantite qte_p
  FROM commande
La deuxième ( sert à récupérer les records manquants)
Code :
1
2
 
SELECT *  FROM TABLE(refcur_pkg.duplicate_row_table(:art1,:qte_p))
Après tu relies les deux requetes par le numero d'article.

Voici une capture d'ecran de mon modèle de données
duplicate.png
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 08h47   #3
Membre du Club
 
Inscription : février 2004
Messages : 116
Détails du profil
Informations personnelles :
Localisation : France, Maine et Loire (Pays de la Loire)

Informations forums :
Inscription : février 2004
Messages : 116
Points : 56
Points : 56
Bonjour,

Merci pour cette réponse, il faut que j'ouvre grand mon esprit pour comprendre. Je vais tester tout ca.

Précision je travaille sur une base 8.1.7 et bientot sur 9.2.0.4.
gaultier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 09h22   #4
Membre du Club
 
Inscription : février 2004
Messages : 116
Détails du profil
Informations personnelles :
Localisation : France, Maine et Loire (Pays de la Loire)

Informations forums :
Inscription : février 2004
Messages : 116
Points : 56
Points : 56
Lorsque je compile ton script package, il me donne l'erreur suivante :

Code :
1
2
3
4
5
6
LINE/COL ERROR
-------- -----------------------------------------------------------------
8/18     PLS-00103: Encountered the symbol "PIPELINED" when expecting one
         of the following:
         . @ % ; IS authid deterministic parallel_enable AS character
         The symbol "." was substituted FOR "PIPELINED" TO continue.
Je rappelle je travaille sur une base 8.1.7
gaultier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 15h15   #5
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
salut,

Ma solution fonctionne à partir de la version 9i.

Tu vois que c'est important de spécifier la version de tes outils.
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 09h54   #6
Membre du Club
 
Inscription : février 2004
Messages : 116
Détails du profil
Informations personnelles :
Localisation : France, Maine et Loire (Pays de la Loire)

Informations forums :
Inscription : février 2004
Messages : 116
Points : 56
Points : 56
Bonjour,

Désolé de t'avoir fait chercher, mais pas pour rien car la migration de V8 et V9 est prevu en Septembre.
Donc je garde ta solution sous le coude

En oracle V8, il n'existe pas de solution à mon problème !!!
gaultier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 10h11   #7
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Sinon, faut avoir une table de paramètre qui contient le nb de ligne voulu.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 12h37   #8
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Ou passer par une procédure stockée qui insère dans une table temporaire le nb de lignes voulues.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 13h42   #9
Membre du Club
 
Inscription : février 2004
Messages : 116
Détails du profil
Informations personnelles :
Localisation : France, Maine et Loire (Pays de la Loire)

Informations forums :
Inscription : février 2004
Messages : 116
Points : 56
Points : 56
Merci de vos conseils, je vais chercher du côté d'une procédure stockée.

Je vous tiendrais au courant des avancées.
gaultier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2007, 09h29   #10
Membre du Club
 
Inscription : février 2004
Messages : 116
Détails du profil
Informations personnelles :
Localisation : France, Maine et Loire (Pays de la Loire)

Informations forums :
Inscription : février 2004
Messages : 116
Points : 56
Points : 56
Bonjour à tous

Voici les dernières nouvelles de mon problème. J'ai suivi le conseil de PlaineR.

J'ai créé un table temporaire table_etiquette et une procédure stockée qui lit les lignes de la table commande et insert dans la table table_etiquette, une ligne pour une etiquette.
J'utilise un curseur pour les lignes de la table commande et une boucle for de 1 à quantité commandée, on créé une ligne pour une etiquette

Je lance cette procédure stockée dans le trigger AFTER PARAMETER FORM de report (car le user saisi la cde à imprimer) et je détruis les lignes créées avec le trigger AFTER REPORT.

Cette solution est du bidouillage. Mais ca fonctionne c'est le principal.

Merci à tous pour votre aide.
gaultier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h51.


 
 
 
 
Partenaires

Hébergement Web