Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Transferencia facturas de venta a ContaPlus. (https://www.clubdelphi.com/foros/showthread.php?t=53001)

marcoszorrilla 07-02-2008 15:10:59

Transferencia facturas de venta a ContaPlus.
 
Con la idea de poner alguna cosa más a disposición de los miembros Premium, aquí dejo una parte del módulo de exportación a ContaPlus que hice en su día y que sigue funcional.

La segunda parte es decir como utilizar esta unidad cuanto tenga un rato, mañana lo dudo pero el fin de semana seguro lo publicaré en este mismo hilo.

A ver que os parece.
Código Delphi [-]
unit SpConta;
{Unidad para transferencia a contabildad M.A.Marcos}
interface
uses
{DmXX DataModulo en donde se halla la tabla clientes y Facturas de nuestra aplicación}
DmXX,Global,Dialogs, System;

Procedure Crear_Datasi();
Procedure Exportar_Datos_Cliente(c:String);

Function FillSpacesRight(cVar:String;nLen:Integer):String;
Function FillSpacesLeft(cVar:String;nLen:Integer):String;
Function FillZerosLeft(cVar:String;nLen:Integer):String;

Type
SPDiar = Record
Asien    :String[06];
Fecha    :String[08];
Subcta   :String[12];
Contra   :String[12];

PtaDebe  :String[16];
Concepto :String[25];
PtaHaber :String[16];
Factura  :String[08];
BaseImpo :String[16];
TIva     :String[05];
Trec     :String[05];
Document :String[10];
Departa  :String[03];
Clave    :String[06];
Estado   :String[01];
NCasado  :String[06];
TCasado  :String[01];
Trans    :String[06];
Cambio   :String[16];
Debeme   :String[16];
Haberme  :String[16];
Auxiliar :String[01];
Serie    :String[01];
Sucursal :String[04];
CodDivisa:String[05];
ImpAuxme :String[16];
Monedauso:String[01];

EuroDebe :String[16];
EuroHaber:String[16];
BaseEuro :String[16];

NoConv   :String[01];
NumeroInv:String[10];
end;

SPSubcta = Record
Cod      :String[12];
Titulo   :String[40];
Nif      :String[15];
Domicilio:String[35];
Poblacion:String[25];
Provincia:String[20];
CodPostal:String[05];
Divisa   :String[01];
CodDivisa:String[05];
Documento:String[01];
Ajustame :String[01];
TipoIva  :String[01];
end;

Const
{Directorio TMP de ContaPlus}
cCamino ='\\Puesto1\puesto1\GrupoSP\COE08R01\Tmp\';
cDiario ='Xdiario.Txt';
cSubcta ='Xsubcta.Txt';
cDatasi ='Xdatasi.Txt';
cFile1  =cCamino + cDiario;
cFile2  =cCamino + cSubcta;
cFile3  =cCamino + cDatasi;
CrLf:String = Chr(13)+Chr(10);

var
FDiario :TextFile;
FCliente:TextFile;
implementation



Procedure Crear_Datasi();
var
F1:TextFile;
begin
AssignFile(F1, cFile3);
Rewrite(f1);
CloseFile(F1);
end;


Procedure Exportar_Datos_Cliente(c:String);
var
spDatCli:SPSubcta;
begin

 if DmXX.Cli.FindKey([c]) then
 begin
 spDatCli.Cod       :=FillSpacesRight(DmXX.CliCodigo.Value,12);
 spDatCli.Titulo    :=FillSpacesRight(DmXX.CliRSOCIAL.Value,40);
 spDatCli.Nif       :=FillSpacesRight(DmXX.CliNif.Value,15);
 spDatCli.Domicilio :=FillSpacesRight(DmXX.CliCalle.Value,35);
 spDatCli.Poblacion :=FillSpacesRight(DmXX.CliPoblacion.Value,25);
 spDatCli.Provincia :=FillSpacesRight(DmXX.CliProvincia.Value,20);
 spDatCli.CodPostal :=FillSpacesRight(DmXX.clicPostal.Value,5);
 spDatCli.Divisa    :='F';
 spDatCli.CodDivisa :=FillSpacesRight('',5);
 spDatCli.Documento :='F';
 spDatCli.Ajustame  :='F';
 spDatCli.TipoIva   :=FillSpacesRight('',1);

 Write(FCliente, spDatCli.Cod );
 Write(FCliente, spDatCli.Titulo);
 Write(FCliente, spDatCli.Nif);
 Write(FCliente, spDatCli.Domicilio);
 Write(FCliente, spDatCli.Poblacion);
 Write(FCliente, spDatCli.Provincia);
 Write(FCliente, spDatCli.CodPostal);
 Write(FCliente, spDatcli.Divisa);
 Write(FCliente, spDatCli.CodDivisa);
 Write(FCliente, spDatCli.Documento);
 Write(FCliente, spDatCli.Ajustame);
 Write(FCliente, spDatCli.TipoIva);

 Write(FCliente,CrLf);
 end
 else
 ShowMessage('Cliente no encontrado:'+DmXX.FacturasCodclient.Value);

end;



 Function FillSpacesLeft(cVar:String;nLen:Integer):String;
 begin
 Result:=StringOfChar(' ',nLen - Length(cVar))+cVar;
 end;

 Function FillSpacesRight(cVar:String;nLen:Integer):String;
 begin
 Result:=cVar+StringOfChar(' ',nLen - Length(cVar));
 end;

 Function FillZerosLeft(cVar:String;nLen:Integer):String;
 begin
 Result:=StringOfChar('0',nLen - Length(cVar))+cVar;
 end;
end.

Un Saludo y espero vuestros comentarios.

Luis M. 07-02-2008 22:27:16

OSTRASSSS!!:eek::eek:

Me va a venir de cojo......nes:D

Estoy migrando un programa que le hice a una empresa en Clipper y uno
de los módulos que tiene es ese precisamente, hace la exportación hacia
Contaplus.
Aunque todavía me queda para llegar a esa parte, ya me estaba calentando
la cabeza de como lo haría.

Y mira por donde, llegó el ángel salvador:p

Pos muchas gracias por compartirlo.

Este me lo guardo como:
"MIOO, MI TESOROOOO":D

Un saludo.

Emilio 07-02-2008 22:39:26

Hace años recuerdo que me pidieron pasar datos de una facturación al Contaplus y al final no se que paso que al final no se hizo, hay mucho Contaplus, si vuelven a pedirlo ya sé que aquí lo tengo.

Marcos, segúro que como a Luis M. a más de uno le quitas un marroncillo de encima.

Gracias en nombre de todos por la aportación ;)

