Hola Alberto, mirá yo tengo algo similar a una facturación. Lo que puedo decirte es que si tu sistema es multiusuario y los vales lo imprimirá mas de una persona, te conviene darle el N° una vez que cargues todos los datos (cabezera e items); para ello escribí la regla siguiente:
call(PSumaIdent ,Numero ,&numero ) IF after(Agecod ) .AND. &mode = 'INS' ;
&mensa11 = 'Movimiento :' + (str(&numero ) ) ;
msg(&mensa11 ) IF after(trn ) .AND. &Mode = 'INS' ;
Donde: Numero(es automatico); la variable para traer el nuevo (&numero); Agecord último campo de referencia para dar la orden de grabado con after (trn);
y por último muestras el N° si lo quieres mostrar.
La ventaja de esta forma es que al trabajar multiusuario no habrá duplicación de Números claves.
================================================================
La otra forma sería iniciar la carga con el N° automático (creo que es lo que tu haces). Yo lo solucioné de la siguiente manera: Armé un work Panel con la consulta de todo los (vales junto a los detalles grabados), creé un Boton cuyo evento sería:
Event 'ALTA'
call(PSumaIdent , &Numero ) (procedimiento de suma del N° automático)
&MueIden=0
call(Transacción , &Numero , &Usuario, 'INS')
EndEvent
Event 'modificar'
call(Transacción, Numero , usuario, 'UPD')
EndEvent
*********** y el Evento para evitar grabar datos en caso de abortar ***********
Event exit
return
call(PRestaNro , Numero )
EndEvent
//****************************************************************************************/****************************** procedimientos ****************************************/
parm(&Regconta ,&s1 ) ;
For Each RegIden ( procedimiento para sumar el N° automático)
where RegIden = 1
&RegConta = RegConta + 1
RegConta = &RegConta
&s1=RegConta
Endfor
/**********************************/
parm(&MueIden ) ;
&Ban = '0' (procedimiento para restar el n° automático)
For Each Numero
where Numero = &numero
&Ban = '1'
Endfor
If &Ban = '0'
For each RegIden
where RegIden = 1
If RegConta = &Mueiden
RegConta = RegConta - 1
Endif
EndFor
Endif
***************************************************************************************
lógicamente que para que funcionen los sumadores y restadores, debes crear
una tabla (transacción) compuesta :
Regiden -- numerico ( 1 )
Regconta numerico ( 9 ) o el tamaño que quieras.
El regconta será el que te irá generando los numeros. A, y de la segunda forma (empezando con el n° automático de entrada NO te sirve para trabajo multiusuario. Espero haberte ayudado y no confundigo. Suerte.