Olá pessoal,
A rotina de Preparação de Documentos de Saída - MATA460A - permite que o usuário selecione os itens a serem faturados. Normalmente o parâmetro de selecionar todos já faz isso, porém quando há algum problema de estoque com um dos itens a NF é faturada parcialmente e o usuário nem se toca disso. Eu gostaria de impedir um faturamento parcial, ou ao menos dar uma mensagem. Já olhei a documentação do TDN que tem lá e outros exemplos que o Google traz, o problema que ocorre quando escrevo o PE é que eu percebo que o Protheus varre a SC9 inteira, e não tem, ao menos não encontrei uma forma, de fazer com que o Protheus somente considere o que está marcado. O problema de o Protheus varrer a SC9 inteira é demora que isso causa.
Boa tarde!
Faça um teste, dentro desse ponto de entrada, utilize a função ThisMark() para obter a marcação que está sendo utilizada pelo browse. Em seguida realize uma query para buscar onde C9_OK for igual ao conteúdo da função ThisMark(). Dessa forma você ira obter apenas os registros marcados no browse naquele momento.
Exemplo:
User Function M460MARK
Local cMrkSC9 := ThisMark()
Local _cAlias := GetNextAlias()
Local aAreaSC9 := SC9->(GetArea())
BeginSql Alias _cAlias
SELECT DISTINCT
SC9.R_E_C_N_O_ SC9RECNO
FROM %TABLE:SC9% SC9
WHERE
SC9.C9_FILIAL = %xFilial:SC9% AND
SC9.C9_OK = %Exp:cMrkSC9% AND
SC9.%NOTDEL%
EndSql
While(!(_cAlias)->(EoF()))
SC9->(DbGoTo((_cAlias)->SC9RECNO))
If(!SC9->(EoF()))
RecLock('SC9', .F.)
SC9->C9_OK := ''
SC9->(MsUnlock())
EndIf
(_cAlias)->(DbSkip())
EndDo
(_cAlias)->(DbCloseArea())
RestArea(aAreaSC9)
Return(.T.)