Tabelas Z* customizadas — criar e usar

Como criar tabela customizada (prefixo Z) sem quebrar update padrao TOTVS. SX2/SX3, indices, IxBExp e boas praticas.

Tabelas com prefixo Z* (Z01, ZA1 etc) sao o jeito oficial de criar tabelas customizadas sem conflito com nomes padrao TOTVS. Em update, a TOTVS nunca toca em tabelas Z.

Convencao

PrefixoUso
Z01..Z99Tabela customizada generica
ZA0..ZZZMais espaco — alfanumerico no 2-3 digito
SZ*Tabela "tipo padrao" customizada (raro)

Passos pra criar Z01

  1. SX2 — definicao da tabela: nome, modo (compartilhado/exclusivo), arquivo fisico
  2. SX3 — campos: nome (Z01_FILIAL, Z01_COD...), tipo, tamanho, descricao
  3. SIX — indices: chaves de busca (Z01_FILIAL+Z01_COD)
  4. Atualizador (rotina UPDDistr): garante criacao em multiplos ambientes

Exemplo: criacao programatica via UPDDistr

User Function CriaZ01()
    Local aEstrut := {}
    Local aIndices := {}

    // ----- Campos (SX3) -----
    aAdd(aEstrut, {"Z01_FILIAL", "C", TamSx3("M0_CODIGO")[1], 0, "Filial",        ".F.", "",  "G", "", "S", "", "",  ""})
    aAdd(aEstrut, {"Z01_COD",    "C",  6,                     0, "Codigo",       ".F.", "",  "S", "", "S", "", "",  ""})
    aAdd(aEstrut, {"Z01_DESC",   "C", 50,                     0, "Descricao",    ".F.", "",  "S", "", "S", "", "",  ""})
    aAdd(aEstrut, {"Z01_DTINI",  "D",  8,                     0, "Data inicio",  ".F.", "",  "S", "", "S", "", "",  ""})

    // ----- Indices (SIX) -----
    aAdd(aIndices, {"Z01", "1", "Z01_FILIAL+Z01_COD", "Codigo", 1, .F.})

    // Mecanismo padrao TOTVS pra criar tabela customizada
    U_AjusteSXs("Z01", "Tabela Custom", aEstrut, aIndices)
Return

Pegadinhas

Acessar a tabela criada

Z01->(DBSetOrder(1))
If Z01->(DBSeek(xFilial("Z01") + "000001"))
    ConOut(Z01->Z01_DESC)
EndIf

// Inclusao
RecLock("Z01", .T.)
Z01->Z01_FILIAL := xFilial("Z01")
Z01->Z01_COD    := "000001"
Z01->Z01_DESC   := "Teste"
Z01->Z01_DTINI  := dDataBase
Z01->(MsUnlock())

Veja também