RE:Agregar campos calculados en ejecucion
Compañero, puedes grabar la función que adjunto en un archivo con el nombre f_insertar_objeto_derecha.srf Luego lo importas a tu proyecto.
Esta función te inserta un objeto o campo en un DW, a la derecha de otra columna, queda pendiente reacomodar las columnas que quedarían a la derecha de la columna insertada.
La sintaxis del objeto a insertar la puedes obtener de cualquier otra columna. Para obtenerla puedes exportar el DW y de ahí tomas lo que necesitas.
El llamado a la función se puede realizar de la siguiente manera:
f_agregar_objeto_derecha(dw_1, 'nombre_eje'+String(li_row -1), 'nombre_eje'+String(li_row), 'column', ' id='+String(f_obt_id_columna(dw_1, 'nombre_eje'+String(li_row)))+' band=detail alignment="0" tabsequence=32766 border="0" color="16777215" x="2889" y="4" height="52" width="224" format="[general]" visible="1~tif(co_num_linea=1,1,0)" edit.limit=0 edit.case=any edit.focusrectangle=no edit.autoselect=no font.face="MS Sans Serif" font.height="-8" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="2" background.color="16711680"')
Recuerda que si vas a insertar un campo abría que crearlo en el SQL, para que exista en el momento donde se llama la función.
Si necesitas una función que agrege de forma dinámica los campos a la sintaxis del SQL, me dices para agregarla.
$PBExportHeader$f_insertar_objeto_derecha.srf
global type f_insertar_objeto_derecha from function_object
end type
forward prototypes
global function integer f_insertar_objeto_derecha (datawindow adw_datawindow, string as_nombre_objeto_referencia_izquierda, string as_nombre_objeto_agregar, string as_tipo_objecto_agregar, string as_sintaxis_objeto_crear)
end prototypes
global function integer f_insertar_objeto_derecha (datawindow adw_datawindow, string as_nombre_objeto_referencia_izquierda, string as_nombre_objeto_agregar, string as_tipo_objecto_agregar, String as_sintaxis_objeto_crear);String ls_syntax, &
ls_mensaje, &
ls_xy, ls_w
Integer li_pos, li_columna
Long ll_x, ll_posicion_agregar
li_pos=Pos(as_sintaxis_objeto_crear, '{@}')
Do While li_pos > 0
as_sintaxis_objeto_crear=Replace(as_sintaxis_objeto_crear, li_pos, 3, as_nombre_objeto_agregar)
li_pos=Pos(as_sintaxis_objeto_crear, '{@}')
Loop
ls_syntax=as_tipo_objecto_agregar+'( name='+as_nombre_objeto_agregar+' '+as_sintaxis_objeto_crear+' )'
ls_mensaje=adw_datawindow.Modify('CREATE '+ls_syntax)
If ls_mensaje <> '' then
Messagebox('ERROR', 'Ha ocurrido un ERROR al agregar nuevo Campo('+as_nombre_objeto_agregar+')~n'+ &
'Syntax[ '+ls_syntax+' ]~n'+ &
'ERROR:'+ls_mensaje)
RETURN -1
End If
ls_xy=adw_datawindow.Describe(as_nombre_objeto_referencia_izquierda+'.X')
If ls_xy = '(!)' or ls_xy = '(?)' then
Messagebox('ERROR', 'Ha ocurrido un ERROR al localizar el campo de referencia('+as_nombre_objeto_referencia_izquierda+')')
RETURN -1
End If
ls_w=adw_datawindow.Describe(as_nombre_objeto_referencia_izquierda+'.Width')
ll_x=long(ls_xy)+long(ls_w) +9
ls_xy=string(ll_x)
adw_datawindow.Modify(as_nombre_objeto_agregar+'.X="'+ls_xy+'"')
ls_xy=adw_datawindow.Describe(as_nombre_objeto_referencia_izquierda+'.Y')
If ls_xy = '(!)' or ls_xy = '(?)' then
Messagebox('ERROR', 'Ha ocurrido un ERROR al localizar el campo de referencia('+as_nombre_objeto_referencia_izquierda+')')
RETURN -1
End If
adw_datawindow.Modify(as_nombre_objeto_agregar+'.Y="'+ls_xy+'"')
ll_posicion_agregar=Integer(adw_datawindow.Describe(as_nombre_objeto_agregar+'.Width'))+9
// Modificar Posición de Objetos a la Derecha de la Columna a Insertar.
For li_columna=1 to integer(adw_datawindow.object.DataWindow.Column.Count)
If adw_datawindow.Describe('#'+String(li_columna)+'.band') = 'detail' and &
Upper(Nvl(adw_datawindow.Describe('#'+String(li_columna)+'.name'), '')) <> Upper(as_nombre_objeto_agregar) and &
Integer(adw_datawindow.Describe('#'+string(li_columna)+'.X')) >= ll_x then
adw_datawindow.Modify('#'+String(li_columna)+'.X='+String(Integer(adw_datawindow.Describe('#'+String(li_columna)+'.X'))+ll_posicion_agregar))
End If
Messagebox('f_insertar_objeto_derecha', 'obj('+string(li_columna)+'): '+String(adw_datawindow.Describe('#'+String(li_columna)+'.name')))
Next
RETURN 1
end function