]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
push avant merge avec la V9-5 Merge_V9_6
authorpascale.noyret <pascale.noyret@edf.fr>
Mon, 7 Sep 2020 12:20:15 +0000 (14:20 +0200)
committerpascale.noyret <pascale.noyret@edf.fr>
Mon, 7 Sep 2020 12:20:15 +0000 (14:20 +0200)
15 files changed:
Accas/A_ETAPE.py
Editeur/session.py
Efi2Xsd/AccasXsd.py
Efi2Xsd/MCAccasXML.py
Ihm/I_ETAPE.py
Ihm/I_MCSIMP.py
InterfaceQT4/editorSsIhm.py
InterfaceQT4/eficas_go.py
InterfaceQT4/monWidgetFact.py
InterfaceQT4/monWidgetOptionnel.py
InterfaceQT4/qtEficasSsIhm.py
InterfaceQT4/readercata.py
Noyau/N_ENTITE.py
Noyau/N_OPER.py
Tests/MappingAccasXsd/cata_ASSD.py

index aecc47dd8a15e8a26cb7f130245e5a176e13326f..11dc12de15a15ffdf85fbe2dedb8f47df2566cf0 100644 (file)
@@ -21,9 +21,9 @@ from __future__ import absolute_import
 from Noyau import N_ETAPE
 from Validation import V_ETAPE
 from Ihm import I_ETAPE
-from Efi2Xsd.MCAccasXML  import X_MCCOMPO
+from Efi2Xsd.MCAccasXML  import X_ETAPE
 
-class ETAPE(I_ETAPE.ETAPE,V_ETAPE.ETAPE,X_MCCOMPO,N_ETAPE.ETAPE):
+class ETAPE(I_ETAPE.ETAPE,V_ETAPE.ETAPE,X_ETAPE,N_ETAPE.ETAPE):
    def __init__(self,oper=None,reuse=None,args={}):
       N_ETAPE.ETAPE.__init__(self,oper,reuse,args)
       V_ETAPE.ETAPE.__init__(self)
index a43312a8825c0b7b84fd3cd83c247bf350302e25..0fcad7803d36c4859bc6be2caf0102456a642abc 100644 (file)
@@ -278,6 +278,10 @@ def createparser():
                   default=False,
                   help=tr("construit le .xml en meme temps que le .comm"))
 
+    parser.add_option(u"-a","--withEltAbstrait", action="store_true", dest="avecEltAbstrait",
+                  default=False,
+                  help=tr("construit des elements abstraits dans le XSD pour gerer le cascading"))
+
     parser.add_option(u"-s","--schema", action="store", type="string",dest="ssCode",
                   help=tr("schema"))
     # To handle locale information
index 286ed56edb6cb50878e1e38e35e0c38504215e32..7954f4d02325531ea8462c7e7735ea4dd7f36076 100755 (executable)
@@ -906,8 +906,9 @@ class X_SIMP (X_definition):
 class X_JDC_CATA :
 #-----------------
 
-    def dumpXsd(self, debug = True):
+    def dumpXsd(self, avecEltAbstrait,  debug = True):
         cata = CONTEXT.getCurrentCata() 
+        if debug : print ('avecEltAbstrait   -------------------', avecEltAbstrait)
 
         if debug : print ('self.importedBy -------------------', self.importedBy)
         if debug : print ('self.code       -------------------', self.code)
index 5be1d127c15e980270d720667212714a23c60bc9..9921c1d0135593d1034f8b04a4a83a31403e247e 100755 (executable)
@@ -24,7 +24,7 @@ class X_OBJECT:
 # -------------
 
   def delObjPyxb(self, debug=True):
-      if not self.cata.modeleMetier : return
+      if not self.cata or not self.cata.modeleMetier : return
       if self.nom == 'Consigne' : return None
       trouve = False
       
@@ -71,7 +71,7 @@ class X_OBJECT:
       
 
   def addObjPyxb(self,indiceDsLeContenu,debug=False):
-      if not self.cata.modeleMetier : return
+      if not self.cata or not self.cata.modeleMetier : return
       if debug :print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
       # adherence Accas sur le parent
       parent=self.parent
@@ -110,8 +110,8 @@ class X_OBJECT:
 class X_MCSIMP(X_OBJECT):
 # -----------------------
       
