<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
<!ENTITY legal SYSTEM "legal.xml">
<!ENTITY appversion "1.6">
<!ENTITY manrevision "0.2">
<!ENTITY date "20 June 2004">
<!ENTITY app "Glom">
<!-- Information about the entities
       The legal.xml file contains legal information, there is no need to edit the file. 
       Use the appversion entity to specify the version of the application.
       Use the manrevision entity to specify the revision number of this manual.
       Use the date entity to specify the release date of this manual.
       Use the app entity to specify the name of the application. -->]>
<!-- 
      (Do not remove this comment block.)
  Maintained by the GNOME Documentation Project
  http://developer.gnome.org/projects/gdp
  Template version: 2.0 beta
  Template last modified Apr 11, 2002
-->
<!-- =============Document Header ============================= -->
<article id="index" lang="fr">
<!-- please do not change the id; for translations, change lang to -->
<!-- appropriate code -->
  <articleinfo> 
    <title>Manuel d'utilisation de Glom v0.2 </title>       
    <subtitle>pour Glom v1.6</subtitle>

    <copyright> 
      <year>2004</year> 
      <holder>Murray Cumming</holder> 
    </copyright><copyright><year>2008</year><holder>Bruno Brouard (annoa.b@gmail.com)</holder></copyright><copyright><year>2008</year><holder>Claude Paroz (claude@2xlibre.net)</holder></copyright> 
<!-- translators: uncomment this:

  <copyright>
   <year>2002</year>
   <holder>ME-THE-TRANSLATOR (Latin translation)</holder>
  </copyright>

   -->
