Olá Calsadillo,
O conceito de enfileiramento é utilizado para evitar que dois ou mais processos tentem atualizar um registro de banco de dados ao mesmo tempo. Sem isso, dois processos poderiam selecionar um registro, aplicar diferentes alterações e então atualizar o banco de dados um após o outro. Neste caso, as atualizações feitas pelo primeiro processo seriam sobrescritas pelas atualizações do segundo processo.
Portanto, meu primeiro comentário seria que você não precisa enfileirar ztable2 se estiver executando um comando INSERT SQL.
Meu segundo comentário seria, quando você seleciona os dados a serem atualizados para ztable1? Logo antes dessa seleção, você deve enfileirar os dados para ztable1. Isso significa que se outro processo tentar acessar esses dados para atualizá-los, sua tentativa de enfileiramento falhará e ele não deverá selecionar os dados. Em seguida, você deve desenfileirar os dados para ztable1 após ter feito a atualização. (Você pode ver como a SAP utiliza essa lógica ao tentar alterar um pedido de vendas em VA02 e, em seguida, com outra sessão, tentar fazer o mesmo; você será bloqueado).
Assim, a sequência seria mais ou menos a seguinte:
1. Enfileirar ztable1
2. Selecionar os dados de ztable1 para atualização
3. Atualizar o estado de ztable1
4. Inserir entrada em ztable2
5. Realizar commit work (o que desenfileirará automaticamente ztable1)
6. Desenfileirar ztable1 (apenas por precaução)
Espero que isso ajude.
Brad