M460MARK - Verificar faturamento parcial

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.)