<!-- An address can be added to the publisher information.  If a role is 
     not specified, the publisher/author is the same for all versions of the 
     document.  -->
    <publisher> 
      <publishername>Équipe de développement de Glom</publishername> 
    </publisher> 

      <legalnotice id="legalnotice">
         <para>Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, Version 1.1 ou ultérieure publiée par la Free Software Foundation sans section inaltérable, sans texte de première page de couverture ni texte de dernière page de couverture. Vous trouverez un exemplaire de cette licence en suivant ce <ulink type="help" url="ghelp:fdl">lien</ulink> ou dans le fichier COPYING-DOCS fourni avec le présent manuel.</para>
          <para>Ce manuel fait partie de la collection de manuels GNOME distribués selon les termes de la licence de documentation libre GNU. Si vous souhaitez distribuer ce manuel indépendamment de la collection, vous devez joindre un exemplaire de la licence au document, comme indiqué dans la section 6 de celle-ci.</para>
 
         <para>La plupart des noms utilisés par les entreprises pour distinguer leurs produits et services sont des marques déposées. Lorsque ces noms apparaissent dans la documentation GNOME et que les membres du projet de Documentation GNOME sont informés de l'existence de ces marques déposées, soit ces noms entiers, soit leur première lettre est en majuscule.</para>
 
         <para>LE PRÉSENT DOCUMENT ET SES VERSIONS MODIFIÉES SONT FOURNIS SELON LES TERMES DE LA LICENCE DE DOCUMENTATION LIBRE GNU SACHANT QUE : <orderedlist>
                 <listitem>
                   <para>LE PRÉSENT DOCUMENT EST FOURNI « TEL QUEL », SANS AUCUNE GARANTIE, EXPRESSE OU IMPLICITE, Y COMPRIS, ET SANS LIMITATION, LES GARANTIES DE MARCHANDABILITÉ, D'ADÉQUATION À UN OBJECTIF PARTICULIER OU DE NON INFRACTION DU DOCUMENT OU DE SA VERSION MODIFIÉE. L'UTILISATEUR ASSUME TOUT RISQUE RELATIF À LA QUALITÉ, À LA PERTINENCE ET À LA PERFORMANCE DU DOCUMENT OU DE SA VERSION DE MISE À JOUR. SI LE DOCUMENT OU SA VERSION MODIFIÉE S'AVÉRAIT DÉFECTUEUSE, L'UTILISATEUR (ET NON LE RÉDACTEUR INITIAL, L'AUTEUR, NI TOUT AUTRE PARTICIPANT) ENDOSSERA LES COÛTS DE TOUTE INTERVENTION, RÉPARATION OU CORRECTION NÉCESSAIRE. CETTE DÉNÉGATION DE RESPONSABILITÉ CONSTITUE UNE PARTIE ESSENTIELLE DE CETTE LICENCE. AUCUNE UTILISATION DE CE DOCUMENT OU DE SA VERSION MODIFIÉE N'EST AUTORISÉE AUX TERMES DU PRÉSENT ACCORD, EXCEPTÉ SOUS CETTE DÉNÉGATION DE RESPONSABILITÉ ; </para>
                 </listitem>
                 <listitem>
                   <para>EN AUCUNE CIRCONSTANCE ET SOUS AUCUNE INTERPRÉTATION DE LA LOI, QU'IL S'AGISSE D'UN DÉLIT CIVIL (Y COMPRIS LA NÉGLIGENCE), CONTRACTUEL OU AUTRE, L'AUTEUR, LE RÉDACTEUR INITIAL, TOUT PARTICIPANT OU TOUT DISTRIBUTEUR DE CE DOCUMENT OU DE SA VERSION MODIFIÉE, OU TOUT FOURNISSEUR DE L'UNE DE CES PARTIES NE POURRA ÊTRE TENU RESPONSABLE À L'ÉGARD DE QUICONQUE POUR TOUT DOMMAGE DIRECT, INDIRECT, PARTICULIER, OU ACCIDENTEL DE TOUT TYPE Y COMPRIS, SANS LIMITATION, LES DOMMAGES LIÉS À LA PERTE DE CLIENTÈLE, À UN ARRÊT DE TRAVAIL, À UNE DÉFAILLANCE OU UN MAUVAIS FONCTIONNEMENT INFORMATIQUE, OU À TOUT AUTRE DOMMAGE OU PERTE LIÉE À L'UTILISATION DU DOCUMENT ET DE SES VERSIONS MODIFIÉES, MÊME SI LADITE PARTIE A ÉTÉ INFORMÉE DE L'ÉVENTUALITÉ DE TELS DOMMAGES.</para>
                 </listitem>
           </orderedlist></para>
   </legalnotice>
 
   <!-- This file  contains link to license for the documentation (GNU FDL), and 
        other legal stuff such as "NO WARRANTY" statement. Please do not change 
	any of this. -->

    <authorgroup> 
      <author role="maintainer"> 
		<firstname>Murray</firstname> 
		<surname>Cumming</surname> 
		<affiliation> 
	  		<orgname>Équipe de développement de Glom</orgname> 
	  		<address> <email>murrayc@murrayc.com</email> </address> 
		</affiliation> 
      </author> 
      
<!-- This is appropriate place for other contributors: translators,
     maintainers,  etc. Commented out by default.
     
      <othercredit role="translator">
		<firstname>Latin</firstname> 
		<surname>Translator 1</surname> 
		<affiliation> 
	  		<orgname>Latin Translation Team</orgname> 
	  		<address> <email>translator@gnome.org</email> </address> 
		</affiliation>
		<contrib>Latin translation</contrib>
      </othercredit>
-->
    </authorgroup>


<!-- According to GNU FDL, revision history is mandatory if you are -->
<!-- modifying/reusing someone else's document.  If not, you can omit it. -->
<!-- Remember to remove the &manrevision; entity from the revision entries other
-->
<!-- than the current revision. -->
<!-- The revision numbering system for GNOME manuals is as follows: -->
<!-- * the revision number consists of two components -->
<!-- * the first component of the revision number reflects the release version of the GNOME desktop. -->
<!-- * the second component of the revision number is a decimal unit that is incremented with each revision of the manual. -->
<!-- For example, if the GNOME desktop release is V2.x, the first version of the manual that -->
<!-- is written in that desktop timeframe is V2.0, the second version of the manual is V2.1, etc. -->
<!-- When the desktop release version changes to V3.x, the revision number of the manual changes -->
<!-- to V3.0, and so on. -->  
    <revhistory>
      <revision> 
		  <revnumber>Glom 1.6</revnumber> 
		  <date>20 juin 2004</date> 
		  <revdescription> 
			 <para role="author">Murray Cumming</para> 
			 <para role="publisher">Murray Cumming</para> 
		  </revdescription> 
		</revision>
    </revhistory> 

    <releaseinfo>Ce manuel documente la version 1.6 de Glom</releaseinfo> 
    <legalnotice> 
      <title>Votre avis</title> 
      <para>Pour signaler une anomalie ou émettre une suggestion concernant Glom ou ce manuel, faites une soumission d'anomalie à <ulink url="http://bugzilla.gnome.org" type="http">GNOME Bugzilla</ulink> pour le produit Glom. Merci de faire une recherche sur bugzilla avant de soumettre votre anomalie pour s'assurer qu'elle n'a pas été déjà signalée.</para>
<!-- Translators may also add here feedback address for translations -->
    </legalnotice> 

    <abstract role="description">
      <para>Manuel d'utilisation de Glom.</para>
    </abstract>
  </articleinfo> 

  <indexterm zone="index"> 
    <primary>MY-GNOME-APP</primary> 
  </indexterm> 
  <indexterm zone="index"> 
    <primary>mygnomeapp</primary> 
  </indexterm>

<!-- ============= Document Body ============================= -->
<!-- ============= Introduction ============================== -->
<!-- Use the Introduction section to give a brief overview of what
     the application is and what it does. -->
  <sect1 id="mrp-introduction"> 
    <title>Introduction</title> 
    <para>Glom vous permet de concevoir et d'utiliser des systèmes de bases de données.</para>
    <!-- TODO: Take text from the website. -->
  </sect1>

<!-- =========== Getting Started ============================== -->
<!-- Use the Getting Started section to describe the steps required
     to start the application and to describe the user interface components
     of the application. If there is other information that it is important
     for readers to know before they start using the application, you should
     also include this information here. 
     If the information about how to get started is very short, you can 
     include it in the Introduction and omit this section. -->

  <sect1 id="glom-getting-started"> 
    <title>Premiers pas</title> 

    <sect2 id="glom-start">
    <title>Lancement de Glom</title>
    <para>Vous pouvez démarrer <application>Glom</application> comme ceci :</para> 
    <variablelist>
    	<varlistentry>
    		<term>Menu <guimenu>Applications</guimenu></term>
    		<listitem>
    		<para>Choisissez <menuchoice><guisubmenu>Bureautique</guisubmenu><guimenuitem>Glom</guimenuitem></menuchoice>.</para>
    		</listitem>
    	</varlistentry>
    </variablelist>
    </sect2>

    <sect2 id="glom-when-start">
    <title>Démarrage de Glom</title>
    <para>Au démarrage de <application>Glom</application>, la fenêtre suivante apparaît.</para>

    <!-- ==== Figure ==== -->
      <figure id="newproject"> 
	<title>Fenêtre de démarrage de Glom</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/start.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Affichage de la fenêtre principale de Glom.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
      </figure>
    <!-- ==== End of Figure ==== -->
  </sect2>
  </sect1>
<!-- ================ Usage ================================ -->
<!-- Use this section to describe how to use the application to perform the tasks for 
  which the application is designed. -->


    <sect1 id="glom-operator-usage">
    <title>Utilisation de Glom en tant qu'opérateur</title>
    <para>Pour ouvrir un document Glom existant, ouvrez-le à partir du gestionnaire de fichiers ou choisissez Glom à partir du menu Applications, puis sélectionnez le document lorsqu'on vous le demande. Glom demande un nom d'utilisateur et un mot de passe pour accéder à la base de données. Votre administrateur vous fournira votre nom d'utilisateur et votre mot de passe.</para>

    <para>Quand vous ouvrez un document existant, Glom se place à un <literal>niveau</literal> <literal>opérateur</literal>. Ce niveau d'utilisateur permet de chercher et de modifier des enregistrements, mais pas de modifier la structure fondamentale de la base de données.</para>

    <sect2 id="navigation">
    <title>Navigation</title>
    <para>Chaque base de données possède plusieurs tables. Pour examiner une autre table, choisissez <literal>Tables</literal> dans le menu <literal>Navigation</literal>. Puis cliquez deux fois sur la table ou sélectionnez-la et cliquez sur le bouton <literal>Ouvrir</literal>.</para>

    <figure id="operator-navigation-tables"> 
	<title>Navigation vers une table</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_tables.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Navigation vers une table.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
     </figure>

    </sect2>

    <sect2 id="viewing-and-entering-data">
    <title>Affichage et saisie de données</title>
    <para>Lorsque vous êtes en <literal>mode données</literal>, vous pouvez afficher ou saisir des informations soit dans la vue <literal>Liste</literal> ou dans la vue <literal>Détails</literal>.</para>

      <sect3 id="the-list-view">
      <title>La vue Liste</title>
      <para>La vue liste affiche plusieurs enregistrement à la fois et habituellement n'affiche que les champs les plus importants.</para>
      <para>Quand vous saisissez des données dans un champ, celles-ci sont enregistrées immédiatement dans la base de données dès que vous avez fini de le saisir. S'il s'agit d'un champ date ou heure, le format des données est automatiquement contrôlé.</para> 
      <para>Pour créer un nouvel enregistrement, il suffit de cliquer sur le bouton <literal>Ajouter</literal> ou de commencer à taper dans un champ de la dernière ligne vide. Un nouvel enregistrement est alors créé avec des champs vides prêts à être remplis.</para>

      <figure id="operator-data-list"> 
	<title>La vue Liste</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_data_list.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>La vue Liste.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
      </figure>

      <para>Pour trier les enregistrements, il suffit de cliquer sur l'en-tête d'une colonne. Par exemple, pour afficher des factures dans l'ordre chronologique vous pouvez cliquer sur la colonne « date », puis cliquer à nouveau pour les afficher dans l'ordre inverse.</para>
      </sect3>

      <sect3 id="the-details-view">
      <title>La vue Détails</title>
      <para>La vue Détails n'affiche qu'un seul enregistrement et affiche en général tous les champs dans un ordre approprié.</para>
      <para>Quand vous saisissez des données dans un champ, celles-ci sont enregistrées immédiatement dans la base de données dès que vous avez fini de le saisir. S'il s'agit d'un champ date ou heure, le format des données est automatiquement contrôlé.</para>
      <para>Pour créer un nouvel enregistrement, il suffit de cliquer sur le bouton <literal>Ajouter</literal>. Un nouvel enregistrement est alors créé avec des champs vides prêts à être remplis.</para>

  <figure id="operator-data-details"> 
	<title>La vue Détails</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_data_details.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>La vue Détails.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
      </figure>

      </sect3>

    </sect2>

    <sect2 id="finding-data">
    <title>Recherche de données</title>
    <para>Sélectionnez le <literal>mode Rechercher</literal> dans le menu Mode. Les champs dans les vues liste et détails sont maintenant vides et un bouton « Rechercher » apparaît en bas de la fenêtre.</para>
    <para>Saisissez une information ou une partie d'information dans un champ pour trouver les enregistrements qui contiennent cette information. Par exemple, saisissez Jim dans le champ nom pour trouver les enregistrements qui contiennent « Jim » ou « Jimmy » dans leur nom.</para> 
    <para>Quand vous appuyez sur le bouton <literal>Rechercher</literal>, Glom recherche les enregistrements puis les affiche. Si un seul enregistrement est trouvé, celui-ci est alors affiché dans la vue détails. Si plusieurs enregistrements sont trouvés, ils sont affichés dans la vue liste.</para>
    <!-- TODO: screenshot -->
    </sect2>

    <sect2 id="glom-operator-printing-reports">
    <title>Impression de rapports</title>
    <para>Si le développeur de la base de données a défini des rapports pour une table, ils apparaissent dans le menu <literal>Rapports</literal>. Il suffit de choisir le rapport dans le menu pour générer le rapport. Si vous avez effectué une recherche précédemment, le rapport ne contient que les données actuellement trouvées, sinon toutes les données sont présentes. Souvenez-vous que chaque table possède son propre rapport, il peut donc être nécessaire de basculer vers la bonne table pour obtenir un rapport particulier.</para>

     <figure id="operator-report-result"> 
	<title>Un rapport</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_report_result.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Un rapport.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
      </figure>

    </sect2>


    </sect1>

    <sect1 id="glom-developer-usage">
    <title>Utilisation de Glom en tant que développeur</title>
    <para>Quand vous créez un nouveau document, Glom se place à un <literal>niveau </literal> <literal>développeur</literal>. Vous pouvez également basculer vers le niveau développeur après avoir ouvert un document existant, grâce au menu <literal>Niveau utilisateur</literal>. Glom ne le permet que si l'administrateur de la base de données l'autorise.</para>

    <sect2 id="adding-tables">
    <title>Ajout de tables</title>
    <para>Vous pouvez voir la liste des tables existantes en choisissant <literal>Tables</literal> dans le menu <literal>Navigation</literal>. Cette fenêtre apparaît également après une connexion à un serveur de base de données et après avoir créé un nouveau document. Pour créer une nouvelle table, cliquez sur le bouton <literal>Ajouter</literal> et saisissez le nom de la nouvelle table. Glom suggère un titre convivial pour cette table. Les <literal>opérateurs</literal> voient ce titre plutôt que le nom réel de la table. Vous pouvez également marquer une table comme <literal>masquée</literal> pour les opérateurs. Par exemple, les opérateurs peuvent voir les « lignes de facture » comme des enregistrements reliés à la table « factures » mais ils ne doivent jamais être capables d'aller directement vers la table « lignes de facture ».</para>
    <!-- TODO: screenshot -->
    <para>Vous pouvez également spécifier une table comme <literal>table par défaut</literal>. Cette table sera affichée à chaque fois qu'un opérateur ouvre un document existant, sans lui demander de sélectionner une table dans la liste.</para>
    <para>Vous pouvez également utiliser cette fenêtre pour renommer une table existante.</para>
    <para>Cliquez sur le bouton <literal>Ouvrir</literal> pour afficher la table sélectionnée.</para>
    </sect2>

    <sect2 id="editing-fields">
    <title>Modification des champs</title>
    <para>Choisissez <literal>Champs</literal> dans le menu <literal>Développeur</literal>. Cela permet d'afficher la liste des champs de la table. Les nouvelles tables possèdent automatiquement un champ clé primaire mais vous pouvez modifier ce champ si nécessaire.</para>
    <para>Cliquez sur le bouton <literal>Ajouter</literal> pour ajouter un nouveau champ, puis saisissez le nom du nouveau champ. Glom propose un titre approprié et convivial pour ce champ, mais vous pouvez le modifier. Les <literal>opérateurs</literal> voient ce titre plutôt que le nom réel du champ.</para> 
    <para>Pour fournir plus de détails sur un champ, sélectionnez-le et cliquez sur le bouton <literal>Détails</literal>.</para>

    <figure id="developer-editing-fields"> 
	<title>Modification des champs</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_fields.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Modification des champs d'une table.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
     </figure>


    <sect3 id="primary-keys">
    <title>Clés primaires</title>
    <para>Chaque table doit posséder une et une seule <literal>clé primaire</literal>. La valeur de ce champ est unique ce qui signifie que chaque valeur dans ce champ n'apparaît que dans un seul enregistrement de la table. Par exemple, chaque enregistrement dans une table « clients » possède un « numéro de client ». Cette valeur est utilisée pour faire référence à ce client dans les autres tables telles que les enregistrements « Projets » et « Factures ». Voir la section <link linkend="sec-developer-relationships">Création de relations</link> pour apprendre comment relier des tables entre elles.</para>
    </sect3> 

    <sect3 id="field-types">
    <title>Types de champs</title>
    <para>Glom propose quelques types de champs simples : <orderedlist>
<listitem><simpara>Nombre</simpara></listitem>
<listitem><simpara>Texte</simpara></listitem>
<listitem><simpara>Date</simpara></listitem>
<listitem><simpara>Heure</simpara></listitem>
<listitem><simpara>Booléen - vrai ou faux</simpara></listitem>
<listitem><simpara>Image</simpara></listitem>
</orderedlist></para>
    </sect3>
  
    <sect3 id="calculated-fields">
    <title>Champs calculés</title>
    <para>Les valeurs de champs peuvent être calculées en fonction d'autres champs en utilisant le langage de programmation Python. Ce calcul doit être une implémentation d'une fonction Python qui doit renvoyer une valeur. La valeur renvoyée est utilisée comme valeur de champ. Cette valeur est recalculée à chaque fois qu'une des sources de champ change. À FAIRE : cela ne fonctionne pour l'instant que pour les valeurs par défaut et vous ne pouvez pas encore utiliser des valeurs de champ dans le calcul.</para>
    <para>Vous pouvez également utiliser des calculs pour spécifier une valeur par défaut pour les champs en sélectionnant l'onglet <literal>Valeur par défaut</literal> dans la fenêtre <literal>Détails des champs</literal>, en cliquant sur la case à cocher <literal>Valeur calculée</literal> puis en saisissant une formule Python. Vous pouvez tester ce calcul dans la fenêtre <literal>Édition</literal>.</para>  
    </sect3>

    </sect2>

    <sect2 id="arranging-layouts">
    <title>Arrangement de dispositions</title>
    <para>Chaque table possède sa vue <literal>Liste</literal> et <literal>Détails</literal> et, par défaut, tous les champs de la table sont affichés par ordre de création. Vous pouvez modifier la disposition en choisissant <literal>Disposition</literal> dans le menu <literal>Développeur</literal>.</para>

    <sect3 id="arranging-the-list-view">
    <title>Mise en page de la vue liste</title>
    <para>Dans la vue <literal>Liste</literal>, vous pouvez définir l'ordre des colonnes de champs et le masquage éventuel de certains champs.</para>

    <figure id="developer-layout-list"> 
	<title>Modification de l'agencement d'une liste</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_layout_list.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Modification de l'agencement d'une liste.</phrase> 
	    </textobject>
	  </mediaobject> 
	</screenshot> 
     </figure>
    </sect3>

    <sect3 id="arranging-the-details-view">
    <title>Mise en page de la vue détails</title>
    <para>Dans la vue <literal>détails</literal>, il est possible de créer des groupes de champs et de leur donner des titres. Vous pouvez alors mettre des champs dans ces groupes et définir l'ordre d'apparition des champs dans ces groupes. Vous pouvez également définir l'ordre des groupes. Par exemple, dans la table « Contacts », vous pouvez créer un groupe « Nom » et mettre les champs « titre », « prénom » et « nom » dans ce groupe. Vous pouvez avoir d'autres groupes pour les champs « Adresse ».</para>

    <figure id="developer-layout-details"> 
	<title>Modification de l'agencement des détails</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_layout_details.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Modification de l'agencement des détails.</phrase> 
	    </textobject>
	  </mediaobject> 
	</screenshot> 
     </figure>
    </sect3>

    </sect2>

    <sect2 id="sec-developer-relationships">
    <title>Création de relations</title>
    <para>Les tables dans les bases de données sont souvent reliées entre elles. Par exemple, une table « Factures » peut avoir un champ « Numéro de client ». Une valeur dans ce champ se réfère à un enregistrement de la table « Clients » avec la même valeur. Glom peut afficher des informations supplémentaires telles que le nom du client à partir de cet enregistrement relié. Il peut également afficher une liste de plusieurs enregistrement liés. Par exemple, plusieurs « Lignes de factures » reliées à un enregistrement dans « Facture ».</para>
    <para>Pour créer des relations, choisissez <literal>Relations</literal> dans le menu <literal>Développeur</literal>. La liste des relations existantes s'affiche. Cliquez sur le bouton <literal>Ajouter</literal> pour créer une nouvelle relation et saisissez un nom pour celle-ci. Choisissez ensuite un champ dans la table actuelle et un champ d'une autre table auquel il sera relié. Cette relation effectue la recherche de tous les enregistrements de l'autre table pour lesquels les valeurs des deux champs sont égales.</para>
    <!-- TODO: screenshot -->
   <para>Vous pouvez utiliser une relation dans les situations suivantes. <orderedlist>
<listitem><simpara>Pour afficher un champ lié dans les vues Liste ou Détails.</simpara></listitem>
<listitem><simpara>Pour afficher une liste des enregistrements liés dans la vue Détails.</simpara></listitem>
<listitem><simpara>Pour afficher la valeur d'un champ dans un enregistrement lié (par exemple, pour copier le prix actuel d'un « produit » dans le champ « prix » d'un enregistrement « ligne de facture »).</simpara></listitem>
<listitem><simpara>Pour calculer une valeur de champ.</simpara></listitem>
</orderedlist></para>
   </sect2> 

   <sect2 id="users-administration">
   <title>Gestion des utilisateurs</title>
   <para>Pour définir les <literal>opérateurs</literal> qui peuvent utiliser votre base de données et pour indiquer leurs droits d'accès aux différentes tables, choisissez <literal>Utilisateurs</literal> dans le menu <literal>Développeur</literal>.</para>
    <!-- TODO: screenshot -->
   </sect2>

   <sect2 id="translations">
   <title>Traductions</title>
   <para>L'interface utilisateur Glom (et ce document) est traduit dans plusieurs langues comme vous avez dû le voir si vous utilisez un ordinateur avec une interface utilisateur non anglaise. De plus, Glom affiche et comprend automatiquement les nombres et les dates en fonction des conventions actuelles de l'utilisateur local. Par exemple, un utilisateur aux U.S.A. peut saisir un prix comme 1.99 et une date comme 1/13/2008, mais un utilisateur allemand de la même base de données les verra comme 1,99 et 13.1.2008.</para>
   <para>Cependant, le système Glom que vous avez créé contient aussi du texte qui doit être traduit s'il est utilisé par des personnes qui parlent une autre langue. Par exemple, vous devez fournir des traductions pour les titres de vos tables, champs et rapports. Tous ces éléments textuels peuvent être listés si vous choisissez <literal>Traductions</literal> dans le menu <literal>Développeur</literal>. Dans cette fenêtre, vous pouvez indiquer la langue utilisée pour le texte original et saisir des traductions pour chaque élément de texte pour des langues supplémentaires. Quand le système Glom est ouvert par un utilisateur de cette langue, les éléments de texte sont affichés dans l'interface utilisateur.</para>

   <!-- TODO: Update this screenshot -->
   <figure id="developer-translations"> 
	<title>Traductions</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_translations.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Traductions.</phrase> 
	    </textobject>
	  </mediaobject> 
	</screenshot> 
     </figure>

    <para>Les traducteurs expérimentés sont probablement plus habitués au format de fichier .po, ou vous souhaitez peut-être utiliser les nombreux outils qui s'appliquent au format de fichier .po. En utilisant le bouton <literal>Exporter</literal>, vous pouvez créer un fichier .po pour l'exploiter dans un outil séparé ou pour l'expédier à un traducteur. Vous pouvez ensuite importer la traduction effectuée en utilisant le bouton <literal>Importer</literal>.</para>  

   </sect2>

   <sect2 id="defining-reports">
   <title>Définition de rapports</title>

   <sect3 id="adding-or-editing-reports">
   <title>Ajout et édition de rapports</title>

   <para>Glom peut produire des rapports pour afficher des champs spécifiques d'un ensemble d'enregistrements, triés et regroupés. Par exemple, un magasin peut avoir besoin d'un rapport listant tous les produits vendus en un mois, groupés par type de produits et triés par prix dans chaque groupe. Chaque table possède ses propres rapports accessibles par l'opérateur dans le menu <literal>Rapports</literal>.</para>
   <para>Pour définir un rapport ou modifier la définition d'un rapport existant, choisissez <literal>Rapports</literal> dans le menu <literal>Développeur</literal>.</para>
   <figure id="developer-editing-reports"> 
	<title>Création et édition de rapports</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_reports.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Création et édition de rapports.</phrase> 
	    </textobject>
	  </mediaobject> 
	</screenshot> 
     </figure>

    <para>Notez que chaque rapport possède un numéro d'identification (ID) ainsi qu'un nom convivial. Ceci permet à votre rapport d'avoir un titre traduit s'il est utilisé sur un ordinateur configuré dans une autre langue.</para>

    </sect3>

    <sect3 id="editing-a-report">
    <title>Édition d'un rapport</title>

    <para>Un rapport Glom possède trois zones : <orderedlist>
      <listitem><simpara>l'en-tête, qui apparaît au début du rapport ;</simpara></listitem>
      <listitem><simpara>la zone principale, dans laquelle les lignes enregistrements et résumé sont affichées avec les données actuelles de la base de données ;</simpara></listitem>
      <listitem><simpara>le pied de page, qui apparaît à la fin du rapport.</simpara></listitem>
    </orderedlist></para>

    <para>À l'intérieur d'une zone, telle que la partie principale, vous pouvez ajouter des <literal>Éléments</literal> de rapport tels que des champs, textes ou images. Ceux-ci apparaissent habituellement par ligne à l'impression du rapport avec une ligne pour chaque enregistrement. Dans le cas le plus simple, cela ressemble beaucoup à la vue liste de Glom. Vous pouvez ajouter des éléments à votre rapport en les sélectionnant dans la liste <literal>Éléments disponibles</literal> puis en cliquant sur le bouton <literal>Ajouter</literal>. L'élément est alors ajouté à la liste <literal>Éléments</literal> dans la zone sélectionnée.</para>
    <para>Pour fournir des détails aux éléments, tels que le texte ou l'image à afficher ou pour choisir le champ à afficher, sélectionnez l'élément dans la liste <literal>Éléments</literal> puis cliquez sur le bouton <literal>Modifier</literal>. Vous pouvez également indiquer le format du champ en cliquant sur le bouton <literal>Format</literal>, tout comme vous le faites pour définir l'apparence dans la vue détails ou liste.</para>

    <figure id="developer-editing-reports-details"> 
	<title>Édition d'un rapport</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_reports_details.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Rédaction d'un rapport.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
     </figure>

    <para>Certains éléments peuvent contenir d'autres éléments et posséder des propriétés supplémentaires pour contrôler la manière dont leurs sous-éléments sont présentés. Par exemple, l'élément <literal>Groupé par</literal> regroupe les enregistrements selon un champ. Par exemple, un rapport sur des produits peut regrouper la liste des produits par type de produit. Vous pouvez même ajouter un second sous-groupe à l'intérieur de l'élément principal <literal>Groupé par</literal> en sélectionnant votre élément <literal>Groupé par</literal> de premier niveau dans la liste <literal>Éléments</literal> pendant que vous ajoutez un nouvel élément <literal>Groupé par</literal> de la liste <literal>Éléments disponibles</literal>. Par exemple, vous pouvez regrouper vos produits par fabriquant à l'intérieur de chaque groupe de type de produit.</para>
    <para>Pour définir le champ par lequel les enregistrements doivent être regroupés, sélectionnez votre élément <literal>Groupé par</literal> dans la liste <literal>Éléments</literal> puis cliquez sur le bouton <literal>Modifier</literal>. Vous pouvez alors choisir le champ par lequel les enregistrements doivent être regroupés et sélectionner les champs par lesquels ces enregistrements doivent être triés dans le groupe. Vous pouvez également indiquer des champs supplémentaires à afficher sur la ligne de titre du groupe. Par exemple, vous pouvez regrouper les produits par numéro de fabricant mais également afficher le nom du fabricant.</para>

    <figure id="developer-editing-reports-group_by"> 
	<title>Modification d'un élément Groupé par</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_reports_group_by.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Rédaction d'un rapport.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
     </figure>

   <para>L'élément <literal>Groupe vertical</literal> peut contenir d'autres choses. Par exemple, il vous permet d'arranger les champs les uns en dessous des autres au lieu de l'un après les autres sur une même ligne. Ceci est utile pour regrouper des champs reliés tels que des lignes d'adresses ou juste pour condenser plus d'informations dans les lignes d'enregistrements sur le rapport.</para>
   
   <figure id="developer-editing-reports-vertical_group"> 
	<title>Un rapport avec des Groupes verticaux</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_reports_vertical_group.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Un rapport avec des Groupes verticaux.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
     </figure> 

   <para>Quand vous avez terminé, cliquez sur le bouton <literal>Fermer</literal> pour enregistrer la définition du rapport. Votre rapport peut maintenant être choisi dans le menu <literal>Rapports</literal>. Voir la section <link linkend="glom-operator-printing-reports">Impression de rapports</link> pour plus de détails.</para>



   </sect3>

   </sect2>
  
  </sect1>

<!-- =============Dialogs ================================= -->
<!-- This section contains the help to all dialogs that contain help button -->

<sect1 id="dialogs">
<title>Boîtes de dialogue</title>

<sect2 id="dialog_existing_or_new">
<title>Boîte de dialogue : boîte de dialogue initiale</title>
<para>Cette boîte de dialogue permet à l'utilisateur de choisir un document existant ou de créer un nouveau document. Les documents existants peuvent être choisis dans la liste de documents récemment ouverts ou dans la boîte de dialogue de sélection de fichier. Les documents peuvent également être ouverts à travers le réseau si d'autres utilisateurs exécutent Glom sur le réseau local. Enfin un nouveau document peut être créé soit en ouvrant un fichier modèle qui contient déjà quelques tables initiales et des enregistrements ou en générant un document vide.</para>
</sect2>

<sect2 id="dialog_new_database">
<title>Boîte de dialogue : nouvelle base de données</title>
<para/>
</sect2>

<sect2 id="dialog_error_create_database">
<title>Boîte de dialogue : création de base de données</title>
<para/>
</sect2>

<sect2 id="dialog_connection">
<title>Boîte de dialogue : connexion</title>
<para>Cette boîte de dialogue requiert un nom d'utilisateur et un mot de passe pour la connexion au serveur de base de données. Il ne s'agit normalement pas du même nom d'utilisateur et mot de passe avec lequel vous vous connectez à votre système. Tous les systèmes Glom nécessitent un serveur de base de données sur lequel les données réelles sont enregistrées. Si le serveur de base de données ne tourne pas sur l'ordinateur local (« localhost ») alors vous devez fournir un nom d'hôte réseau du type « glomserver.openismus.com » (votre nom d'hôte sera certainement différent).</para>
<para>C'est l'administrateur système qui fournit les détails de la connexion à la base de données.</para>
<para>Si vous êtes l'administrateur système, consultez la page Web <ulink url="http://www.glom.org/wiki/index.php?title=Initial_Postgres_Configuration" type="http">Configuration Postgres </ulink> [en anglais] de Glom pour obtenir de l'aide sur l'installation et la configuration d'un serveur de base de données.</para>
</sect2>

