Reclock cria registro com campos em branco

Estou utilizando essa função para inserir uma linha na tabela SNG. Porém ela é criada em branco mesmo o array tendo os valores necessarios para inserção. Alguem já teve esse problema?


static function ClonaSNG(cDest, oSay)
    local nY := 0
    local aCampos := {}


    DbSelectArea("SNG")
    DbSetOrder(1)
    // Adiciona no array
    aAdd(aCampos, {"NG_FILIAL" , SubStr(cDest,1,3)})

    for nY := 1 to SNG->(fCount())
        if X3Uso(GetSX3Cache(SNG->(FieldName(nY)), "X3_USADO"))
            if Alltrim(SNG->(FieldName(nY))) <> "NG_FILIAL"
                aAdd(aCampos, {SNG->(FieldName(nY)), SNG->&(FieldName(nY))})
            endif
        endif
    next nY

    // Aplica o array

    if len(aCampos) > 0
        Begin Transaction

            RecLock("SNG", .T.)

                for nY := 1 to Len(aCampos)
                    SNG->(aCampos[nY][1]) := (aCampos[nY][2])
                    ProcessMessages()
                next nY

            SNG->(MsUnlock())

            oSay:SetText("Clonando "+SNG->NG_GRUPO+" para a empresa: " + cDest)
        End Transaction
    endif
return nil

1 curtida

Se o problema for loop dentro do reclock, alguem saberia uma maneira melhor de ser feito?

No seu loop, voce deve usar macro substituição:


                for nY := 1 to Len(aCampos)
                    &("SNG->("+aCampos[nY][1]+")") := (aCampos[nY][2])
                    ProcessMessages()
                next nY

E se for inclusão de um campo com Recklock mantém o .T., se for apenas alteração ou inclusão de conteúdo no campo em si coloca como .F. Ficando assim:


 RecLock("SNG", .T.) - inclusão do campo
 RecLock("SNG", .F.) - inclusão de conteúdo no campo ou alteração no campo em si

https://terminaldeinformacao.com/knowledgebase/reclock/