<?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="es">
<!-- please do not change the id; for translations, change lang to -->
<!-- appropriate code -->
  <articleinfo> 
    <title>Manual del usuario de Glom V0.2</title>       
    <subtitle>para Glom v1.6</subtitle>

    <copyright> 
      <year>2004</year> 
      <holder>Murray Cumming</holder> 
    </copyright><copyright><year>2008-2010</year><holder>Daniel Mustieles (daniel.mustieles@gmail.com)</holder></copyright><copyright><year>2007</year><holder>Jorge González (jorgegonz@svn.gnome.org)</holder></copyright><copyright><year>2008</year><holder>QA: Jorge González (jorgegonz@svn.gnome.org)</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>Equipo de desarrollo de Glom</publishername> 
    </publisher> 

      <legalnotice id="legalnotice">
         <para>Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre de GNU, Versión 1.1 o cualquier otra versión posterior publicada por la Free Software Foundation; sin Secciones Invariantes ni Textos de Cubierta Delantera ni Textos de Cubierta Trasera. Puede encontrar una copia de la licencia GFDL en este <ulink type="help" url="ghelp:fdl">enlace</ulink> o en el archivo COPYING-DOCS distribuido con este manual.</para>
          <para>Este manual es parte de una colección de manuales de GNOME distribuido bajo la GFDL. Si quiere distribuir este manual por separado de la colección, puede hacerlo añadiendo una copia de la licencia al manual, tal como se describe en la sección 6 de la licencia.</para>
 
         <para>Muchos de los nombres usados por compañías para distinguir sus productos y servicios son mencionados como marcas comerciales. Donde esos nombres aparezcan en cualquier documentación de GNOME, y los miembros del Proyecto de Documentación de GNOME están al corriente de esas marcas comerciales, entonces los nombres se pondrán en mayúsculas o con la inicial en mayúsculas.</para>
 
         <para>ESTE DOCUMENTO Y LAS VERSIONES MODIFICADAS DEL MISMO SE PROPORCIONAN SEGÚN LAS CONDICIONES ESTABLECIDAS EN LA LICENCIA DE DOCUMENTACIÓN LIBRE DE GNU (GFDL) Y TENIENDO EN CUENTA QUE: <orderedlist>
                 <listitem>
                   <para>EL DOCUMENTO SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI EXPLÍCITA NI IMPLÍCITA INCLUYENDO, SIN LIMITACIÓN, GARANTÍA DE QUE EL DOCUMENTO O VERSIÓN MODIFICADA DE ÉSTE CAREZCA DE DEFECTOS COMERCIALES, SEA ADECUADO A UN FIN CONCRETO O INCUMPLA ALGUNA NORMATIVA. TODO EL RIESGO RELATIVO A LA CALIDAD, PRECISIÓN Y UTILIDAD DEL DOCUMENTO O SU VERSIÓN MODIFICADA RECAE EN USTED. SI CUALQUIER DOCUMENTO O VERSIÓN MODIFICADA DE AQUÉL RESULTARA DEFECTUOSO EN CUALQUIER ASPECTO, USTED (Y NO EL REDACTOR INICIAL, AUTOR O CONTRIBUYENTE) ASUMIRÁ LOS COSTES DE TODA REPARACIÓN, MANTENIMIENTO O CORRECCIÓN NECESARIOS. ESTA RENUNCIA DE GARANTÍA ES UNA PARTE ESENCIAL DE ESTA LICENCIA. NO SE AUTORIZA EL USO DE NINGÚN DOCUMENTO NI VERSIÓN MODIFICADA DE ÉSTE POR EL PRESENTE, SALVO DENTRO DEL CUMPLIMIENTO DE LA RENUNCIA;Y</para>
                 </listitem>
                 <listitem>
                   <para>BAJO NINGUNA CIRCUNSTANCIA NI BAJO NINGUNA TEORÍA LEGAL, SEA POR ERROR (INCLUYENDO NEGLIGENCIA), CONTRATO O DE ALGÚN OTRO MODO, EL AUTOR, EL ESCRITOR INICIAL, CUALQUIER CONTRIBUIDOR, O CUALQUIER DISTRIBUIDOR DEL DOCUMENTO O VERSIÓN MODIFICADA DEL DOCUMENTO, O CUALQUIER PROVEEDOR DE CUALQUIERA DE ESAS PARTES, SERÁ RESPONSABLE ANTE NINGUNA PERSONA POR NINGÚN DAÑO DIRECTO, INDIRECTO, ESPECIAL, INCIDENTAL O DERIVADO DE NINGÚN TIPO, INCLUYENDO, SIN LIMITACIÓN DAÑOS POR PÉRDIDA DE MERCANCÍAS, PARO TÉCNICO, FALLO INFORMÁTICO O MAL FUNCIONAMIENTO O CUALQUIER OTRO POSIBLE DAÑO O PÉRDIDAS DERIVADAS O RELACIONADAS CON EL USO DEL DOCUMENTO O SUS VERSIONES MODIFICADAS, AUNQUE DICHA PARTE HAYA SIDO INFORMADA DE LA POSIBILIDAD DE QUE SE PRODUJESEN DICHOS DAÑOS.</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>Equipo de desarrollo 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 de junio de 2004</date> 
		  <revdescription> 
			 <para role="author">Murray Cumming</para> 
			 <para role="publisher">Murray Cumming</para> 
		  </revdescription> 
		</revision>
    </revhistory> 

    <releaseinfo>Este manual describe el uso de la versión 1.6 de Glom</releaseinfo> 
    <legalnotice> 
      <title>Comentarios</title> 
      <para>Para informar sobre un error o hacer sugerencias sobre Glom o sobre éste manual, puede enviarlas en la página <ulink url="http://bugzilla.gnome.org" type="http">Gnome Bugzilla</ulink>, seleccionando el producto Glom. Para asegurarse de que otros no han informado antes del mismo fallo, busque en Bugzilla antes de enviar su error.</para>