-   def buildObjPyxb(self, debug=True) :
-      if not self.cata.modeleMetier : return
+   def buildObjPyxb(self, debug=False) :
+      if not self.cata or not self.cata.modeleMetier : return
       if self.nom == 'Consigne' : return None
       if debug : print ('X_MCSIMP buildObjPyxb', self.nom, self,self.valeur)
       if debug and self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
@@ -151,8 +151,8 @@ class X_MCSIMP(X_OBJECT):
       if debug : print ('fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
 
 
-   def setValeurObjPyxb(self,newVal, debug=False):
-       if not self.cata.modeleMetier : return
+   def setValeurObjPyxb(self,newVal, debug=True):
+       if not self.cata or not self.cata.modeleMetier : return
        if debug : print (' ___________________________ dans setValeurObjPyxb MCSIMP ', self.nom, newVal)
        if debug : print (' self.perePyxb = ', self.perePyxb.nom)
        if inspect.isclass(newVal) and issubclass(newVal,A_ASSD)  : newVal = newVal.nom
@@ -189,8 +189,8 @@ class X_MCCOMPO(X_OBJECT) :
 # -------------------------
 # 
    def buildObjPyxb(self,mc_list, debug=True) :
+      if not self.cata or not self.cata.modeleMetier : return
       print ('X_MCCOMPO', self.nom)
-      if not self.cata.modeleMetier : return
       self.listArg=[]
       self.dicoArg={}
       for objAccas in mc_list :
@@ -288,13 +288,13 @@ class X_MCCOMPO(X_OBJECT) :
 class X_MCBLOC (X_MCCOMPO):
 # --------------------------
    def buildObjPyxb(self,mc_list,debug=False):
-      if not self.cata.modeleMetier : return
+      if not self.cata or not self.cata.modeleMetier : return
       if debug : print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list, 'ne fait rien')
       self.perePyxb=None
       self.objPyxb=None
         
    def addObjPyxb(self, indiceDsLeContenu, debug=False):
-      if not self.cata.modeleMetier : return
+      if not self.cata or not self.cata.modeleMetier : return
       if debug : print ('X_MCBLOC addObjPyxb', self.nom, self, self.mcListe, indiceDsLeContenu)
       rangDeLObjet=indiceDsLeContenu
       for obj in self.mcListe:
@@ -302,7 +302,7 @@ class X_MCBLOC (X_MCCOMPO):
           rangDeLObjet=rangDeLObjet+obj.longueurDsArbre()
        
    def delObjPyxb(self, debug=False):
-      if not self.cata.modeleMetier : return
+      if not self.cata or not self.cata.modeleMetier : return
       if debug : print ('X_MCBLOC delObjPyxb', self.nom, ' --------------------------')
       for obj in self.mcListe:
           obj.delObjPyxb()
@@ -323,7 +323,7 @@ class X_MCLIST (X_MCCOMPO):
           rangDeLObjet= rangDeLObjet + 1
 
   def delObjPyxb(self, debug=False):
-      if not self.cata.modeleMetier : return
+      if not self.cata or not self.cata.modeleMetier : return
       if debug : print ('X_MCLIST delObjPyxb', self.nom, ' --------------------------')
       for obj in self:
           obj.delObjPyxb()
@@ -334,12 +334,20 @@ class X_MCFACT (X_MCCOMPO):
 # -------------------------
   pass
 
+class X_ETAPE(X_MCCOMPO) :
+# -------------------------
+
+   def metAJourNomASSD(self, nom,debug=False):
+      if not self.cata or not self.cata.modeleMetier : return
+      if debug : print ('X_ETAPE metAJourLesAttributs', self.nom, nom,' --------------------------')
+      self.objPyxb.name=nom
+
 class X_JDC (X_MCCOMPO):
 # ---------------------
  
    def  __init__(self):
       self.perePyxb=None
-      if not self.cata.modeleMetier : return
+      if not self.cata or not self.cata.modeleMetier : return
       #if hasattr(self.cata,'DicoNomTypeDifferentNomElt') : print ('jkllllllllllllllll')
       if not(hasattr(self.cata,'DicoNomTypeDifferentNomElt')) : self.cata.DicoNomTypeDifferentNomElt={}
       self.monNomClasseModeleMetier=self.code
@@ -377,10 +385,10 @@ class X_JDC (X_MCCOMPO):
 
    def toXml(self,fichier=None):
       print ('ds to XML')
