TamSx3
Retorna metadados do campo SX3 (tamanho, decimais, tipo). Evita hardcodar tamanho que pode mudar entre projetos.
Assinatura: TamSx3(cCampo) -> aRet[1=tamanho, 2=decimais, 3=tipo]
Retorna: Array
TamSx3 consulta o dicionario SX3 e retorna metadados do campo. Use sempre que precisar dimensionar variavel, montar query SQL ou validar tamanho de input. Nao hardcode "20" — use TamSx3("A1_NOME")[1].
Retorno
aRet := TamSx3("A1_COD")
// aRet[1] = 6 (tamanho)
// aRet[2] = 0 (decimais)
// aRet[3] = "C" (tipo: C=Char, N=Num, D=Date, L=Log, M=Memo)
Exemplo padrao
// Dimensionar codigo de produto pra busca
cBuscaCod := PadR(cBusca, TamSx3("B1_COD")[1])
If SB1->(DBSeek(xFilial("SB1") + cBuscaCod))
cDesc := SB1->B1_DESC
EndIf
// Formatar valor com decimais corretas
cValorFmt := Transform( ;
nValor, ;
"@E " + Replicate("9", TamSx3("E1_VALOR")[1]) + ;
"." + Replicate("9", TamSx3("E1_VALOR")[2]) )
Pegadinhas
- Cliente pode alterar SX3 — empresas customizam tamanho de campo. Hardcodar quebra em upgrade.
- Campo inexistente retorna array com tamanho 0 — sempre cheque se cabe no que voce espera.
- Custo do dicionario — em loop apertado, cachear o retorno em variavel ajuda.
- Tipo retornado e abreviado: C (Character), N (Numeric), D (Date), L (Logical), M (Memo).
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cCampo | Character | sim | Nome do campo (ex: "A1_NOME"). Maiusculo, com prefixo da tabela. |
Exemplos
PadR seguro pra DBSeek
cChave := xFilial("SA1") + PadR(cCodCli, TamSx3("A1_COD")[1])
SA1->(DBSetOrder(1))
SA1->(DBSeek(cChave))