Jmeza
Para tu necesidad 1a creo ya tienes varias respuestas, actualmente yo estoy usando la que te he enviado.
Para las otras necesidades tuyas lo que se hace es preguntar por el contenido del campo, si esta en espacios (caso alfabetico y/o alfamerico) o en zero (caso numerico) se envia un mensaje de error y finalizo el evento enviando el foco al respectivo campo.
Caso alfamerico:
Código COBOL:
IF CAMPO-ALFABETICO EQUAL SPACES
INVOKE POW-SELF "DISPLAYMESSAGE" USING
"mensaje deseado"
"Identificador del mensaje "
Mesage-Style
RETURNING ReturnValue
INVOKE Cmtext1 "SetFocus"
EXIT PROGRAM
END-IF
Para lo numerico se hace algo semejante, obviamente con el cambio coresponfiente.
Para mejor entendimiento del DISPLAYMESSAGE vea el manual de powerCOBOL
Espero le sirva de algo