--recordLEFT == arr_left --recordRIGHT == arr_right DEFINE Arrastrar ui.DragDrop DEFINE drag_source STRING GLOBALS "ipprgb000.4gl" DEFINE descripcion STRING DEFINE record1 DYNAMIC ARRAY OF RECORD id_seccion INT, Desc_seccion STRING, id_tramo INT, Desc_tramo STRING, unidades DECIMAL(18, 2), cantidad DECIMAL(18, 2) END RECORD DEFINE record2 DYNAMIC ARRAY OF RECORD id_seccion INT, Desc_seccion STRING, id_tramo INT, Desc_tramo STRING, unidades DECIMAL(18, 2), cantidad DECIMAL(18, 2), Desc_seccionAnterior STRING, Desc_tramoAnterior STRING END RECORD FUNCTION InsertaUbicacionDH(prod1) CONSTANT S_LEFT = "recordLEFT" CONSTANT S_RIGHT = "recordRIGHT" DEFINE bodegaCont, i INT --BodegaContainer-- DEFINE prod1 RECORD estado VARCHAR(20), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(180), unidad_med LIKE iptb00002.unidad_med, bodega CHAR(50), existencia DECIMAL(12, 5), cantidad_ordenes DEC(12, 5), disponible DEC(12, 5), reservado DEC(12, 5), transito DEC(12, 5) END RECORD LET descripcion = prod1.descrip_esp SELECT bodega INTO bodegaCont FROM iptb00002 WHERE cod_n = prod1.cod_n AND cod_grupo = prod1.cod_grupo AND cod_tipo = prod1.cod_tipo AND cod_sec = prod1.cod_sec AND status_t IS NULL LET idx = 2 DECLARE buscar CURSOR FOR SELECT cod_seccion, cod_tramo, cantidad, cantidad2 FROM iptb00062 WHERE cod_n = prod1.cod_n AND cod_grupo = prod1.cod_grupo AND cod_tipo = prod1.cod_tipo AND cod_sec = prod1.cod_sec FOREACH buscar INTO record1[idx].id_seccion, record1[idx].id_tramo, record1[idx].unidades, record1[idx].cantidad LET idx = idx + 1 END FOREACH FOR i = 2 TO i = record1.getLength() SELECT a.descripcion, b.descripcion INTO record1[i].Desc_seccion, record1[i].Desc_tramo FROM intb00010 a INNER JOIN intb00043 b ON a.cod_seccion = b.cod_seccion AND a.cod_bodega = b.cod_bodega WHERE a.cod_bodega = bodegaCont AND a.cod_seccion = record1[i].id_seccion AND b.cod_tramo = record1[i].id_tramo END FOR OPEN WINDOW w1 WITH FORM "ipfmmt006" DISPLAY BY NAME descripcion CALL DefaultLocations() DIALOG ATTRIBUTE(UNBUFFERED) DISPLAY ARRAY record1 TO recordLEFT.* ON DRAG_START(Arrastrar) LET drag_source = S_RIGHT ON DRAG_FINISHED(Arrastrar) INITIALIZE drag_source TO NULL ON DRAG_ENTER(Arrastrar) IF drag_source IS NULL THEN CALL Arrastrar.setOperation(NULL) END IF ON DROP(Arrastrar) IF drag_source == S_RIGHT THEN CALL Arrastrar.dropInternal() ELSE CALL Arrastrar_local( DIALOG, Arrastrar, S_LEFT, S_RIGHT, record1, record2) END IF END DISPLAY INPUT ARRAY record2 FROM recordRIGHT.* END INPUT END DIALOG END FUNCTION FUNCTION Arrastrar_local(d, Arrastrar, sr0, sr1, arr0, arr1) DEFINE d ui.Dialog DEFINE Arrastrar ui.DragDrop DEFINE sr0, sr1 STRING DEFINE arr0 DYNAMIC ARRAY OF RECORD id_seccion INT, Desc_seccion STRING, id_tramo INT, Desc_tramo STRING, unidades DECIMAL(18, 2), cantidad DECIMAL(18, 2) END RECORD DEFINE arr1 DYNAMIC ARRAY OF RECORD id_seccion INT, Desc_seccion STRING, id_tramo INT, Desc_tramo STRING, unidades DECIMAL(18, 2), cantidad DECIMAL(18, 2), Desc_seccionAnterior STRING, Desc_tramoAnterior STRING END RECORD -- DEFINE i, j INT LET j = Arrastrar.getLocationRow() FOR i = arr0.getLength() TO 1 STEP -1 IF d.isRowSelected(sr0, i) THEN CALL d.insertRow(sr1, j) LET arr1[j].Desc_seccionAnterior = arr0[i].Desc_seccion LET arr1[j].Desc_tramoAnterior = arr0[i].Desc_tramo LET arr1[j].unidades = arr0[i].unidades LET arr1[j].cantidad = arr0[i].cantidad CALL d.setSelectionRange(sr1, j, j, 1) END IF END FOR END FUNCTION FUNCTION DefaultLocations() LET record1[1].id_seccion = 0 LET record1[1].Desc_seccion = "Seccion 0" LET record1[1].id_tramo = 0 LET record1[1].Desc_tramo = "Tramo 0" LET record1[1].cantidad = 20 LET record1[1].unidades = 10 END FUNCTION