marcoszorrilla 07-02-2008 22:42:05

Pues como he dicho en este fin de semana añadire el resto a modo de ejemplo.

Un Saludo a todos.

Gabo 08-02-2008 11:34:59

¡Gracias Marcos! No sabes que bien me viene. :)

Hace un año quise hacerlo, busqué información por aquí y por allá (para saber la estructura de los archivos a exportar-importar), no encontré nada y a las finales me desanimé y no hice nada. :o

Ya sé donde está la información para cuando tenga que hacerlo.

Gracias por compartir el código. :)

Ivanzinho 08-02-2008 15:16:22

¡Muchas gracias Marcos!, me va a venir de maravilla para un proyecto que estoy realizando actualmente.

Un saúdo.

Casimiro Notevi 08-02-2008 15:23:03

Vaya, no sabía que fuese tan buscado un código como ese.

En la empresa que trabajé antes de la que estoy ahora hice una exportación a contaplus... y en la empresa que estoy ahora... ¡¡¡otra!!! :D:D:D

Gabo 08-02-2008 16:10:33

Cita:

Empezado por Casimiro Notevi (Mensaje 264347)
Vaya, no sabía que fuese tan buscado un código como ese.

En la empresa que trabajé antes de la que estoy ahora hice una exportación a contaplus... y en la empresa que estoy ahora... ¡¡¡otra!!! :D:D:D

