Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Forms
Forms Forum d'entraide sur Oracle Forms
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 22/06/2011, 17h53   #1
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Par défaut Situation en boucle

Bonjour,

j'ai un problème qui me dérange bcp :

j'ai ces tables:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE LIVRAISON
(
  CODE_LIVRAISON integer NOT NULL,
  NUM_COMMANDE   integer NOT NULL,
  DATE_LIVRAISON DATE
)
CREATE TABLE LIV_ART
(
  CODE_LIVRAISON  integer NOT NULL,
  REFERENCE       integer NOT NULL,
  QUANTITE_LIVREE NUMBER,
  QTE_RESTEE             NUMBER
)
Le but est de calculer et mettre à jour la valeur de l'objet QTE_RESTEE, j'ai essayé avec ce code mais toujours je trouve des failles:
au niveau du champ quantité livrée avec le déclencheur key_next_item:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
declare 
	n   number;
	qtr number;
	up  number;
begin
 
SELECT SUM(t.quantite_livree) INTO n
FROM livraison l, liv_art t
WHERE l.num_commande = :livraison.num_commande
AND t.reference = :liv_art.reference
AND l.code_livraison = t.code_livraison;
 
SELECT min(t.qte_restee) INTO qtr
FROM livraison l, liv_art t
WHERE l.num_commande = :livraison.num_commande
AND t.reference = :liv_art.reference
AND l.code_livraison = t.code_livraison;
 
IF n IS NOT NULL then
   up := get_item_property('liv_ART.QUANTITE_livree',DATABASE_VALUE);
   IF :liv_art.quantite_livree > up then
 
      IF (qtr - (:liv_art.quantite_livree - up)) < 0 then
     	    messagebox('  Vous avez dépasser la quantité commandée ');
	    raise form_trigger_failure;
      else
   	      :QRL := qtr - (:liv_art.quantite_livree - up);
   	      next_record;
      end IF;
 
   else
       :QRL := (up - :liv_ART.QUANTITE_LIVREE) + QTR;
       next_record;
 
   IF :liv_art.quantite_livree > qtr then
 
  	    messagebox('  La quantité livrée dépasse la quantité restante !!!!  ');
	    raise form_trigger_failure;
   else 
 
    :QRL := qtr - (:liv_art.quantite_livree) ;
    next_record;
 
   end IF;
   end IF;
 
else 
 
   :QRL := :liv_art.QTECOMM - :liv_art.quantite_livree ;
   next_record;
 
end IF;
end IF;
end;
Ci joint une capture de la forme pour comprendre mon problème.
http://www.developpez.net/forums/att...1&d=1308757761
Merci pour vos propositions.
Images attachées
Type de fichier : png Form.png (11,0 Ko, 24 affichages)
tunis71187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 11h18   #2
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Bonjour,

je ne sais pas si quelqu'un a remarqué le problème dans ce code, j'ai essayé mais toujours je retourne dans le même problème.
tunis71187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 15h38   #3
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Est ce qu'il me faut diviser ce code sur d'autres déclencheurs ?

Je suis bloqué sur cette situation .

Merci pour vos idées.
tunis71187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 10h20   #4
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Bonjour,

Si vous voulez, on suit ce jeu de test:

Article de reference 1, la quantité commandée est 20.
1er cas : 1ère livraison

ref: 1, Qté livrée: 10, Qté commandée: 20, Qté restante: 10

2ème cas : Mise à jour de la première livraison

ref: 1, Qté livrée: 8, Qté commandée: 20, Qté restante: 12

3ème cas: Deuxième livraison

ref: 1, Qté livrée: 8, Qté commandée: 20, Qté restante: 0

Jusqu'à ici ça marche mais

4ème cas: Mise à jour de la deuxième livraison

dans ce cas, suite à la modification de la quantité livrée le résultat pour la quantité restante est incorrecte.

Merci de m'aider à sortir de cette situation.
tunis71187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 11h29   #5
Membre du Club
 
nancy carina
Inscription : décembre 2010
Messages : 34
Détails du profil
Informations personnelles :
Nom : nancy carina

Informations forums :
Inscription : décembre 2010
Messages : 34
Points : 45
Points : 45
bonjour
je vois pas la quantité commandée dans la deuxième table
nancy_carina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2011, 19h42   #6
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Bonjour,

la quantité commandée est extraite d'une autre table (détails d'une commande).

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
CREATE TABLE DET_COMM
(
  NUM_COMM  integer NOT NULL,
  REFERENCE       integer NOT NULL,
  QUANTITE_COMMANDEE NUMBER,
)
CREATE TABLE COMMANDE
(
  NUM_COMM  integer NOT NULL,
  DATE_COMM DATE
)
CREATE TABLE ARTICLE
(
  REFERENCE       integer NOT NULL,
  QUANTITE         NUMBER,
  LIBELLE             VARCHAR2(100)
)
Comme ça la structure est complète.
Merci pour vos propositions.
tunis71187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 13h26   #7
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Bonjour,

La situation est résolue après des tests de code.
OOOOOO c dure.
tunis71187 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 05h44.


 
 
 
 
Partenaires

Hébergement Web