Protheus – Configuração MASHUPS

1– Entre no Modulo configurador(sigacfg).
2– Selecione a  opção cadastro -> mashups 
mash1

3– Clique no botão Incluir
4– Ira aparecer upa pop-up, No campo Alias digite o nome da tabela que deseja adicionar a função, Ex: Fornecedores(SA2)
mash2

5– Depois clique em ações relacionadas, Mashups.
6– Selecione o item “Receita federal – Consulta de CNPJ” .
msh3

7– Após confirmar  va em ações relacionadas e selecione a opção parametros.
8– Os dois primeiros parametros importantes são  Origem->Sistema e Campo-> NOME_DA TABELA_CGC(A2_CGC).
mash4

9– Depois basta você associar o Parametro(campo que retornara da receita) com o campo da tabela.  E  confirmar a operação.

ADVPL – Strings

SUBSTR()
Sintaxe : SUBSTR(cString, nPosInicial, nCaracteres)
Função: Retorna parte do conteúdo de uma string especificada, de acordo com aposição inicial deste conteúdo na string e a quantidade de caracteres que deverá ser retornada a partir daquele ponto (inclusive).
EX: cString := “Patrick”
SUBSTR(cString, 3, 5); // irá retornar apenas “trick”.

LEN()
Sintaxe: LEN(cString)
Função: Retorna o tamanho da string especificada no parâmetro.
ex: len(“Bolander”) // Ira retornar o valor 8(tamanho) da string

UPPER()
Sintaxe: UPPER(cString)
Função: Retorna uma string com todos os caracteres maiúsculos, tendo como base a string passada como parâmetro

LOWER()
Sintaxe: LOWER(cString)
Função: Retorna uma string com todos os caracteres minúsculos, tendo como base a string passada como parâmetro.

Etiquetas térmicas usando impressora Zebra no Microsiga Protheus (ADVPL)

Bom dia  a todos.

Hoje estarei postando meu primeiro tópico sobre Protheus, Tenho vários documentos prontos que vou me organizar para ir postando  ainda esse mês.

Bom para gerar as etiquetas vamos utilizar duas funções, a primeira  vai gerar a tela onde você vai informar o numero da nota fiscal , e quando confirmar vai chamar a segunda função que vai buscar os dados e imprimir as etiquetas.

Tentei deixar o mais comentado possível o fonte, não sou master of universe em ADVPL mas se surgir duvidas podem me enviar por email.

OBS: A impressora utilizada foi uma TLP-2844

Função 1 : Vai gerar a tela
funcao menu

Função 2: irá receber o numero da nota por parâmetros e buscar os dados na nota para gerar a etiqueta.
gera etiquetas

Espero que tenha ajudado.

Segue o link do fonte para download:
http://www.megaupload.com/?d=CKL88GF9

abraços ate a próxima

Procedure de Backup no SQL Express

Boa tarde.

Para aqueles que utilizam a versão express(free) do SQL Server sabe que ele teve vários de seus recursos reduzidos das versões pagas(std,enterprise) um dos bons recursos era utilizar o schedule para fazer backup.

Se você é uma dessas pessoas que deseja economizar tempo gerando backup automático na versão express abaixo vai a dica que não ira mais te obrigar a ficar fazendo backup depois do expediente.

Lembrando que o fonte ira apenas  gerar uma procedure, se você quer deixar o backup automático no sistema ,você vai ter que usar o SQLCMD  e o agendador de tarefas automático do windows.

Fonte: Ira gerar um arquivo sempre que a proc for executado com o nome do banco concatenado com a data
proc_bkp

Caso você tenha que alterar/ recriar uma procedure utilize o comando abaixo para destruir e depois repita o processo para cria-la novamente
drop_proc

Stored Procedure

Stored Procedure é uma coleção de instruções implementadas com linguagem que uma vez armazenadas ou salvas, ficam dentro do servidor de forma pré-compilada, aguardando que um usuário do banco de dados faça sua execução. Geralmente, assim como VIEWS fazem com relatórios e dados estatísticos escalonáveis, os SP’s encapsulam tarefas repetitivas, desde um simples INSERT, passando por inserções por lote, updates e algumas outras instruções mais complexas, como, efetuar uma efetivação de saque em uma conta de um determinado cliente em uma instituição bancária ou efetivar saídas de mercadorias seguido por baixa em estoque. Eles oferecem suporte a variáveis declaradas pelo próprio usuário, uso de expressões condicionais, de laço e muitos outros recursos.

Ex:
proc

UPDATE COM JOIN

Boa Tarde, Hoje veremos a diferença de uma operação simples mas muito importante e muito usada, o famoso UPDATE com JOIN, As diferenças de comando entre os SGBD são poucas mas não funcionaria sem esses simples ajustes.

MYSQL
UPDATE TABELA_1
LEFT JOIN TABELA_2 ON TABELA_1.CODIGO = TABELA_2.CODIGO
ET TABELA_1.VALOR = TABELA_2.VALOR
WHERE TABELA_2.VALOR NOT NULL

SQL SERVER
UPDATE TABELA_1
SET TABELA_1.CAMPO = TABELA_2.VALOR
FROM TABELA_1
LEFT JOIN TABELA_2 ON TABELA_1.CODIGO = TABELA_2.CODIGO
WHERE TABELA_2.VALOR NOT NULL

Espero que tenha ajudado.

até a próxima.

Criar tabela com SELECT

Criar uma nova tabela apartir de dados selecionados de outra tabela é sempre util. Vou mostrar a pequena diferença de como executar essa tarefa nos dois SGBD.

MySQL->CREATE TABLE nova_tabela SELECT * FROM tabela_original;
MSQL-> SELECT campos INTO nova tabela FROM tabela

Simples não? o proximo sera UPDATE com inner join até

LPAD do MYSQL no SQLServer

Bom pra que não sabe o que é o LPAD do mysql é simples, ele preenche o que falta com um caracter/numero que você quer.
Situação : Deixar o codigo com 6 digitos quando era apenas 2.
EX: 10 -> 000010

Solução:
mysql -> SELECT LPAD(’10’,6,’0′) FROM Tabela; -> ‘000010’
Sqlserver -> SELECT RIGHT((REPLICATE(‘0’,6) + 10),6) FROM Tabela ; – > ‘000010’

até

MYSQL X SQLSERVER

mysql       sqlserver
Boa tarde a todos. Faz muito tempo que não escrevo nada, falar que é muito trabalho é mentira é preguiça mesmo. Mas vamos la.

Todos ja sabem as vantagens de seus SGBDS favoritos e existe milhares de post comparando um com o outro. Esse não é mais um! Apartir de HOJE estarei postando algumas funções que existe no MYSQL e que no SQLServer não é tão simples de fazer e postar algumas diferenças entre o SQL(mysql) e o T-SQL(SQLServer).

Criando usuário no MySql com PHP

Se você quer criar uma maneira de identificar suas conexões para resolver aquele “clássico” problema de não saber que usuários esta dando LOCK nas tabelas. Vamos criar um rotina que quando se cria um usuário aquele usuário vai ser gerado também nos users do MySql com os acessos necessários para o sistema funcionar normalmente.

Primeiro você precisara criar uma conexão com a DB do sistema ,fazer o insert/update e depois criar uma conexão com a DB Mysql.

Vamos lá..

Adicione ou crie um arquivo libs.php ou qualquer nome de sua preferencia e adicione essas duas funções(ou apenas a segunda se você estiver usando a primeira para abrir a conexão do seu sistema,que por sinal é a mesma).

//Conexão do Sistema
function dbconnect($user,$pass){
$connection = @mysql_connect(“localhost”, $user, $pass) or $connection = false;
if($connection != false)mysql_select_db(“newsisco”);
return $connection;
}

//Função de conexão com a base Mysql. Lembre-se utilize “mysqli” depois explico o motivo
function dbconnect2($user,$pass){
$connection = mysqli_connect(“localhost”, $user, $pass,’mysql’,3306);
return $connection;
}

$login = $_SESSION[‘login’];
$psw = $_SESSION[‘psw’];
*As variáveis acimas são a sua conexão no sistema,levando em consideração que seu sistema salve o user e a senha na session.

Vamos ao arquivo que será responsável por realizar as tarefas proc.php

//Abrindo a conexão do sistema
$conn = dbconnect($login,$psw);

//Request dos campos do formulario (nome e senha do usuário que será cadastrado)
$user = $_REQUEST[‘rs_login’];
$senha = $_REQUEST[‘rs_psw’];
$senha1 = $senha ;
$senha = md5($senha);

//acao é uma variável de controle que determina a ação que será realizada.
$acao = $_REQUEST[‘acao’];
$data = date(“Y-m-d”);
$id = $_REQUEST[‘id’];

//Request que salva o login antigo para procurar o nome do usuário na tabela MySql
$login_antigo = $_REQUEST[‘login_antigo’];

//Lembra da conexão com Mysqli?? A culpa é desse carinha aqui. Conexão normal não executa essa função
$flush = “FLUSH PRIVILEGES “;

//Ação =1: Inserir novo usuário
if($acao == 1){
//Irá inserir na tabela usuários do sistema
$status = 1;
$sql =”INSERT INTO usuarios(user,senha,status,data) values(‘$user’,’$senha’,’$status’,’$data’)”;
$query = mysql_query($sql) or die(mysql_error());
$id = mysql_insert_id();

//feche a conexão do sistema
mysql_close($conn);

//Abra a conexão da database Mysql
$conn2 = dbconnect2($login,$psw);
$sql_mysql = “INSERT INTO user VALUES(‘localhost’,’$user’,PASSWORD(‘$senha1’),
‘Y’,’Y’,’Y’,’Y’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,
‘N’,’N’,’N’,’Y’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,
”,”,”,”,0,0,0,0)”;

$query_mysql = mysqli_query($conn2,$sql_mysql) or die (mysqli_error($conn2));
mysqli_query($conn2,$flush) or die (mysqli_error($conn2));

//feche a conexão do sistema
mysqli_close($conn2);

echo “alert(‘Usuario $user cadastrado com sucesso’)”;
}

Prontinho para fazer o update ou delete é só seguir a mesma lógica.