<!-- Translators may also add here feedback address for translations -->
    </legalnotice> 

    <abstract role="description">
      <para>Manual del usuario 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>Introducción</title> 
    <para>Glom le permite diseñar y usar sistemas de bases de datos.</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>Inicio</title> 

    <sect2 id="glom-start">
    <title>Iniciar Glom</title>
    <para>Puede iniciar <application>Glom</application> de las siguientes maneras:</para> 
    <variablelist>
    	<varlistentry>
    		<term>Menú de <guimenu>Aplicaciones</guimenu></term>
    		<listitem>
    		<para>Elija <menuchoice><guisubmenu>Oficina</guisubmenu><guimenuitem>Glom</guimenuitem></menuchoice>.</para>
    		</listitem>
    	</varlistentry>
    </variablelist>
    </sect2>

    <sect2 id="glom-when-start">
    <title>Al iniciar Glom</title>
    <para>Se mostrará la siguiente ventana al iniciar <application>Glom</application>.</para>

    <!-- ==== Figure ==== -->
      <figure id="newproject"> 
	<title>Ventana de inicio de Glom</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/start.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Muestra la ventana principal 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>Uso de Glom como un operador</title>
    <para>Para abrir un documento existente de Glom puede hacerlo con el administrador de archivos o bien puede seleccionar Glom en el  menú de Aplicaciones, y después escoger el documento cuando se le pregunte. Glom le pedirá un nombre de usuario y una contraseña para acceder a la base de datos. El administrador le proporcionará su nombre de usuario y su contraseña.</para>

    <para>Cuando abra un documento existente, Glom estará ejecutándose a <literal>nivel de usuario</literal><literal>Operador</literal>. Éste nivel le permite buscar y editar registros pero no le permite cambiar la estructura fundamental de la base de datos.</para>

    <sect2 id="navigation">
    <title>Navegación</title>
    <para>Cada base de datos tiene varias tablas. Para ver una tabla diferente, escoja <literal>Tablas</literal> del menú de <literal>Navegación</literal>. Después pulse dos veces sobre la tabla o bien selecciónela y pulse el botón <literal>Abrir</literal>.</para>

    <figure id="operator-navigation-tables"> 
	<title>Navegar a una tabla</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_tables.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Navegar a una tabla.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
     </figure>

    </sect2>

    <sect2 id="viewing-and-entering-data">
    <title>Ver e introducir datos</title>
    <para>Cuando trabaje en el <literal>Modo de datos</literal>, puede introducir información en la <literal>Lista</literal> o en la vista de <literal>Detalles</literal>.</para>

      <sect3 id="the-list-view">
      <title>La vista de lista</title>
      <para>La vista de lista muestra cuántos registros a la vez y habitualmente muestra sólo los campos más importantes.</para>
      <para>Cuando introduzca datos en un campo se guardarán en la base de datos inmediatamente después de que termine de editarlo. Si es un campo de fecha u hora el formato se comprobará automáticamente.</para> 
      <para>Para crear un nuevo registro simplemente pulse el botón <literal>Nuevo</literal>, o empiece a escribir en un campo en la última fila vacía. Se creará un nuevo registro con los campos en blanco para que los rellene.</para>

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

      <para>Para ordenar los registros, simplemente pulse en la cabecera de una columna. Por ejemplo, puede querer pulsar sobre una columna de fecha para listar facturas por su fecha, y pulsar de nuevo para listarlas en orden inverso.</para>
      </sect3>

      <sect3 id="the-details-view">
      <title>La vista de detalles</title>
      <para>La vista de detalles muestra un único registro, y habitualmente muestra todos los campos ordenados adecuadamente.</para>
      <para>Cuando introduzca datos en un campo se guardarán en la base de datos inmediatamente después de que termine de editarlo. Si es un campo de fecha u hora el formato se comprobará automáticamente.</para>
      <para>Para crear un nuevo registro pulse el botón <literal>Nuevo</literal>. Se creará un nuevo registro con los campos vacíos para que los pueda rellenar.</para>

  <figure id="operator-data-details"> 
	<title>La vista de detalles</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_data_details.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>La vista de detalles.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
      </figure>

      </sect3>

    </sect2>

    <sect2 id="finding-data">
    <title>Buscar datos</title>
    <para>Elija <literal>Modo de búsqueda</literal> del menú. Los campos en la lista y vista detallada estarán vacíos y un botón de búsqueda aparecerá en la parte inferior de la ventana.</para>
    <para>Introduzca la información, o parte de la información, en el campo para buscar registros que contengan esa información en ese campo. Por ejemplo, introduzca Javi en un campo de nombre para buscar registros con «Javi» o «Javier» en el campo «Nombre».</para> 
    <para>Al pulsar el botón <literal>Buscar</literal>, Glom buscará los registros y después los mostrará.Si sólo se encuentra un registro entonces se mostrará con la vista de «Detalles». Si se encuentran varios registros, entonces se mostrarán con la vista de «Lista».</para>
    <!-- TODO: screenshot -->
    </sect2>

    <sect2 id="glom-operator-printing-reports">
    <title>Imprimir informes</title>
    <para>Si el desarrollador de su base de datos ha definido algunos informes para una tabla entonces los verá listados en el menú <literal>Informes</literal>. Simplemente seleccione el informe del menú para crearlo. Si ha realizado previamente una búsqueda, el informe contendrá únicamente los datos encontrados. De otro modo, contendrá todos los datos del informe actual. Recuerde que cada tabla tiene sus propios informes, por lo que puede tener que cambiar a la tabla oportuna para utilizar un informe concreto.</para>

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

    </sect2>


    </sect1>

    <sect1 id="glom-developer-usage">
    <title>Uso de Glom como desarrollador</title>
    <para>Cuando cree un nuevo documento, Glom estará ejecutándose a <literal>nivel de usuario</literal><literal>Desarrollador</literal>. También puede cambiar al nivel de usuario «Desarrollador» después de abrir un documento existente, desde el menú <literal>Nivel de usuario</literal>. Glom permitirá este cambio sólo si el administrador también lo permite.</para>

    <sect2 id="adding-tables">
    <title>Añadir tablas</title>
    <para>Puede ver la lista de las tablas existentes escogiendo <literal>Tablas</literal> del menú de <literal>Navegación</literal>. También verá esta ventana después de conectarse a un servidor de bases de datos, después de crear un documento nuevo. Para crear una tabla nueva, pulse en el botón <literal>Añadir</literal> e introduzca un nombre para la tabla nueva. Éste nombre no debería contener espacios ni caracteres especiales. Glom le sugerirá un título legible por humanos para esta tabla. Los <literal>Operadores</literal> verán éste título en lugar del nombre actual de la tabla. También puede marcar una tabla como <literal>oculta</literal> para los Operadores. Por ejemplo, los Operadores deberían ver «Lista de facturas» como un registro relacionado de la tabla «Facturas», pero nunca deberán poder navegar directamente por la tabla «Lista de facturas».</para>
    <!-- TODO: screenshot -->
    <para>Puede especificar una tabla como la <literal>tabla predeterminada</literal>. Esta tabla e mostrará siempre que un operador abra un documento existente, sin preguntarle que seleccione una tabla de la lista.</para>
    <para>También puede usar esta ventana para renombrar una tabla existente.</para>
    <para>Pulse el botón de <literal>Abrir</literal> para ver las tablas seleccionadas.</para>
    </sect2>

    <sect2 id="editing-fields">
    <title>Editar campos</title>
    <para>Elija <literal>Campos</literal> del menú de <literal>Desarrollador</literal>. Esto mostrará la lista de campos en la tabla. Las tablas nuevas tienen un campo de clave primaria automáticamente, pero puede cambiar el campo si es necesario.</para>
    <para>Para añadir un campo nuevo pulse el botón <literal>Añadir</literal> e introduzca el nombre del campo nuevo. Glom supondrá un título apropiado y legible por humanos para este campo, pero puede editarlo. Los <literal>Operadores</literal> verán este nombre en lugar del nombre actual del campo.</para> 
    <para>Para especificar más detalles de un campo, seleccione el campo y pulse en el botón de <literal>Detalles</literal>.</para>

    <figure id="developer-editing-fields"> 
	<title>Editar campos</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_fields.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Editar los campos de tabla.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
     </figure>


    <sect3 id="primary-keys">
    <title>Claves primarias</title>
    <para>Cada tabla debe tener una, y solamente una, <literal>Clave primaria</literal>. El valor en este campo debe ser único, lo que quiere decir que cada valor en este campo sólo aparecerá en un sólo registro de la tabla. Por ejemplo, cada registro de la tabla «Clientes» tendrá también un campo «ID del cliente». Este valor se usará para referirse a este cliente en otras tablas, tales como los registros «Proyectos» y «Facturas». Lea la sección <link linkend="sec-developer-relationships">Creando relaciones</link> para obtener más información acerca de cómo relacionar tablas entre si.</para>
    </sect3> 

    <sect3 id="field-types">
    <title>Tipos de campos</title>
    <para>Glom ofrece algunos tipos simples de campos: <orderedlist>
<listitem><simpara>Número</simpara></listitem>
<listitem><simpara>Texto</simpara></listitem>
<listitem><simpara>Fecha</simpara></listitem>
<listitem><simpara>Hora</simpara></listitem>
<listitem><simpara>Booleano - tanto cierto como falso</simpara></listitem>
<listitem><simpara>Imagen</simpara></listitem>
</orderedlist></para>
    </sect3>
  
    <sect3 id="calculated-fields">
    <title>Campos calculados</title>
    <para>El valor de los campos se puede calcular con términos de otros campos, usando el lenguaje de programación Python. Éste cálculo debería ser la implementación de una función en Python y debería devolver un valor. El valor devuelto se usará como el valor del campo. Este valor se volverá a calcular cada vez que cambie alguno de los campos de los que obtiene sus datos. Por desarrollar: Por ahora ésto sólo funciona para valores predeterminados, y tampoco se pueden usar los valores de los campos en el cálculo.</para>
    <para>También puede hacer cálculos para especificar el valor predeterminado de los campos, seleccionado la pestaña <literal>Valor predeterminado</literal> de la ventana <literal>Detalles del campo</literal>, pulsando sobre la casilla <literal>Calcular valor</literal> e introduciendo un cálculo en Python. Puede comprobar este cálculo en la ventana <literal>Editar</literal>.</para>  
    </sect3>

    </sect2>

    <sect2 id="arranging-layouts">
    <title>Ordenando las distribuciones</title>
    <para>Cada tabla tiene una vista de <literal>Lista</literal> y de <literal>Detalles</literal>, por omisión ambas muestran todos los campos de la tabla por fecha de creación. Puede editar la distribución escogiendo <literal>Distribución</literal> del menú de <literal>Desarrollador</literal>.</para>

    <sect3 id="arranging-the-list-view">
    <title>Ordenar la vista de lista</title>
    <para>Para la vista de <literal>Lista</literal>, puede especificar la secuencia de los campos columna, y también si hay algún campo oculto.</para>

    <figure id="developer-layout-list"> 
	<title>Editar la disposición de la lista</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_layout_list.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Editar la disposición de la lista.</phrase> 
	    </textobject>
	  </mediaobject> 
	</screenshot> 
     </figure>
    </sect3>

    <sect3 id="arranging-the-details-view">
    <title>Ordenar la vista detalles</title>
    <para>Para la vista de <literal>Detalles</literal>, puede crear grupos o campos y darlos títulos. Después puede colocar campos en esos grupos y especificar la secuencia de los campos en los grupos. También puede especificar la secuencia de los grupos. Por ejemplo, en una tabla de «Contactos» puede crear un grupo llamado «Nombre», y colocar los campos «Título», «Nombre» y «Apellido» en ese grupo. Puede tener otros grupos para los campos «Direcciones».</para>

    <figure id="developer-layout-details"> 
	<title>Editar la disposición de los detalles</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_layout_details.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Editar la disposición de los detalles.</phrase> 
	    </textobject>
	  </mediaobject> 
	</screenshot> 
     </figure>
    </sect3>

    </sect2>

    <sect2 id="sec-developer-relationships">
    <title>Crear relaciones</title>
    <para>Muchas veces las tablas de una base de datos están relacionadas entre sí. Por ejemplo, una tabla de «Facturas» podrá tener un campo «ID del cliente». El valor de ese campo especifica un registro en la tabla «Clientes» el cual tiene el mismo valor. Glom puede mostrar información adicional, como el nombre del cliente, de ese registro relacionado. O puede mostrar una lista de varios registros relacionados - por ejemplo, algún registro de la «Lista de facturas» que está relacionado con otro registro de «Facturas».</para>
    <para>Para crear relaciones, escoja <literal>Relaciones</literal> del menú de <literal>Desarrollador</literal>. Esto le mostrará la lista de relaciones existentes. Para crear una nueva relación pulse el botón de <literal>Añadir</literal> e introduzca un nombre para ella. Debe elegir un campo de la tabla actual y un campo de otra tabla con el que se creará la relación. Esta relación buscará cualquier registro en la otra tabla para los que los valores de ambos campos sean iguales.</para>
    <!-- TODO: screenshot -->
   <para>Puede usar las relaciones en los siguientes lugares. <orderedlist>
<listitem><simpara>Para mostrar un campo relacionado en la lista o en la vista detallada.</simpara></listitem>
<listitem><simpara>Para mostrar una lista de registros relacionados en la vista detallada.</simpara></listitem>
<listitem><simpara>Para buscar un valor de un campo en un registro relacionado. Por ejemplo, copie el precio de un «Producto» en el campo «Precio» de un registro de «Facturas».</simpara></listitem>
<listitem><simpara>Para calcular el valor de un campo.</simpara></listitem>
</orderedlist></para>
   </sect2> 

   <sect2 id="users-administration">
   <title>Administración de usuarios</title>
   <para>Para definir los <literal>Operadores</literal> que pueden utilizar su base de datos y para especificar que acceso tienen a las distintas tablas, seleccione <literal>Usuarios</literal> del menú <literal>Desarrollador</literal>.</para>
    <!-- TODO: screenshot -->
   </sect2>

   <sect2 id="translations">
   <title>Traducciones</title>
   <para>La interfaz de usuario de Glom (y este documento) está traducido a varios idiomas, como ya debería poder ver si utiliza un equipo con un interfaz de usuario que no esté en inglés. Además, Glom entiende y muestra automáticamente números y fechas de acuerdo a las convenciones actuales de localización del usuario. Por ejemplo, un usuario en EE. UU. debe introducir un precio como 1.99 y una fecha como 1/13/2008, pero un usuario alemán de la misma base de datos lo verá más adelante como 1,99 y 13.1.2008.</para>
   <para>Sin embargo, el sistema Glom que crea contiene también texto que debe traducirse si personas que hablan diferentes idiomas lo van a usar.Por ejemplo, puede proporcionar traducciones para los títulos de sus tablas, campos e informes. Todos estos elementos de texto se pueden ver en una lista cuando selecciona <literal>Traducciones</literal> en el menú <literal>Desarrollador</literal>. En esta ventana puede especificar el idioma que ha utilizado para el texto original, e introducir las traducciones adicionales en cada idioma para cada elemento de texto. Cuando un usuario de ese idioma abre el sistema Glom, se mostrarán esos elementos de texto en la interfaz de usuario.</para>

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

    <para>Los traductores experimentados pueden estar más familiarizados con el formato .po, o puede desear utilizar la mayoría de las herramientas que funcionan con el formato .po. Al usar el botón <literal>Exportar</literal> puede crear un archivo .po para utilizarlo en una herramienta aparte o para enviárselo a un traductor. Puede importar la traducción resultante usando el botón <literal>Importar</literal>.</para>  

   </sect2>

   <sect2 id="defining-reports">
   <title>Definir informes</title>

   <sect3 id="adding-or-editing-reports">
   <title>Añadir o editar informes</title>

   <para>Glom puede generar informes para mostrar campos específicos o conjuntos de registros, ordenados y agrupados. Por ejemplo, una tienda puede necesitar un informe que liste todos los productos vendidos en un mes, agrupados por tipo de producto, y ordenados por precio dentro de cada grupo. Cada tabla tiene sus propios informes, que están a disposición del operador en el menú <literal>Informes</literal>.</para>
   <para>Para definir un informe, o para cambiar la definición de un informe existente, seleccione <literal>Informes</literal> en el menú <literal>Desarrollador</literal>.</para>
   <figure id="developer-editing-reports"> 
	<title>Crear o editar informes</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_reports.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Crear o editar informes.</phrase> 
	    </textobject>
	  </mediaobject> 
	</screenshot> 
     </figure>

    <para>Tenga en cuenta que cada informe tiene un ID, así como un nombre legible por humanos. Esto permite que su informe tenga un título traducido cuando se utiliza en un ordenador que trabaja con un idioma diferente.</para>

    </sect3>

    <sect3 id="editing-a-report">
    <title>Editar un informe</title>

    <para>Un informe de Glom tiene tres áreas: <orderedlist>
      <listitem><simpara>La cabecera, que aparecerá al principio del informe</simpara></listitem>
      <listitem><simpara>El área principal, donde se muestran los registros y las líneas de resumen, con los datos actuales de la base de datos.</simpara></listitem>
      <listitem><simpara>El pie, que aparecerá al final del informe.</simpara></listitem>
    </orderedlist></para>

    <para>Dentro de un área, como la parte principal, puede añadir <literal>Partes</literal> de un informe, tales como campos, texto o imágenes. Habitualmente aparecerán en una fila en el informe impreso, con una fila para cada registro. En el caso simple, se parecerá mucho a la vista de lista de Glom. Puede añadir partes a su informe seleccionándolas de la lista <literal>Partes disponibles</literal> y pulsando en el botón <literal>Añadir</literal>. Se añadirá la parte a la lista <literal>Partes</literal>, en el área seleccionada.</para>
    <para>Para especificar los detalles de las partes, tales como el texto o la imagen que mostrar, o seleccionar el campo que mostrar, seleccione la parte en la lista <literal>Partes</literal> y pulse el botón <literal>Editar</literal>. También puede especificar el formato del campo pulsando el botón <literal>Formato</literal>, simplemente como lo haría cuando define la disposición de los detalles o la disposición de una lista.</para>

    <figure id="developer-editing-reports-details"> 
	<title>Editar un informe</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_reports_details.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Editar un informe.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
     </figure>

    <para>Algunas partes pueden contener otras partes y tener propiedades adicionales para controlar como se presentan su partes hijas. Por ejemplo, la parte <literal>Agrupar por</literal> agrupa registros juntos por un campo. Por ejemplo, un informe de productos debe agrupar una lista de productos por tipo de producto. También puede añadir una segunda agrupación dentro de la parte <literal>Agrupar por</literal> principal, seleccionando la primera parte <literal>Agrupar por</literal> en la lista <literal>Partes</literal> mientras añade una nueva parte <literal>Agrupar por</literal> de la lista <literal>Partes disponibles</literal>. Por ejemplo, puede agrupar sus productos por fabricante, dentro de cada grupo de tipo de producto.</para>
    <para>Para especificar el campo por el que se agruparán los registros, seleccione su parte <literal>Agrupar por</literal> en la lista <literal>Partes</literal> y pulse el botón <literal>Editar</literal>. Entonces puede seleccionar el campo por el que quiere que se ordenen los registros, y seleccionar los campos por los que esos registros deberán ordenarse dentro del grupo. También debe especificar algunos campos adicionales para mostrar en el título de la fila del grupo. Por ejemplo, puede querer agrupar productos por ID de fabricante, pero mostrar también el nombre del fabricante.</para>

    <figure id="developer-editing-reports-group_by"> 
	<title>Editar un grupo por partes</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_reports_group_by.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Editar un informe.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
     </figure>

   <para>La parte <literal>Grupo vertical</literal> puede contener otros elementos. Por ejemplo, le permite ordenar campos junto a otros en lugar de uno detrás de otro en la fila horizontal. Ésto es útil para agrupar campos relacionados tales como direcciones, o simplemente apretar más información dentro de la fila del registro del informe.</para>
   
   <figure id="developer-editing-reports-vertical_group"> 
	<title>Un informe con grupos verticales</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_reports_vertical_group.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Un informe con grupos verticales.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
     </figure> 

   <para>Cuando haya acabado, pulse el botón <literal>Cerrar</literal> para guardar la definición del informe. Puede seleccionar su informe desde el menú <literal>Informes</literal>. Para obtener más detalles vea la sección <link linkend="glom-operator-printing-reports">Imprimir informes</link>.</para>



   </sect3>

   </sect2>
  
  </sect1>

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

