JSON

48 views
Skip to first unread message

Juan Miguel Solis

unread,
Jun 25, 2026, 8:05:02 AM (2 days ago) Jun 25
to Comunidad de Visual Foxpro en Español
Buenos dias

Estoy intentando usar el PRG JSON para poder genera un fichero JSON,, lo que hao es lo siguiente:

En el INIT del formulario

DO JSON   && y Luego saco un mensajito para tener constancia de que se ha cargado.

Luego en un momento dado, caundo tengo todos los datos , llamo al metodo método   CreaJson y ahi, hago lo siguiente :

-----------------------------------------------------------------------------------------------------

LOCAL dFFact, cfechaFact, nDetalleId, cDetalle, nDetalle
dFFact = DTOS( Thisform.Caja_CbFecFct.value )
cfechaFact =LEFT(dFFact,4) + '-' +SUBSTR(dFFact,5,2)+'-'+right(dFFact,2)
nDetalleId = 0

factura = CREATE("DynObj")
factura.UserId = "PEYIE2"
factura.CompanyFiscalId = "B82998097"
factura.Invoices = CREATE("Collection")
invoice = CREATE("DynObj")
invoice.Establecimiento = "00"
invoice.Serie = "F"
invoice.Numero = cSeekFct
invoice.FechaExpedicion = cfechaFact
invoice.FechaOperacion = null
invoice.Descripcion = "DESCRIPCION FACTURA"
invoice.ImporteTotal = nCuotaIva + nSubTotal
invoice.ImporteRetencioSoportada = 0.00
invoice.EsSimplificada = false
invoice.EsSustitutivaSimplificada = false
invoice.TipoFactura = "F1"
invoice.TipoEmisor = 1
invoice.Moneda = "EUR"
invoice.TipoCambio = 1.00
invoice.Idioma = "ES"
invoice.FormaDePago = "Transferencia"
invoice.contraparte = CREATE("DynObj")
invoice.contraparte.Denominacion = Thisform.Caja_CbNombre.value
invoice.contraparte.TipoFiscal = cTipoFiscal  &&  0 = España, Si es terceros paises '06' o '02' intracomunitario (ver con Agustin)
invoice.contraparte.IdFiscal = Thisform.Caja_CbNifCif.value
invoice.contraparte.address = CREATE("DynObj")
invoice.contraparte.address.Direccion = ALLTRIM(Thisform.Caja_CbDomi1.value)
invoice.contraparte.address.Poblacion = ALLTRIM(Thisform.Caja_CbPobla.value)
invoice.contraparte.address.CodigoPostal = Thisform.Caja_CbCpost.value
invoice.contraparte.address.Province = IIF( EMPTY(Thisform.Caja_CbProvi.value), ALLTRIM(Thisform.Caja_CbPobla.value),Thisform.Caja_CbProvi.value )
  invoice.contraparte.address.CodigoPais = nIntraC  && Crear campo en PAIS.DBF para poner 1 si es comunitario y sino dejarlo a 0
  invoice.contraparte.Contactos = CREATE("Collection")
  contacto1 = CREATE("DynObj")
  contacto1.Id = 0
  contacto1.CounterPartId = 0
  contacto1.Nombre = "Juan Miguel"
  contacto1.Apellido = "Solis Sandes"
 invoice.contraparte.contactos.add(contacto1)
 
  invoice.DetalleRectificacion = CREATE("DynObj")
  invoice.DetalleRectificacion.CodigoFacturaRectificativa = null
  invoice.DetalleRectificacion.TipoFacturaRectificativa = null
  invoice.DetalleRectificacion.DetalleFacturas = CREATE("Collection")
 
 
  invoice.Payments = CREATE("Collection")
  pago1 = CREATE("DynObj")
pago1.Id = 0
pago1.Type = 2
pago1.Medio = 9
pago1.descriptions = ALLTRIM(CB_FACTU.CB_FOPAG)
pago1.Fecha = "2026-12-31"
pago1.Importe = nCuotaIva + nSubTotal
invoice.payments.add(pago1)


&&&   Crear lineas de Dealle
invoice.DetalleFactura = CREATE("Collection")

select TMPFACTU
set filter to !empty( FC_SEL )
go top

Do While !eof('TMPFACTU')
nDetalle = nDetalleId + 1
cDetalle = 'detalle' + STRTRAN( STR( nDetalle,4 ), ' ', '' )
&cDetalle. = CREATE("DynObj")

&cDetalle..Id = nDetalleId  
&cDetalle..TipoDesgloseOperacion = nTipDglOpe && 0 = Españolas, 1 = bienes, 2 = Servicios  (Todo los demas incluyendo si es de Ceuta, Melilla, Las Canarias)
&cDetalle..InversionSujetoPasivo = false
&cDetalle..descripcion = ALLTRIM(TMPFACTU.fc_des)
&cDetalle..Unidades = 1.00
&cDetalle..ImporteUnitario = TMPFACTU.fc_impor
&cDetalle..CosteUnitario = TMPFACTU.fc_impor  
&cDetalle..Descuento = 0
&cDetalle..TipoIva = TMPFACTU.fc_ivat
&cDetalle..alle1.TipoRe = 0  && Ver si tiene clientes con RE.
&cDetalle..CauseExencion = null  
&cDetalle..CausaNoSujeta = null  
&cDetalle..SubTotalLinea =  && Poner Subtotal de linea SIN IVA
&cDetalle..Position = TMPFACTU.fc_lin  
&cDetalle..Clave = "01"  && Esto de la clave es siempre fijo ?
** &cDetalle..UserdeDineData = CREATE("DynObj")  &&& De momento nada.
&cDetalle..InvoiceId = 0  
invoice.DetalleFactura.add(&cDetalle.)

