gget79
23rd January 2008, 18:36
Hi ,

I am working with Baan Vc

I am doing a AFS function, It has to create a Sales Order (collect order type), but via AFS I don't get to execute warehousing (tdsls4246m000) and invoicing (tdsls4247m000).

I am doing a trace with afs.log and this tell me:

250dll->serv (starttdsls4500m000100)
260serv<-4gl (init.ready)
tdsls4500m000(260)-RUNNING:
250dll->serv (starttdsls4100s0001tdsls4500m000114)
261serv<-4gl (init.ready)
tdsls4100s000(261)-RUNNING:
250dll->serv (syncadd260)
tdsls4500m000(260)-RUNNING:syncadd
260serv<-4gl (syncadd0)
tdsls4500m000(260)-RUNNING:
>tdsls4100s000(261) put.field:tdsls400.ofbp 000000009
>tdsls4100s000(261) put.field:tdsls400.cofc VENTA
>tdsls4100s000(261) put.field:tdsls400.sotp VMR
>tdsls4100s000(261) put.field:tdsls400.orno VMR
>tdsls4100s000(261) put.field:tdsls400.corn 1713
>tdsls4100s000(261) put.field:tdsls400.crep 400
>tdsls4100s000 enum.answer tdslss0065:1
250dll->serv (enum.answertdslss00651261)
tdsls4100s000(261)-RUNNING:enum.answer
261serv<-4gl (enum.answer0)
tdsls4100s000(261)-RUNNING:
>tdsls4100s000 handle.subproc tdslss0065 ignore
250dll->serv (handle.subsessiontdslss00654261)
>tdsls4500m000 insert
250dll->serv (add.set+save261)
tdsls4100s000(261)-RUNNING:add.set+save
262serv<-4gl (api.child.startedtdsls4501m000261)
261serv<-4gl (add.set+save00)
tdsls4100s000(261)-RUNNING:
<tdsls4500m000
>tdsls4100s000 enum.answer tdslss0065:1
250dll->serv (enum.answertdslss00651261)
tdsls4100s000(261)-RUNNING:enum.answer
261serv<-4gl (enum.answer0)
tdsls4100s000(261)-RUNNING:
>tdsls4100s000 handle.subproc tdslss0065 ignore
250dll->serv (handle.subsessiontdslss00654261)
>tdsls4100s000 get.field:tdsls400.orno
<tdsls4100s000(261) get.field:tdsls400.orno=VMR000894
>tdsls4100s000 end.session
250dll->serv (end.program261)
tdsls4100s000(261)-RUNNING:end.program
261serv<-4gl (end.program0)
tdsls4100s000(261)-RUNNING:
261dll->serv (tdsls4100s000: exit(261))
>tdsls4500m000 end.session
250dll->serv (end.program260)
tdsls4500m000(260)-RUNNING:end.program
(0)-RUNNING:end.program
260serv<-4gl (end.program0)
tdsls4500m000(260)-RUNNING:
260dll->serv (tdsls4500m000: exit(260))
tdsls4501m000waiting for prev cont.proc
262serv<-4gl (init.ready)
tdsls4501m000(262)-RUNNING:
tdsls4501m000waiting 10 mSec
>tdsls4501m000(262) put.field:tdsls401.orno VMR000894
>tdsls4501m000 change.view
250dll->serv (start.set262)
tdsls4501m000(262)-RUNNING:start.set
262serv<-4gl (start.setEOF0)
tdsls4501m000(262)-RUNNING:
<tdsls4501m000 0 no view found
250dll->serv (starttdsls4101s0001tdsls4501m000114)
263serv<-4gl (init.ready)
tdsls4101s000(263)-RUNNING:
250dll->serv (syncadd262)
tdsls4501m000(262)-RUNNING:syncadd
262serv<-4gl (syncadd0)
tdsls4501m000(262)-RUNNING:
>tdsls4101s000(263) put.field:tdsls401.orno VMR000894
>tdsls4101s000(263) put.field:tdsls401.pono 1
>tdsls4101s000(263) put.field:tdsls401.item.segment.1 0301
>tdsls4101s000 handle.subproc tdsls11033 ignore
250dll->serv (handle.subsessiontdsls110334263)
>tdsls4101s000(263) put.field:tdsls401.oqua 6
>tdsls4101s000 handle.subproc 00009057 ignore
250dll->serv (handle.subsession000090574263)
>tdsls4101s000 handle.subproc tdsls4811s000 kill
250dll->serv (handle.subsessiontdsls4811s0005263)
>tdsls4101s000 insert
250dll->serv (add.set+save263)
tdsls4101s000(263)-RUNNING:add.set+save
263serv<-4gl (add.set+save01)
tdsls4101s000(263)-RUNNING:
<tdsls4101s000
>tdsls4101s000 get.field:tdsls401.pono
<tdsls4101s000(263) get.field:tdsls401.pono=1
>tdsls4101s000 get.field:tdsls401.sqnb
<tdsls4101s000(263) get.field:tdsls401.sqnb=0
>tdsls4501m000 enum.answer tdsls41016:1
250dll->serv (enum.answertdsls410161263)
tdsls4101s000(263)-RUNNING:enum.answer
263serv<-4gl (enum.answer0)
tdsls4101s000(263)-RUNNING:
250dll->serv (enum.answertdsls410161262)
tdsls4501m000(262)-RUNNING:enum.answer
262serv<-4gl (enum.answer0)
tdsls4501m000(262)-RUNNING:
>tdsls4501m000 enum.answer ciloc0001:1
250dll->serv (enum.answerciloc00011263)
tdsls4101s000(263)-RUNNING:enum.answer
263serv<-4gl (enum.answer0)
tdsls4101s000(263)-RUNNING:
250dll->serv (enum.answerciloc00011262)
tdsls4501m000(262)-RUNNING:enum.answer
262serv<-4gl (enum.answer0)
tdsls4501m000(262)-RUNNING:
>tdsls4101s000 end.session
250dll->serv (end.program263)
tdsls4101s000(263)-RUNNING:end.program
263serv<-4gl (end.program0)
tdsls4101s000(263)-RUNNING:
263dll->serv (tdsls4101s000: exit(263))
>tdsls4501m000 end.session
250dll->serv (end.program262)
tdsls4501m000(262)-RUNNING:end.program
(0)-RUNNING:end.program
264serv<-4gl (api.child.startedtdsls4246m000262)
264serv<-4gl (startup)
264dll->serv (tdsls4246m000: exit(264))
265serv<-4gl (api.child.startedtdsls4247m000262)
265serv<-4gl (startup)
265dll->serv (tdsls4247m000: exit(265))
262serv<-4gl (end.program0)
tdsls4501m000(262)-RUNNING:
262dll->serv (tdsls4501m000: exit(262))