<sect2 id="dialog_error_connection">
<title>Boîte de dialogue : erreur de connexion</title>
<para>Cette boîte de dialogue est affichée si Glom n'a pas pu se connecter au serveur de base de données spécifié. Soit le serveur de base de données ne tourne pas sur l'hôte spécifié soit le nom d'utilisateur et le mot de passe n'ont pas été acceptés par le serveur de base de données. Voir la section <link linkend="dialog_connection">Boîte de dialogue de connexion</link> pour plus de détails.</para>

<para/>
</sect2>

<sect2 id="dialog_database_preferences">
<title>Boîte de dialogue : préférences de base de données</title>
<para/>
</sect2>

<sect2 id="dialog_change_language">
<title>Boîte de dialogue : changement de langue</title>
<para/>
</sect2>

<sect2 id="window_textobject">
<title>Fenêtre : objet texte</title>
<para/>
</sect2>

<sect2 id="window_imageobject">
<title>Fenêtre : objet image</title>
<para/>
</sect2>

<sect2 id="dialog_notebook">
<title>Boîte de dialogue : pagination</title>
<para/>
</sect2>

<sect2 id="dialog_data_invalid_format">
<title>Boîte de dialogue : format de données non valide</title>
<para/>
</sect2>

<sect2 id="dialog_relationship_overview">
<title>Boîte de dialogue : aperçu des relations</title>
<para/>
</sect2>

