JSON

36 views
Skip to first unread message

Juan Miguel Solis

unread,
8:05 AM (14 hours ago) 8:05 AM
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,
10:18 AM (12 hours ago) 10:18 AM
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