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

SAP Crystal Reports Discussion :

Crystal Report / Sage X3 formules personnalisées


Sujet :

SAP Crystal Reports

  1. #1
    Membre habitué
    Crystal Report / Sage X3 formules personnalisées
    Bonjour,

    Nous utilisons CR2013 avec SAGE X3 V7. Un ancien collège avait créé une fonction personnalisée pour formater les numéros de téléphone. Cette fonction est présente dans de nombreux rapports.
    Nous sommes en train de passer en SAGE X3 V12 que nous avons installé sur un nouveau serveur. Les rapports ont été copiés sur ce nouveau serveur.

    Par contre lorsque nous imprimons un rapport depuis X3 V12, nous avons le message d'erreur suivant :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     Message 1/3 : Erreur à l'ouverture du rapport: xxxxxxxxxx\ZARCCLIENT.rpt
    - Message 2/3 : Echec du chargement du rapport
    - Message 3/3 : Erreur dans le fichier ZARCCLIENT 6976_2964_{B35860BF-F698-4802-8025-B91607C6EBEF}.rpt :
    Erreur dans la formule USR_Tel: 
    'if ({BPADDRESS_USR.TEL_0} <> "") then ZFormatTelephoneFax ({BPADDRESS_USR.TEL_0}, {TABCOUNTRY_USR.TELFMT_0})
    '
    L'UFL u212com.dll qui implémente cette fonction est manquante.


    J'ai réinstallé CR2013 sur le nouveau serveur.
    J'ai copié l'ancienne dll u212com.dll sur le nouveau serveur. J'ai essayé de charger la dll avec regsrv32.exe mais j'ai le message d'erreur suivant
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    Le module C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\u212com.dll a été chargé, mais le point d'entrée DllRegisterServer est introuvable.
    Vérifiez que C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\u212com.dll est un fichier DLL ou OCX valide puis réessayez


    Lorsque j'ouvre un état Crystal Reports et que je vais dans l'atelier de formule, aussi bien sur le nouveau que sur l'ancien serveur, je n'ai rien dans les fonctions personnalisées du rapport.
    Je n'arrive pas à accéder aux fonctions personnalisées du référentiel. On me demande des utilisateurs et des mots de passe que je n'ai pas et de toute façon il ne me semble pas avoir de Central Management Server?

    Merci pour votre aide

  2. #2
    Modérateur

    Bonjour
    Pour formater tes numéro de téléphone, tu peux peut être utiliser la fonction picture qui est native
    Luc

    Disponible - Intervention sur demande tout pays, toutes régions
    Formateur Crystal Reports (toutes versions)
    Contrat de support possible
    N'hésitez pas.... http://paypal.me/lucrascar

  3. #3
    Membre à l'essai
    Utilisation fonction "Picture"
    Citation Envoyé par luc_chivas Voir le message
    Bonjour
    Pour formater tes numéro de téléphone, tu peux peut être utiliser la fonction picture qui est native
    Bonjour Luc, pourriez vous nous donner la syntaxe exacte en utilisant "Picture".
    Par contre, il semblerait qu'il soit possible d'utiliser le format des numéros de téléphone présent dans la table des pays dans Sage, comme argument de cette fonction"Picture".
    Mais la syntaxe me manque.
    Merci d'avance

  4. #4
    Modérateur

    exemple

    picture ("123456789","(xxx) xxx-xxxx")
    Luc

    Disponible - Intervention sur demande tout pays, toutes régions
    Formateur Crystal Reports (toutes versions)
    Contrat de support possible
    N'hésitez pas.... http://paypal.me/lucrascar

  5. #5
    Membre habitué
    Merci pour cette réponse, mais en fait X3 stock le numéro de téléphone sans indicatif international dans une table et l'indicatif dans une autre. Quelques exemples d'indicatifs internationaux stockés dans X3
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Espagne -- > [(+34)]9#
    UK --> [+44 (]1#[)]4#[ ]6#
    France --> [(+33)]#[.]2#[.]2#[.]2#[.]2#


    D'où la fonction personnalisée pour extraire l'indicatif international, le joindre au numéro de téléphone et formater le tout.

    De plus, j'aurais aimé comprendre où sont stockées ces fonctions personnalisées....

    Merci et bonne journée

  6. #6
    Modérateur

    Bonjour

    Pour extraire l'indicatif, utiliser la fonction "extractstring"..
    extractstring(monchamps,"(",")" puis concatener avec le numéro de télephone.

    ou alors la fonction mid et instr pour trouver le plus, calculer le point de départ, enlever 1 pour récupérer le "+" et prendre 3 caractères.

    La fonction personnalisée sans référentiel (server) ne se trouve que dans le rapport qui les utilise, il faut la recopier à chaque nouveau rapport
    Luc

    Disponible - Intervention sur demande tout pays, toutes régions
    Formateur Crystal Reports (toutes versions)
    Contrat de support possible
    N'hésitez pas.... http://paypal.me/lucrascar

  7. #7
    Membre habitué
    Merci pour cette réponse, je réécrirai une fonction si je n'ai pas le choix mais nous avons un grand nombre de rapport avec des numéros de téléphones et je préférerai récupérer la fonction existante.

    Où voit-on les fonctions personnalisées? comment peut-on les modifier?

    J'ai ouvert un rapport utilisant cette fonction personnalisée. Dans l'atelier formule, j'ai un écran vide quand je clique sur les fonctions personnalisées du rapport.
    J'imagine donc que c'est une fonction personnalisées du référentiel? Comment savoir si j'ai un Central Management Server?

    Lorsque j'édite une formule, ma fonction est classée dans Fonctions/Fonctions supplémentaires/UFL COM et Net (u212.com.dll) si ça peut aider.

    Merci

  8. #8
    Modérateur

    Luc

    Disponible - Intervention sur demande tout pays, toutes régions
    Formateur Crystal Reports (toutes versions)
    Contrat de support possible
    N'hésitez pas.... http://paypal.me/lucrascar

  9. #9
    Membre habitué
    j'ai récupéré ma dll u212com.dll de l'ancien serveur et je l'ai copié dans le nouveau serveur dans le répertoire
    J'ai lancé la commande gacutil -i avec ma dll et j'ai le message d'erreur suivant : Échec de l'ajout de l'assembly au cache*: Le module était censé contenir un manifeste de l'assembly.
    idem pour la commande Regasm : RegAsm : error RA0000 : Échec de chargement de 'C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\u212com.dll', car ce n'est pas un assembly .NET valide

    merci

  10. #10
    Modérateur

    essaye de la mettre là

    C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86
    Luc

    Disponible - Intervention sur demande tout pays, toutes régions
    Formateur Crystal Reports (toutes versions)
    Contrat de support possible
    N'hésitez pas.... http://paypal.me/lucrascar

  11. #11
    Membre habitué
    Bonjour,

    Je n'ai pas ce dossier Crystal Reports for .NET Framework 4.0?

    merci

  12. #12
    Membre habitué
    Bonjour,

    J'ai finalement laissé tombé et réécrit une formule pour formater les numéros de téléphones.

    Merci

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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
    stringvar Numero := {BPADDRESS_FCY.FAX_0};
    stringvar Resultat := "";
    stringvar DonneeFixe := "";
    stringvar DonneeVariable := "";
    stringVar array TabTmp;
    numbervar i;
    numbervar Position;
    numbervar Nombre;
    numbervar Debut := 1;
     
    if (Numero <> "") then 
    (
        TabTmp := Split ({TABCOUNTRY_FCY.TELFMT_0},"#");
        for i := 1 to UBound(TabTmp)-1 do 
        (
            DonneeFixe := ExtractString (TabTmp[i],"[","]");
            Position := InStr(TabTmp[i],"]");
            if (Position > 0) then 
            (
                if (Mid(TabTmp[i],Position+1) = "") then Nombre := 1
                else Nombre := ToNumber(Mid(TabTmp[i],Position+1));
                DonneeVariable := Mid(Numero,Debut,Nombre);
                Debut := Debut + Nombre;
            );
            Resultat := Resultat + DonneeFixe + DonneeVariable;
        );
        Resultat
    )
    else ""

  13. #13
    Membre habitué
    Bonjour,

    J'avais fait une fonction personnalisée aussi dans le même genre en basic, mes connaissances sont plus que limitées en langage Crystal...

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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
     
    Function FORMATTEL (FRM As String, NUM As String, PREFIXFR as boolean )
        Dim a as number
        Dim p as number
        Dim z as number
        Dim x as number
        Dim lngf as number
        Dim lngn as number
        Dim c as String
        Dim PREFIX as string
        Dim SEPARATEUR as string
        Dim V as string
        Dim TELFRMP as string
        if FRM="" then 
            FRMTEL=NUM
        elseif NUM<>"" then
            if PREFIXFR then PREFIX="+33" else PREFIX=""
            lngn=len(NUM)
            lngf=len(FRM)
            TELFRMP="" : c="" : V="" : SEPARATEUR=""
            for a=1 to lngf
                c=Mid(FRM,a ,1 )
                Select Case c
                Case "["
                    z=instr(a,FRM,"]")
                    if a=1 then
                        PREFIX = mid(FRM,a+1,z-(a+1))
                    else
                        SEPARATEUR=left(mid(FRM,a+1,z-(a+1)),1)
                    end if
                    a=z
                Case "0","1","2","3","4","5","6","7","8","9"
                    V=V+c
                Case "#", "X" 
                    if V<>"" then
                        if PREFIX="+33" and TELFRMP="" and mid(NUM,p+1,1)="0" then
                            TELFRMP="(0)"    
                            For x=p+2 to p+val(V)
                                TELFRMP=TELFRMP+mid(NUM,x,1)    
                            next x
                            p=val(V)
                            V=""
                        else
                            TELFRMP=TELFRMP+iif(TELFRMP<>"",SEPARATEUR,"")+mid(NUM,p+1,val(V))
                            p=p+val(V)
                            V=""
                        end if
                    end if
                End Select
            next a
            FRMTEL=PREFIX+TELFRMP
        else
            FRMTEL=""
        end if
    End Function


    Votre fonction à l'air plus élégante
    Si ce message vous a aidé, appuyez sur le petit , ca fait toujours plaisir
    Merci.

###raw>template_hook.ano_emploi###