How can I understand this?

mark_h
23rd January 2008, 20:01
You should be able to look at your code and relate each step in the code with what is in the log file. So for example starttdsls4500m000100 - means you did a command which started the tdsls4500m000 session, which then looks like it activated tdsls4100s000. Then you can see where you put the data. I am not familiar with these sessions so I can help a whole lot. Maybe posting your code will help someone see something.

gget79
23rd January 2008, 20:06
You should be able to look at your code and relate each step in the code with what is in the log file. So for example starttdsls4500m000100 - means you did a command which started the tdsls4500m000 session, which then looks like it activated tdsls4100s000. Then you can see where you put the data. I am not familiar with these sessions so I can help a whole lot. Maybe posting your code will help someone see something.

Hi Mark,

The source is the following:

declaration:

#pragma used dll ottstpapihand |Baan API handler
#include <bic_dam> |include tools functions para progress indicator
#include <bic_tt>

table tttgfd422

|getxxx.sn
extern domain tcmcs.long secu.f, secu.t
|getxxx.en

|* Variables de Pantalla
extern domain tcdate m.fecha | Fecha de procesamiento
extern domain tclogn m.user | Usuario
extern domain tcmcs.str50 m.file | Archivo de transacciones
extern domain tcmcs.str100 que.accion | Acción

|* Variables del API
long rec.read
long rec.writ
long rec.rej
long ret.code

