Pas de problème (pb), que du PowerBuilder (PB) ^^

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 14-02-2008 16:09:51

Sebou  
Membre Power Geek
Lieu: Villeneuve-sur-Lot
Date d'inscription: 21-12-2007
Messages: 189
Pépites: 1,787
Banque: 13,693,461,510

[RESOLU] Travail sur data

Bonjour à tous,

Je suis en train actuellement de faire de la compta.

Dans ma datawindow, j'ai un champ 'ecr_cpte' qui correspond donc à un numéro de compte. Il s'agit d'un champ à 6 caractères. Lors de l'itemchanged, il faut que je vérifie, dans une datastore, si le numéro de compte saisi existe ou non...Jusque là tout va bien.

Ce que je souhaiterais faire, c'est laisser à l'utilisateur la possibilité de rentrer moins de 6 caractères et de rajouter des 0 pour compléter.

Exemple : l'utilisateur entre 2748, le programme complete pour obtenir 274800 et ensuite intervient tout le processus de l'itemchanged avec verification de l'existence de ce numéro de compte....

Le soucis est donc qu'il faut que je puisse modifier mon argument "data" dans l'itemchanged. J'ai essayé, je le modifie bien, mais au final, visuellement parlant, le resultat ne change pas, je reste toujours avec 2748 au lieu de 274800.

Quelqu'un a une solution pour moi (si j'ai été clair)?

Merci d'avance

Dernière modification par Sebou (14-02-2008 17:25:09)

Hors ligne

 

#2 14-02-2008 16:12:14

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,775,808
Site web

Re: [RESOLU] Travail sur data

Pour remettre la valeur modifiée du data dans la colonne, tu utilises SetText ou SetItem ?


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#3 14-02-2008 16:13:25

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5122
Pépites: 97,200
Banque: 2,147,483,647

Re: [RESOLU] Travail sur data

bonjour, itemchanged est déclenché à la "fin" de la saisie : ie lorsque le controle perd le focus (tab ou clic ailleurs, etc.)
Je pense qu'il faut coder au niveau de la saisie clavier, vérifier quand est-ce qu'il y a assez de caractères (4?) avant d'ajouter des zéros.


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#4 14-02-2008 16:15:38

Sebou  
Membre Power Geek
Lieu: Villeneuve-sur-Lot
Date d'inscription: 21-12-2007
Messages: 189
Pépites: 1,787
Banque: 13,693,461,510

Re: [RESOLU] Travail sur data

non, voila ce que je fais :

Code: pb

IF len(data) <> il_compta THEN
  ll_nb_zero = il_compta - len(data)
  FOR ll_i = 1 TO ll_nb_zero
    data = data + '0'
  NEXT
END IF

avec il_compta = nombre de caractères nécessaires (soit 6 dans mon cas)

Hors ligne

 

#5 14-02-2008 16:15:56

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,775,808
Site web

Re: [RESOLU] Travail sur data

C'est une complession automatique à la saisie ou au changement de zone que tu veux ?
Car dans le premier cas c'est Editchanged qu'il faut traiter. Sinon Itemchanged mais avec un SetText et non un SetItem pour mettre la valeur complétée.


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#6 14-02-2008 16:17:01

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,775,808
Site web

Re: [RESOLU] Travail sur data

Sebou a écrit:

non, voila ce que je fais :

Code:

IF len(data) <> il_compta THEN
  ll_nb_zero = il_compta - len(data)
  FOR ll_i = 1 TO ll_nb_zero
    data = data + '0'
  NEXT
END IF

avec il_compta = nombre de caractères nécessaires (soit 6 dans mon cas)

Ca ne suffit pas, le data n'est pas remis dans ta zone, il faut le faire avec un settext.
Dans ton cas tu testes bien la donnée complétée dans l'itemchanged mais tu ne l'a pas mise dans ta DW donc à la sortie de l'itemchanged la valeur reste sans les zéro...

Et utilises FILL c'est mieux (Pas de boucle inutile)

Code: pb

     data += FILL('0', il_compta - len(data))

Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#7 14-02-2008 16:26:11

Sebou  
Membre Power Geek
Lieu: Villeneuve-sur-Lot
Date d'inscription: 21-12-2007
Messages: 189
Pépites: 1,787
Banque: 13,693,461,510

Re: [RESOLU] Travail sur data

ok, merci...j'essaie ca...

Hors ligne

 

#8 14-02-2008 16:31:10

Sebou  
Membre Power Geek
Lieu: Villeneuve-sur-Lot
Date d'inscription: 21-12-2007
Messages: 189
Pépites: 1,787
Banque: 13,693,461,510

Re: [RESOLU] Travail sur data

ca marche tjs pas :'(...j'apercois brievement mon 274800 mais le 2748 le remplace

Hors ligne

 

#9 14-02-2008 16:35:03

Sebou  
Membre Power Geek
Lieu: Villeneuve-sur-Lot
Date d'inscription: 21-12-2007
Messages: 189
Pépites: 1,787
Banque: 13,693,461,510

Re: [RESOLU] Travail sur data

voila mon code, j'place peut etre les elements au mauvais endroit ?

Code: pb

IF dwo.name = 'ecr_cpte' THEN
  IF len(data) <> il_compta THEN
    data += fill('0', il_compta - len(data))
  END IF
  
  ls_plan = GetItemString(row, 'ecr_plan')
  ls_format = "num = '" + data + "' AND typ = '" + ls_plan + "'"
  ll_pos = gds_compte.find(ls_format, 1, gds_compte.RowCount())
  
  IF ll_pos <= 0 THEN
    li_rep = messagebox("QUESTION", , question!, yesno!)
    IF li_rep = 2 THEN 
      return 1
    ELSE

    END IF
  ELSE
    ls_type_cpt = f_type_cpt(ls_plan, data)
    SetItem(row, 'type_cpt', ls_type_cpt)
    
    //Si c'est un compte collectif
    IF ls_type_cpt = 'collectif'  THEN      
      SetItem(row, 'ecr_pemt', ls_plan)
      SetItem(row, 'ecr_cemt', data)      
      SetItem(row, 'ecr_plan', "")
      return 2
      post event aller_colonne('ecr_plan')
    ELSE
      this.SetItem(row, 'ecr_cpte', data)
      this.SetText(data)
      //Si on a rempli un compte emetteur
      IF NOT isNull(GetItemString(row,'ecr_pemt')) THEN
        //et que le compte saisi est un cpt auxiliaire
        IF ls_type_cpt = 'auxiliaire' THEN
          trigger event aller_colonne('ecr_piece')
        ELSE
          messagebox("ERREUR", "Le compte choisi n'est pas un compte auxiliaire", stopsign!)
          return 2
        END IF
      //S'il n'y a pas de cpt emetteur rempli
      ELSE
        //et que le cpt saisi est un cpt auxiliaire
        IF ls_type_cpt = 'auxiliaire' THEN
          trigger event aller_colonne('ecr_pemt')
        //sinon, c'est un cpt general
        ELSE
          trigger event aller_colonne('ecr_piece')
        END IF
      END IF
    END IF


Hors ligne

 

#10 14-02-2008 16:38:49

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,775,808
Site web

Re: [RESOLU] Travail sur data

des trigger event pour changer  de colonne dans un itemchanged.
Que de mauvais souvenir

Et sans le this.SetItem(row, 'ecr_cpte', data) et des post event pour les changements de colonnes qui suivent ça donne quoi ?

D'ailleurs j'aime beaucoup le post juste derrière le return 2. Il doit pas beaucoup fatiguer le CPU celui là ...


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#11 14-02-2008 16:42:07

Sebou  
Membre Power Geek
Lieu: Villeneuve-sur-Lot
Date d'inscription: 21-12-2007
Messages: 189
Pépites: 1,787
Banque: 13,693,461,510

Re: [RESOLU] Travail sur data

pareil, la completion se fait bien, apparait furtivement et l'ancienne version du data revient à l'écran (sans les 0 koi)

Hors ligne

 

#12 14-02-2008 16:48:19

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,775,808
Site web

Re: [RESOLU] Travail sur data

il faut voir la valeur du return par lequel tu sorts de l'itemchanged et éventuellement voir dans l'itemerror si tu n'as pas un code qui met la grouille...

Sans oublier les scripts ancêtres éventuels...


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#13 14-02-2008 17:17:02

Sebou  
Membre Power Geek
Lieu: Villeneuve-sur-Lot
Date d'inscription: 21-12-2007
Messages: 189
Pépites: 1,787
Banque: 13,693,461,510

Re: [RESOLU] Travail sur data

dans l'itemerror, je n'ai qu'un 'return 1' et la valeur de retour par laquelle je sors dans mon itemchanged est 0

Hors ligne

 

#14 14-02-2008 17:24:41

Sebou  
Membre Power Geek
Lieu: Villeneuve-sur-Lot
Date d'inscription: 21-12-2007
Messages: 189
Pépites: 1,787
Banque: 13,693,461,510

Re: [RESOLU] Travail sur data

bon béh c'est bon, en fait, il suffisait de passer par une variable intermediaire dans laquelle je stocke mon data + fill...et ensuite, je place mon setitem en post...et ca roule

Merci pour l'aide tout de meme

Hors ligne

 

#15 15-02-2008 09:30:01

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,775,808
Site web

Re: [RESOLU] Travail sur data

Pourquoi passer par une variable intermédiaire ?

Tu sais que tu peux faire directement un

Code: pb

this.Post SetItem(row,"ecr_cpte",data)


Sinon pour info voici ce que te dit l'aide sur l'utilisation du settext et du setitem dans un itemchanged :

Using SetText in the ItemChanged and ItemError events   
In the ItemChanged or ItemError event, PowerBuilder or your own script might determine that the value in the edit control is invalid or that it needs further processing. You can call SetItem to specify a new item value for the row and column. If you want the user to have an opportunity to enter a different value, after calling SetItem you can call SetText to put that same value in the edit control so that the user sees the value too. You can also call SetText without calling SetItem. In the script, use a return code that rejects the value in the edit control, avoiding further processing, but does not allow the focus to change. To retain focus and display an error message, return 1 for ItemChanged or 0 for ItemError.

When you use a return code that rejects the data the user entered but allows the focus to change (a return code of 2 in the script for the ItemChanged event or 3 in the ItemError event), you do not need to call SetText because the value set with SetItem displays when the focus changes.

Ton return 1 dans l'itemerror rejette systématiquement la valeur !

A l'inverse tu traites les erreurs directement dans ton itemchanged (messages suivi de return 2), ce qui fait :
1- Perdre le focus à la DW (messagebox)
2 - Déclenche l'itemerror (return 2)

Il vaut mieux traiter les erreurs dans l'itemerror (prévu à cet effet)

Ton appli va devenir un ensemble de "post" que tu ne maitriseras plus (plusieurs post avec certains qui feront probablement des triggers... comment pourras-tu maîtriser l'ordre d'enchainement de tes évènements ? )


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22