A Totvs disponibiliza ate 3 possibilidades de criar novos modulos e para tanto vc deve criar 3 funcoes conforme abaixo.User function EspNome()Return " Modulo Especifico 1"User function Esp1Nome()Return " Modulo Especifico 2"User function Esp2Nome()Return " Modulo Especifico 3"O retorno sera o nome do modulo que sera gerado.FONTE: http://efacildemais.blogspot.com.br/ RETASC()A funcao Replicate() e utilizada para converter uma string numerica em uma informacao composta por letras e numeros, devido a limitacao no tamanho de campos ou variaveis de controle, como e o caso do campo de sistema X3_ORDEM.Sintaxe: RETASC(cString, nTamanho, lVolta)Parametros:cString String a ser convertidanTamanho Tamanho maximo da string de retornolVolta Indica se sera gerada uma string composta por letras e numeros a partir de uma string apenas numerica (.T.) ou se sera gerada uma string numerica a partir de uma string composta por letras e numeros (.F.)Retorno:Caracter String convertida conforme o parametro lVolta.Exemplo1 Conversao de numerico para alfanumericocOrdem := 100cX3Ordem := RETASC(cOrdem,2,.T.) < Sera retornado A0Exemplo2 Conversao de alfanumerico para numericocX3Ordem:= A0cOrdem:= RETASC(cX3Ordem,3,.F.) < Sera retornado 100\Fonte:http://advplbrasil.com.br/advpl/manipulacao-de-strings/ Tratavasse de uma rotina customizada, onde foi utilizado um arquivo de trabalho. No indice que estava sendo criado, utilizam um campo de data, dessa forma deveria ser convertido isso com a funcao DTOC(CAMPODATA) Partes do codigo:Como era: IndRegua("TRB", cArqTRB, "DTW_DATINI" ) Como fico:IndRegua("TRB", cArqTRB, "DTOC(DTW_DATINI)" ) Sempre tomar cuidado quando utilizar um indice no arquivo de trabalho THREAD ERROR (raphaelb, SRV-WTS01) 16/07/2014 14:20:22type mismatch on compare on FWBRWTABLE:GOBOTTOM(FWBRWTABLE.PRW) 02/05/2014 11:40:15 line : 857[TOTVS build: 7.00.121227P-20131106]Called from FWBRWTABLE:UPDATETOPBOT(FWBRWTABLE.PRW) 02/05/2014 11:40:15 line : 1848Called from FWMBROWSE:UPDATETOPBOT(FWBROWSE.PRW) 08/05/2014 10:12:05 line : 10421Called from FWMBROWSE:CREATEBROWSE(FWBROWSE.PRW) 08/05/2014 10:12:05 line : 3161Called from FWMBROWSE:ACTIVATE(FWBROWSE.PRW) 08/05/2014 10:12:05 line : 1065Called from FWMBROWSE:ACTIVATE(FWFORMBROWSE.PRW) 28/04/2014 16:10:26 line : 650Called from FWMBROWSE:ACTIVATE(FWMBROWSE.PRW) 12/04/2014 00:34:40 line : 565Called from FWMBROWSE(MSLIB.PRW) 26/03/2014 14:31:52 line : 11592Called from MBROWSE(MSLIB.PRW) 26/03/2014 14:31:52 line : 156Called from U_UTMSE02(UTMSE02.PRW) 12/05/2014 07:28:13 line : 63Called from SIGAIXB(APLIB190.PRW) 24/06/2013 10:23:58 line : 228Called from __EXECUTE(APLIB090.PRW) 28/03/2014 11:22:22 line : 502Called from MDIEXECUTE(APLIB260.PRW) 09/04/2014 19:01:01 line : 730Publicas Public 1: CPAISLOC(C) :BRA Public 2: LWSISPORTAL(L) :.F. Public 3: OAPP(O) :O Public 4: HELP(L) :.F. Public 5: USIGAADV(L) :.F. Public 6: Baita framework para javaScript.http://www.sencha.com/products/extjs No Protheus existe a possibilidade de se trabalhar com palavras acentuada, apenas alterando um parametro, o MV_ACENTO de 'N' para 'S', desta forma as palavras que forem acentuadas serao aprentadas desta forma dentro de sistema.FONTE: http://efacildemais.blogspot.com.br Muitas vezes, faz necessario eliminar informacoes duplicadas, existe algumas formas de realizar essa tarefa. Abaixo segue uma forma de fazer. Explicacao rapida, ele conta o total de duplicados, deixando sempre 1 (TOP(@CONT -1)).Esse script foi testando no MSSQL 2008, 2012 e 2014.DECLARE @ID VARCHAR(500)DECLARE @CONT intDECLARE CUR_DELETE CURSOR FORSELECT N4_FILIAL+N4_CBASE+N4_ITEM+N4_TIPO+N4_OCORR+N4_TIPOCNT+N4_CONTA+N4_DATA+N4_SEQREAV, COUNT(*)FROM SN4010WHERE D_E_L_E_T_ = ' 'AND N4_FILIAL = '01'--AND N4_ITEM = '07'AND N4_CBASE = 'BR0016 'AND N4_DATA = '20100831'GROUP BY N4_FILIAL+N4_CBASE+N4_ITEM+N4_TIPO+N4_OCORR+N4_TIPOCNT+N4_CONTA+N4_DATA+N4_SEQREAVHAVING COUNT(*) > 1OPEN CUR_DELETEFETCH NEXT FROM CUR_DELETE INTO @ID,@CONTWHILE @@FETCH_STATUS = 0BEGINUPDATE TOP(@CONT -1) SN4010 SET D_E_L_E_T_ = '*'WHERE N4_FILIAL+N4_CBASE+N4_ITEM+N4_TIPO+N4_OCORR+N4_TIPOCNT+N4_CONTA+N4_DATA+N4_SEQREAV = @IDFETCH NEXT FROM CUR_DELETE INTO @ID,@CONTENDCLOSE CUR_DELETEDEALLOCATE CUR_DELETE/*VERIFICA OS REGISTROS QUE FORAM ALTERADOS*/SELECT N4_FILIAL, N4_CBASE, N4_ITEM, N4_TIPO, N4_OCORR, N4_MOTIVO, N4_TIPOCNT, N4_CONTA, N4_DATA, N4_VLROC1,N4_SEQREAV,count(*)FROM SN4010WHERE D_E_L_E_T_ = ' 'AND N4_FILIAL = '01'--AND N4_ITEM =