Programa, programa, programa

Iniciado por Controlcé, Febrero 01, 2011, 03:42:29 PM

Tema anterior - Siguiente tema

patillotes

Guao, fichero secuencial. Quien dijo DBs. Luego de cenar miro la cosa esta.

Controlcé

Serí­a algo así­...

Tipo de formato: 4.
Código de empresa: definido por mí­, bien en la ventana o bien añadiendolo a mano al array (se dice así­, verdad?).
Fecha de apunte: Se lee del array.
Tipo de registro: 0.
Cuenta: como el código de empresa, definida en la ventana o añadida al array.
Descripción de la cuenta: Same.
Tipo de importe: Primera dificultad, hay extractos con una columna de importes donde los positivos son debe y los negativos haber y hay extractos con dos columnas, una para cada tipo. Deberí­a definirse en la ventana del programa. De haber una sola columna los importes negativos habrí­a que positivarlos.
Referencia del documento: blancos.
Linea del apunte: Segunda dificultad. Cada linea del array tiene que convertirse en dos lineas en el fichero de salida. La primera (I) tendrí­a un número de cuenta y un importe en debe o haber. La segunda (U) tendrí­a otro número de cuenta y el importe en el tipo contrario (haber o debe).
Descripción del apunte: Se lee del array.
Importe: Se lee del array. Hay que buscar las comas decimales y transformarlas en puntos.
Reserva: Blancos.
Registro analí­tico: Blanco.
Moneda: E.
Indicador de generado: N.
Retorno de carro: Ellou.


patillotes

Es mas peñazo que otra cosa, no te creas.

Controlcé

A mí­ me parece la ostia en verso de complicado y me da la impresión de aprovecharme de vuestra sapiencia  :-[

patillotes

Entero no lo voy a hacer, que menudo peñazo, pero algo mas o menos funcional si. Gí¼eit a fiu minits.

patillotes

Nonaiiiiiiino, nironiiiiiiiii, nonainoooooooo.

patillotes

Esta casi, me cago en como ver si existe una cosa en el debe o el haber, pero espero solucionarlou rapidou.

patillotes

Poblema guarreado. Ya casi y tal.

patillotes

Lo del asiento y su tia no lo pillo, la verdad. Hago que en ese registro plante una I (registro 69, linea de apunte)

patillotes

Aqui estamous:


#!/usr/bin/perl
# Usage: blablabla
#   Credit must be given to John Mc Namara (http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel-0.58/lib/Spreadsheet/ParseExcel.pm)

use warnings;
use strict;
use Spreadsheet::ParseExcel;

my $parser   = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('Gilextracto.xls');

############################################
# Reading required data (and reformating) ##
############################################
print "Introduzca el codigo de empresa [Max 5 chrs]:\n";
my $cod_empresa = <>;
chomp $cod_empresa;
$cod_empresa =  sprintf("%05s", $cod_empresa);

print "Introduzca el codigo de cuenta [Max 12 chrs]:\n";
my $cod_cuenta = <>;
chomp $cod_cuenta;
$cod_cuenta = pack("A12",$cod_cuenta);

print "Introduzca descripcion de la cuenta [Max 30 chrs]:\n";
my $des_cuenta = <>;
chomp $des_cuenta;
$des_cuenta = pack("A30",$des_cuenta);

#################################
## Starting and parsing bla bla #
#################################
if ( !defined $workbook ) {
  die $parser->error(), ".\n";
}

for my $worksheet ( $workbook->worksheets() ) {

  my ( $row_min, $row_max ) = $worksheet->row_range();

  for my $row ( 1 .. $row_max ) {
      # We start at the second row (by hardcoded and not efficient design
        # We supose that 1st column has "date"
        #                2nd column has "description"
        #                3rd column has "debe"
        #                4th column has "haber"
     
      # Reading and reformating this shit
      #########
      # Fecha
      my $celda_temp = $worksheet->get_cell( $row, 0 );
      my $fecha_temp = $celda_temp->value();
      my ($anyo, $mes, $dia) = split "-", $fecha_temp;
      $dia = sprintf("%02d", $dia);
      $mes= sprintf("%02d", $mes);
      my $fecha = "$anyo" . "$mes" . "$dia";

      # Descripcion
      $celda_temp = $worksheet->get_cell( $row, 1 );
      my $descripcion = pack("A30",$celda_temp->value());

      # Debe y haber ===> Valor
      my $valor;
      my $tipo_importe;
      $celda_temp = $worksheet->get_cell( $row, 2 );
      if ($celda_temp->unformatted()){
        # Menuda bazofia de condicion la anterior, en fin, 11pm
         $valor = $celda_temp->unformatted();
         $tipo_importe = "D";
      } else {
         $celda_temp = $worksheet->get_cell( $row, 3 );
         $valor = -1*$celda_temp->unformatted();
         $tipo_importe = "H";
      }
      $valor =  sprintf("%+014.2f", $valor);

      # Registros predefinidos y tal.
      my $tipo_formato = "4";
      my $tipo_registro = "0";
      my $ref_documento = " "x10;
      my $linea_apunte = "I";
      my $reserva = " "x138;
      my $registro_analitico = " ";
      my $moneda = "E";
      my $indica_generado = "N";
     
      my $final = $tipo_formato . $cod_empresa . $fecha . $tipo_registro . $cod_cuenta . $des_cuenta . $tipo_importe;
      $final = $final . $ref_documento . $linea_apunte . $descripcion . $valor . $reserva . $registro_analitico;
      $final = $final . $moneda . $indica_generado . "\n";
     
      # MUAHAHAHHA
      print $final;
  }
}


Necesita el perl instalado y un modulo del CPAN (cpan install Spreadsheet::ParseExcel). Te dejo como adjuntos el propio codigo y una hoja de excel que me he inventado para hacer pruebacas.

patillotes

Supongo que tendra boniatos, pero reformatea casi todo lo que pilla. Si te pasas al poner numeros de cuenta se los come y corta, cambia el formato de fecha al pedido y noseque gaitas mas. Un rato peñazou. Espero que te sirva de algo.

JM

En A3 trato A3Nom y A3Man, eco no lo toco. Pero que si lo del patillas no te va, te puedo montar mañana un esqueleto de aplicacion en un proyecto de visual studio y te lo paso.
In God we trust (sometimes, some pictures: http://www.areopago.eu/index.php?topic=888.msg574445#msg574445 )... (C) Extineo

Controlcé

Joder patis, curradote, muchas gracias. A ver si mañana desde el curro consigo instalarlo y hacer pruebas.

¿De ahí­ una vez acabado no se podrí­a sacar un excel?

Controlcé

Cita de: JM en Febrero 01, 2011, 11:32:59 PM
En A3 trato A3Nom y A3Man, eco no lo toco. Pero que si lo del patillas no te va, te puedo montar mañana un esqueleto de aplicacion en un proyecto de visual studio y te lo paso.


JM, te agradecerí­a un huevo cualquier ayuda, pero insisto en que me parece aprovecharme, me valen unas guí­as teóricas o lo que sea que no os quite tiempo, coño.

patillotes

Cita de: Karma en Febrero 01, 2011, 11:33:36 PM
Joder patis, curradote, muchas gracias. A ver si mañana desde el curro consigo instalarlo y hacer pruebas.

¿De ahí­ una vez acabado no se podrí­a sacar un excel?

¿Ein?, el programa reconvierte un excel normalillo en el formato de marras ese del pdf y las indicaciones (con sus herrores tipikos). Si quieres se puede meter en otro excel, csv o lo que toque.