SKIP IN 'TMPFACTU'
nDetalleId = nDetalleId +1
Enddo
&& para añadir 2 detalle y siguientes


factura.invoices.add(invoice)

-----------------------------------------------------------------------

Pero me da este error :

"No se encuentra la definición de clase DYNOBJ."

Aquí ya no se porque me dice esto, además como podría ver lo que se me ha grabado o poder generar un fichero con todo lo que va dentro ?

Alguien tiene algún ejemplo de esto.

Un saludo



Juan Gonzalez

unread,
Jun 25, 2026, 10:18:03 AM (2 days ago) Jun 25
to publice...@googlegroups.com
LOCAL dFFact, cfechaFact, nDetalleId, factura, invoice, loDetalle, loPago, lcJson

* 1. Preparación de fechas

dFFact = DTOS( Thisform.Caja_CbFecFct.value )
cfechaFact = LEFT(dFFact,4) + '-' + SUBSTR(dFFact,5,2) + '-' + RIGHT(dFFact,2)
nDetalleId = 0

* 2. Creación del objeto raíz

factura = CREATE("DynObj")
factura.UserId = "PEYIE2"
factura.CompanyFiscalId = "B82998097"
factura.Invoices = CREATE("Collection")

* 3. Creación de la factura

invoice = CREATE("DynObj")
invoice.Establecimiento = "00"
invoice.Serie = "F"
invoice.Numero = cSeekFct
invoice.FechaExpedicion = cfechaFact
invoice.FechaOperacion = null
invoice.Descripcion = "DESCRIPCION FACTURA"
invoice.ImporteTotal = nCuotaIva + nSubTotal
invoice.ImporteRetencioSoportada = 0.00
invoice.EsSimplificada = .F.
invoice.EsSustitutivaSimplificada = .F.

invoice.TipoFactura = "F1"
invoice.TipoEmisor = 1
invoice.Moneda = "EUR"
invoice.TipoCambio = 1.00
invoice.Idioma = "ES"
invoice.FormaDePago = "Transferencia"

* 4. Contraparte

invoice.contraparte = CREATE("DynObj")
invoice.contraparte.Denominacion = Thisform.Caja_CbNombre.value
invoice.contraparte.TipoFiscal = cTipoFiscal
invoice.contraparte.IdFiscal = Thisform.Caja_CbNifCif.value
invoice.contraparte.address = CREATE("DynObj")
invoice.contraparte.address.Direccion = ALLTRIM(Thisform.Caja_CbDomi1.value)
invoice.contraparte.address.Poblacion = ALLTRIM(Thisform.Caja_CbPobla.value)
invoice.contraparte.address.CodigoPostal = Thisform.Caja_CbCpost.value
invoice.contraparte.address.Province = IIF( EMPTY(Thisform.Caja_CbProvi.value), ALLTRIM(Thisform.Caja_CbPobla.value), Thisform.Caja_CbProvi.value )
invoice.contraparte.address.CodigoPais = nIntraC

* 5. Pagos

invoice.Payments = CREATE("Collection")
loPago = CREATE("DynObj")
loPago.Id = 0
loPago.Type = 2
loPago.Medio = 9
loPago.descriptions = ALLTRIM(CB_FACTU.CB_FOPAG)
loPago.Fecha = "2026-12-31"
loPago.Importe = nCuotaIva + nSubTotal
invoice.payments.add(loPago)

* 6. Líneas de Detalle (Bucle optimizado sin macros)

invoice.DetalleFactura = CREATE("Collection")

SELECT TMPFACTU
SET FILTER TO !EMPTY( FC_SEL )
GO TOP

SCAN
    loDetalle = CREATE("DynObj")
    loDetalle.Id = nDetalleId
    loDetalle.TipoDesgloseOperacion = nTipDglOpe
    loDetalle.InversionSujetoPasivo = .F.
    loDetalle.descripcion = ALLTRIM(TMPFACTU.fc_des)
    loDetalle.Unidades = 1.00
    loDetalle.ImporteUnitario = TMPFACTU.fc_impor
    loDetalle.CosteUnitario = TMPFACTU.fc_impor
    loDetalle.Descuento = 0
    loDetalle.TipoIva = TMPFACTU.fc_ivat
    loDetalle.TipoRe = 0
    loDetalle.CauseExencion = null
    loDetalle.CausaNoSujeta = null
    loDetalle.SubTotalLinea = (TMPFACTU.fc_impor * 1) && Asegúrate de calcularlo aquí
    loDetalle.Position = TMPFACTU.fc_lin
    loDetalle.Clave = "01"
    loDetalle.InvoiceId = 0
   
    invoice.DetalleFactura.add(loDetalle)
    nDetalleId = nDetalleId + 1
ENDSCAN

* 7. Finalizar y generar JSON
factura.invoices.add(invoice)

* Convertir a JSON y guardar
lcJson = factura.ToString()
STRTOFILE(lcJson, "factura_" + ALLTRIM(cSeekFct) + ".json")

MESSAGEBOX("Fichero JSON generado correctamente.")

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/publicesvfoxpro/41682759-2744-4e92-b168-ed2a9f63e030n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages