<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Open source | Diego J. Muñoz. Software a medida. Freelance. Delphi.</title>
    <link>http://el-programador.com/tags/open-source/</link>
      <atom:link href="http://el-programador.com/tags/open-source/index.xml" rel="self" type="application/rss+xml" />
    <description>Open source</description>
    <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>es-es</language><lastBuildDate>Sun, 01 Sep 2019 00:00:00 +0000</lastBuildDate>
    <image>
      <url>http://el-programador.com/img/icon-192.png</url>
      <title>Open source</title>
      <link>http://el-programador.com/tags/open-source/</link>
    </image>
    
    <item>
      <title>Delphi. Creación de ficheros normas SEPA 19.14 y 34.14.</title>
      <link>http://el-programador.com/post/delphi-ficheros-norma-sepa-19-34/</link>
      <pubDate>Sun, 01 Sep 2019 00:00:00 +0000</pubDate>
      <guid>http://el-programador.com/post/delphi-ficheros-norma-sepa-19-34/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Código Delphi publicado en github: &lt;a href=&#34;https://github.com/cocosistemas/Delphi-SEPA-XML-ES&#34;&gt;cocosistemas/Delphi-SEPA-XML-ES: Delphi: Creación de ficheros normas 19.14 y 34.14 (básico, XML)&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Actualización 2019: Mucha gente me pregunta si este proyecto sigue siendo válido, tras ver que lleva años sin actualizarse. Sí, yo sigo utilizandolo en proyectos que generan ficheros SEPA a diario. Simplemente es que la normativa no ha cambiado, y no ha sido necesario actualizarlos. Con respecto a utilizarlo en las versiones más nuevas de Delphi, no debes tener problema, no se utilizan features del lenguaje novedosas.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Estas unidades contienen dos objetos para la creación de los siguientes ficheros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Norma 19.14 SEPA XML. Es un fichero de órdenes de cobro. El &lt;strong&gt;ordenante&lt;/strong&gt; cobra al &lt;strong&gt;deudor&lt;/strong&gt;. Internamente tenemos un array de ordenantes, cada uno con sus órdenes de cobro. Basta utilizar AddOrdenante, AddCobro. Como cada ordenante tiene una cuenta de abono para todos los cobros, internamente el objeto se encarga de colocar cada cobro en su ordenante. &lt;strong&gt;Ver el test&lt;/strong&gt; está ahí explicado el uso de los objetos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Norma 34.14 SEPA XML. Es un fichero de órdenes de pago. El &lt;strong&gt;ordenante&lt;/strong&gt; paga al &lt;strong&gt;beneficiario&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cosas a tener en cuenta:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Leer la normativa de los dos ficheros&lt;/strong&gt;. Son complejos. Hay campos opcionales que no se han añadido aquí y puede que su banco se lo pida. Los identificadores únicos de cada elemento son importantes, hay que leer su significado y tomar la decisión de cómo formarlos. Por si fuera poco, cada banco tiene su interpretación y puede que le pida alguna variación en algún elemento del fichero (esto ya lo he comprobado con la versión anterior los 19.14 y 34.14 en formato plano). &lt;strong&gt;Esto no es un componente &amp;ldquo;listo para usar&amp;rdquo; sin más&lt;/strong&gt;. Hay que entender de qué estamos hablando. Lo que si facilita es la estructuración y la escritura de las etiquetas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Como guardamos la info en arrays, hay unos límites de órdenes y ordenantes. Supongo que serán suficientes pero es fácilmente modificable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;En la normativa hay muchos campos opcionales, no se ha añadido ninguno.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se trata de los esquemas básicos, no los b2b.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Solamente se contemplan transferencias en euros, nada de cheques.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No se contemplan órdenes de devoluciones, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No se hace ningún chequeo de contenidos (IBAN, BIC, etc)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Vea el proyecto test de ejemplo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Basado en este otro componente: &lt;a href=&#34;https://github.com/aspettl/delphi-sepa-xml&#34;&gt;https://github.com/aspettl/delphi-sepa-xml&lt;/a&gt; las diferencias son amplias, pero es justo mencionar ese git.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La normativa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Para la norma 34.14, buscar &lt;strong&gt;Órdenes en formato ISO 20022 para emisión de transferencias y cheques en euros&lt;/strong&gt; por ejemplo &lt;a href=&#34;https://empresa.lacaixa.es/deployedfiles/empresas/Estaticos/pdf/Transferenciasyficheros/Cuaderno_34_XML_Noviembre_2015.pdf&#34;&gt;https://empresa.lacaixa.es/deployedfiles/empresas/Estaticos/pdf/Transferenciasyficheros/Cuaderno_34_XML_Noviembre_2015.pdf&lt;/a&gt; Si quiere puede ir directamente al &lt;strong&gt;ANEXO 1&lt;/strong&gt;. Es la parte interesante etiqueta a etiqueta. La programación de este proyecto se realizó siguiendo este ANEXO 1 etiqueta a etiqueta. Ojo! hay documentos que están desactualizados, ojo a las fechas! El último que he encontrado es de Noviembre 2015&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Para la norma 19.14 buscar &lt;strong&gt;Órdenes en formato ISO 20022 para emisión de adeudos directos SEPA en euros&lt;/strong&gt; por ejemplo &lt;a href=&#34;https://empresa.lacaixa.es/deployedfiles/empresas/Estaticos/pdf/Transferenciasyficheros/CuadernoXMLSDDCoreFebrero2014.pdf&#34;&gt;https://empresa.lacaixa.es/deployedfiles/empresas/Estaticos/pdf/Transferenciasyficheros/CuadernoXMLSDDCoreFebrero2014.pdf&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Actualización (febrero 2016): Ya está testeado en 3 bancos españoles. Tanto la norma 19.14 como la 34.14 y los ficheros han sido aceptados.&lt;/p&gt;
&lt;p&gt;Actualización (abril 2016): Hacemos público (en Norma 19.14) el array de ordenantes. Para poder recorrerlo y mostrarle al usuario el resumen de importes, algo así:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; for iOrdenantes:=1 to oNorma1914XML.iOrdenantes do begin
     mmFicheros.Lines.add(oNorma1914XML.listOrdenantes[iOrdenantes].sNombreOrdenante+&#39; &#39;+
          oNorma1914XML.listOrdenantes[iOrdenantes].sIBANOrdenante+&#39; &#39;+
                          uFmt_Numero2Str2(oNorma1914XML.listOrdenantes[iOrdenantes].mSumaImportes)+&#39;€&#39;);
 end;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Espero que sea de utilidad.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Delphi. Un TEdit mejorado.</title>
      <link>http://el-programador.com/post/tdjmedit-un-tedit-mejorado-delphi/</link>
      <pubDate>Sun, 01 Sep 2019 00:00:00 +0000</pubDate>
      <guid>http://el-programador.com/post/tdjmedit-un-tedit-mejorado-delphi/</guid>
      <description>&lt;h1 id=&#34;componentes-para-delphi-vcl-tdjmedit-y-tdjmeditbutton&#34;&gt;Componentes para Delphi VCL: TDJMEdit y TDJMEditButton&lt;/h1&gt;
&lt;p&gt;He publicado en &lt;a href=&#34;https://github.com/cocosistemas/TDJMEdit&#34;&gt;cocosistemas/TDJMEdit: un Edit mejorado para Delphi VCL&lt;/a&gt; el componente
TEdit que he programado y utilizo en mis proyectos. Tiene formato de números, moneda, fechas, etc. Es el &lt;em&gt;primer toque&lt;/em&gt; distintivo de una aplicación, que los
números se le muestren en pantalla en un formato agradable (y.. elegante?).&lt;/p&gt;
&lt;p&gt;Sirvan estos componentes también para ver una vez más la potencia de Delphi y/o ver cómo se programan componentes (no son muy complejos así que puedes
estudiar el código).&lt;/p&gt;
&lt;h1 id=&#34;tdjmedit&#34;&gt;TDJMEdit&lt;/h1&gt;
&lt;p&gt;&lt;img src=&#34;capTest001.JPG&#34; alt=&#34;captura del programa demo&#34;&gt;&lt;/p&gt;
&lt;p&gt;Heredado de TEdit, sirve para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;strings&lt;/li&gt;
&lt;li&gt;fechas&lt;/li&gt;
&lt;li&gt;números&lt;/li&gt;
&lt;li&gt;tiempo (hh:mm)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;IMPORTANTE!!! PUEDES PROBARLO SIN NECESIDAD DE INSTALARLO, INCLUYE DEMO!!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Se incluye paquetes para instalarlo en Delphi XE2 y para instalarlo en Delphi Berlin. Cualquier versión igual o superior a la XE2 no debe dar mayor problema. Con la versión Delphi 7 no funciona (tiene cosas del lenguaje que Delphi 7 no tiene)&lt;/p&gt;
&lt;h1 id=&#34;la-demo&#34;&gt;La demo&lt;/h1&gt;
&lt;p&gt;Los proyectos de test crean los componentes en tiempo de ejecución, así que puedes probarlo sin necesidad de instalar el componente. Son los proyectos de los directorios &lt;em&gt;TestBerlin&lt;/em&gt; y &lt;em&gt;TestXE2&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&#34;características-y-propiedades&#34;&gt;Características y propiedades&lt;/h1&gt;
&lt;h1 id=&#34;edittype&#34;&gt;editType&lt;/h1&gt;
&lt;p&gt;Evidentemente, la propiedad más importante:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;etString&lt;/strong&gt; el Edit actúa como un edit de texto, normal&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;etInteger&lt;/strong&gt; solamente acepta números enteros, (ver más adelante la sección formato de números).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;etFloat&lt;/strong&gt; admite números con decimales. Los que sean, no redondea, no corta decimales, deja el número tal y como haya sido tecleado&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;etFloatRounded&lt;/strong&gt; admite números con decimales. Redondea (y rellena) a &lt;strong&gt;decimals&lt;/strong&gt; decimales.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;etFloatRoundedEx&lt;/strong&gt; como &lt;em&gt;etFloatRounded&lt;/em&gt; pero **si el número tiene más decimales de lo indicado en &lt;strong&gt;decimals&lt;/strong&gt;, no redondea.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;etDate&lt;/strong&gt; admite fechas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;etTime&lt;/strong&gt; admite horas:minutos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;por favor, sigue leyendo para ver las diferencias entre los distintos tipos de Edit&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id=&#34;etfloat-etfloatrounded-y-etfloatroundedex&#34;&gt;etFloat, etFloatRounded y etFloatRoundedEx&lt;/h1&gt;
&lt;p&gt;Quizás sea la característica de este componente que lo diferencie de los otros cientos de componentes que puedas encontrar en internet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;etFloat&lt;/strong&gt; Respeta todos los decimales que tenga el número. &amp;ldquo;no le hace nada&amp;rdquo;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;//nº = 1234,123713279123 -&amp;gt; 1234,123713279123
//nº = 1234,1237         -&amp;gt; 1234,1237
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;etFloatRounded&lt;/strong&gt; redondea a &amp;ldquo;decimals&amp;rdquo; decimales. Si el número tiene menos, añade los necesarios.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;//nº = 1234,123713279123, decimals = 3 -&amp;gt; 1234,124
//nº = 1234,12,           decimals = 3 -&amp;gt; 1234,120
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;etFloatRoundedEx&lt;/strong&gt; como etFloatRounded pero si el nº tiene más decimales, no lo corta/redondea&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;//nº = 1234,123713279123, decimals = 3 -&amp;gt; 1234,123713279123
//nº = 1234,12,           decimals = 3 -&amp;gt; 1234,120
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;el uso de etFloatRoundedEx está pensado para trabajar por ejemplo con tres decimales, que el usuario teclee normalmente tres decimales y hasta ahí, sea como etFloatRounded, pero si, por ejemplo; estamos visualizando datos grabados en la base de datos y hubiera algún importe con más de tres decimales, que no lo redondee. Esta es la diferencia. Es algo así como &amp;lsquo;vamos a trabajar con x decimales, pero si tuvieramos alguno mal guardado, lo vamos a visualizar, no vamos a engañar al usuario&amp;rsquo;. Es un concepto importante. Yo soy de la opinión de mostrar en pantalla siempre lo que tenga en la base de datos, eso ahorra problemas. Por eso si estoy visualizando datos de la base de datos con este edit (ojo, a &amp;ldquo;mano&amp;rdquo;, el componente no es data-aware), si tengo alguno incorrecto, con más decimales, quiero verlo, no ocultarlos. Ese es el motivo de la existencia de &lt;strong&gt;etFloatRoundedEx&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id=&#34;formato-de-números&#34;&gt;formato de números&lt;/h1&gt;
&lt;p&gt;Con las propiedades &lt;strong&gt;DecimalSeparator&lt;/strong&gt; y &lt;strong&gt;THousandSeparator&lt;/strong&gt; puedes controlar los caracteres utilizados para el signo de decimales y el de miles. Inicialmente el componente los toma de lo que tengas puesto en &lt;strong&gt;formatSettings&lt;/strong&gt; &lt;a href=&#34;http://docwiki.embarcadero.com/Libraries/Rio/en/System.SysUtils.FormatSettings&#34; target=&#34;_blank&#34;&gt;&lt;a href=&#34;http://docwiki.embarcadero.com/Libraries/Rio/en/System.SysUtils.FormatSettings&#34;&gt;http://docwiki.embarcadero.com/Libraries/Rio/en/System.SysUtils.FormatSettings&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;etInteger y todos los etFloat* tienen formato de números con los separadores decimal y de miles.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;./capTest001.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;obteniendoasignando-valores&#34;&gt;obteniendo/asignando valores&lt;/h1&gt;
&lt;p&gt;las propiedades &lt;em&gt;valueFloat, valueInteger, valueDate, valueTime&lt;/em&gt; son las que debes utilizar para obtener/asignar los valores del Edit en tu programa. Mira la demo para ver como se utilizan. Para &lt;em&gt;etString&lt;/em&gt; utiliza &lt;em&gt;text&lt;/em&gt;, como siempre.&lt;/p&gt;
&lt;p&gt;Utiliza la función &lt;strong&gt;isEmpty&lt;/strong&gt; para ver si hay un string vacío, una fecha nula o una hora vacía. Para números esto no tiene sentido (0 no es vacío, es cero, utiliza valueFloat o valueInteger para eso).&lt;/p&gt;
&lt;h1 id=&#34;tecleando-números-y-fechas&#34;&gt;tecleando números y fechas&lt;/h1&gt;
&lt;p&gt;El usuario no debe (ni puede) teclear los separadores, esto es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;12.345,65 lo teclea con 12345,65 (etFloat*, etInteger)&lt;/li&gt;
&lt;li&gt;30/01/2010 lo teclea con 30012010 (etDate)&lt;/li&gt;
&lt;li&gt;10:30 lo teclea con 1030 (etTime)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;teclas-especiales&#34;&gt;teclas especiales&lt;/h1&gt;
&lt;p&gt;Si se teclea &lt;strong&gt;ESC&lt;/strong&gt;, el componente recupera el valor que tenía antes de OnEnter. Es como un &lt;em&gt;undo de emergencia&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Los caracteres . y , se intercambian. Da igual lo que teclee el usuario, se convierten a &lt;strong&gt;DecimalSeparator&lt;/strong&gt;. Esto es por comodidad, el usuario no debe preocuparse por teclear . o ,.&lt;/p&gt;
&lt;p&gt;En el caso de &lt;em&gt;etDate&lt;/em&gt;, &lt;strong&gt;F2 muestra un calendario&lt;/strong&gt; y &lt;strong&gt;F3 toma el dia de hoy&lt;/strong&gt;. (creo que eso es mucho mejor que un datepicker)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;./capTestCalendario.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;las fechas van en formato dd/mm/yyyy&lt;/strong&gt; por ahora no tengo previsto considerar otros formatos.&lt;/p&gt;
&lt;p&gt;Con la propiedad &lt;strong&gt;EditKeyByTab&lt;/strong&gt; puedes indicar qué caracter quieres que se utilize para salir del edit y pasar al siguiente control. Inicialmente se crea como el caracter &lt;em&gt;intro&lt;/em&gt;. Es decir, por defecto, &lt;strong&gt;estos edits pasan de control en control con la tecla intro&lt;/strong&gt;.&lt;/p&gt;
&lt;h1 id=&#34;auto-completado&#34;&gt;auto-completado&lt;/h1&gt;
&lt;p&gt;En &lt;em&gt;etDate&lt;/em&gt; y &lt;em&gt;etTime&lt;/em&gt; el componente intenta auto-completar todo lo que pueda. Así si en una fecha solo se teclea un 2 (por ejemplo), se toma el dia 2 del mes actual del año actual. Lo mismo hace con &lt;em&gt;etTime&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&#34;colores&#34;&gt;colores&lt;/h1&gt;
&lt;p&gt;El componente tiene &lt;strong&gt;ColorOnFocus, ColorOnNotFocus, FontColorOnFocus y FontColorOnNotFocus&lt;/strong&gt; para cambiar el color del fondo y el texto cuando se obtiene/abandona el foco.&lt;/p&gt;
&lt;h1 id=&#34;numbersalignedright&#34;&gt;NumbersAlignedRight&lt;/h1&gt;
&lt;p&gt;Esta propiedad indica que los etFloat* y etInteger están alineados a la derecha.&lt;/p&gt;
&lt;h1 id=&#34;currencysymbol&#34;&gt;CurrencySymbol&lt;/h1&gt;
&lt;p&gt;El símbolo &lt;em&gt;de moneda&lt;/em&gt;. Se puede dejar en blanco y entonces no se utilizará.&lt;/p&gt;
&lt;h1 id=&#34;personalizar&#34;&gt;personalizar&lt;/h1&gt;
&lt;p&gt;En el caso de que los colores no sean de tu gusto, los separadores&amp;hellip; etc, no vayas modificando cada uno de los TDJMEdit de tu proyecto, pueden llegar a ser muchos. Te aconsejo que te hagas tu propio componente, heredado de este, y en el constructor le pongas tu personalización. Creo que esa es la forma correcta de hacerlo.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;por favor, si vas a modificar algo, hazme un pull request, no es necesario que hagas un fork. Si puedo incorporar tus sugerencias, lo haré. Y para los bugs, abres un issue :)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;djmeditbutton&#34;&gt;DJMEditButton&lt;/h1&gt;
&lt;p&gt;Es el mismo edit, pero además tiene un speedbutton asociado. Podemos definir el tipo de imagen que aparecerá en el botón (lupa, carpeta, etc). Dispone de un evento OnClickButton donde podremos actuar en consecuencia. Muy útil para botones de búsqueda, seleccionar directorios, abrir ventanas modales de petición de datos.. cosas así.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;./capEditButton.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