<sect2 id="window_groups">
<title>Fenêtre : groupes</title>
<para/>
</sect2>

<sect2 id="dialog_groupby_sort_fields">
<title>Boîte de dialogue : grouper par champs triés</title>
<para/>
</sect2>

<sect2 id="dialog_groupby_secondary_fields">
<title>Boîte de dialogue : grouper par champs secondaires</title>
<para/>
</sect2>

<sect2 id="window_button_script">
<title>Fenêtre : script de bouton</title>
<para/>
</sect2>

<sect2 id="window_field_calculation">
<title>Fenêtre : calcul de champ</title>
<para/>
</sect2>

<sect2 id="dialog_new_group">
<title>Boîte de dialogue : nouveau groupe</title>
<para/>
</sect2>

<sect2 id="dialog_choose_user">
<title>Boîte de dialogue : choix d'un utilisateur</title>
<para/>
</sect2>

<sect2 id="dialog_user">
<title>Boîte de dialogue : utilisateur</title>
<para/>
</sect2>

<sect2 id="dialog_translation_identify_original">
<title>Boîte de dialogue : identification de l'original de traduction</title>
<para/>
</sect2>

<sect2 id="dialog_translation_copy">
<title>Boîte de dialogue : copie de traduction</title>
<para/>
</sect2>