¡Claro! Esas son cosas que uno hace normalmente y casi sin pensar... :p

basti 08-02-2008 17:21:38

Aaaaaahhhhhggg!!!, que bien me hubiese venido esa información hace unos meses. No encontré nada sobre el formato de importación de Contaplus.

Al final me tube que pelear con las tablas del Contaplus (vaya experiencia...) para exportar directamente sobre ellas.

De todas maneras creo que me va a ser muy útil tu código. Muchas gracias.

marcoszorrilla 08-02-2008 20:50:27

Código Delphi [-]
unit ConFacturas;

interface
{Este es el módulo en el que tenemos las facturas seleccionadas para pasarlas a Contabilidad
Utiliza la unidad Spconta que se presentó anteriormente.
Al pulsar un botón el usuario transferirá todas las facturas en formato TXT a la carpeta TEMP de Contaplus.

Conviene que nuestra tabla de Facturas tenga un campo Booleano para ir marcando las que sean transferidas.
Las facturas por ejemplo se presentarán en una rejilla, bien todas las pendientes de contabilizar, las pendientes y 
hasta cierta fecha u otras combinaciones que se nos ocurran o que nos pida el cliente.}
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, DBCtrls, Grids, DBGrids, ExtCtrls, SpConta;
  Var
  spDatDiario:SPDiar;
  spContador:Integer;
    //Exportar Contaplus
  Procedure Exportar_Factura_Sp();



{Este es el botón que presenta la rejilla en donde se muestran las facturas susceptibles de ser contabilizadas, en su barra de navegación}
procedure TfrConFacturas.spTrasSPClick(Sender: TObject);
var
cIndice:String;
begin
SPContador:=0;

Crear_Datasi();

{Guardo el índice actual y activo el índice por Código de cliente, en el momento de la transferencia las tabla de clientes
debe estar indexada por el campo código para que cada vez que vayamos a transferir una factura podamos encontrar
los datos correspondientes al cliente en la tabla del mismo nombre}

cIndice:=DmYYY.Cli.IndexName;
DmYYY.Cli.IndexName:='';

  Try
  AssignFile(FDiario, cFile1);
  Rewrite(FDiario);

  AssignFile(FCliente, cFile2);
  Rewrite(FCliente);

  DmYYY2.Facturas.First;

    While not DmYYY2.Facturas.Eof do
    begin
    Exportar_Factura_Sp();
    DmYYY2.Facturas.Next;
    end;

  //Cerrar los ficheros al finalizar.
  CloseFile(FDiario);
  CloseFile(FCliente);

  Application.MessageBox('Se trasapason los datos a contabilidad correctamente.','Atención',mb_Ok+
  mb_IconQuestion);
  Except
  ShowMessage('Error al pasar los datos de las facturas.');
  end;
 
DmYYY.Cli.IndexName:=cIndice;
end;