string data.line(2048)
string err(215)

domain tcdate fecha.orden

|* Variables de Lectura de archivo txt
string orden.cliente(20) |* orden cliente
string partner.cliente(9), partner.receptor(9) |* partners
string dpto.ventas(6), representante(6) |* dpto.ventas, representante
string cond.pago(3) |* condicion de pago
string posicion(5) |* posicion
string articulo(47) |* articulo
string fecha(15), cant.pedida(15), descuento(15) |* fecha, cantidad pedida, descuento


extern domain tcmcs.str40 errfile | archivo de error

extern domain tcmcs.str60 arch.inp | Archivo de entrada
extern domain tcmcs.str60 arch.out | Archivo de Salida (errores)
long inp.fp | Puntero archivo de entrada
extern domain tcbool procesa
extern domain tcmcs.long rec.total | Registros Totales para usar en el indicador de progreso
extern domain tcsern sern
domain tcmcs.str80 que.formato
long rec.proc | Registros Procesados
long num.registros
long tempreg

domain tcmcs.s100m error.mess

extern domain tcorno ovta.orno
extern domain tcpono ovta.pono, ovta.sqnb
extern domain tcmcs.str5 aux.pono, aux.sqnb
long ret
extern domain tcorno aux.orno
domain tcmcs.str80 recover.msg
extern domain tcmcs.str30 aux.corn

extern domain tcsess programa


|****************************** form section **********************************


group.1:
init.group:
que.accion = "Iniciando Proceso"
m.fecha = date.num()
m.user = logname$
get.screen.defaults()


|****************************** choice section ********************************

choice.cont.process:
before.choice:
inp.fp = 0
| validar los datos de la pantalla si no pasa choice.again()
que.accion = "Paso 1 de 5: Verificando Información Archivo de Entrada"
muestra.accion(que.accion)
on.choice:
if lee.datos() then | Mandar a una tabla temporal
if valida.datos() then | Valida Datos de la tabla
if procesa.datos() then | Lee la tabla temporal y procesa lops registros
message("Proceso Concluido con éxito")
else
message("Existieron problemas revisar el registro de errores")
endif
else
message("Existieron problemas al validar las ordenes, revisar la sesión de errores")
endif
else
message("No existen datos en el archivo de entrada %s", m.file)
endif


|****************************** field section *********************************


|****************************** function section ******************************

functions:
function domain tcbool lee.datos()
{
return(true)
}

function domain tcbool valida.datos()
{
return(true)
}


function domain tcbool validacion.linea()
{
return(true)
}

function muestra.accion(domain tcmcs.str60 que.accion)
{
display("que.accion")
refresh()
}

function domain tcbool procesa.datos()
{
domain tcbool ok.procesa.datos, primer.registro

ok.procesa.datos = true
primer.registro = true
aux.orno = ""

num.registros = 0
tempreg = 0

if not crea.ordenes() then
ok.procesa.datos = false
endif

que.accion = ""
muestra.accion(que.accion)
return(ok.procesa.datos)
}

function domain tcbool crea.ordenes()
{
ovta.orno = ""

if not crear.cabecera.ovta() then
error.mess = "ERR: Ord "
return(false)
else
if not crear.linea.ovta() then
error.mess = "ERR: Ord " & "posicion "
return(false)
endif
endif
return(true)
}