<sect2 id="dialog_choose_date">
<title>Boîte de dialogue : choix d'une date</title>
<para/>
</sect2>

<sect2 id="dialog_import_csv">
<title>Boîte de dialogue : importation dans une table</title>
<para>Cette boîte de dialogue permet à l'utilisateur d'importer un fichier CSV (valeurs séparées par des virgules) dans la table de base de données actuelle. Elle montre les premières lignes du fichier à importer et permet à l'utilisateur de sélectionner le champ de base de données correspondant à chaque colonne du fichier CSV. Pour les clés primaires incrémentées automatiquement, le champ clé primaire ne peut pas être utilisé comme champ de destination, mais dans les autres cas, un champ clé primaire doit absolument correspondre à une colonne du fichier.</para>
</sect2>

</sect1>

<!-- ============= Bugs ================================== -->
<!-- This section is optional and is commented out by default. 
     You can use it to describe known bugs and limitations of the 
	  program if there are any - please be frank and list all
     problems you know of. 
  
  <sect1 id="mayapp-bugs">
  <title>Known Bugs and Limitations</title>
  <para> </para>
 </sect1>
-->
<!-- ============= About ================================== -->
<!-- This section contains info about the program (not docs), such as
      author's name(s), web page, license, feedback address. This
      section is optional: primary place for this info is "About.." box of
      the program. However, if you do wish to include this info in the
      manual, this is the place to put it. Alternatively, you can put this information in the title page.-->
 <sect1 id="Glom-about"> 
    <title>À propos de Glom</title> 
    <para>Glom est maintenu par des volontaires de la communauté Glom et GNOME. Pour obtenir plus d'informations à propos de Glom, visitez le <ulink url="http://www.glom.org/" type="http">site Web de Glom</ulink>.</para>
    <para>Pour signaler une anomalie ou émettre une suggestion concernant cette application ou ce manuel, vous pouvez les soumettre en utilisant <ulink url="http://bugzilla.gnome.org" type="help">bugzilla</ulink>.</para>

    <para>Une autre excellente source d'informations est la <ulink url="http://www.glom.org" type="http">liste de diffusion</ulink> de Glom.</para>

    <para>Ce programme est distribué selon les termes de la Licence Publique Générale GNU, tels que publiés par la Free Software Foundation ; soit la version 2 de cette licence ou (à votre choix) toute version ultérieure. Vous trouverez une copie de cette licence en suivant ce <ulink type="help" url="ghelp:gpl">lien</ulink> ou dans le fichier COPYING fourni avec la source du code de ce programme.</para>
  </sect1>

  <appendix id="sec-concepts">
  <title>Concepts</title>
  <para>Glom est simple d'utilisation mais vous devez comprendre les concepts de base suivants. <orderedlist>
<listitem><simpara><literal>Base de données</literal> : chaque document Glom permet l'accès à une base de données.</simpara></listitem>
<listitem><simpara><literal>Table</literal> : chaque base de données contient plusieurs tables, telles que des tables « Clients » et « Factures ».</simpara></listitem>
<listitem><simpara><literal>Champ</literal> : chaque table possède plusieurs champs, tels que des champs « numéro de clients », « nom » et « date de naissance ». Dans d'autres documents et applications, les champs sont quelquefois appelés « colonnes ».</simpara></listitem>
<listitem><simpara><literal>Enregistrements</literal> : chaque table contient plusieurs enregistrements, chacun d'eux possèdent des valeurs pour chacun des champs. Par exemple, la table « clients » possède un enregistrement pour chaque client. Dans d'autres documents et applications, les enregistrements sont quelquefois appelés <literal>Lignes</literal>.</simpara></listitem>
<listitem><simpara><literal>Relations</literal> : chaque table peut être reliée à d'autres tables à travers des champs dans les deux tables. Par exemple, une table de « Clients » peut avoir un lien avec la table « Factures » afin de pouvoir afficher toutes les factures de ce client. Seuls les développeurs ont besoin de comprendre ce concept. Dans d'autres documents et applications, les relations sont quelquefois appelées « jointures ».</simpara></listitem> 
</orderedlist></para>
  </appendix>

  <appendix id="sec-calculated-fields">
  <title>Champs calculés et scripts de boutons</title>
  <para>Les champs calculés et les scripts de boutons utilisent le langage de programmation Python. Le calcul ou le script est la réalisation d'une fonction dont la signature vous est fournie.</para>

     <figure id="developer-editing-fields-calculated"> 
	<title>Édition de la définition d'un champ calculé</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_fields_dialog_calculated.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Édition de la définition d'un champ calculé.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
     </figure>

  <sect1 id="field-values">
  <title>Valeurs de champ</title>
  <para>Par exemple, <programlisting>record["prenom"]</programlisting> est la valeur du champ prenom de l'enregistrement actuel.</para>
  </sect1>

  <sect1 id="related-records">
  <title>Enregistrements reliés</title>
  <para>Par exemple, <programlisting>record.related["location"]</programlisting> fournit les enregistrements reliés à l'enregistrement actuel.</para>

  <sect2 id="single-related-records">
  <title>Enregistrements reliés unique</title>
  <para>Pour les relations qui spécifient un enregistrement unique, vous pouvez récupérer la valeur de ce champ dans cet enregistrement. Par exemple, <programlisting>record.related["location"]["nom"]</programlisting> est la valeur du champ nom dans la table indiquée par la relation location (souvent appelée location::name).</para>
  </sect2>

  <sect2 id="multiple-related-records">
  <title>Enregistrements reliés multiples</title>
  <para>Pour les relations qui spécifient des enregistrements multiples, vous pouvez utiliser les fonctions d'agrégation (sum, count, average) pour récupérer des valeurs globales. Par exemple : <programlisting>record.related["facture"].sum("prix_total")</programlisting></para>
  </sect2>

  </sect1>

  <sect1 id="testing-for-empty-values">
  <title>Test de valeurs vides</title>
  <para>La manière de tester les valeurs vides dépend du type de champ :</para>

  <sect2 id="non-text-fields">
  <title>Champs non-texte</title>
  <para>Les champs non-texte peuvent être vides, signifiant que l'utilisateur n'a saisi aucune valeur dans le champ. Par exemple, Glom ne suppose pas qu'une valeur vide dans un champ numérique signifie 0.</para>
  <para>Vous pouvez tester si un champ est vide en utilisant le « None » de Python. Par exemple :</para>
  <para>
  <programlisting>
  if(record["numero_identification"] == None):
    return "Aucun contact"
  else:
    return record.related["contacts"]["nom_complet"]
  </programlisting>
  </para>
  <para>Vous pourriez également tester s'il existe des enregistrements reliés. Par exemple :</para>
  <para>
  <programlisting>
  if(record.related["contacts"] == None):
    return "Aucun Contact"
  else:
    return record.related["contacts"]["nom_complet"]
  </programlisting>
  </para>
  </sect2>

  <sect2 id="text-fields">
  <title>Champs texte</title>
  <para>Pour les champs texte, vous devez vérifier que les chaînes ne sont pas vides. Il n'est pas possible dans Glom de faire la distinction entre des chaînes vides et l'absence d'une chaîne parce que ce n'est pas avantageux de le faire. Par exemple :</para>
  <para>
  <programlisting>
  if(record["nom_complet"] == ""):
    return "Aucun nom"
  else:
    return record["nom_complet"]
  </programlisting>
  </para>
  </sect2>
