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

VB.NET Discussion :

Calculfied dans un report [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut Calculfied dans un report
    Bonjour,

    Pour la creatin d'un rapport je souhaite decoupe une chaine en fonctionne de sa longueur et renvoye un caractere.
    La fonction ci dessous fonctionne bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    =iif(
    	Len(Fields!BatchNumber.Value) = 9,
    	GetChar(Fields!BatchNumber.Value, 8),
    			"?"
    )
    Par contre, lorsque j'essaye d'en imbriquer plusieurs cela ne fonctionne plus que pour la derniere verification.
    (Ici pour les chaines de 12 caracteres ca fonctionne, mais les chaines de 9 caracteres me renvoye erreurs...)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    =iif(
    	Len(Fields!BatchNumber.Value) = 9,
    	GetChar(Fields!BatchNumber.Value, 8),
    	iif(
    			Len(Fields!BatchNumber.Value) = 12,
    			GetChar(Fields!BatchNumber.Value, 10),
    			"?"
    	)
    )
    Quelqu'un aurai une idee?

    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Bonjour,

    Je crains n'avoir pas bien compris ton problème mais déjà "Len" vient du VB6 et est obsolète, en VB.Net on utilise le .length.

    Mais je ne comprends pas bien ta question;
    Si la chaine contient 9 caractères tu veux afficher le 8ème et sie elle contient 12 tu veux afficher le 10ème?

    Comme ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Dim Chaine As String = Fields!BatchNumber.Value
            If Chaine.Length = 9 Then
                MessageBox.Show(Chaine.ToCharArray(7, 1))
            ElseIf Chaine.Length = 12 Then
                MessageBox.Show(Chaine.ToCharArray(9, 1))
            End If
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut
    oui, c'est bien ca que je veux.
    Le probleme c'est que je travaille sur un rapport.
    Dans lequel j'insere un calcfield et dans ce calcfield je n'ai acces que a la touche fonction (fx) ou les possibilite de code sont tres limite.
    (pas de cast par exemple)

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Il n'y a pas de rapport avec VB.NET donc (la présente section) ???
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut
    ben, le code c'est bien du vb?
    Sinon dans quel section je dois poser cette question?

    merci

    PS : Aprioi je viens de voir que je dois pouvoir avoir acces au code du report.
    (clic droit / propriete)

  6. #6
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Re:

    Ca ressemble à du VB avec les accolades du C...
    Voilà ce qui arrive quand on met un "C Daziste" a coder en VB

    Bon, ceci étant dit, on se concentre sur la logique et la méthode nécessaire pour résoudre ton problème.
    Compte-tenu que nous savons pas trop comment interpréter ce langage et que ça ressemble plus à VB6 /Cxx et que nous sommes pas sur qu'en VB.net ça fonctionne (car c'est complètement différent)... Va pour la solution en VB6!

    Je pense que ceci devrait résoudre ton problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     Dim Chaine As String = "ton texte"
     =IIf((Len(Chaine) = 9 Or Len(Chaine) = 12), GetChar(Chaine, ((Len(Chaine) - 1) - Int(Len(Chaine) / 12))), "?")
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Ou encore un peu plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim Chaine As String = "ton texte012"
    IIf((Len(Chaine) = 9 Or Len(Chaine) = 12), GetChar(Chaine, ((Len(Chaine) - 1) - Len(Chaine) \ 12)), "?")
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  8. #8
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour Acive

    Citation Envoyé par ACIVE_CS Voir le message
    Re:
    Compte-tenu que nous savons pas trop comment interpréter ce langage et que ça ressemble plus à VB6 /Cxx et que nous sommes pas sur qu'en VB.net ça fonctionne (car c'est complètement différent)... Va pour la solution en VB6!

    Je pense que ceci devrait résoudre ton problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     Dim Chaine As String = "ton texte"
     =IIf((Len(Chaine) = 9 Or Len(Chaine) = 12), GetChar(Chaine, ((Len(Chaine) - 1) - Int(Len(Chaine) / 12))), "?")
    Iif() et Len() sont supportés dans l'Assembly Microsoft.Visual.BASIC. (Tu sais, celui qu'il ne faut pas importer.) Donc, ces éléments-là ont été maintenus pour préserver la compatibilité. Donc, je suis moins convaincu de la portabilité dans d'autres langages comme C, C++ ou Caiguisé.

    P.S. Cela me rappelle une vieille histoire. À l'époque de QuickBasic; quelqu'un avait posé une question dans le courrier des lecteurs d'un magazine dont j'oublie le titre. Il demandait quelle structure était la plus rapide entre le If Then Else et le Select Case. Le spécialiste qui répondait avait vérifié le programme compilé. Le résultat a été que les deux blocs étaient compilés exactement de la même façon.

    En conclusion, serait-ce la même chose pour un Iif() et un bloc if then else ?
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  9. #9
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Bonjour cmarcotte comment ça va?
    Oui... len, iif, getchar, goto, gosub, QBasic... c'est mon coté nostalgique

    J'ai bien précisé que ce n'est pas du VB.net, et visiblement notre demandeur ne sait pas trop ce que c'est non plus, et j'ai juste voulu suivre sa logique de manière fonctionnelle.

    D'après la présentation du code, j'en déduis également qu'il ne code pas avec visual studio (en tout cas pas en VB).
    Et encore vu sa signature cela signifie que nous ne fréquentons pas tout à fait les mêmes mondes (ce n'est pas un reproche, au contraire).

    Mais le fait est là; c'est qu'il faut encore que je répare ma boule de cristal

    Quand tu parles de la rapidité des différents langages une fois compilés, moi aussi j'ai entendu ça même en ce qui concerne le plus récent Visual Studio entre le C++ et VB.Net par exemple, une fois compilés ça revient au même.
    Est-ce vrai ???
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  10. #10
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut
    OUi oui je suis du monde du C# donc pour moi le vb est une autre langue..

  11. #11
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Bonjour,
    Ce n'est pas une critique...

    Alors as-tu testé ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IIf((Len(Fields!BatchNumber.Value) = 9 Or Len(Fields!BatchNumber.Value) = 12), GetChar(Fields!BatchNumber.Value, ((Len(Fields!BatchNumber.Value) - 1) - Len(Fields!BatchNumber.Value) \ 12)), "?")
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  12. #12
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut
    Citation Envoyé par ACIVE_CS Voir le message
    Ce n'est pas une critique...
    Ne t’inquiète pas je ne l'ai pas pris pour une critique.

    Le code que tu m'as fourni fonctionne. Par contre, je ne vois pas ce qui etait faux dans le mien.

    Sinon pour le langage. Ca ressemble a du VB.
    Si tu veux verifier, cree un rapport dans VS. Prends un champs et soit tu cliques sur le bouton 'fx' soit tu cliques dans les proprietes sur value (par exemple) puis sur expression. La dans expression tu codes dans un langage qui ressemble a du VB (pour moi en tant que neophyte VB).

    Merci

  13. #13
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut

    Alors, non j'ai pas besoin de vérifier car comme on a dit plus haut on fréquente des mondes différents.

    Imagine que je sois japonais, toi français et que je me casse la tête pour te dire
    O
    U
    I
    Mais que toi tu ne comprends que OUI, pourtant c'est le même résultat

    Ton code fonctionne avec une chaine de 12 chr mais pas 9 parce que quand il avait 9 chr tu dépassais la sa longueur dans ta question et il ne comprend plus...

    Dans ma logique, je lui demande au début
    - Si il a 9 ou 12 chr on fait un calcul, sinon on affiche "?"
    - au départ on prend en compte l'avant dernier chr (Len(Chaine) - 1)
    - en suite on fait une division toute bête de la longueur pas 12
    s'il en a 9 la division fera 0, s'il en a 12 ça fera 1 et on déduit pour avoir notre résultat

    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  14. #14
    Membre du Club Avatar de anasschiguer
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2013
    Messages : 35
    Points : 62
    Points
    62
    Par défaut
    Salut xian21,
    Je sais que ta discussion est résolue mais je pense qu'il y une solution plus dynamique qui t'offrira plus de mobilité si tu rencontre à nouveau de problème concernant les formules dans un report viewer,
    En effet, tu peux ajouter des paramètres pour ton rapport, dans un texte field du rapport, tu met comme formule ton paramètre, puis dans le code du formulaire qui lui donne naissance, tu donne une valeur à ce paramètre.
    le code minimal est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
           Dim paramList As New Microsoft.Reporting.WinForms.ReportParameterCollection
           Dim valeurParam As String = Form1.TextBox1.Text  'Bien suur sous vb.net tu peux mettre n'importe quelle formule
           paramList.Add(New Microsoft.Reporting.WinForms.ReportParameter("monParametre",valeurParam )
    'monParametre est le name de ton parametre dans le rapport.
                    Form1121.ReportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local
            Form1121.ReportViewer1.LocalReport.SetParameters(paramList)
    'tu dois rafraichir le rapport dans le formulaire correspondant
    Pour ajouter un parametre dans ton rapport sous visual studio 2010, tu ouvre la fenetre conception de ton rapport, tu appuie Ctrl+Alt+D, dans la fenetre qui s'ouvre, tu click bouton droit le petit dossier correspondant à Paramètres -> ajouter un paramètre, et fais attention à son name, il faut qu'il correspond à celle dans ton formulaire, ensuite tu coches "Autoriser une valeur vide" si jamais tu peux ne rien afficher dans ton textField par exemple, sinon tu dois t'assurer que tu passe une valeur à ton paramètre avant de passer au rapport sinon le contenu ne s'affichera pas à l'execution et il t'affichera une sorte d'erreur.
    L'avantage : tu programme toujours en vb.net donc pas besoin de se limiter par les fonctions du rapport lui meme.
    Pensez à voter ou ou de mettre si ma réponse le mérite

  15. #15
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut
    Merci, a tous les deux.
    Je teste ta solution des que je peux anasschiguer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Forms]Code EAN128 dans un report, ou dans un form?
    Par Aeternus dans le forum Forms
    Réponses: 9
    Dernier message: 20/02/2007, 13h38
  2. Problème de fréquence incompatible dans un Report
    Par Aeternus dans le forum Reports
    Réponses: 6
    Dernier message: 14/12/2004, 15h34
  3. Ajouter un champs dans un Report
    Par nora_ora dans le forum Reports
    Réponses: 7
    Dernier message: 09/12/2004, 17h24
  4. [RAVE] Bitmap dans un Report
    Par El blérot dans le forum Rave
    Réponses: 3
    Dernier message: 29/10/2004, 13h55
  5. [CR] Comment trouver un champs dans un report ??
    Par Madduck dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 18/09/2003, 08h31

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