Pular para o conteúdo principal

Postagens

Mostrando postagens com o rótulo ADVPL

Mais uma de NFe - Consultando inutilização

Verifique se realmente suas notas fiscais foram inutilizadas consultando-as no link: Consultando inutilização

Portal da NFe. Verificando disponibilidade de serviços

Consultando a disponibilidade de serviços. Durante sua finalização de vendas, caso precise ver a disponibilidade dos serviços de Nota Fiscal eletrônica, consulte pelo link: http://www.nfe.fazenda.gov.br/portal/disponibilidade.aspx

Path Relativo X Absoluto !

Documentando, para quando ainda houver dúvida: Em diversas funções do Protheus, como FCREATE(), temos que mencionar o path alvo. No caso de FCREATE(), o alvo será onde o arquivo será criado. Este path pode ser absoluto ou relativo. Mas qual a diferença? Quando informado um path relativo, sem a unidade de disco (exemplo: "\temp\teste"), o diretório alvo, será o servidor, abaixo do RootPath*. Para apontar para um diretório na máquina cliente (onde o SmartClient está sendo executado), é necessário informar um path absoluto, com unidade de disco (exemplo: "c:\trabalho\teste"). * RoothPath = tag no arquivo appserver.ini, que identifica o diretório raiz do Sistema (ERP), a partir do qual todos os diretórios utilizados pelo Sistema serão criados.

Barras de título ocupando espaço?

Precisando ganhar alguns centímetros de tela? Usando as propriedades WS_VISIBLE e WS_POPUP, neste caso, é possível remover a barra de títulos em janelas. Veja os exemplos: define msdialog oDialog title "Sem barra de titulo" from 0,0 to 800,100 pixel style nOR( WS_VISIBLE, WS_POPUP ) oDialog:lMaximized := .t.   // maximiza janela. * No construtor construtor MsDialog:New, use deste modo: oDialog := msdialog ():new(0,0,800, 1000, "Sem barra de titulo" ,,,,nOr(WS_VISIBLE,WS_POPUP),CLR_BLACK,CLR_WHITE,,,.t.,,,,.t.) oDialog:lMaximized := .t.   // maximiza janela. * No construtor TDialog:New, use deste modo: oDialog := tdialog():New(0,0,800,1000, "Sem barra de titulo" ,,,,nOr(WS_VISIBLE,WS_POPUP),CLR_BLACK,CLR_WHITE,,,.t.,,,,,,.f.) oDialog:lMaximized := .t.   // maximiza janela.

Zeros à esquerda automaticamente

Uma dica simples para que no momento de digitar um código (ex.:000034), você e seus usuários não fiquem contando os zeros à esquerda deste. Configurador Com o pequeno código abaixo (no campo Regra ) num gatilho*, você não terá mais este trabalho. O teste foi feito com o campo RA_REGISTR : Os campos obrigatórios (em azul) devem ser preenchidos. Confirme, saia do Configurador e teste o campo que você configurou o gatilho. Após preencher o campo e clicar TAB (ou ENTER), os zeros à esquerda completam o tamanho do campo : * Se você não sabe onde e como criar gatilhos, acesse o link:   Criando gatilhos no Protheus

Cores usadas no Protheus

• Segue uma tabela com as cores mais usadas no Protheus: Preto CLR_BLACK Azul Claro CLR_HBLUE Azul CLR_BLUE Verde Claro CLR_HGREEN Verde CLR_GREEN Ciano CLR_HCYAN Ciano CLR_CYAN Vermelho Claro CLR_HRED Vermellho CLR_RED Magenta Claro CLR_HMAGENTA Magenta CLR_MAGENTA Amarelo CLR_YELLOW Marrom CLR_BROWN Cinza Claro CLR_HGRAY Cinza CLR_GRAY Branco CLR_WHITE • Estas podem ser usadas por exemplo,  numa grid : @ 0, 0 to 300,795 dialog oDlg01 title "Exemplo" @ 1, 1 to 110,400 browse "TABTEMP" fields aCampos object _oBrowseCor // COR DA FONTE _oBrowseCor:obrowse:acolumns[1]:BCLRFORE := {|SETVAL| fTrocaCor(1)} // COR DA LINHA _oBrowseCor:obrowse:acolumns[1]:BCLRBACK := {|SETVAL| fTrocaCor(2)} @ 125, 10 bmpbutton type 02 action close(oDlg01) act...

Carregar suas funções após o login

Precisa carregar uma função logo após o login?  Então a função AfterLogin pode ser o que você precisa. Veja o exemplo: #include "protheus.ch" user function  AfterLogin ()     local cId := ParamIXB [ 1 ] , cNome := ParamIXB [ 2 ]    msgalert ( "Hora que o usuário "  + cId + " - " + alltrim(cNome) + " efetuou login = " + time ()) return nil O exemplo usou somente um msgalert, mas você pode executar suas próprias funções executando as tarefas que deseja executar no sistema, antes de qualquer módulo ser chamado. Bom uso!

