segunda-feira, 25 de julho de 2016

Queda energia Desligamento inesperado P12 CtreeServer

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...

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.


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.

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

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. 

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 
ENDIF

REF 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/


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