Caso ocorra algum desligamento no servidor que não estava planejado e o seu protheus utilize ctreeserver, provavelmente o login no próximo acesso ficará corrompido. Abaixo o procedimento para restaurar o acesso ao sistema.
* Parar todos os serviços, exemplo: CtreeServer, License, Master, Slaves, DbAccess, Workflow, etc...
* Na pasta pswbackup ( ...\protheus_data\pswbackup ), existe o arquivo sigapss.spf, copie o que está com a data na pasta mais recente e substitua pelo corrompido que está na system ( ...\protheus_data\system ).
* Renomear os arquivos na system:
SIGAHLP.HLP,
SIGAHLE.HLE,
SIGAHLS.HLS;
* Renomear o arquivo na system: sigamat.ind
* Iniciar todos os serviços de protheus, exemplo: CtreeServer, License, Master, Slaves, DbAccess, Workflow, etc...
segunda-feira, 25 de julho de 2016
quinta-feira, 21 de julho de 2016
Script T-SQL - While - Espelho Ponto Eletrônico
Abaixo um exemplo de script em T-SQL que monta o espelho de ponto.
--DECLARA VARIAVEIS PARA CONTROLE DO WHILE E ARMAZENAMENTO DOS ÚLTIMOS REGISTROS
DECLARE @P8_FILIAL VARCHAR(02) , @P8_MAT VARCHAR(06) , @P8_ORDEM VARCHAR(02) , @P8_HORA VARCHAR(05)
,@P8_FILIAL2 VARCHAR(02) , @P8_MAT2 VARCHAR(06) , @P8_ORDEM2 VARCHAR(02) , @PCONT INT , @STRINGSQL VARCHAR(MAX)
,@FIL VARCHAR(02), @MAT VARCHAR(06);
SET @FIL = '02';
SET @MAT = '030830';
--TABELA CRIADA PARA CONTROLE DO WHILE
DECLARE @TUSER2 AS TABLE (FIL VARCHAR(02), MAT VARCHAR(06), ORD VARCHAR(02), HORA VARCHAR(05))
IF OBJECT_ID('tempdb.dbo.#TESTE_FINAL', 'U') IS NOT NULL
BEGIN
DROP TABLE dbo.#TESTE_FINAL;
END
--CRIA TABELA PARA POPULAR O RESULTADO QUE PRECISAMOS
CREATE TABLE #TESTE_FINAL(
FIL VARCHAR(02) NULL
,MAT VARCHAR(06) NULL
,ORD VARCHAR(02)
,MARC1 VARCHAR(05)
,MARC2 VARCHAR(05)
,MARC3 VARCHAR(05)
,MARC4 VARCHAR(05)
,MARC5 VARCHAR(05)
,MARC6 VARCHAR(05)
,MARC7 VARCHAR(05)
,MARC8 VARCHAR(05)
,MARC9 VARCHAR(05)
,MARC10 VARCHAR(05) ) ;
--POPULA TABELA PARA SER PERCORRIDA NO WHILE
INSERT INTO
@TUSER2
SELECT
P8_FILIAL
, P8_MAT
, P8_ORDEM
, P8_HORA
FROM
SP8010
WHERE
P8_DATAAPO <> ''
AND P8_ORDEM <> ''
AND P8_TPMCREP <> 'D'
AND P8_MOTIVRG <> 'REJEICAO AUTOMATICA'
AND D_E_L_E_T_ <> '*'
AND P8_MAT = @MAT
AND P8_FILIAL = @FIL
ORDER BY
P8_FILIAL , P8_MAT , P8_ORDEM , P8_DATA , P8_HORA
--ZERA VARIAVEIS PARA CONTROLAR LACO
SET @P8_FILIAL2 = ''
SET @P8_MAT2 = ''
SET @P8_ORDEM2 = ''
SET @PCONT = 0
WHILE (SELECT COUNT (*) FROM @TUSER2) > 0
BEGIN
--ARMAZENA O REGISTRO DO CURSOR
SELECT TOP 1 @P8_FILIAL = T.FIL
, @P8_MAT = T.MAT
, @P8_ORDEM = T.ORD
, @P8_HORA = T.HORA
FROM @TUSER2 T;
IF @P8_ORDEM <> @P8_ORDEM2
BEGIN
INSERT INTO #TESTE_FINAL (FIL, MAT, ORD, MARC1) VALUES ( @P8_FILIAL, @P8_MAT, @P8_ORDEM, @P8_HORA );
SET @PCONT = 1 ;
SET @P8_FILIAL2 = @P8_FILIAL;
SET @P8_MAT2 = @P8_MAT ;
SET @P8_ORDEM2 = @P8_ORDEM ;
END
ELSE IF @P8_ORDEM = @P8_ORDEM2
BEGIN
SET @PCONT += 1 ;
SET @STRINGSQL = 'UPDATE #TESTE_FINAL SET MARC' + CONVERT(VARCHAR(10), @PCONT) + ' = ''' + @P8_HORA + ''' WHERE FIL = ''' + @P8_FILIAL
+ ''' AND MAT = ''' + @P8_MAT + ''' AND ORD = ''' + @P8_ORDEM + ''' ';
--PRINT @STRINGSQL
EXEC (@STRINGSQL);
END
--DELETA O REGISTRO DO CURSOR
DELETE FROM @TUSER2 WHERE MAT = @P8_MAT AND FIL = @P8_FILIAL AND ORD = @P8_ORDEM AND HORA = @P8_HORA;
END
SELECT * FROM #TESTE_FINAL;
DROP TABLE #TESTE_FINAL;
quarta-feira, 20 de julho de 2016
Configurar Protheus Teste Local com os dados da produção.
Abaixo um roteiro que construí para converte o Protheus
11.8 utilizado em produção para uma base local teste, ambos com “.dbf” no localfiles.
1.PROCEDIMENTO REPLICAÇÃO
01) EFETUAR BACKUP BANCO E APLICAÇÃO.
02) EFETUAR RESTORE DO BD.
03) EFETUAR A CÓPIA DOS ARQUIVOS PARA O NOVO
SERVIDOR
04) CÓPIA DO AMBIENTE
5.1
RPO
5.2
BINÁRIO
5.3
ODBC
5.4
DBACCESS
5.5
SYSTEM
5.6
SYSTEM LOAD
05) REALIZAR AS ALTERAÇÕES NO APP SERVER INI COM AS
TAGS LICENSESERVER E CLIENTSERVER
06) CONFIGURAR E SUBIR OS SERVIÇOS.
2.PROCEDIMENTO ATIVAÇÃO BASE LOCAL PARA TESTE
01) CONFIGURAR O SIGAMAT.EMP COM 2 FILIAIS
02) LIMPAR OS “.DBF” e os “.CDX”, DEIXAR SER
RECRIADO COM O SYSTEMLOAD
03) COPIAR OS SXs DA ORIGEM, OS ARQUIVOS em “.DBF”
e “.CDX” C/ A FAMÍLIA '010':
01.SIX 02.SX1 03.SX2 04.SX3 05.SX6 06.SX7 07.SXA 08.SXB 09.SXD 10.SXG
04) RENOMEAR DE '010' PARA '990' E COLAR NA SYSTEM
01.SIX 02.SX1 03.SX2 04.SX3 05.SX6 06.SX7 07.SXA 08.SXB 09.SXD 10.SXG
05) LIMPAR OS CDX DAS TABELAS
01.SIX 02.SX1 03.SX2 04.SX3 05.SX6 06.SX7 07.SXA 08.SXB 09.SXD 10.SXG
06) VIA APSDU VERIFICAR SE O X2_ARQUIVO ESTA IGUAL
AO PREFIXO + '010'
07) VIA APSDU NO SX3, FILTRAR COM CONTEM A
EXPRESSÃO '_FILIAL' E EXECUTAR O REPLACE NO CAMPO TAMANHO DE 6 PARA 2.
08) RODAR O SCRIPT PARA REALIZAR O DE PARA DE
010101 P/ 01 E 010102 P/02
09) EXCLUIR MANUALMENTE AS TABELAS COM PREFIXO
'990' ***Verificar possibilidade de criar script.
10) NO BANCO ALTERAR O TAMANHO DO CAMPO P/ 2 EM
CADA TABELA NO MODO DESIGN, JÁ QUE POR SCRIPT OCORRE BLOQUEIO.
12) PARAR O TOP(DBACCESS) E O MASTER, SUBIR NOVAMENTE OS SERVIÇOS, LOGAR NAS ROTINAS E VERIFICAR.
13) APÓS OS ACERTOS CASO DESEJE ATUALIZAR ALGUMA TABELA, FAÇO ISSO VIA APSDU, POIS DEVIDO O GRANDE TRABALHO DE CONVERSÃO DE DADOS É INVIÁVEL RESTAURAR O BANCO DE DADOS NOVAMENTE, ITEM QUE FOI REALIZADO NA ETAPA 02.
Observação:
11) NA TABELA SXG, NO CÓDIGO 33, ALTERAR O
TAMANHO (XG_SIZE DE 6 PARA 2), POIS SE REFERE AO GRUPO DE CAMPOS PARA A FILIAL.
12) PARAR O TOP(DBACCESS) E O MASTER, SUBIR NOVAMENTE OS SERVIÇOS, LOGAR NAS ROTINAS E VERIFICAR.
13) APÓS OS ACERTOS CASO DESEJE ATUALIZAR ALGUMA TABELA, FAÇO ISSO VIA APSDU, POIS DEVIDO O GRANDE TRABALHO DE CONVERSÃO DE DADOS É INVIÁVEL RESTAURAR O BANCO DE DADOS NOVAMENTE, ITEM QUE FOI REALIZADO NA ETAPA 02.
Observação:
Acredito que esse tópico seja importante para aqueles que desejam simular alguns processos em base local totalmente apartada do servidor de produção.
segunda-feira, 18 de julho de 2016
atalhos hotkey tds totvs
Abaixo a relação de alguns hotkeys para o TDS da TOTVS:
01. Acionar F5 para executar um passo (linha a linha).
02. Acionar F7 a execução prosseguirá, parando somente quando sair do método ou função.
03. Acionar F8 (continuar execução), o processamento irá ser executado até o próximo ponto de parada.
04. Acionar Ctrl+F9 para compilar.
05. Com o editor ativo (a aba fica destacada), acionar Ctrl+F10 e ative a numeração de linhas.
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 |
F8 | Avança DEBUG |
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 | Abre janela de autocompletar |
CTRL+SHIFT+X | Deixa o texto selecionado em maiusculo |
CTRL+SHIFT+Y | Deixa o texto selecionado em minúsculo |
CTRL+ / | Comenta / descomenta a linha |
ALT + / | Completa a palavra sem mostrar a janela |
CTRL+SHIF+ / | Comenta / descomenta o bloco selecionado |
ALT+ENTER | Propriedades do fonte |
A lista pode ser obtida através de CTRL + SHIFT + L e configurado se digitar o comando 2 vezes.
Abaixo FAQ importantes:
01."Como evitar a chamada de fontes que não possuo ou não tenho acesso durante o Debug?"
window\preference\configurações do servidor\ marcar a opção:
ignorar arquivos não encontrados no debug.
Com esta opção habilitada você não terá problemas com a chamada de funções, métodos e classes que estejam em fontes aos quais vocês não possui e/ou não tem acesso.
02."O debug não pinta as linhas, mas é mostrado na pilha de execução, o que fazer?"
window\preference\developer studio editor\ marcar a opção: desativar a construção imediata de OutLine, no campo texto abaixo, preencher com o número 10, aplicar e clicar em OK.
03."A perspectiva atual, TOTVS Developer, não é a mais indicada para depuração. Por isso, você será convidado a trocá-la para a perspectiva TOTVS Debuger"
04. Diversas visões de apoio ao depurador. Caso a visão não esteja visível, acione menu "Windows | Show View | Others..." e localize a visão desejada.
ignorar arquivos não encontrados no debug.
Com esta opção habilitada você não terá problemas com a chamada de funções, métodos e classes que estejam em fontes aos quais vocês não possui e/ou não tem acesso.
02."O debug não pinta as linhas, mas é mostrado na pilha de execução, o que fazer?"
window\preference\developer studio editor\ marcar a opção: desativar a construção imediata de OutLine, no campo texto abaixo, preencher com o número 10, aplicar e clicar em OK.
03."A perspectiva atual, TOTVS Developer, não é a mais indicada para depuração. Por isso, você será convidado a trocá-la para a perspectiva TOTVS Debuger"
04. Diversas visões de apoio ao depurador. Caso a visão não esteja visível, acione menu "Windows | Show View | Others..." e localize a visão desejada.
quarta-feira, 13 de julho de 2016
Portal Protheus
Abaixo o script para ativar o portal do candidato, o processo pode ser semelhante para ativar outros portais.
1. Baixar os arquivos de portal no site da TOTVS;
2. Descompactar os mzps (microsiga zip files, através da função padrão da TOTVS);
3. Configurar um server apartado e apontar a pasta descompactada;
4. Através do SRVWIZARD configurar o ambiente/ appserver.ini
4. Rodar o compatibilizador RHUPDMOD;
SIGARSP(recrutamento e seleção) e SIGATCF (terminal consulta funcionário)
5. Logar no faturamento, menu portal.
Serão carregados os menus dos portais nas tabelas AI8 e AI9.
REF:
https://www.totvs.com/mktfiles/tdiportais/helponlineprotheus/portuguese/portais_configurar_usuarios_senhas_menus.htm
1. Baixar os arquivos de portal no site da TOTVS;
2. Descompactar os mzps (microsiga zip files, através da função padrão da TOTVS);
3. Configurar um server apartado e apontar a pasta descompactada;
4. Através do SRVWIZARD configurar o ambiente/ appserver.ini
4. Rodar o compatibilizador RHUPDMOD;
SIGARSP(recrutamento e seleção) e SIGATCF (terminal consulta funcionário)
5. Logar no faturamento, menu portal.
Serão carregados os menus dos portais nas tabelas AI8 e AI9.
REF:
https://www.totvs.com/mktfiles/tdiportais/helponlineprotheus/portuguese/portais_configurar_usuarios_senhas_menus.htm
terça-feira, 12 de julho de 2016
Legenda Solicitação Compras Protheus
Através de filtros com as expressões em ADVPL
é possível listar cada status das solicitações de compras, abaixo seguem os
exemplos das fórmulas.
SC PENDENTE:
C1_QUJE == 0 .AND. C1_COTACAO == SPACE(LEN(C1_COTACAO)) .AND. C1_APROV $
" ,L" .AND. EMPTY(C1_RESIDUO)
SC TOTALMENTE ATENDIDA:
C1_QUJE > 0
.AND. !EMPTY(C1_PEDIDO) .AND. EMPTY(C1_RESIDUO)
SC PARCIALMENTE
ATENDIDA:
C1_QUJE > 0 .AND. EMPTY(C1_PEDIDO) .AND. EMPTY(C1_RESIDUO)
SC EM COTAÇÃO:
C1_TPSC != "2" .And. C1_QUJE == 0 .And. C1_COTACAO <>
Space(Len(C1_COTACAO)) .And. C1_IMPORT <>"S"
SC ELIMINADA POR
RESIDUO:
!EMPTY(C1_RESIDUO)
SC REJEITADA:
C1_QUJE == 0 .AND.
(C1_COTACAO == SPACE(LEN(C1_COTACAO)) .OR. C1_COTACAO == "IMPORT")
.AND. C1_APROV == "R"
SOLICITACAO DE
IMPORTACAO:
C1_TIPO == 2
SC BLOQUEADA:
C1_QUJE == 0 .And.
(C1_COTACAO == Space(Len(C1_COTACAO)) .Or. C1_COTACAO == "IMPORT")
.And. C1_APROV == "B"
Exemplo para criar
o filtro:
1 – Acessar a
rotina de Solicitação de Compras:
2 – Clicar em
Filtrar:
3 – Criar Filtro:
4 – Seguir os
passo:
4.1 – Clicar no
botão expressão;
4.2 – Digitar o nome do filtro;
4.3 – Digitar o filtro expressões, conforme as combinações acima, ex:
C1_QUJE == 0 .AND. C1_COTACAO == SPACE(LEN(C1_COTACAO)) .AND. C1_APROV $ " ,L" .AND. EMPTY(C1_RESIDUO)
4.4 – Clicar no botão adicionar;
4.5 – Clicar no
botão confirmar.
5 – É muito
importante salvar o filtro, pois caso contrário ele é perdido ao sair da tela
de Solicitações;
6 – Selecionar o
filtro desejado e clicar em confirmar;
7 – Como pode ser
observado abaixo, o Sistema trará apenas as solicitações com o status utilizados;
Também é possível selecionar mais de um filtro, por exemplo
para trazer Solicitações bloqueadas e rejeitadas.
Observação.: Dependendo do filtro utilizado nessa rotina a interface pode ficar extremamente lenta, por isso tentamos simplificar os filtros utilizados.
Observação.: Dependendo do filtro utilizado nessa rotina a interface pode ficar extremamente lenta, por isso tentamos simplificar os filtros utilizados.
segunda-feira, 11 de julho de 2016
FGeraVerba - fDelPd - ADVPL
Para efetuar as customizações no RH, utilizamos o roteiro de cálculo e algumas fórmulas específicas do gestão pessoal.
Exemplo:
//A FUNÇÃO PREPARA A UTILIZAÇÃO DA VERBA, CASO NÃO GERE LANÇAMENTO VALORIZADO O REGISTRO DA SRC É EXCLUÍDO AUTOMATICAMENTE.
fDelPd("450")
CHECKPRODUTO(SRA->RA_FILIAL, SRA->RA_MAT)
IF nRet > 0
GERAVERBA("450",nRet,nQtd_,,,,,,,,.T.)
nRet := 0
ENDIFREF FGeraVerba:http://tdn.totvs.com/pages/releaseview.action?pageId=6079039
REF fDelPd:http://tdn.totvs.com/pages/releaseview.action?pageId=6082477
quinta-feira, 7 de julho de 2016
BuildKillUsers – Derruba todas as conexões do TOP
Podemos (apenas em
ambiente de desenvolvimento) utilizar o BuildKillUsers no APPSERVER.INI, pois a
sua função é derrubar todas as conexões do TOP, mesmo estando em outro ambiente
que não é o que você está usando. Por isso mais uma vez não use em PRODUÇÃO.
Para configurá-lo, acesse o arquivo
APPSERVER.INI, vá na seção GENERAL e parametrize com 1.
[General]
InstallPath=D:\MP11TESTE
BuildKillUsers=1
Reinicie o TOP e pronto, sempre que for compilar as telas
que estiverem abertas serão finalizadas e a sua compilação não dará aquela
mensagem:
Erro de
compilação: It wasn´t possible to obtain exclusive access to the objects
repository
REF:
http://blogadvpl.com/v2/buildkillusers-derruba-todas-as-conexoes-do-top/
quarta-feira, 6 de julho de 2016
Protheus Local Teste Com 2 filiais.
O sistema Protheus 11.8 permite o uso de 2 filiais em ambiente teste com as algumas restrições.
Não pode vincular nenhum cnpj e alterar a descrição nas filiais.
É necessário habilitar a configuração via APSDU, com o seguinte critério:
01 - Matriz
02 - Teste
REF:
http://www.universoadvpl.com/2015/04/25-advpl-i-habilitando-duas-empresa-teste-99-e-zz/
Não pode vincular nenhum cnpj e alterar a descrição nas filiais.
É necessário habilitar a configuração via APSDU, com o seguinte critério:
01 - Matriz
02 - Teste
REF:
http://www.universoadvpl.com/2015/04/25-advpl-i-habilitando-duas-empresa-teste-99-e-zz/
Procedure Cursor While T-SQL Sql Server 2014
Abaixo um exemplo para converter os dados em massa sem ter que quebrar muito a cabeça, utilizando script em SQL2014:
USE DB
GO
SET
ANSI_NULLS ON
GO
SET
QUOTED_IDENTIFIER ON
GO
ALTER
PROCEDURE [dbo].[TESTE001]
AS
BEGIN
DECLARE
@name VARCHAR(150)
DECLARE
@alias VARCHAR(150)
DECLARE
@SQL VARCHAR(150)
DECLARE
db_cursor CURSOR FOR
select
name from sys.tables where UPPER(name) not like '%99%' ORDER BY 1
CREATE
TABLE #TESTE001(DS_TAB VARCHAR (20) NOT NULL, NM_REG INT NOT NULL );
OPEN
db_cursor
FETCH
NEXT FROM db_cursor INTO @name
WHILE
@@FETCH_STATUS = 0
BEGIN
set @SQL
= 'INSERT INTO #TESTE001 SELECT ''' + @name + ''', COUNT(*) FROM ' +
@name
exec(@SQL)
FETCH
NEXT FROM db_cursor INTO @name
END
CLOSE
db_cursor
DEALLOCATE
db_cursor
DECLARE
db_curtst CURSOR FOR
select
DS_TAB from #TESTE001 where NM_REG <> 0
OPEN
db_curtst
FETCH
NEXT FROM db_curtst INTO @alias
WHILE
@@FETCH_STATUS = 0
BEGIN
--set
@SQL = 'DELETE FROM dbo.' + @alias + ' WHERE ' + SUBSTRING(@alias,2,2) +
'_FILIAL <> ''010101'' AND ' + SUBSTRING(@alias,2,2) +'_FILIAL
<> ''010102'' '
--print(@SQL)
--exec(@SQL)
set @SQL
= 'UPDATE dbo.' + @alias + ' SET ' + SUBSTRING(@alias,2,2) + '_FILIAL = ''01''
WHERE ' + SUBSTRING(@alias,2,2) + '_FILIAL = ''010101'' '
--print(@SQL)
exec(@SQL)
--set
@SQL = 'UPDATE dbo.' + @alias + ' SET ' + SUBSTRING(@alias,2,2) + '_FILIAL =
''02'' WHERE ' + SUBSTRING(@alias,2,2) + '_FILIAL = ''010102'' '
--print(@SQL)
--exec(@SQL)
FETCH
NEXT FROM db_curtst INTO @alias
END
CLOSE
db_curtst
DEALLOCATE
db_curtst
END
exec
[dbo].[TESTE001]
INI P11 Base Local C/ DBF Local Files
[TESTE]
SourcePath=C:\TOTVS11\Microsiga\Protheus\apo
RootPath=C:\TOTVS11\Microsiga\Protheus_Data
StartPath=\system\
x2_path=
RpoDb=Top
RpoLanguage=portuguese
RpoVersion=110
LocalFiles=ads
Trace=0
localdbextension=.dbf
PictFormat=DEFAULT
DateFormat=DEFAULT
RegionalLanguage=BRA
helpserver=help.outsourcing.com.br/P11
TOPDataBase=MSSQL
TOPServer=localhost
TOPALIAS=TESTE
[Drivers]
Active=TCP
[TCP]
TYPE=TCPIP
Port=4567
[licenseserver]
enable=0
EnableNumber=0
port=5555
ShowStatus=0
;[licenseclient]
;server=127.0.0.1
;port=5555
[General]
InstallPath=C:\TOTVS11\Microsiga\Protheus
[SERVICE]
NAME=01.Protheus
DISPLAYNAME=01.Protheus
SourcePath=C:\TOTVS11\Microsiga\Protheus\apo
RootPath=C:\TOTVS11\Microsiga\Protheus_Data
StartPath=\system\
x2_path=
RpoDb=Top
RpoLanguage=portuguese
RpoVersion=110
LocalFiles=ads
Trace=0
localdbextension=.dbf
PictFormat=DEFAULT
DateFormat=DEFAULT
RegionalLanguage=BRA
helpserver=help.outsourcing.com.br/P11
TOPDataBase=MSSQL
TOPServer=localhost
TOPALIAS=TESTE
[Drivers]
Active=TCP
[TCP]
TYPE=TCPIP
Port=4567
[licenseserver]
enable=0
EnableNumber=0
port=5555
ShowStatus=0
;[licenseclient]
;server=127.0.0.1
;port=5555
[General]
InstallPath=C:\TOTVS11\Microsiga\Protheus
[SERVICE]
NAME=01.Protheus
DISPLAYNAME=01.Protheus
Assinar:
Postagens (Atom)