Quando desenvolvemos uma nova rotina, que tem uma nova tabela ao entrar na rotina pela primeira vez o protheus se encarrega de pegar os dados da estrutura nos SX 2, 3 etc, e cria a tabela na base de dados.Porem se nao temos uma rotina como fazer?Uma forma rapida de criar a tabela e executar o comando CHKFILE("tabela") em alguma rotina que possua formula.Como por exemplo o SIGACFG acesse a rotina Formula e execute o comando chkfile('SZ1') para criar a tabela SZ1.Lembre-se a estrutura do SZ1 deve estar nos SX's antes de executar o comando. FWDirRemove( cDir, nType, lComplete, lKillFiles )Funcao para remover diretorios, com a vantagem de remover somente o ultimo nivel ou todo o caminho.cDir Diretorio a ser removidolComplete Remove todo o caminho (.T.) ou apenas o ultimo nivel (.F.)lKillFiles Remove os arquivos antes de tentar remover o diretorioFWMakeDir( cDir, lShowMsg )Funcao para criar diretorio com seus subdiretorios, com a vantagem de criar todo o caminho.cDir Diretorio a ser criadolShowMsg Exibe ou nao mensagem caso nao consiga criar o diretorioFwNoAccent( cString )Retira acentos de uma stringcString String a ser retirado os acentosExemplo:cString := 'O aviao nao pode aterrissar de manha'cString := FwNoAccent( cString )// Retorna : 'O aviao nao pode aterrissar de manha'FWGetSX5( cTable, cKey )Funcao de retorno dos campos de uma tabela no SX5cTable Tabela para pesquisa no SX5. Parametro obrigatorio.cKey Chave da tabela SX5. Parametro opcional. Se nao passar nada retorna todos os registros da tabela passada.Retorna:[1] X5_FILIAL[2] X5_TABELA[3] X5_CHAVE[4] X5Descri()FWEmpLoad( lAll )Funcao que carrega as empresas que o usuario logado tem acesso.lAll Se .T. retorna todas as empresas, se .F. retorna empresas que o usuario logado tem acessoRetorna a[n][1] = Codigo da empresa a[n][2] = Nome da empresa a[n][3] = Codigo da filial a[n][4] = Nome da filialFWEmpName( cEmp )Funcao que retorna o nome da empresacEmp Codigo da empresaFWFilName( cEmp, cFil )Funcao que retorna o nome da filialcEmp Codigo da empresacFil Codigo da filialFWTabPref( cCampo )Retorna o prefixo da tabela a partir do nome de um campocCampo Nome do CampoExemplo:cPref := FWTabPref( 'A1_COD' ) // Retorna 'SA1'cPref := FWTabPref( 'AA1_COD' ) // Retorna 'AA1'cPref := FWTabPref( 'XPTO' ) // Retorna ''FWX2Nome( cTable )Funcao que retorna a descricao de uma tabela no dicionario conforme idiomacTable Tabela que se deseja obter a descricaoExemplo:cNome := FWX2Nome( "SA1" )FWAliasInDic( cAlias )Esta funcao Indica se um determinado alias esta presente no dicionario de dadoscAlias Alias da tabela do dicionario de dadosFunction FWTimeStamp( nType, dDate, cTime )Cria um timestampnType Tipo do timestamp 1 - Formato aaaammddhhmmss 2 - Formato dd/mm/aaaa-hh:mm:ss 3 - Formato UTC aaaa-mm-ddThh:mm:ss-+Time ZonedDate Data a ser usada. O padrao e a data atualcTime Hora a ser usada. O padrao e a hora atualFWTxt2Array( cString, nSize, lBreak )Gerar array conforme string quebrando por linha respeitando a quebra de palavrascString String a ser quebradanSize Tamanho maximo das strings a serem geradaslBreak Respeita CRLF da string originalExemplocString := 'Minha terra tem palmeiras, onde canta o sabia'aString := FWTxt2Array( cString, 15)/*Retorna[1] -> 'Minha terra'[2] -> 'tem palmeiras,'[3] -> 'onde canta o'[4] -> 'sabia'*/FWVetByDic( aVetor, cTable, lItens, nCpoPos )Funcao ordenar um vetor conforme o dicionario