fbernaus
9th June 2004, 18:38
Estamos desarrollando un programa con las funciones AFS.
Este programa tiene que ejecutar la sesión de "Mantener recepciones" (tdpur4120m000) del módulo de Compras. Ahora bien, tenemos estos 2 problemas:
1. Localizar la orden de compra concreta que queremos. El problema está en que la sesión empieza pidiendo introducir el número de entrega, que es una variable que no identifica a la orden de compra y que encima se pide como una variable de formulario. Una vez introducido ese dato, hay que especificar en una subsesión el número de la orden de compra, pero también como una variable de formulario (orno.form). En resumidas cuentas, que una vez iniciada la sesión no vale con hacer un "put sesion,nombre_campo, valor_campo" y a continuación un "find".
¿Sabeis como se hace esto?
2. ¿Cómo navegamos en los registros de una sesión que muestra varios registros? Es la misma sesión de antes. El caso es que dada una orden de compra, en la sesión se muestran tantos registros como artículos de la orden pendientes de recibir. Queremos ir registro a registro especificando las cantidades entregadas, pero no sabemos como distinguir los registros entre sí, ya que todos tienen el mismo nombre. Pensamos, pero no lo hemos podido probar por no tener lo anterior, que habrá que hacer un find anidado. Es decir un find para la orden de compra y dentro de él un "find" para cada artículo.
Si teneis experiencia con estos problemas, os agradecería que me dijerais cómo podemos arreglarlos o alguna pauta para poder avanzar.
Muchísimas gracias de antemano!
lsilvag
15th June 2004, 12:48
Encontre este codigo en mis programas AFS que guardo cada vez que hago uno. Creo que te daria una idea de como hacerlo. Espero que te ayude pero en caso que tengas problemas podrias crear un caso y podria atenderlo personalmente ok.
|******************************************************************************
|* tdinvlenain 0 VRC B40U c4 stnd
|* Lenain's AFS.
|* lenains
|* 06-28-02 [17:03]
|******************************************************************************
|* Script Type: 123
|******************************************************************************
|****************************** DECLARATION SECTION ***************************
declaration:
extern domain tcmcs.str20 forminp
extern domain tcitem item, titem
extern domain tcdsca dsca
extern domain tcorno orno
extern domain tcmcs.long lano
extern domain tcmcs.long oqua
extern domain tcmcs.long dqua
extern domain tcmcs.str30 errdll
extern domain tcmcs.str30 retval
extern domain tcmcs.long fnd.line
table ttiitm001, ttdinv001, ttdpur045, ttiitm012, ttdsls045
extern domain tcmcs.long get.dat.tel
#pragma used dll ottstpapihand
|****************************** PROGRAM SECTION ***************************
before.program:
lano = 0
oqua = 0
dqua = 0
item = ""
dsca = ""
forminp = ""
switch.to.ascii.mode()
|****************************** ZOOM FROM SECTION ***************************
|****************************** FORM SECTION ***************************
|****************************** CHOICE SECTION ***************************
|****************************** FIELD SECTION ***************************
field.forminp:
after.input:
item = ""
dsca = ""
oqua = 0
dqua = 0
if forminp(1;1) = "E" and len(forminp) = 7 then
orno = lval(forminp(2;18))
stpapi.handle.subproc( "tdpur4120m000", "tdpur4224s000", "send" )
stpapi.put.field( "tdpur4120m000", "form.dino", "bishernich" )
fnd.line = stpapi.change.view( "tdpur4120m000" )
stpapi.put.field( "tdpur4224s000", "form.orno", str$(orno) )
stpapi.continue.process("tdpur4224s000", errdll)
stpapi.end.session( "tdpur4224s000" )
if isspace(errdll) then
stpapi.get.field( "tdpur4120m000", "tdpur045.reno",retval)
lano = lval(retval)
if lano = 0 then
get.dat.tel = 0
while get.dat.tel < 10
stpapi.get.field( "tdpur4120m000", "tdpur045.reno",retval)
lano = lval(retval)
if lano = 0 then
get.dat.tel = get.dat.tel + 1
else
get.dat.tel = 10
endif
endwhile
endif
endif
stpapi.end.session( "tdpur4120m000" ,errdll)
if lano = 0 then
select tdpur045.reno
from tdpur045
where tdpur045._index1 = {:orno}
and tdpur045.reno <> 0
as set with 1 rows
selectdo
lano = tdpur045.reno
endselect
endif
forminp = ""
display.all()
input.again()
else
select tdpur045.*, tiitm001.*
from tdpur045, tiitm001
where tdpur045._index6 = {:lano}
and tdpur045.item = :forminp
and tdpur045.spur = 3
and tdpur045.item refers to tiitm001
selectdo
forminp = ""
oqua = tdpur045.diqu
dqua = tdpur045.diqu
item = tiitm001.item
dsca = tiitm001.dsca
display.all()
selectempty
forminp = ""
oqua = 0
dqua = 0
item = ""
dsca = "**ITEM NICHT** **VORHANDEN**"
display.all()
input.again()
endselect
endif
stpapi.end.session( "tdpur4120m000" )
field.dqua:
after.input:
stpapi.put.field( "tdpur4120m000", "tdpur045.reno", str$(tdpur045.reno) )
stpapi.put.field( "tdpur4120m000", "tdpur045.orno", str$(tdpur045.orno) )
stpapi.put.field( "tdpur4120m000", "tdpur045.pono", str$(tdpur045.pono) )
stpapi.put.field( "tdpur4120m000", "tdpur045.srnb", str$(tdpur045.srnb) )
fnd.line = stpapi.find( "tdpur4120m000" )
if fnd.line = 1 then
errdll = ""
stpapi.put.field( "tdpur4120m000", "tdpur045.reno", str$(tdpur045.reno) )
stpapi.put.field( "tdpur4120m000", "tdpur045.orno", str$(tdpur045.orno) )
stpapi.put.field( "tdpur4120m000", "tdpur045.pono", str$(tdpur045.pono) )
stpapi.put.field( "tdpur4120m000", "tdpur045.dqua", str$(dqua) )
stpapi.put.field( "tdpur4120m000", "tdpur045.bqua", str$(oqua-dqua) )
stpapi.put.field( "tdpur4120m000", "tdpur045.date", str$(date.num()) )
stpapi.update( "tdpur4120m000", 1, errdll )
if not isspace(errdll) then
dsca = errdll
item = "**ERROR**"
dqua = 0
oqua = 0
display.all()
to.field("forminp")
else
stpapi.save( "tdpur4120m000", errdll )
if not isspace(errdll) then
dsca = errdll
item = "**ERROR**"
dqua = 0
oqua = 0
display.all()
to.field("forminp")
endif
endif
dsca = "VERARBEITUNG OK***************"
stpapi.end.session( "tdpur4120m000" )
else
if stpapi.browse.view("tdpur4120m000", "last.view") = 1 then
stpapi.get.field( "tdpur4120m000", "tdpur045.item",retval)
stpapi.end.session( "tdpur4120m000" )
dsca = "**LINE NICHT** ** VORHANDEN **"
item = ""
dqua = 0
oqua = 0
display.all()
to.field("forminp")
endif
endif
item = ""
dsca = "VERARBEITUNG OK***************"
dqua = 0
oqua = 0
display.all()
to.field("forminp")
|****************************** MAIN TABLE SECTION ***************************
|****************************** FUNCTION SECTION **************************
fbernaus
15th June 2004, 13:35
Muchas gracias! Lo probaremos. Esperamos que sí,
Un saludo,
fbernaus
21st June 2004, 18:12
Hola! Estamos a medio camino de conseguirlo. El código que nos has dejado nos ha servido. Pero tenemos el problema de que el número de recepción que obtenemos con la función get.field(.., tdpur045.reno,..) es siempre 0.
¿Sabes como arreglar esto? El código que tenemos es éste. Muchas gracias con lo que sea. Un saludo,
Public Function recepcionar( _
ByVal orden_compra As String, _
ByVal datos As DataSet) As Integer
Dim cvs As String
Dim cv As Long
'Creación de un objeto Baan, de invocaciòn de sesiones automático
Dim baanobj As Object
baanobj = CreateObject("Baan4.Application.baanivc4") '501
baanobj.Timeout = 300
MsgBox("Objeto AFS creado")
Dim sesion_baan As String = "tdpur4120m000" 'SESION: Mantener recepciones
Dim subsesion As String = "tdpur4224s000" 'Subsesión: Seleccionar recepiones por número de orden
Dim resul_cp As String
Dim nota_entrega As String = "001"
'========================================================================================================================================================================================================
'A)
baanobj.ParseExecFunction("ottstpapihand", "stpapi.handle.subproc(" & Chr(34) & sesion_baan & Chr(34) & "," & Chr(34) & subsesion & Chr(34) & "," & Chr(34) & "add" & Chr(34) & ")")
baanobj.ParseExecFunction("ottstpapihand", "stpapi.put.field(" & Chr(34) & sesion_baan & Chr(34) & "," & Chr(34) & "form.dino" & Chr(34) & "," & Chr(34) & nota_entrega & Chr(34) & ")")
baanobj.ParseExecFunction("ottstpapihand", "stpapi.change.view(" & Chr(34) & sesion_baan & Chr(34) & "," & Chr(34) & cvs & Chr(34) & ")")
MsgBox("Changeview -->> " & baanobj.returnValue & " errorMsg: " & cvs)
'B)
baanobj.ParseExecFunction("ottstpapihand", "stpapi.put.field(" & Chr(34) & subsesion & Chr(34) & "," & Chr(34) & "form.orno" & Chr(34) & "," & Chr(34) & orden_compra & Chr(34) & ")")
baanobj.ParseExecFunction("ottstpapihand", "stpapi.continue.process(" & Chr(34) & subsesion & Chr(34) & "," & Chr(34) & resul_cp & Chr(34) & ")")
MsgBox("CP: " & resul_cp)
baanobj.ParseExecFunction("ottstpapihand", "stpapi.end.session(" & Chr(34) & subsesion & Chr(34) & ")")
'Esperar un tiempo, unos 5s
MsgBox("empieza cuenta")
Dim i As Integer
Dim z As Double
For i = 1 To 700000000
z += 0.0001
Next
MsgBox("termino cuenta")
'C)
Dim num_rec As String
baanobj.ParseExecFunction("ottstpapihand", "stpapi.get.field(" & Chr(34) & sesion_baan & Chr(34) & "," & Chr(34) & "tdpur045.reno" & Chr(34) & "," & Chr(34) & num_rec & Chr(34) & ")")
baanobj.ParseExecFunction("ottstpapihand", "stpapi.end.session(" & Chr(34) & sesion_baan & Chr(34) & ")")
MsgBox("numRecepción-->> " & num_rec & "Valor: " & Val(num_rec))
'D)
baanobj.ParseExecFunction("ottstpapihand", "stpapi.put.field(" & Chr(34) & sesion_baan & Chr(34) & "," & Chr(34) & "tdpur045.reno" & Chr(34) & "," & Chr(34) & nota_entrega & Chr(34) & ")")
baanobj.ParseExecFunction("ottstpapihand", "stpapi.put.field(" & Chr(34) & sesion_baan & Chr(34) & "," & Chr(34) & "tdpur045.orno" & Chr(34) & "," & Chr(34) & orden_compra & Chr(34) & ")")
baanobj.ParseExecFunction("ottstpapihand", "stpapi.put.field(" & Chr(34) & sesion_baan & Chr(34) & "," & Chr(34) & "tdpur045.pono" & Chr(34) & "," & Chr(34) & "10" & Chr(34) & ")")
baanobj.ParseExecFunction("ottstpapihand", "stpapi.find(" & Chr(34) & sesion_baan & Chr(34) & ")")