// Ejemplo básico en PowerBuilder
// ver más en http://techno-kitten.com/Changes_to_PowerBuilder/New_In_PowerBuilder_5/Inbound_OLE_automation/inbound_ole_automation.htm

oleObject    WSAA
oleObject    WSFEv1
long         status
string       tra
string       cms
string       ta
string       cae
boolean      ok

// Crear objeto interface Web Service Autenticación y Autorización
WSAA = create oleObject
status = WSAA.ConnectToNewObject("WSAA")
// si status<0 hubo error

// Generar un Ticket de Requerimiento de Acceso (TRA)
tra = WSAA.CreateTRA() 
// Generar el mensaje firmado (CMS) 
cms =WSAA.SignTRA(tra, "ghf.crt", "ghf.key") 

// Llamar al web service para autenticar
ta = WSAA.CallWSAA(cms, "https://wsaahomo.afip.gov.ar/ws/services/LoginCms")
    
// Crear objeto interface Web Service de Factura Electrónica de Mercado Interno
WSFEv1 = create oleObject
status = WSFEv1.ConnectToNewObject("WSFEv1")
// si status<0 hubo error

// Setear tocken y sing de autorización (pasos previos)
WSFEv1.Token = WSAA.Token
WSFEv1.Sign = WSAA.Sign

// CUIT del emisor (debe estar registrado en la AFIP)
WSFEv1.Cuit = "20267565393"

// Conectar al Servicio Web de Facturación
ok = WSFEv1.Conectar()

// Llamo a un servicio nulo, para obtener el estado del servidor (opcional)
ok = WSFEv1.Dummy()
MessageBox(WSFEv1.AppServerStatus)
MessageBox(WSFEv1.DbServerStatus)
MessageBox(WSFEv1.AuthServerStatus)
   
// Establezco los valores de la factura a autorizar:
tipo_cbte = 1
punto_vta = 1
cbte_nro = 0
fecha = "20101006"
concepto = 1
tipo_doc = 80
nro_doc = "23111111113"
cbt_desde = 1
cbt_hasta = 1
imp_total = "121.00"
imp_tot_conc = "0.00"
imp_neto = "100.00"
imp_iva = "21.00"
imp_trib = "0.00"
imp_op_ex = "0.00"
fecha_cbte = "20130423"
fecha_venc_pago = "20130430"
// Fechas del período del servicio facturado (solo si concepto = 1?)
fecha_serv_desde = "20130301"
fecha_serv_hasta = "20130331"
moneda_id = "PES"
moneda_ctz = "1"

ok = WSFEv1.CrearFactura(concepto, tipo_doc, nro_doc, tipo_cbte, punto_vta, cbt_desde, cbt_hasta, imp_total, imp_tot_conc, imp_neto, imp_iva, imp_trib, imp_op_ex, fecha_cbte, fecha_venc_pago, fecha_serv_desde, fecha_serv_hasta, moneda_id, moneda_ctz)

// Agrego los comprobantes asociados:
tipo = 19
pto_vta = 2
nro = 1234
ok = WSFEv1.AgregarCmpAsoc(tipo, pto_vta, nro)

// Agrego impuestos varios
id = 0
Desc = "Impuesto Municipal Matanza'"
base_imp = 150
alic = 5.2
importe = 5.8
ok = WSFEv1.AgregarTributo(id, Desc, base_imp, alic, importe)

// Agrego tasas de IVA
id = 5 
base_im = 100
importe = 21
ok = WSFEv1.AgregarIva(id, base_imp, importe)

// Solicito CAE:
cae = WSFEv1.CAESolicitar()

MessageBox(WSFEv1.Resultado)
MessageBox(WSFEv1.CAE)

destroy WSAA
destroy WSFEv1