<sect1 id="dialogs">
<title>Diálogos</title>

<sect2 id="dialog_existing_or_new">
<title>Diálogo: Diálogo inicial</title>
<para>Este diálogo permite al usuario seleccionar un documento existente o crear un documento nuevo. Los documentos existentes se deben seleccionar de la lista de documentos abiertos recientemente, o seleccionando un archivo con el diálogo de selección de archivos. También se pueden abrir los documentos a través de la red, si otros usuarios están ejecutando Glom en la red local. Finalmente, se puede crear un documento nuevo abriendo una plantilla que ya contenga algunas tablas o registros iniciales, o creando un documento vacío.</para>
</sect2>

<sect2 id="dialog_new_database">
<title>Diálogo: Nueva base de datos</title>
<para/>
</sect2>

<sect2 id="dialog_error_create_database">
<title>Diálogo: Crear base de datos</title>
<para/>
</sect2>

<sect2 id="dialog_connection">
<title>Diálogo: Conexión</title>
<para>Este cuadro de diálogo solicita un nombre de usuario y una contraseña para conectar a un servidor de bases de datos. Normalmente no es la misma combinación de usuario y contraseña que utiliza para autenticarse en su sistema. Todos los sistemas Glom requieren un servidor de bases de datos en el que almacenar los datos actuales. Si el servidor de bases de datos no se está ejecutando en el equipo local («localhost»), debe proporcionar el nombre del equipo, tal como "glomserver.openismus.com", aunque su nombre del equipo sea diferente.</para>
<para>Su administrador de sistemas puede proporcionarle esos detalles de conexión a la base de datos.</para>
<para>Si es el administrador del sistema. lea la página web de Glom <ulink url="http://www.glom.org/wiki/index.php?title=Initial_Postgres_Configuration" type="http">Configuración de Postgres</ulink> para obtener ayuda con la instalación y configuración del servidor de bases de datos.</para>
</sect2>