function domain tcbool crear.cabecera.ovta()
{
| Sincronizar con sesion single
ret = stpapi.synchronize.dialog("tdsls4500m000", "add", error.mess)
if not ret then
error.mess = "Ord. venta. " &
"Sincr tdsls4100s000: " & error.mess
stpapi.end.session("tdsls4500m000")
return(false)
endif

| Llenar datos de cabecera de orden de venta

stpapi.put.field("tdsls4100s000", "tdsls400.ofbp", "000000009") |partner
| stpapi.put.field("tdsls4100s000", "tdsls400.stbp", tdcpe031.stbp) |partner
stpapi.put.field("tdsls4100s000", "tdsls400.cofc", "VENTA") |Departamento ventas
stpapi.put.field("tdsls4100s000", "tdsls400.sotp", "VMR") |tipo de orden de venta
stpapi.put.field("tdsls4100s000", "tdsls400.orno", "VMR") |serie de la orden
stpapi.put.field("tdsls4100s000", "tdsls400.corn", "1713") |Orden Cliente
stpapi.put.field("tdsls4100s000", "tdsls400.crep", "400") |vendedor
| stpapi.put.field("tdsls4100s000", "tdsls400.cwar", tdcpe030.cwar) |Almacen


stpapi.enum.answer("tdsls4100s000","tdslss0065", tcyesno.yes)
stpapi.handle.subproc("tdsls4100s000","tdslss0065","ignore")

ret = stpapi.insert("tdsls4500m000", true, error.mess)

if not ret then
stpapi.recover("tdsls4100s000", recover.msg)
error.mess = " Al Guardar " & error.mess
stpapi.end.session("tdsls4100s000")
stpapi.end.session("tdsls4500m000")
return(false)
endif

stpapi.enum.answer("tdsls4100s000","tdslss0065", tcyesno.yes)
stpapi.handle.subproc("tdsls4100s000","tdslss0065","ignore")
stpapi.get.field("tdsls4100s000", "tdsls400.orno", ovta.orno)
stpapi.end.session("tdsls4100s000")
stpapi.end.session("tdsls4500m000")

return(true)
}

function domain tcbool crear.linea.ovta()
{
programa = prog.name$
export("programa", programa)

| Ubicar orde. de venta
stpapi.put.field("tdsls4501m000", "tdsls401.orno", ovta.orno)
ret = stpapi.change.view("tdsls4501m000", error.mess)
if not isspace(error.mess) then
error.mess = "No se encontró la orden " & ovta.orno & ": " & error.mess
return(false)
endif

| Sincronizar con sesion single tdsls4101s000 - Lineas de orden vta
ret = stpapi.synchronize.dialog("tdsls4501m000", "add", error.mess)
if not ret then
error.mess = "Ord Venta. " & "Sincr tdsls4101s000: " & error.mess
return(false)
endif

stpapi.put.field("tdsls4101s000", "tdsls401.orno", ovta.orno)
stpapi.put.field("tdsls4101s000", "tdsls401.pono", str$("1"))
| stpapi.put.field("tdsls4101s000", "tdsls401.cwar", tdcpe030.cwar)

|getxxx.so
| select ttgfd422.*
| from ttgfd422
| where ttgfd422._index2 = { "tc", "item" }
| and ttgfd422._compnr = 0
| order by ttgfd422._index2
| selectdo
|getxxx.eo
| stpapi.put.field("tdsls4101s000", "tdsls401.item.segment."& str$(ttgfd422.sequ) , "0301"(ttgfd422.spos;ttgfd422.leng)
stpapi.put.field("tdsls4101s000", "tdsls401.item.segment.1", "0301")
|getxxx.o endselect

stpapi.handle.subproc("tdsls4101s000","tdsls11033","ignore")


stpapi.put.field("tdsls4101s000", "tdsls401.oqua", str$("6"))

|Enviamos Kill al mensaje de Stock
stpapi.handle.subproc("tdsls4101s000","00009057","ignore")
stpapi.handle.subproc("tdsls4101s000","tdsls4811s000","kill")


ret = stpapi.insert("tdsls4101s000", true, error.mess)
if not ret then
stpapi.recover("tdsls4101s000", recover.msg)
error.mess = "Linea: " & error.mess
stpapi.end.session("tdsls4101s000")
stpapi.end.session("tdsls4501m000")
return(false)
endif


stpapi.get.field("tdsls4101s000", "tdsls401.pono", aux.pono)
stpapi.get.field("tdsls4101s000", "tdsls401.sqnb", aux.sqnb)
|getxxx.sn
stpapi.enum.answer("tdsls4501m000","tdsls41016", tcyesno.yes)
stpapi.enum.answer("tdsls4501m000","ciloc0001", tcyesno.yes)
|getxxx.en
stpapi.end.session("tdsls4101s000")
stpapi.end.session("tdsls4501m000")

return(true)
}
|** End of program script