Procedure Exportar_Factura_Sp();
var
nInicio:Integer;
nTope:Integer;
cCodClient:String;
begin

  if DmYYY2.FacturasRecargo.Value <> 0 then
  nTope:=4
  else
  nTope:=3;
  cCodClient:=DmYYY.CliCodigo.Value;
  Exportar_Datos_Cliente(cCodClient);
  SPContador:=SPContador + 1;

  For nInicio:=1 to nTope do
  begin
  SPDatDiario.Asien    :=FillSpacesLeft(IntToStr(spContador),6);
  SPDatDiario.Fecha    :=FormatDateTime('yyyymmdd',DmYYY2.FacturasFecha.Value);

    Case nInicio of
    1:SPDatDiario.Subcta   :=FillSpacesRight('7000000',12);
    2:SPDatDiario.Subcta   :=FillSpacesRight(DmYYY.CliCodigo.Value,12);
    3:SPDatDiario.Subcta   :=FillSpacesRight('4770016',12);
    4:SPDatDiario.Subcta   :=FillSpacesRight('4750004',12);
    end;


    //Solo partidas de IVA
    if nInicio > 2 then
    SPDatDiario.Contra   :=FillSpacesRight(DmYYY.CliCodigo.Value,12)
    else
    SPDatDiario.Contra   :=FillSpacesRight('',12);

  SPDatDiario.PtaDebe  :=FillSpacesLeft('0.00',16);
{Paso como concepto el número de la Factura más un nombre abreviado que uso para el cliente, conviene recordar que 
este campo tiene poca capacidad por lo que ha que abreviar el texto}

  SPDatDiario.Concepto :=FillSpacesRight(DmYYY2.FacturasNFactura.Value+' '+
  DmYYY.CliBuscar.Value ,25);

  SPDatDiario.PtaHaber :=FillSpacesLeft('0.00',16);
  SPDatDiario.Factura  :=FillSpacesLeft('0',8);

    //Solo partidas de IVA
    Case  nInicio  of
    3:begin
      SPDatDiario.BaseImpo :=StringReplace(FillSpacesLeft(FormatFloat('0.00',DmYYY2.FacturasBase.Value)    ,16),',','.',[rfReplaceAll]);
      SPDatDiario.TIva     :=StringReplace(FillSpacesLeft(FormatFloat('0.00',DmYYY2.FacturasTIva.Value)    ,05),',','.',[rfReplaceAll]);
      SPDatDiario.Trec     :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0),05),',','.',[rfReplaceAll]);
      end;
    4:begin
      SPDatDiario.BaseImpo :=StringReplace(FillSpacesLeft(FormatFloat('0.00',DmYYY2.FacturasBase.Value)    ,16),',','.',[rfReplaceAll]);
      SPDatDiario.TIva     :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0)    ,05),',','.',[rfReplaceAll]);
      SPDatDiario.Trec     :=StringReplace(FillSpacesLeft(FormatFloat('0.00',DmYYY2.FacturasTRecargo.Value),05),',','.',[rfReplaceAll]);
      end;
      else
      begin
      SPDatDiario.BaseImpo :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0)    ,16),',','.',[rfReplaceAll]);
      SPDatDiario.TIva     :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0)    ,05),',','.',[rfReplaceAll]);
      SPDatDiario.Trec     :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0)    ,05),',','.',[rfReplaceAll]);
      end;
     end;
    
  SPDatDiario.Document :=FillSpacesLeft('',10);
  SPDatDiario.Departa  :=FillSpacesLeft('',03);
  SPDatDiario.Clave    :=FillSpacesLeft('',06);
  SPDatDiario.Estado   :=FillSpacesLeft('',01);
  SPDatDiario.NCasado  :=FillSpacesLeft('0',06);
  SPDatDiario.TCasado  :=FillSpacesLeft('0',01);
  SPDatDiario.Trans    :=FillSpacesLeft('0',06);
  SPDatDiario.Cambio   :=StringReplace(FillSpacesLeft(FormatFloat('0.000000',0.00),16),',','.',[rfReplaceAll]);
  SPDatDiario.Debeme   :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0.00),16),',','.',[rfReplaceAll]);
  SPDatDiario.Haberme  :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0.00),16),',','.',[rfReplaceAll]);
  SPDatDiario.Auxiliar :=FillSpacesLeft('',1);
  SPDatDiario.Serie    :=FillSpacesLeft('',1);
  SPDatDiario.Sucursal :=FillSpacesLeft('',4);
  SPDatDiario.CodDivisa:=FillSpacesLeft('',5);
  SPDatDiario.ImpAuxme :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0.00),16),',','.',[rfReplaceAll]);
  SPDatDiario.MonedaUso:=FillSpacesLeft('2',1);

  Case  nInicio of
  {700 Base al Haber}
  1:begin
    SPDatDiario.EuroDebe :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0),16),',','.',[rfReplaceAll]);
    SPDatDiario.EuroHaber:=StringReplace(FillSpacesLeft(FormatFloat('0.00',DmYYY2.FacturasBase.Value) ,16),',','.',[rfReplaceAll]);
    SPDatDiario.BaseEuro :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0) ,16),',','.',[rfReplaceAll]);
    end;
  {430 Total al Debe}
  2:begin
    SPDatDiario.EuroDebe :=StringReplace(FillSpacesLeft(FormatFloat('0.00',DmYYY2.FacturasTotal.Value),16),',','.',[rfReplaceAll]);
    SPDatDiario.EuroHaber:=StringReplace(FillSpacesLeft(FormatFloat('0.00',0) ,16),',','.',[rfReplaceAll]);
    SPDatDiario.BaseEuro :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0) ,16),',','.',[rfReplaceAll]);
    end;
  {477 Iva al haber}
  3:begin
    SPDatDiario.EuroDebe :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0),16),',','.',[rfReplaceAll]);
    SPDatDiario.EuroHaber:=StringReplace(FillSpacesLeft(FormatFloat('0.00',DmYYY2.FacturasIva.Value) ,16),',','.',[rfReplaceAll]);
    SPDatDiario.BaseEuro :=StringReplace(FillSpacesLeft(FormatFloat('0.00',DmYYY2.FacturasBase.Value) ,16),',','.',[rfReplaceAll]);
    end;
  {4750004 Recargo al haber}
  4:begin
    SPDatDiario.EuroDebe :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0),16),',','.',[rfReplaceAll]);
    SPDatDiario.EuroHaber:=StringReplace(FillSpacesLeft(FormatFloat('0.00',DmYYY2.FacturasRecargo.Value) ,16),',','.',[rfReplaceAll]);
    SPDatDiario.BaseEuro :=StringReplace(FillSpacesLeft(FormatFloat('0.00',DmYYY2.FacturasBase.Value) ,16),',','.',[rfReplaceAll]);
    end;
  end;

  SPDatDiario.NoConv   :='F';
  SPDatDiario.NumeroInv:=FillSpacesLeft('',10);

  Write(FDiario, SPDatDiario.Asien);
  Write(FDiario, SPDatDiario.Fecha);
   
  Write(FDiario, SPDatDiario.Subcta);
  Write(FDiario, SPDatDiario.Contra);

  Write(FDiario, SPDatDiario.PtaDebe);
  Write(FDiario, SPDatDiario.Concepto);
  Write(FDiario, SPDatDiario.PtaHaber);
  Write(FDiario, SPDatDiario.Factura);
  Write(FDiario, SPDatDiario.BaseImpo);
  Write(FDiario, SPDatDiario.Tiva);
  Write(FDiario, SPDatDiario.TRec);
  Write(FDiario, SPDatDiario.Document);
  Write(FDiario, SPDatDiario.Departa);
  Write(FDiario, SPDatDiario.Clave);
  Write(FDiario, SPDatDiario.Estado);
  Write(FDiario, SPDatDiario.NCasado);
  Write(FDiario, SPDatDiario.TCasado);
  Write(FDiario, SPDatDiario.Trans);
  Write(FDiario, SPDatDiario.Cambio);
  Write(FDiario, SPDatDiario.Debeme);
  Write(FDiario, SPDatDiario.Haberme);
  Write(FDiario, SPDatDiario.Auxiliar);
  Write(FDiario, SPDatDiario.Serie);
  Write(FDiario, SPDatDiario.Sucursal);
  Write(FDiario, SPDatDiario.CodDivisa);
  Write(FDiario, SPDatDiario.ImpAuxMe);
  Write(FDiario, SPDatDiario.MonedaUso);
  //Varía
  Write(FDiario, SPDatDiario.EuroDebe);
  Write(FDiario, SPDatDiario.EuroHaber);
  Write(FDiario, SPDatDiario.BaseEuro);

  Write(FDiario, SPDatDiario.NoConv);
  Write(FDiario, SPDatDiario.NumeroInv);
  Write(FDiario,CrLf);
  end;
end;


La franja horaria es GMT +2. Ahora son las 07:53:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi