Lendo e Gravando em antigos campos MEMO com a MSMM – Maratona AdvPL e TL++ 362

Nesse vídeo demonstraremos a utilização da função MSMM, que serve para ler ou gravar em antigos campos MEMO (que ficam as informações na SYP e RDY).

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zExe362
Visualiza ou edita um campo memo do tipo antigo (tabelas SYP ou RDY)
@type Function
@author Atilio
@since 27/03/2023
@see https://tdn.totvs.com/display/public/framework/Msmm+-+Pesquisa+do+campo+MEMO+Virtual
@obs 
    Função MSMM
    Parâmetros
        + cChave      , Caractere      , Código da chave para busca
        + nTam        , Numérico       , Tamanho do campo controlado na SYP / RDY
        + nLin        , Numérico       , Linha do campo memo a ser retornada
        + cString     , Caractere      , Texto do campo memo
        + nOpc        , Numérico       , Opção a ser executada pela rotina (1 = incluir informação; 2=excluir conteúdo; 3=ler campo;)
        + nTamSize    , Numérico       , Quantidade de caracteres
        + lWrap       , Lógico         , Habilita quebra de linha
        + cAlias      , Caractere      , Alias da Tabela
        + cCpoChave   , Caractere      , Campos da Chave da Tabela na SYP
        + cRealAlias  , Caractere      , Alias da tabela MEMO (SYP / RDY)
        + lSoInclui   , Lógico         , Define se só irá realizar inclusão de informação
    Retorno
        + uRet        , Indefinido     , Se nOpc igual a 1 retorna conteudo do memo; Se igual a 2 retorna .T. ou .F. se conseguiu excluir; Se igual a 3 retorna a chave do código

    Obs.: Nesse exemplo foi usado a SB1, onde o campo REAL é o B1_CODOBS e o VIRTUAL é o B1_OBS

    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/

User Function zExe362()
    Local aArea         := FWGetArea()
    Local cCodigo       := "F0001"
    Local cObservacao   := ""
    Local nTamObserv    := TamSX3("B1_OBS")[1]
    
    //Abre o cadastro de produtos
    DbSelectArea("SB1")
    SB1->(DbSetOrder(1)) // Filial + Código

    //Posiciona em um produto
    If SB1->(MsSeek(FWxFilial("SB1") + cCodigo))

        //Busca a observação já gravada hoje
        cObservacao := MSMM(SB1->B1_CODOBS, nTamObserv)

        //Agora iremos definir algum texto qualquer, adicionando na observação
        cObservacao := Alltrim(cObservacao) + ";editado no dia " + dToC(Date()) + " as " + Time() + ";"

        //Por fim, iremos fazer a gravação desse conteúdo
        RecLock("SB1", .F.)
            MSMM(, nTamObserv, , cObservacao, 1, , , "SB1", "B1_CODOBS")
        SB1->(MsUnlock())
    EndIf

    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação