Modificar tabla DBF v6 desde VFP9

249 views
Skip to first unread message

Luis la Romana

unread,
Jun 27, 2016, 3:52:53 PM6/27/16
to Comunidad de Visual Foxpro en Español
Tengo un sistema hecho con VFP6 y necesito a una tabla crearle un campo adicional (tipo autoincremental). El caso es que solo tengo VFP9 y al hacerlo desde allí obviamente la aplicación deja de reconocer el formato de la tabla, quisiera saber cómo puedo hacer sin necesidad de conseguir/instalar VFP6 -si es que esa versión soportaba integer-

Jose Mario

unread,
Jun 27, 2016, 5:07:06 PM6/27/16
to Comunidad de Visual Foxpro en Español
SET CPDIALOG OFF
SET CPDIALOG: Especifica si se muestra el cuadro de diálogo Página de códigoscuando se abre una tabla.

Luis Maria Guayan

unread,
Jun 27, 2016, 5:37:38 PM6/27/16
to publice...@googlegroups.com

VFP6 no reconoce los campos autoincrementales, esta característica fue implementada en VFP8 (si la memoria no me falla :-D)


Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

El 27/06/16 a las 16:52, Luis la Romana escribió:

francisco prieto

unread,
Jun 28, 2016, 7:27:57 AM6/28/16
to publice...@googlegroups.com
Asi, como dice LuisMa... lo que te queda es armar una tabla contador y hacer vos tu propia versión de incremental...

Saludos,

Pancho
Cordoba
Argentina

Mario Oviedo

unread,
Jun 28, 2016, 10:30:03 AM6/28/16
to publice...@googlegroups.com

CREATE TABLE Ids ;

  (cTabla C(30) NOT NULL, ;

  nId I NOT NULL)

INDEX ON UPPER(cTabla) TAG cTabla

 

Por cada tabla que necesitemos llevar un número consecutivo, insertamos un registro con el nombre de la tabla e inicializamos el contador en 0 (cero):

 

INSERT INTO Ids (cTabla, nId) VALUES ("Facturas", 0)

INSERT INTO Ids (cTabla, nId) VALUES ("Albaranes", 0)

INSERT INTO Ids (cTabla, nId) VALUES ("Clientes", 0)

INSERT INTO Ids (cTabla, nId) VALUES ("Ciudades", 0)

 

*-------------------------------------------------------------------------------------------------------------------

La función que nos generará el nuevo numero consecutivo (NuevoId()), puede estar ubicada en un archivo de procedimientos de nuestra aplicación, o puede ser un procedimiento almacenado de nuestra base de datos. El código de la función es el siguiente:

 

 FUNCTION NuevoID(tcAlias)

  LOCAL lcAlias, lnId, lnAreaAnt, lcReprAnt

  lnId = 0

  lnAreaAnt = SELECT()

  lcReprAnt = SET('REPROCESS')

  SET REPROCESS TO AUTOMATIC

  lcAlias = UPPER(ALLTRIM(tcAlias))

  IF NOT USED("Ids")

    USE Ids IN 0

  ENDIF

 

  SELECT Ids

  IF SEEK(lcAlias, "Ids", "cTabla")

    IF RLOCK()

      REPLACE nId WITH nId + 1 IN Ids

      lnID = Ids.nId

      UNLOCK

    ENDIF

  ENDIF

  SELECT (lnAreaAnt)

  SET REPROCESS TO lcReprAnt

  RETURN lnID

ENDFUNC

Cada vez que necesitemos un nuevo número consecutivo de una tabla, invocamos la función pasando el nombre de la tabla o su alias como parámetro:

 

lnNuevoId = NuevoId("Facturas")

 

El valor retornado por la función NuevoId() es del tipo Entero. Si por ejemplo el código de cliente de nuestra tabla Clientes es del tipo caracter de 4 y justificado con 0s (ceros) a la izquierda, transformamos el número retornado de la siguiente manera:

lcCodCli = TRANSFORM(NuevoId("Clientes"), "@L 9999")

 


hace un tiempo un amigo del grupo compartio este procedimiento haber si te sirve


Luis la Romana

unread,
Jun 28, 2016, 2:08:14 PM6/28/16
to Comunidad de Visual Foxpro en Español
Sí gracias, el caso es que esta aplicación hecha en VFP6 no la hice yo sino una empresa consultora, no tengo los fuentes para compilarla en VFP9 incluyendo ese cambio. Veremos si hay manera de adquirir el código, porque si bien es un sistema contable contable común hay que admitir que es "bellamente" simple que aun gusta a los usuarios, el que lo diseñó era un desalmado minimalista que pensó en lo intuitivo como premisa, son solo unas tres tablas y sin muchos campos.

Carlos Miguel FARIAS

unread,
Jun 28, 2016, 2:57:53 PM6/28/16
to Grupo Fox
Navaja de Ockham.
Para un sistema de contabilidad, solo necesitas 3 tablas, plan de cuentas, asientos y debitos_créditos
Plan = {IdCuenta, cNombreCuenta, bGrupo, mObs, cEstado}
Asientos = {nAsiento, nEjercicio, dFecha, mObs, cEstado}
Debitos_Creditos = {nAsiento, IdCuenta, cTipo, yImporte, mObs, cEstado}

El importe se carga positivo para los débitos y negativo para los créditos, por lo que sacar el saldo de una cuenta es un simple SUM(yImporte) filtrando por IdCuenta.
cTipo es 'D' o 'H', y sirve solo a los efectos de presentación y ordenamiento, ya que como D es antes que H, quedan primero mostrados los Débitos (Debe) y luego los Créditos (Haber).

Los mayores son inmediatos, un simple select te trae toda la información.
En los campos memos (mObs) puedes cargar información adicional.

Esto es simplemente contabilidad. Con SQL puedes hacer todos los informes que se te ocurran.
Saludos: Miguel, La Pampa (RA)

Larga Vida y Prosperidad
Que la Fuerza los acompañe hasta la partida doble y más allá

integral

unread,
Jun 28, 2016, 6:40:53 PM6/28/16
to Comunidad de Visual Foxpro en Español

Que tal Amigos :

Solo para decirles que muy interesante la opinion del amigo MIGUEL

L hace ver como que resulta relativamente facil hacer un sistema Contable...

Es mi opinion...

Saludos,

INTEGRAL

Carlos Miguel FARIAS

unread,
Jun 28, 2016, 7:59:07 PM6/28/16
to Grupo Fox
La potencia de un sistema contable está en el plan de cuentas.

El PdC lo elabora el contador, si este crea las cuentas apropiadas, el sistema no tiene porque tener mucha complejidad (se diseño cuando el "computador" era con suerte un ábaco).

En las tablas de asientos y debitos_creditos puedes guardar asientos plantillas, dándoles un estado o un número de ejercicio especial. Estos asientos son de uso común, donde siempre intervienen las mismas cuentas debitando y acreditando, difiriendo solo en el importe y la fecha.

El idCuenta debería responder al clásico sistema jerárquico utilizado por planes de cuenta.
Las cuentas con bGrupo verdadero no pueden incluirse en asientos, agrupan cuentas de orden inferior.

Si el plan es muy grande, puede agregarse en PdC un código de cuenta "rápido", que es un número corto que usa el operador para seleccionar la cuenta, en lugar del código largo que puede tener hasta 10/12 dígitos.

Los primeros dígitos del id de cuenta se puede usar para tipificar el comportamiento de la cuenta: (1: activo; 2: pasivo; 3: patrimonio neto; ...), entonces 111 podría ser activo, activo corriente, disponibilidades.

La contabilidad está muy estandarizada, hay RTs que pueden explicar la inteligencia del sistema y como se trabaja con cada rubro.


Por supuesto puedes agregar más tablas para potenciar el sistema con alguna funcionalidad extra, pero bueno, la base está.

Saludos: Miguel, La Pampa (RA)

Larga Vida y Contabilidad
Que la Partida Doble los acompañe hasta el Balance Final y más allá

Luis la Romana

unread,
Jul 7, 2016, 1:30:22 PM7/7/16
to Comunidad de Visual Foxpro en Español
En varias ocasiones me he topado con algunos sistemas contables que dan risa, hechos en distintas lenguajes la mayoria en VFP, dejan entrever que si bien el programador era muy bueno en lo suyo de seguro era un asno en temas contables, para mencionar un ejemplo mantienen las cuentas de naturaleza acreedora con saldos rojos (negativos). Y clasifican todo el catálogo entre dos tipos: activos y pasivos, cuando lo correcto es entre deudoras y acreedoras. Vi un caso que el sistema permitía aplicar asientos a una cuenta de agrupación y a la vez a sus subcuentas. Recientemente que han llegado las NIIF Pymes más de algun sistema ha de ser infuncional por catalogar cuentas entre "bancarias" "circulantes", "proveedores" y otras locuras, eso no es necesario que vaya explícito en el programa porque el catálogo contable lo debe contemplar en su estructura. Ya con las NIIF basta con cambiar catalogo y nos olvidamos del asunto.

Pero por dicha el sistema en cuestión de esta consulta es la ley -como decimos acá-, no es perfecto tiene un pequeño problema al cambiar de vista-previa a impresor pero eso es algo insignificante-, no gestiona cierres mensuales ni guarda saldos lo cual es fabuloso, en fin el tema es interesante.
Reply all
Reply to author
Forward
0 new messages