-      if not self.cata.modeleMetier : return
-      print ('***************',self.objPyxb,'***************',)
-      print ('***************',self,'***************',)
-      print ('***************',self.objPyxb.orderedContent(),'***************',)
+      if not self.cata or not self.cata.modeleMetier : return
+      print (' to xml ***************',self.objPyxb,'***************',)
+      print (' to xml ***************',self,'***************',)
+      print (' to xml ***************',self.objPyxb.orderedContent(),'***************',)
       print(self.objPyxb.toDOM().toprettyxml())
       print(self.objPyxb.toxml())
       return (self.objPyxb.toDOM().toprettyxml())
index c7b89958adde5e4ab9a15b5c5376b4c13110a178..06fc893552ca09368c7d9275cf7cebf8aee73e0f 100644 (file)
@@ -105,7 +105,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
             - 0 si le nommage n'a pas pu etre menea son terme,
             - 1 dans le cas contraire
       """
-      # Le nom d'un concept doit etre un identificateur Python (toujours vrai ?)
+      # Le nom d'un concept doit etre un identificateur Python (toujours vrai ou insuffisant?)
       if not conceptRE.match(nom):
          return 0, tr("Un nom de concept doit etre un identificateur Python")
 
@@ -123,6 +123,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       if not self.isValid(sd='non') : return 0,"Nommage du concept refuse : l'operateur n'est pas valide"
       #
       # Cas particulier des operateurs obligatoirement reentrants
+      # plus de concept reentrant (pour Aster)
       #
       if self.definition.reentrant == 'o':
         self.sd = self.reuse = self.jdc.getSdAvantEtape(nom,self)
index a864cedde385e190bba825871f6b19cb97b32e5e..e3b26948615d63d2ea1173d0b9312db934adcd11 100644 (file)
@@ -438,10 +438,15 @@ class MCSIMP(I_OBJECT.OBJECT):
   def updateConcept(self,sd):
     if type(self.valeur) in (list,tuple) :
        if sd in self.valeur:
+         if self.objPyxb : 
+            newVal=[]
+            for v in self.valeur : newVal.append(v.nom)
+            self.setValeurObjPyxb(newVal)
          self.initModif()
          self.finModif()
     else:
        if sd == self.valeur:
+         if self.objPyxb :  self.setValeurObjPyxb(sd.nom)
          self.initModif()
          self.finModif()
 
@@ -454,22 +459,29 @@ class MCSIMP(I_OBJECT.OBJECT):
         du concept sd
         Attention aux matrices
     """
+##PNPNPN a tester
     if type(self.valeur) == tuple :
       if sd in self.valeur:
         self.initModif()
         self.valeur=list(self.valeur)
-        self.valeur.remove(sd)
+        while sd in self.valeur : self.valeur.remove(sd)
+        if self.objPyxb : 
+           newVal=[]
+           for v in self.valeur : newVal.append(v.nom)
+           if newVal == [] : self.delObjPyxb()
+           else : self.setValeurObjPyxb(sd.nom) 
         self.finModif()
     elif type(self.valeur) == list:
       if sd in self.valeur:
         self.initModif()
-        self.valeur.remove(sd)
+        while sd in self.valeur : self.valeur.remove(sd)
         self.finModif()
     else:
       if self.valeur == sd:
         self.initModif()
         self.valeur=None
         self.val=None
+        if self.objPyxb : self.setValeurObjPyxb()
         self.finModif()
     # Glut Horrible pour les matrices ???
     if sd.__class__.__name__== "variable":
index 8b933e35877ee48d52c5963d90637e485447280c..d6f8b9d4addfa3f953181810f567c315b4c36db4 100755 (executable)
@@ -226,8 +226,6 @@ class JDCEditorSsIhm :
         CONTEXT.unsetCurrentStep()
 
         #jdc=self.readercata.cata[0].JdC(procedure=text,
-        print ('llllllllllllllll')
-        print (self.readercata.cata.JdC)
         jdc=self.readercata.cata.JdC(procedure=text,
                                     appliEficas=self.appliEficas,
                                     cata=self.readercata.cata,
@@ -235,7 +233,6 @@ class JDCEditorSsIhm :
                                     nom=jdcName,
                                     rep_mat=self.maConfiguration.rep_mat
                                    )
-        print ('llllllllllllllll')
         self.modified = False
         return jdc
 
@@ -489,13 +486,24 @@ class JDCEditorSsIhm :
     #---------------------------#
     def getChecksum(self,texte):
     #---------------------------#
-        newtexte=texte.replace('"','\\"')
-        commande='echo "'+newtexte+'"|md5sum'
-        a=os.popen(commande)
-        checksum=a.read()
-        a.close()
-        ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
-        return ligne
+        try :
+           import haslib
+           newtexte=texte.replace('"','\\"')
+           hash_checksum = hashlib.md5()
+           hash_checksum.update(newtexte.encode('utf-8'))
+           checksum = hash_checksum.hexdigest()
+           ligne = ligne="#CHECKSUM:"+checksum+":FIN CHECKSUM"
+        except : 
+           try :
+              newtexte=texte.replace('"','\\"')
+              commande='echo "'+newtexte+'"|md5sum'
+              a=os.popen(commande)
+              checksum=a.read()
+              a.close()
+           except :
+              checksum='Fichier trop long \n'
+           ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
+           return ligne
 
     #----------------------#
     def getDico(self):
index 795175632b8eedaa53f2b8249b4bf805ca8a5a7b..f06de6852abce6663c9aafb34cc6867d06b64d2f 100755 (executable)
@@ -89,7 +89,7 @@ def genereXSD(code=None):
 
     monEficasSsIhm = getEficasSsIhm(code=options.code)
     monEditor=monEficasSsIhm.getEditor()
-    texteXSD=monEficasSsIhm.dumpXsd()
+    texteXSD=monEficasSsIhm.dumpXsd(avecEltAbstrait=options.avecEltAbstrait)
 
     fichierCataTrunc=os.path.splitext(os.path.basename(options.fichierCata))[0]
     #if fichierCataTrunc[0:4] in ('cata','Cata'): fichierCataTrunc=fichierCataTrunc[4:]
@@ -139,6 +139,47 @@ def validateDataSet(code=None):
     else : print ('Jdc is valid')
     return monEditeur.jdc.isValid()
 
+def validateFonction(laFonction, debug=True):
+#-------------------------------
+    # ici un singleton pour avoir l editor, le catalogue et...
+    monEficasSsIhm = getEficasSsIhm(code='Essai')
+    monEditor=monEficasSsIhm.getEditor()
+    print ('_______ validateFonction', laFonction,  laFonction.__name__)
+    from functools  import wraps
+    from collections  import OrderedDict
+    from inspect  import getargspec
+    @wraps(laFonction)
+    def fonctionValidee(*args, **kwargs):
+        laFonctionName = laFonction.__name__
+        if debug : print('Appel {} avec args={} et kwargs={}'.format( laFonction.__name__, args, kwargs))
+        listArgsNames   = list(OrderedDict.fromkeys(getargspec(laFonction)[0]))
+        listKwargsNames = list(kwargs.keys())
+        if debug : print (listArgsNames)
+        if debug : print (listKwargsNames)
+        #listTousNames = listArgsNames+listKwargsNames
+        #if debug : print (listTousNames)
+        #args_dict = OrderedDict(list(zip(args_name, args)) + list(kwargs.iteritems()))
+        #print (args_dict)
+
+        #laDefDeLaFonctionDansAccas = getattr(monEditor.readercata.cata,laFonctionName)
+        #print (laDefDeLaFonctionDansAccas)
+        #print (laDefDeLaFonctionDansAccas.entites)
+        #print (dir(laDefDeLaFonctionDansAccas))
+        #print (args)
+        #dict1={'monArgument1' : 'a', 'monArgument2' : 'uuu'}
+        
+        #objConstruit = laDefDeLaFonctionDansAccas.makeObjetPourVerifSignature(**dict1)
+        #print (objConstruit)
+        #print (objConstruit.isValid())
+        ret = laFonction(*args, **kwargs)
+        return ret
+    return fonctionValidee
+
+        #maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
+    return fonctionValidee
+
+    
+    return laFonction
    
 
 
index 8c2dc717a3a0762332d480f490f56a8f36d88fa9..c6758b396e6f22b7584f39a0f2296373e232c9ac 100644 (file)
@@ -30,6 +30,7 @@ from desWidgetFactTableau import Ui_WidgetFactTableau
 from Extensions.i18n import tr
 # Import des panels
 
+# PN 18 mai 2020 : affiche systematique des optionnels
 class MonWidgetFactCommun(Groupe):
   """
   """
@@ -40,7 +41,7 @@ class MonWidgetFactCommun(Groupe):
       self.GroupBox.setText(tr(labeltext))
       self.GroupBox.setTextInteractionFlags(Qt.TextSelectableByMouse)
       self.parentQt.commandesLayout.insertWidget(-1,self)
-      self.doitAfficherOptionnel=False
+      self.doitAfficherOptionnel=True
       min,max=obj.getMinMax()
       if max < 2 and  hasattr(self, 'RBPlus') : self.RBPlus.close() 
       if max > 1 and  hasattr(self, 'RBPlus') : self.RBPlus.clicked.connect(self.ajouteMCParPB)
@@ -53,7 +54,7 @@ class MonWidgetFactCommun(Groupe):
 
   def leaveEvent(self,event):
       #print "leaveEvent", self.node.item.getLabelText()[0]
-      self.doitAfficherOptionnel=False
+      #self.doitAfficherOptionnel=False
       QWidget.leaveEvent(self,event)
 
   def delayAffiche(self):
index be75c09b9be9a1fdbb6d4d2a85c3a760065cb19c..c698206a046770d34fc3295cc299df9d1c11656a 100644 (file)
@@ -38,7 +38,7 @@ class  MonWidgetOptionnel (QWidget,Ui_WidgetOptionnel):
      self.parentQt=parentQt
 
   def afficheOptionnel(self,liste,liste_rouge,MC):
-     #print ('afficheOptionnel MonWidgetOptionnel', self,liste,MC)
+     #print ('afficheOptionnel MonWidgetOptionnel',self, liste,MC.node.item.nom)
      self.vireLesAutres(MC)
    
      if MC.node.item.nom in self.dicoMCWidgetOptionnel :
index 7e2eb6aa368da338045f85dcfd1ad592e9ce6b97..1c1b42b4548ad73bd5fd0cf2d1b0eaf13456c82c 100755 (executable)
@@ -177,9 +177,9 @@ class AppliSsIhm:
         ok = editor.saveFileAs()
         print ('ok ',ok)
 
-    def dumpXsd(self):
+    def dumpXsd(self, avecEltAbstrait = False):
         current_cata    = CONTEXT.getCurrentCata()
-        texteXSD = current_cata.dumpXsd()
+        texteXSD = current_cata.dumpXsd( avecEltAbstrait)
         return texteXSD
         #if self.maConfiguration.afficheIhm==False : exit()
         #else : return texteXSD
index d4ec3258b54f0e53cfaacd311233b724199c481b..21b6f8fa15d11f0ea8eb9f5e9f5c1c9e19529fc0 100644 (file)
@@ -220,7 +220,7 @@ class ReaderCata (ReaderCataCommun):
          try :
            import pyxb
          except :
-           print ('please source pyxb environment')
+           self.QWParent.informe('environnement', 'please source pyxb environment')
            exit()
          try : 
          #if 1 :
@@ -234,10 +234,10 @@ class ReaderCata (ReaderCataCommun):
            pathCata = os.path.dirname(self.fichierCata)+'/raw/'+nomCataXsd+'.py'
            import imp
            modeleMetier= imp.load_source(nomCataXsd,pathCata)
-           #print ('_________________________', modeleMetier)
          except :
          #else:
            if self.appliEficas.ssIhm == False :print ('______________ poum import cata_genere ')
+           self.QWParent.informe('XSD driver', 'unable to load xsd driver',critique=False)
            modeleMetier = None
       else :
            modeleMetier = None
@@ -255,11 +255,12 @@ class ReaderCata (ReaderCataCommun):
       
       self.cata.modeleMetier = modeleMetier
       if not self.cata :
-          try:
-            from PyQt5.QtWidgets import QMessageBox, QDialog
-            QMessageBox.critical( self.QWParent, tr("Import du catalogue"),tr("Impossible d'importer le catalogue ")+ self.fichierCata)
-          except : 
-            print ("Impossible d'importer le catalogue "+ self.fichierCata)
+          #try:
+            #from PyQt5.QtWidgets import QMessageBox, QDialog
+            #QMessageBox.critical( self.QWParent, tr("Import du catalogue"),tr("Impossible d'importer le catalogue ")+ self.fichierCata)
+          #except : 
+          #  print ("Impossible d'importer le catalogue "+ self.fichierCata)
+          self.QWParent.informe("Catalogue","Impossible d'importer le catalogue "+ self.fichierCata)
           self.appliEficas.close()
           if self.appliEficas.salome == 0 :
              sys.exit(1)
@@ -333,6 +334,7 @@ class ReaderCata (ReaderCataCommun):
           o=__import__(nom_cata)
           return o
       except Exception as e:
+          self.QWParent.informe('catalog', 'unable to load catalog file')
           import traceback
           traceback.print_exc()
           return 0
@@ -347,8 +349,8 @@ class ReaderCata (ReaderCataCommun):
           contient le nom des mots cles dans le bon ordre
       """
       self.cata_ordonne_dico, self.appliEficas.liste_simp_reel=autre_analyse_cata.analyseCatalogue(self.cata)
-      print ('_________________________________________', self)
-      print (self.cata_ordonne_dico)
+      #print ('_________________________________________', self)
+      #print (self.cata_ordonne_dico)
       #self.appliEficas.liste_simp_reel = ()
       #self.cata_ordonne_dico = {}
 
@@ -366,7 +368,7 @@ class ReaderCata (ReaderCataCommun):
       if self.appliEficas.maConfiguration.ficIcones==None : return
       try:
         ficIcones=self.appliEficas.maConfiguration.ficIcones
-        fichierIcones = __import__(ficIcones, globals(), locals(), [], -1)
+        fichierIcones = __import__(ficIcones, globals(), locals(), [], 0)
         self.appliEficas.maConfiguration.dicoIcones=fichierIcones.dicoDesIcones.dicoIcones
         self.appliEficas.maConfiguration.dicoImages=fichierIcones.dicoDesIcones.dicoImages
       except:
index 670ec41481e2498ee81fe1d321bea9ba3ac6f832..b1ca94f505efa8126d485d06d01ac90eb492e123 100644 (file)
@@ -311,4 +311,9 @@ class ENTITE(object):
        # PNPN il faut remonter a l etape
    
 
-   
+
+    def makeObjetPourVerifSignature(self,**args):
+        etape = self.class_instance(oper=self, args=args)
+        etape.MCBuild()
+        return etape
+
index dace06be9f79e1defc270ea7ce78e299f3c6c8c9..22263f3ce370d68e92117aac09885f8436c8df6c 100644 (file)
@@ -129,6 +129,7 @@ class OPER(N_ENTITE.ENTITE):
         nomsd = self.nommage.getNomConceptResultat(self.nom)
         etape = self.class_instance(oper=self, reuse=reuse, args=args)
         etape.MCBuild()
+        etape.metAJourNomASSD(nomsd)
         return etape.buildSd(nomsd)
 
     def make_objet(self, mc_list='oui'):
index 5bb15be50e29c6e57d4165d4749a7314b80ec95a..0cc371d7157a2e7305757ac279661f07140c63b7 100644 (file)
@@ -36,22 +36,7 @@ Maillage = OPER ( nom='Maillage', sd_prod=maillage,
 Champ = OPER ( nom='Champ', sd_prod=champ,
     SurLeMaillage = SIMP( statut='o', typ = maillage),
 ) 
+ChampMultiple = OPER ( nom='ChampMultiple', sd_prod=champ,
+    SurLeMaillage2 = SIMP( statut='o', typ = maillage,max="**"),
+) 
 
-#MaFonction = PROC( nom='MaFonction',
-#    monArgument1 = SIMP( statut='o', typ = 'TXM'),
-#    monArgument2 = SIMP( statut='f', typ = 'I'),
-#)
-#DefinitionListe = PROC( nom='DefinitionListe', 
-#        creeListe = SIMP( statut='f', typ = 'TXM',max='**'),
-#        creeListe2 = SIMP( statut='f', typ = 'I',homo="SansOrdreNiDoublon",max='**', into=(1,2,3,4)),
-#        creeListe3 = SIMP( statut='f', typ = 'I',max='**', into=(1,2,3,4)),
-#)
-#DefinitionFact = PROC (nom='DefinitionFact',
-#        leFactRepetable = FACT ( max= '**',
-#         unEntier = SIMP (statut='o', typ='I', defaut =1),
-#        ),
-#        leFactCompose = FACT (statut ='o',max='**',
-#         unFactPart1 = SIMP (statut='o', typ='I', defaut =1),
-#         unFactPart2 = SIMP (statut='o', typ='I', defaut =1),
-#        )
-#)