Janela sem botão Fechar [X]

Mais uma sobre janelas Muitas vezes não queremos que o usuário feche a janela no botão [X], padrão nos formulários. Tem como tirar este botão? Sim! Veja na figura ao lado. Para tirar, na linha do comando msdialog , inclua o parâmetro style 128 . Exemplo: define msdialog oRBSFd00 from 0,0 to 8,20 title "Mes/Ano a receber" style 128 Detectar idioma Africâner Albanês Alemão Arabe Armênio Azerbaijano Basco Bengali Bielo-russo Birmanês Bósnio Búlgaro Catalão Cazaque Cebuano Chichewa Chinês (Simp) Chinês (Trad) Cingalês Coreano Crioulo haitiano Croata Dinamarquês Eslovaco Esloveno Espanhol Esperanto Estoniano Finlandês Francês Galego Galês Georgiano Grego Gujarati Hauça Hebraico Hindi Hmong Holandês Húngaro Igbo Indonésio Inglês Ioruba Irlandês Islandês Italiano Japonês Javanês Kannada Khmer Laosiano Latim Letão Lituano Macedônico Malaiala Malaio Malgaxe Maltês Maori Marathi Mongol Nepalês Norueguês Persa Polonês Português Punjabi Romeno Russo Sérvio ...

Criando janelas sem borda

Ás vezes, por uma questão de estética, não queremos janelas com borda. Para isso, podemos definir estilo usando a função: NOR(WS_VISIBLE,WS_POPUP). Veja o exemplo: user function fJanSemB() define msdialog ojan01 title "Janela sem borda" pixel from 180,180 to 550,700 style nor(WS_VISIBLE,WS_POPUP) cTGet := space(20) oTGet := tget():new( 1,1,{||cTGet}, oJan01, 80, 5,"@!",,0,,,.f.,,.t.,,.f.,,.f.,.f.,,.f.,.f.,,cTGet,,,,) @ 8, 5 button "Sair" action oJan01:end() activate dialog ojan01 centered return Já testamos, agora, é só usar!

Teclas de Atalhos TOTVS Developer Studio (Eclipse)

Seguem os atalhos para o TOTVS Developer Studio  (Eclipse)  : CTRL+H Localizar vários locais CTRL+F Localizar / substituir CTRL+K Localizar proximo resultado abaixo CTRL+SHIFT+K Localizar proximo resultado acima F11 Depurar F5 Percorre linha F6 Pula linha CTRL+F8 Trocar perspectiva CTRL+F7 Mudar visualização CTRL+F6 Navegar entre os fontes abertos CTRL+M Maximiza / miniminiza fonte CTRL+N Novo (wizard) CTRL+L Ir para linha CTRL+D Deleta toda linha CTRL+ALT+DOWN Duplica linha para baixo CTRL+ALT+UP Duplica linha para cima CTRL+SHIFT+L Apresenta lista de atalhos ALT+UP Move linha para cima ALT+DOWN Move linha para baixo CTRL+SHIFT+I Indenta o fonte CTRL+F9 Compilar CTRL+ESPAÇO...

Datas por extenso

Já precisou escrever datas por extenso? A pequena função  fDatExt(),  abaixo pode resolver o problema. O resultado pode ser visto nas imagens abaixo: No fonte abaixo, substitua dDatabase , por sua variável (do tipo data): #include "protheus.ch" user function fDataExt() msgalert(u_fDatExt( dDataBase , .t.)) msgalert(u_fDatExt( dDataBase , .f.)) return user function fDatExt (dParDat, lParAbr) local cRetDat := "" if lParAbr cRetDat += cValToChar(day(dParDat)) cRetDat += " de " cRetDat += mesextenso(dParDat) cRetDat += " de " cRetDat += cValToChar(year(dParDat)) else cRetDat += capital(extenso(day(dParDat), .t.)) cRetDat += " de " cRetDat += mesextenso(dParDat) cRetDat += " de " cRetDat += capital(extenso(year(dParDat), .t.)) endif return cRetDat Veja também: Extenso  e Funções de Data

Converter PDF para JPG no Protheus

Você pode converter PDF para JPG no Protheus, usando ADVPL, com a ajuda de dois utilitários (free) externos: ImageMagick e Ghostscript . Baixe-os e instale-os. IMPORTANTE: se você instalar em seu servidor, todos seus usuários do Protheus na rede poderão usar seu programa ADVPL.   Segue o programa ADVPL: static function fConvPDFJPG(cNomPDF, cNomJPG)    local lRet := .f.,;          cPathImgMgk := "C:\PROGRA~1\IMAGEM~1.9-Q\" ,;          cPathProth := "C:\PROTHEUS\PROTHE~1\TEMP\"    // ATENCAO: OS COMANDOS ABAIXO DEVEM FICAR EM MINUSCULO.    // OS PATHs DEVEM TER 8 DIGITOS (USE DIR /X NO CMD PARA VER O PATH REDUZIDO)    if waitrunsrv( cPathImgMgk + "convert -density 300 " + cPathProth + cNomPDF + " -quality 80 " + cPathProth + cNomJPG, .t., cPathImgMgk )       lRet := .t.    endif return lRet Observações: 1 - O programa ADVPL usa a fu...