</sect1>


<sect1 id="using-the-full-pygda-api">
  <title>Utilisation de l'API pygda complète</title>
  <para>Le module pygda est une API Python de l'API libgda. L'attribut <literal>connection</literal> d'un enregistrement fournit une gda.connection qui peut être utilisée pour accéder à la base de données actuelle de manière directe. Ceci vous permet d'exécuter n'importe quelle requête SQL, par exemple lire des données de la base de données avec SELECT ou modifier des valeurs dans la base de données avec un UPDATE. Notez que la connexion est déjà ouverte ce qui vous évite le travail difficile de spécification des détails de connexion.</para>
  <para>L'attribut <literal>table_name</literal> de l'enregistrement fournit également le nom de la table actuelle.</para>
  <para>Cet exemple permet de lire toutes les données de la table actuelle et d'afficher les valeurs sur le terminal :</para>
  <para>
  <programlisting>
# Use the current database's connection 
# to get all the data for the current table.
#
# record.connection is an already-open gda.connection object,
# saving us the bother of opening the connection,
# or even knowing the name of the database.

query = "SELECT * FROM %s" % record.table_name
data_model = gda.gda_execute_select_command(record.connection, query)

rows = data_model.get_n_rows()
columns = data_model.get_n_columns()
print "    Number of columns: ", columns

for i in range(columns):
    print "      column ", i;
    print "        name=", data_model.get_column_title(i)

    # Find out whether it's the primary key:
    field = data_model.describe_column(i)
    if field.get_primary_key():
        print "        (primary key)"

    print "\n";
     
print "    Number of rows: ", rows

for row_index in range(rows):
    print "      row ", row_index;

    for col_index in range(columns):
        print "        value=", data_model.get_value_at(col_index, row_index).get()

    print "\n";
  </programlisting>
  </para>
  </sect1>

  </appendix>

 
</article>