<sect2 id="dialog_error_connection">
<title>Diálogo: Error de conexión</title>
<para>Este diálogo se muestra cuando Glom no puede conectar con el servidor de bases de datos especificado. O el servidor de bases de datos no está funcionando en el equipo especificado, o el servidor de bases de datos no aceptó el nombre de usuario y la contraseña. Para obtener más detalles consulte la sección <link linkend="dialog_connection">Diálogo de conexión</link>.</para>

<para/>
</sect2>

<sect2 id="dialog_database_preferences">
<title>Diálogo: Preferencias de la base de datos</title>
<para/>
</sect2>

<sect2 id="dialog_change_language">
<title>Diálogo: Cambiar idioma</title>
<para/>
</sect2>

<sect2 id="window_textobject">
<title>Ventana: Objeto de texto</title>
<para/>
</sect2>

<sect2 id="window_imageobject">
<title>Ventana: Objeto de imagen</title>
<para/>
</sect2>

<sect2 id="dialog_notebook">
<title>Diálogo: Cuaderno de notas</title>
<para/>
</sect2>

<sect2 id="dialog_data_invalid_format">
<title>Diálogo: Formato de datos inválido</title>
<para/>
</sect2>

<sect2 id="dialog_relationship_overview">
<title>Diálogo: Descripción de la relación</title>
<para/>
</sect2>

<sect2 id="window_groups">
<title>Ventana: Grupos</title>
<para/>
</sect2>

<sect2 id="dialog_groupby_sort_fields">
<title>Diálogo: Agrupar por campos ordenados</title>
<para/>
</sect2>

<sect2 id="dialog_groupby_secondary_fields">
<title>Diálogo: Agrupar por campos secundarios</title>
<para/>
</sect2>

<sect2 id="window_button_script">
<title>Ventana: Botón de script</title>
<para/>
</sect2>

<sect2 id="window_field_calculation">
<title>Ventana: Cálculo de campos</title>
<para/>
</sect2>

<sect2 id="dialog_new_group">
<title>Diálogo: Grupo nuevo</title>
<para/>
</sect2>

<sect2 id="dialog_choose_user">
<title>Diálogo: Elegir usuario</title>
<para/>
</sect2>

<sect2 id="dialog_user">
<title>Diálogo: Usuario</title>
<para/>
</sect2>

<sect2 id="dialog_translation_identify_original">
<title>Diálogo: La traducción identifica al original</title>
<para/>
</sect2>

<sect2 id="dialog_translation_copy">
<title>Diálogo: Copia de la traducción</title>
<para/>
</sect2>

<sect2 id="dialog_choose_date">
<title>Diálogo: Elegir fecha</title>
<para/>
</sect2>

<sect2 id="dialog_import_csv">
<title>Diálogo: Importar a una tabla</title>
<para>Este diálogo permite al usuario importar un archivo CSV (valores separados por comas) en la tabla de la base de datos actual. Muestra las primeras filas del archivo para importar y permite al usuario seleccionar el campo destino en la base de datos para cada columna del archivo CSV. Para autoincrementar las claves primarias, el campo de la clave primaria no se puede utilizar como campo destino, de lo contrario se debe importar una columna en el campo de la clave primaria.</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>Acerca de Glom</title> 
    <para>Glom y la comunidad de voluntarios de Glom se encargan de mantener Glom. Para obtener más información acerca de Glom, visite la <ulink url="http://www.glom.org/" type="http">página web de Glom</ulink>.</para>
    <para>Para informar sobre un error o hacer sugerencias sobre esta aplicación o sobre éste manual, puede enviarlas usando <ulink url="http://bugzilla.gnome.org" type="http">Bugzilla</ulink>.</para>

    <para>Otra excelente fuente de información son las <ulink url="http://www.glom.org" type="http">listas de correo</ulink> de Glom.</para>

    <para>Este programa se distribuye bajo los términos de la Licencia Pública General GNU (GPL) tal y como fue publicada por la Free Software Foundation, en la versión 2 ó (a su elección) cualquier versión posterior. Una copia de esta licencia puede encontrarse en <ulink url="ghelp:gpl" type="help">este enlace</ulink>, o en el archivo COPYING incluido con el código fuente de este programa.</para>
  </sect1>

  <appendix id="sec-concepts">
  <title>Conceptos</title>
  <para>Glom es fácil de usar, pero debe entender los siguientes conceptos básicos. <orderedlist>
<listitem><simpara><literal>Base de datos</literal>: Cada documento de Glom permite el acceso a una base de datos.</simpara></listitem>
<listitem><simpara><literal>Tabla</literal>: Cada base de datos contiene varias tablas, tales como, por ejemplo, las tablas «Clientes» y «Facturas».</simpara></listitem>
<listitem><simpara><literal>Campo</literal>: Cada tabla tiene varios campos, tales como «ID del cliente», «Nombre» y «Fecha de nacimiento», en otros documentos y aplicaciones, se suele denominar a estos campos «columnas».</simpara></listitem>
<listitem><simpara><literal>Registros</literal>: Cada tabla tiene varios registros, cada uno de los cuales contiene valores para cada uno de los campos. Por ejemplo la tabla de «Clientes» tendrá un registro para cada cliente. En otros documentos y aplicaciones, a los registros se los suele denominar <literal>filas</literal>.</simpara></listitem>
<listitem><simpara><literal>Relaciones</literal>: Cada tabla puede estar relacionada con otras tablas, por medio de los campos de ambas tablas. Por ejemplo, la tabla «Clientes» puede tener relación con la tabla «Facturas», de tal manera que se pueden ver todas las facturas de ése cliente. Sólo los desarrolladores necesitan entender éste concepto. En otros documentos y aplicaciones, a las relaciones se las suele denominar «uniones» o «joins».</simpara></listitem> 
</orderedlist></para>
  </appendix>

  <appendix id="sec-calculated-fields">
  <title>Campos calculados y botones de script</title>
  <para>Los campos calculados y los botones de scripts usan el lenguaje de programación Python.El cálculo o el script es la implementación de una función cuya firma se le proporciona.</para>

     <figure id="developer-editing-fields-calculated"> 
	<title>Editar la definición de un campo calculado</title> 
	<screenshot> 
	  <mediaobject> 
	    <imageobject><imagedata fileref="figures/glom_design_fields_dialog_calculated.png" format="PNG"/> 
	    </imageobject>
	    <textobject> 
	      <phrase>Editar la definición de un campo calculado.</phrase> 
	    </textobject> 
	  </mediaobject> 
	</screenshot> 
     </figure>

  <sect1 id="field-values">
  <title>Valores de campo</title>
  <para>Por ejemplo, <programlisting>record["name_first"]</programlisting> es el valor del campo name_first en el registro actual.</para>
  </sect1>

  <sect1 id="related-records">
  <title>Registros relacionados</title>
  <para>Por ejemplo, <programlisting>record.related["ubicación"]</programlisting> proporciona los registros relacionados con el registro actual.</para>

  <sect2 id="single-related-records">
  <title>Un sólo registro relacionado</title>
  <para>Para relaciones que especifican un único registro puede obtener el valor de un campo en ese registro. Por ejemplo, <programlisting>record.related["ubicación"]["nombre"]</programlisting> es el valor del nombre del campo en la tabla indicada por la relación de ubicación (habitualmente denominada ubicación::nombre).</para>
  </sect2>

  <sect2 id="multiple-related-records">
  <title>Múltiples registros relacionados</title>
  <para>Para relaciones que especifican múltiples registros, puede utilizar las funciones de adición (sum, count, average) para obtener todos los valores. Por ejemplo, <programlisting>record.related["lineas_de_factura"].sum("precio_total")</programlisting>.</para>
  </sect2>

  </sect1>

  <sect1 id="testing-for-empty-values">
  <title>Probando para valores vacíos</title>
  <para>La manera de probar para valores vacíos depende del tipo de campo:</para>

  <sect2 id="non-text-fields">
  <title>Campos que no son de texto</title>
  <para>Los campos que no sean de texto deben estar vacíos, indicando que el usuario no ha introducido ningún valor en el campo. Por ejemplo, Glom no asume que un valor vacío en un campo numérico deba valer 0.</para>
  <para>Puede probar si un campo está vacío usando el código Python «None». Por ejemplo:</para>
  <para>
  <programlisting>
  if(record["contact_id"] == None):
    return "Sin contacto"
  else:
    return record.related["contacts"]["name_full"]
  </programlisting>
  </para>
  <para>También puede comprobar si hay algunos registros relacionados. Por ejemplo:</para>
  <para>
  <programlisting>
  if(record.related["contacts"] == None):
    return "Sin contacto"
  else:
    return record.related["contacts"]["name_full"]
  </programlisting>
  </para>
  </sect2>

  <sect2 id="text-fields">
  <title>Campos de texto</title>
  <para>Para campos de texto debe comprobar las cadenas de longitud cero. En Glom no es posible distinguir entre cadenas de longitud cero y ausencia de cadena, ya que no hay diferencia. Por ejemplo:</para>
  <para>
  <programlisting>
  if(record["name_full"] == ""):
    return "Sin nombre"
  else:
    return record["name_full"]
  </programlisting>
  </para>
  </sect2>
</sect1>


<sect1 id="using-the-full-pygda-api">
  <title>Usando la API pydga completa</title>
  <para>pygda es una API de Python para la API libgda. Los atributos de los registros <literal>connection</literal> proporcionan una conexión gda que puede usarse para acceder directamente a la base de datos actual. Esto le permite ejecutar cualquier consulta SQL, por ejemplo para leer datos de la base de datos con un SELECT o cambiar valores en la base de datos con un UPDATE. Nótese que la conexión ya está abierta, por lo que puede evitar el difícil trabajo de especificar los detalles de la conexión.</para>
  <para>El atributo del registro <literal>table_name</literal> también proporciona el nombre de la tabla actual.</para>
  <para>Este ejemplo lee todos los datos de la tabla actual e imprime los valores en la terminal:</para>
  <para>
  <programlisting>
# Usar la conexión actual a la base de datos 
# para obtener todos los datos de la tabla actual.
#
# la conexión de registros es un objeto gda.connection ya abierto,
# evitando la incomodidad de abrir la conexión,
# o incluso conociendo el nombre de la base de datos.

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 "    Número de columnas: ", columns

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

    # Comprueba si es la clave primaria:\n"
    field = data_model.describe_column(i)
    if field.get_primary_key():
        print "        (clave primaria)"

    print "\n";
     
print "    Número de columnas: ", rows

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

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

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

  </appendix>

 
</article>