Modo de edição

Desde a versão 8.11, ao clicar com o botão direito do mouse sobre o título de uma coluna do aCols, pode-se escolher editar os dados por linha ou por célula , ou seja, em formato de planilha ou formulário. O problema é que, os usuários, fazem esta alteração sem querer! Para parar com esta confusão, desative esta opção de escolha do modo de edição, configurando o parâmetro MV_GETDADL para .F. . • Veja também: Parâmetro MV_ENCHOLD

Retirando acentos

Às vezes, por exemplo quando vamos gravar contas de e-mail, não queremos que o usuário digite acentos. Para "estes momentos", use a função  FwNoAccent( ) . Veja o exemplo abaixo: user function fTiraAcent ()    cString := "Você não pôde tomar café hoje."    cString := FwNoAccent ( cString )    alert ( cString ) return •  Veja também: Função SplitPath()

SplitPath - Dividindo um path

Exemplo SplitPath Quando trabalhamos, acessando arquivos, as vezes precisamos de detalhes destes. A ADVPL, possui a função SplitPath que já divide um path em: drive, path, nome do arquivo e extensão. Segue um exemplo: user function fDividePath()     Local cPatharq := "C:\TEMP\DOC\DOCUMENTO.TXT"     Local cDrive, cDir, cArq, cExt    SplitPath( cPatharq, @cDrive, @cDir, @cArq, @cExt )    msgalert(cDrive +chr(10)+ cDir +chr(10)+ cArq +chr(10)+ cExt, "Função SplitPath " ) return • Veja também: Somando strings

Testar erro na execução de uma query

É importante testar erros, antes de executar uma query, para evitar erros de execução. Uma boa maneira é testar o retorno da função  TCSQLEXEC() . A query abaixo, tem um erro proposital, para que a janela com o erro apareça : user function fTestaQry ()     dbselectarea ( "SA1" )    cSql := "SELECT * FRO SA1010"    nQueryRet := TCSQLEXEC ( cSql )     if nQueryRet < 0       return msgstop ( "ERRO NA QUERY: "  + chr(10) + TCSQLError ())     endif return •  Veja também: Tabelas customizadas. Quantas?

Configurando o Totvs Smart Client na inicialização

Para ficar registrado, seguem os parâmetros para configurar a inicialização do TOTVS Smart Client : C(Connection) Nome da seção de conexão, que será usada, para a conexão ao Totvs Application Server(TotvsAppServer). E(Environment) Nome da seção do ambiente , no (INI do Server), que será utilizada para definições gerais. L(Log File) No diretório de execução do Totvs Smart Client, é gerado um arquivo de log para não conformidades que ocorram no Totvs Smart Client (antes que este se conecte com o Totvs Application Server). Este arquivo é gerado com o nome de Totvs Smart Client. M(AllowMultiSession) Permite múltiplas instâncias cópias do Totvs Smart Client na mesma máquina. No modo default não permite multiplas sessões. P(Main Program) Identifica o programa (APO) inicial. Q(Quiet) Indica que o Totvs Smart Client não deverá mostrar o Splash (imagem de Apresentação) e a tela de id...

Usando TFolder

Usar janelas com abas, dependendo da situação, pode ser inevitável. Segue um exemplo, usando TFolder : #include "TOTVS.CH" user function fFuncao1()     define dialog oDialogo title "Exemplo de TFolder" from 180,180 to 550,700 pixel     // Cria a Folder        aTFolder := { "Aba 01" , "Aba 02" , "Aba 03" }    oTFolder := tfolder():new( 0,0,aTFolder,,oDialogo,,,,.t.,,260,184 )     // Insere dois tget na aba 1    oSay:= tsay():new(1,2,{|| "Campo: " }, oTFolder:aDialogs[1],,,,,,.t.,CLR_RED,CLR_WHITE,96,9)    cTGet1 := "Campo TGet 01"    oTGet1 := tget():new( 1,25,{||cTGet1},oTFolder:aDialogs[1],96,9,;               "" ,,0,,,.f.,,.t.,,.f.,,.f.,.f.,,.f.,.f.,,cTGet1,,,, )    cTGet2 := "Campo TGet 02"    oTGet2 := tget():new( 20,25,{||cTGet2},oTFolder:aDialogs[1],96,9,;             ...