Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gretel

estoque com tipo de produto

Recommended Posts

Espero que possam me ajudar, segue a explicação o mais detalhada que consigo fazer!

Tenho um sql que lista os produtos assim

SEM O GROUP BY

sem.jpg

COM O GROUP BYcom.jpg

Preciso que o codigo exiba na tela como quando está com o group by, porém também preciso que ele não desconsidere as demais entradas com o mesmo nome.

Por exemplo o produto Coca Cola fardo 6x2L(Entrada) se existirem 2 entradas e uma saida ele exiba na mesma linha o total de entradas e saidas, por que afinal são o mesmo produto. e preciso controlar o balanço de entradas e saidas para poder fazer o calculo final de balanço mensal.

Abaixo os prints da tela na web, da tabela produtos e da tabela entrada. Aparentemente está funcionando a parte de somar todas as entradas do mesmo produto que estejam como tipo entrada e somar a quantidade,na coluna ao lado dela deveria ocorrer o mesmo, porém com as saidas, só que se eu não estou conseguindo, e por isso deletei esse codigo com erros.

De acordo com o bd na coluna saidas em Dolly deveria estar 20 e em p1 e p2 0.

Como eu consigo fazer isso?

$produtos = "SELECT produtos.*, entrada.produto, SUM(entrada.qt), entrada.tipo FROM produtos 

INNER JOIN entrada ON entrada.produto = produtos.nome 

 WHERE entrada.tipo = 'entrada' 
GROUP BY entrada.produto"; 
$result = mysql_query($produtos) or die(mysql_error());
	// Descobrimos o total de registros encontrados
	$numRegistros = mysql_query($produtos) or die(mysql_error());
 
	// Se houver pelo menos um registro, exibe-o
	if ($numRegistros != 0) {
		// Exibe os resultados da pesquisa

while($row = mysql_fetch_assoc($result)){
	




echo "

<tr>

        <td>". $row['usuario']. "</td> 
        <td>". $row['nome']. "</td> 
        <td>R$". $row['custo']. "</td>
        <td>". $row['SUM(entrada.qt)']."</td> 
        <td></td>
        <td>". $row['quantidade']."</td>
 
        <td> </td>

        <td> ". $row['data']. "</td>

tela1.jpg

Tabela produtos:tela2.jpg

Tabela entradatela3.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem duas formas, a primeira você já encontrou e deve tratar a diferença na programação. A segunda é usar join para cada tipo de entrada:

SELECT
   produtos.nome,
   SUM(entrada.qt) AS entrada,
   SUM(saida.qt) AS saida
FROM
   produtos
   INNER JOIN entrada ON (entrada.produto = produtos.nome AND entrada.tipo = 'entrada')
   INNER JOIN entrada AS saida ON (saida.produto = produtos.nome AND saida.tipo = 'saida')
GROUP BY
   produto.nome

Você pode fazer tantos JOINs achar necessário. Também poderia fazer por subquery, mas acho mais "legível" joins.

Outro detalhe importante, quando são utilizadas aggregate functions, todas as demais colunas devem estar no group by. Logo, você não pode utilizar o asterísco (*) e deve definir coluna a coluna no group by.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Obrigada por ajudar!!!!

Fiz essa alteração que você sugeriu, e após colocar o codigo assim na hora que executa o sistema não retorna valor nenhum.

$produtos = "
SELECT
   produtos.nome,
   entrada.tipo,
   SUM(entrada.qt) AS entrada,
   SUM(saida.qt) AS saida,
   produtos.usuario,
   entrada.produto
FROM
   produtos
   INNER JOIN entrada ON (entrada.produto = produtos.nome AND entrada.tipo = 'entrada')
   INNER JOIN entrada AS saida ON (entrada.produto = produtos.nome AND entrada.tipo = 'saida')
WHERE
   produtos.usuario LIKE  '%".$usuario."%'
GROUP BY
   entrada.produto";

se eu removo a linha

   SUM(saida.qt) AS saida, 

e a linha

INNER JOIN entrada AS saida ON (entrada.produto = produtos.nome AND entrada.tipo = 'saida')

ele me retorna os demais valores.

não acontece erro nenhum, e não sei para onde ir rsrsrsrs, será que poderia me explicar isso que não compreendi

a linha que estiver como "tipo saida" na tabela "entrada" virará o parametro saida da linha "SUM(saida.qt) AS saida, " ou esse saida em vermelho se refere a uma nova tabela que devo fazer para cadastrar apenas as saídas?

Será que expliquei bem? está meio confuso isso!

Obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vi que eu havia feito um erro no join, corrigi lá em cima e estou adicionando novamente aqui embaixo:

SELECT
   produtos.nome,
   SUM(entrada.qt) AS entrada,
   SUM(saida.qt) AS saida
FROM
   produtos
   INNER JOIN entrada ON (entrada.produto = produtos.nome AND entrada.tipo = 'entrada')
   INNER JOIN entrada AS saida ON (saida.produto = produtos.nome AND saida.tipo = 'saida')
GROUP BY
   produto.nome

Na sua consulta, você precisa adicionar os campos que não usam aggregate functions no group by. Outro detalhe, teste sua query diretamente no MySQL, pode ser no PHPMyAdmin mesmo.


Por que está retornando o tipo da movimentação (sendo que agora estão sendo mostradas ambas na mesma linha) e o produto da tabela entrada.produto (sendo que entrada.produto é igual produto.nome)?

[...]a linha que estiver como "tipo saida" na tabela "entrada" virará o parametro saida da linha "SUM(saida.qt) AS saida, " ou esse saida em vermelho se refere a uma nova tabela que devo fazer para cadastrar apenas as saídas?[...]


É apenas um apelido (alias) da tabela para evitar conflito entre os joins. Como você já está fazendo o join para mostrar a entrada, foi adicionado outro join para mostrar a saída. Como você está registrando a movimentação na mesma tabela, apenas diferenciando o tipo (entrada/saída), deve ser feito dois joins com a mesma tabela, um para entrada e outro para saída. E como não pode repetir os nomes, foi adicionado um alias para a saída.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigada Gabriel!!!!! Tive uma reviravolta aqui, com sua explicação do join eu criei uma nova tabela só que ela se chama "saida" e é igualzinha a tabela "entrada". (OBs. Você acha burrada fazer assim?)

coloquei o join para puxar da tabela saida e parecia que havia funcionado.

Também achei um erro, na hora de cadastrar um produto com nome composto na tabela produtos ele cadastra o nome composto certinho, já na hora da entrada e saida ele só puxa o primeiro nome do produto.

$valores = split(' ',$_POST['product_nome']);   
   $nome = $valores[1];
   $id = $valores[0];
   $quantidade = trim($_POST['quantidade']);
   $usuario = $_SESSION['id_usuario'];
   $nome_usuario = $_SESSION['usuario'];

no codigo acima, não estou conseguindo fazer o bendito do codigo, puxar tudo o que for escrito depois de $valores[0].

SOCORRO!

Devo postar aqui o codigo que funcionou pra mim, para outros usuarios poderem ver também?

OBS. Não sei direito ao que se se refere com o aggregate functions, é o while? Desculpa, não sei!

Compartilhar este post


Link para o post
Compartilhar em outros sites

[...]Você acha burrada fazer assim?[...]

Bom, não é uma questão de achar... Tanto entrada quanto saída, são movimentações de estoque. É aconselhável que se tenha uma tabela que registre a movimentação. "Cheira ainda pior" por serem duas tabelas com a mesma estrutura, logo, não se faz nenhum sentido serem tabelas separadas.

coloquei o join para puxar da tabela saida e funcionou, só que achei um erro, na hora de cadastrar um produto com nome composto na tabela produtos ele cadastra o nome composto certinho, já na hora da entrada e saida ele só puxa o primeiro nome do produto.

$valores = split(' ',$_POST['product_nome']);   
   $nome = $valores[1];
   $id = $valores[0];
   $quantidade = trim($_POST['quantidade']);
   $usuario = $_SESSION['id_usuario'];
   $nome_usuario = $_SESSION['usuario'];
no codigo acima, não estou conseguindo fazer o bendito do codigo, puxar tudo o que for escrito depois de $valores[0].

Acredito que isso esteja atrelado a chave estrangeira que está usando. Você está usando o nome produto como chave estrangeira. Se mudar o nome, bem, lá se vai teu estoque. Mesmo que o produto seja único, considere utilizar surrogate keys.

Mas, pelo seu código, nome completo do produto está em: $_POST['product_nome']

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está funcionando certinho seu código, deixei tudo em uma tabela só, tanto entradas e saídas, e até agora funciona!!! Você é um gênio!!!! rsrsrsrs

Notei que o valor das saídas dobra se eu edito o valor de saída diretamente pelo phpmyadmim (estranho isso!!!) Se lanço a saida pelo site que fiz ele registra certo.

Bom agora vamos a outra parte q você me esclareceu.

Eu lancei um:

$valores = split(' ',$_POST['product_nome']); 

pois a variavel product_nome ppuxa o nome completo do produto acrescido de seu id único, que é automaticamente preenchido em um select com sql assim na página anterior:

<?php
            #seleciona os dados da tabela produto
            $query = mysql_query("SELECT id, nome, usuario FROM produtos WHERE IdDoUsuario = ".$_SESSION['id_usuario']." ORDER BY id ASC");
            ?>
         <p>Selecione um produto</p>
         <select name="product_nome" id="product_nome" >
            <option >Selecione...</option>
            <?php while($prod = mysql_fetch_array($query)) { ?>
            <option value="<?php echo $prod['id'] ?> <?php echo $prod['nome'] ?>" > <?php echo $prod['id'] ?> - <?php echo $prod['nome'] ?></option>
            <?php } ?>
         </select>

O codigo funciona bem, só que ele só pega a variavel:

$valores[0]; que é o id e depois do espaço ele pega o primeiro nome q é $valores[1];.

Já coloquei pra ele puxar $valores[2]; , $valores[3]; , e funciona para nomes compostos, só que como cada pessoa pode cadastrar um produto com uma gama enorme de nomes compostos, eu gostaria que a split pegasse todos os valores que estão depois do espaço, e não somente a primeira.

$valores = split(' ',$_POST['product_nome']); 
   $id = $valores[0];  
   $nome = $valores[1];

se não vou ter que colocar

$nome2 = $id = $valores[2];

$nome3 = $id = $valores[3];

$nome4 = $id = $valores[4];

$nome5 = $id = $valores[5];

e assim por diante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui corrigir Gabriel, coloquei como separador um hífen e fiz com que os valores fossem divididos não por espaços , mais sim pelo hífen, assim, o sistema me retornou como código do produto tudo que estava antes do hífen e como nome td que estava após o hífen.

Simples assim!!

Eu vacilei legal nisso, pq não era nem falta de código e sim falta de pensar mesmo! rsrsrsrs

Achei um erro. alterei o nome da tabela entrada para historico, OK...

Achei o seguinte problema, cadastrei o produto guarana, e funcionou certinho, e tb o adicionou ao estoque certinho. Se eu cadastro uma nova venda ou compra do produto eu fiz com que o sistema fizesse um update na tabela produtos somando ou subitraindo sua quantidade assim:

$sql = mysql_query("UPDATE produtos SET quantidade = quantidade-$quantidade WHERE id = '{$id}'") 
		or die( mysql_error() );

e até ai funciona correto, porém depois desse update , (tanto para entrada ou saida) se eu havia lançado no estoque por exemplo 80 guaranás na coluna entrada ele mostra 160 entradas sendo que são só 80, e se eu lanço mais um update de saida ele aumenta mais 80 de novo.

no print abaixo cadastrei guarana lata com 80 unidades de estoque, e lancei em seguida uma saida de 40 latas e em seguida mais uma com 1 lata, foram 2 updates então ficou 240 itens na entrada que é (80 + 80 + 80) O que há de errado agora? Tudo parecia funcionar bem!

OBS pelo phpmyadmin aparece 80 em entradas mesmo.

update.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só um lembrete, funções tipo Mysql_ estão obsoletas, e bom logo substituir por Mysqli oo PDO, para mais tarde nao ter de refazer todas as consultas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como ficou a consulta final para mostrar a quantidade de produtos?

Ps.: Conforme o icarof comentou, as funções mysql_* estão obsoletas, devem ser substituídas por outras.

Compartilhar este post


Link para o post
Compartilhar em outros sites
$produtos = "SELECT
   produtos.nome,
   produtos.id,
   SUM(historico.qt) AS entrada,
   SUM(saida.qt) AS saida,
   historico.produto,
   historico.id_produto,
   historico.tipo,
   historico.data,
   produtos.usuario,
   produtos.custo,
   produtos.quantidade
FROM
   produtos
   INNER JOIN historico ON (historico.id_produto = produtos.id AND historico.tipo = 'entrada')
   INNER JOIN historico AS saida ON (saida.id_produto = produtos.id AND saida.tipo = 'saida')
WHERE 
   produtos.usuario LIKE  '$usuario'
GROUP BY
   historico.produto";


$result = mysql_query($produtos) or die(mysql_error());
	// Descobrimos o total de registros encontrados
	$numRegistros = mysql_query($produtos) or die(mysql_error());
 
	// Se houver pelo menos um registro, exibe-o
	if ($numRegistros != 0) {
		// Exibe os resultados da pesquisa

while($row = mysql_fetch_assoc($result)){
	




echo "

<tr>

        <td>". $row['usuario']. "</td> 
        <td>". $row['nome']. "</td> 
        <td>R$". $row['custo']. "</td>
        <td>". $row['entrada']."</td> 
        <td>". $row['saida']. "</td>
        <td>". $row['quantidade']. "</td>
 
        <td> ". $row['custo'] * $row['entrada']. "  </td>

        <td> ". $row['data']. "</td>

Acima é o código que lê dobrado o valor que está no banco de dados em entrada e vi que em saída, o erro ocorre tb, só não captei depois de que ação que ocorre, mais o valor fica dobrado também.

e abaixo o código da pagina que incluí um novo produto ao estoque e no que excluí, a única diferença é que ao invés de sinal de + é um de -.

$sql = mysql_query("
UPDATE 
   produtos SET quantidade = quantidade+$quantidade WHERE id = '{$id}'") 
or die( mysql_error() );
   



$sql = mysql_query("
INSERT INTO 
   historico (tipo, id_usuario, usuario, id_produto, produto, qt, data) 
VALUES
   ('entrada','{$usuario}', '{$nome_usuario}', '{$id}', '{$nome}', '{$quantidade}','{$data}'  )") 
or die( mysql_error() );

Compartilhar este post


Link para o post
Compartilhar em outros sites

A única coisa que vejo é a falta dos demais campos na cláusula group by. As funções de agregação (SUM no seu caso) exigem que os demais campos sejam adicionados a cláusula group by.

Faça o seguinte, minimize ao máximo a sua query, e tente consultar diretamente no PHPMyAdmin, veja se o resultado sai correto:

SELECT
   produtos.nome,
   produtos.id,
   SUM(historico.qt) AS entrada,
   SUM(saida.qt) AS saida,
   produtos.quantidade
FROM
   produtos
   INNER JOIN historico ON (historico.id_produto = produtos.id AND historico.tipo = 'entrada')
   INNER JOIN historico AS saida ON (saida.id_produto = produtos.id AND saida.tipo = 'saida')
WHERE 
   produtos.usuario LIKE  '$usuario'
GROUP BY
   produtos.nome,
   produtos.id,
   produtos.quantidade

Caso ocorrer o mesmo problema, é possível que o histórico esteja sendo duplicado ao inserir.

Caso não ocorra inconsistência, vá adicionando campo a campo até encontrá-la.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel, obrigada, tentei e não adiantou ainda essa sua sugestão.

Encontrei um padrão para o erro, acredito que falte alguma coisa no JOIN ou no SUM

Em entradas o valor da coluna "quantidade" é multiplicado pela quantidade de linhas de produto com o mesmo id porém com a coluna "tipo" com valor "saida".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Favor, poste as DDLs das duas tabelas (produto , histórico).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dlls? Não sei o q eh isso. Como consigo?

Compartilhar este post


Link para o post
Compartilhar em outros sites
DDLData Definition Language ( DDL) são usadas para definir a estrutura de banco de dados ou esquema.



Alguns exemplos:


CREATE- para criar objetos no banco de dados;


ALTER – altera a estrutura da base de dados;


TRUNCATE – remover todos os registros de uma tabela, incluindo todos os espaços alocados para os registros são removidos;


COMMENT – adicionar comentários ao dicionário de dados;


RENAME – para renomear um objeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites
-- phpMyAdmin SQL Dump
-- version 4.0.10.14
-- http://www.phpmyadmin.net
--
-- Servidor: localhost:3306
-- Tempo de Geração: 07/11/2016 às 12:26
-- Versão do servidor: 5.6.33-log
-- Versão do PHP: 5.6.20

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Banco de dados: `kankarat_teste`
--

-- --------------------------------------------------------

--
-- Estrutura para tabela `estados`
--

CREATE TABLE IF NOT EXISTS `estados` (
  `id_estado` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `uf` char(2) NOT NULL,
  `estado` varchar(19) NOT NULL,
  PRIMARY KEY (`id_estado`),
  UNIQUE KEY `estado` (`estado`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=28 ;

--
-- Fazendo dump de dados para tabela `estados`
--

INSERT INTO `estados` (`id_estado`, `uf`, `estado`) VALUES
(1, 'AC', 'Acre'),
(2, 'AL', 'Alagoas'),
(3, 'AP', 'Amapá'),
(4, 'AM', 'Amazonas'),
(5, 'BA', 'Bahia'),
(6, 'CE', 'Ceará'),
(7, 'DF', 'Distrito Federal'),
(8, 'ES', 'Espirito Santo'),
(9, 'GO', 'Goiás'),
(10, 'MA', 'Maranhão'),
(11, 'MT', 'Mato Grosso'),
(12, 'MS', 'Mato Grosso do Sul'),
(13, 'MG', 'Minas Gerais'),
(14, 'PA', 'Pará'),
(15, 'PB', 'Paraíba'),
(16, 'PR', 'Paraná'),
(17, 'PE', 'Pernambuco'),
(18, 'PI', 'Piauí'),
(19, 'RN', 'Rio Grande do Norte'),
(20, 'RS', 'Rio Grande do Sul'),
(21, 'RJ', 'Rio de Janeiro'),
(22, 'RO', 'Rondônia'),
(23, 'RR', 'Roraima'),
(24, 'SC', 'Santa Catarina'),
(25, 'SP', 'São Paulo'),
(26, 'SE', 'Sergipe'),
(27, 'TO', 'Tocantins');

-- --------------------------------------------------------

--
-- Estrutura para tabela `fornecedores`
--

CREATE TABLE IF NOT EXISTS `fornecedores` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) NOT NULL,
  `endereço` varchar(100) NOT NULL,
  `telefone` varchar(14) NOT NULL,
  `email` varchar(50) NOT NULL,
  `CNPJ` varchar(30) NOT NULL,
  `IdDoUsuario` int(11) NOT NULL,
  `Usuario` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

--
-- Fazendo dump de dados para tabela `fornecedores`
--

INSERT INTO `fornecedores` (`id`, `nome`, `endereço`, `telefone`, `email`, `CNPJ`, `IdDoUsuario`, `Usuario`) VALUES
(1, 'Loja de doces da Sofia', 'rua de não sei 76', '2222-2222', 'sofia@sofiadoces.com.br', '00000000000000000', 7, 'gretelferraz'),
(2, 'bar do João', 'rua do paiu 44', '2222-2222', 'joao@joao.com.br', '000000000000', 7, 'gretelferraz'),
(4, 'bar do tio lu', 'rua do paiu 44', '2222-2222', 'lu@lu.com.br', '000000000000', 1, 'LARA'),
(5, 'bar primeiro gole', 'rua do paiu 44', '2222-2222', 'lu@lu.com.br', '000000000000', 7, 'gretelferraz'),
(6, 'Malu Doces', 'rua da Imaginação', '22 2222-2222', 'malu@malu.com.br', '22.222.222/2222-22', 7, 'gretelferraz'),
(7, '000', '000', '00 0000-0000', '0000000000000', '00.000.000/0000-00', 7, 'gretelferraz'),
(8, 'Loja 1', 'Rua 1', '11 1122-2111', 'Loja1@loja.com', '00.000.000/0000-00', 63, 'gretel'),
(9, 'malu doces', 'rua da malu', '99 9999-9999', 'gretel', '00.000.000/0000-00', 63, 'gretel'),
(10, 'bar do luiz', 'rua do luiz', '99 9999-9999', 'email', '00.000.000/0000-00', 63, 'gretel');

-- --------------------------------------------------------

--
-- Estrutura para tabela `historico`
--

CREATE TABLE IF NOT EXISTS `historico` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tipo` varchar(50) NOT NULL,
  `id_usuario` int(11) NOT NULL,
  `usuario` varchar(50) NOT NULL,
  `id_produto` int(11) NOT NULL,
  `produto` varchar(50) NOT NULL,
  `qt` int(11) NOT NULL,
  `data` date NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=71 ;

--
-- Fazendo dump de dados para tabela `historico`
--

INSERT INTO `historico` (`id`, `tipo`, `id_usuario`, `usuario`, `id_produto`, `produto`, `qt`, `data`) VALUES
(51, 'entrada', 7, 'gretelferraz', 19, 'refri', 10, '2016-10-25'),
(50, 'saida', 7, 'gretelferraz', 18, 'Guaraná lata 350ml', 1, '2016-10-25'),
(48, 'entrada', 7, 'gretelferraz', 18, 'Guaraná lata 350ml', 80, '2016-10-25'),
(49, 'saida', 7, 'gretelferraz', 18, 'Guaraná lata 350ml', 40, '2016-10-25'),
(47, 'entrada', 7, 'gretelferraz', 17, 'Fanta 2L', 50, '2016-10-25'),
(68, 'saida', 7, 'gretelferraz', 20, 'Coca Cola', 1, '2016-10-26'),
(62, 'saida', 7, 'gretelferraz', 19, 'refri', 10, '2016-10-25'),
(70, 'entrada', 7, 'gretelferraz', 19, 'refri', 1, '2016-10-25'),
(65, 'entrada', 7, 'gretelferraz', 20, 'Coca Cola', 10, '2016-10-26'),
(69, 'entrada', 7, 'gretelferraz', 20, 'Coca Cola', 20, '2016-10-26');

-- --------------------------------------------------------

--
-- Estrutura para tabela `produtos`
--

CREATE TABLE IF NOT EXISTS `produtos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) NOT NULL,
  `quantidade` int(11) NOT NULL,
  `custo` varchar(50) NOT NULL,
  `preço` varchar(50) NOT NULL,
  `IdDoUsuario` int(11) NOT NULL,
  `usuario` varchar(50) NOT NULL,
  `fornecedor` varchar(100) NOT NULL,
  `data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;

--
-- Fazendo dump de dados para tabela `produtos`
--

INSERT INTO `produtos` (`id`, `nome`, `quantidade`, `custo`, `preço`, `IdDoUsuario`, `usuario`, `fornecedor`, `data`) VALUES
(19, 'refri', 0, '5,00', '6,00', 7, 'gretelferraz', '5 bar primeiro gole', '2016-10-26 18:17:29'),
(18, 'Guaraná lata 350ml', 39, '2,50', '5,00', 7, 'gretelferraz', '6 Malu Doces', '2016-10-25 03:04:10'),
(17, 'Fanta 2L', 50, '5,50', '8,50', 7, 'gretelferraz', '5 bar primeiro gole', '2016-10-25 03:01:10'),
(20, 'Coca Cola', 12, '5,50', '8,50', 7, 'gretelferraz', '1 Loja de doces da Sofia', '2016-10-26 18:06:44');

-- --------------------------------------------------------

--
-- Estrutura para tabela `usuarios`
--

CREATE TABLE IF NOT EXISTS `usuarios` (
  `id_usuario` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `nome` varchar(45) NOT NULL,
  `nivel_usuario` enum('0','1','2') NOT NULL DEFAULT '0',
  `empresa` varchar(50) NOT NULL,
  `CNPJ` varchar(100) NOT NULL,
  `email` varchar(64) NOT NULL,
  `telefone` varchar(14) NOT NULL,
  `celular` varchar(14) NOT NULL,
  `endereco` varchar(100) NOT NULL,
  `num` varchar(11) NOT NULL,
  `bairro` varchar(20) NOT NULL,
  `cidade` varchar(45) NOT NULL,
  `estado` varchar(30) NOT NULL,
  `usuario` varchar(40) NOT NULL,
  `senha` char(32) NOT NULL,
  `data_cadastro` datetime NOT NULL,
  `data_ultimo_login` datetime NOT NULL,
  `ativado` int(11) NOT NULL,
  PRIMARY KEY (`id_usuario`),
  UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=66 ;

--
-- Fazendo dump de dados para tabela `usuarios`
--

INSERT INTO `usuarios` (`id_usuario`, `nome`, `nivel_usuario`, `empresa`, `CNPJ`, `email`, `telefone`, `celular`, `endereco`, `num`, `bairro`, `cidade`, `estado`, `usuario`, `senha`, `data_cadastro`, `data_ultimo_login`, `ativado`) VALUES
(7, 'ADM', '1', 'GDesing e Programação', '00.000.000/0000-00', 'gretelferraz@gmail.com', '99999-9999', '99999-9999', 'Tr. minha rua', '72', 'Jd. São João', 'são Paulo', 'São Paulo', 'gretelferraz', 'minhasenha', '2016-08-25 02:16:15', '2016-10-26 15:56:15', 1),
(63, 'Comum', '1', 'empresa', '22.773.394/0001-20', 'gretelferraz@hotmail.com', '0000000000', '000000000', 'tr. minha rua', '72', 'Jardim São João (Zon', 'são paulo', 'são paulo', 'gretel', 'minha senha', '2016-09-14 23:37:35', '2016-09-17 17:25:28', 1);

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Seria isso Carlos Coelho?

Muito obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Renison
      Bom dia, amigos!
       
      Então, estou com um problema pequeno, fiz um sistema de entrada e saida de estoque, porém, quando você da saida de estoque de destino para estoque de saida, o estoque de destino não aparece valor algum, e o de origem foi contabilizado a saida.
       
      <? include("frmvalidarcookie.php"); if (permissao(38)>0){ //fornecedores $r3=ibase_query("select idpessoa as id,nm_pessoa as nome from LPESSOA where ai=1 order by nm_pessoa"); $cod_id=''; $cod_estoqu=''; $cod_destino=''; $nm_item=''; $data1=''; $data2=''; $todos=3; $cod_forn=''; $notafiscal=''; if (isset($_POST['cod_id'])) $cod_id=$_POST['cod_id']; if (isset($_POST['cod_estoqu'])) $cod_estoqu=$_POST['cod_estoqu']; if (isset($_POST['cod_destino'])) $cod_destino=$_POST['cod_destino']; if (isset($_POST['data1'])) $data1=$_POST['data1']; if (isset($_POST['data2'])) $data2=$_POST['data2']; if (isset($_POST['todos'])) $todos=$_POST['todos']; if (isset($_POST["cod_forn"])) $cod_forn=$_POST["cod_forn"]; if (isset($_POST["notafiscal"])) $notafiscal=$_POST["notafiscal"]; ?> <body onload="document.form1.nome.focus();"> <form name="form1" method="post" action="frmrelestoque2.php"> <table width = "100%" border = "0" cellspacing = "1" align= "left" cellpadding = "3" class="login_senha"> <tr> <td colspan="6" bgcolor="#A63433" colspan="2"><span class="login_senha3a">Estoques</span></td> </tr> <tr> <td colspan="6"> Data Inicial<br> <input name= "data1" type = "date" class='nova' value="<? echo $data1; ?>"><p> Data Final<br> <input name= "data2" type = "date" class='nova' value="<? echo $data2; ?>"><p> Estoque<br> <select name="cod_estoqu" class='nova'> <option value=""></option> <? //estoques $r4=ibase_query("select cod_estoqu as id,des_estoqu as nome from CAD_ESTO where sub_estoque=1 order by 2"); while($row4=ibase_fetch_assoc($r4)) { if ($row4["ID"]==$cod_estoqu) {?> <option selected value="<?print $row4['ID'];?>"><?print $row4['NOME'].' ('.$row4['ID'].')';?></option><? } else {?> <option value="<?print $row4["ID"];?>"><?print $row4["NOME"].' ('.$row4['ID'].')';?></option><? } }?> </select> <p> Item<br> <select name="cod_id" class='nova'> <option value=""></option> <? //estoques $r5=ibase_query("select id,nome from INTER_MD2 where ai=1 order by 2"); while($row5=ibase_fetch_assoc($r5)) { if ($row5["ID"]==$cod_id) {?> <option selected value="<?print $row5['ID'];?>"><?print $row5['NOME'];?></option><? } else {?> <option value="<?print $row5["ID"];?>"><?print $row5["NOME"];?></option><? } }?> </select> <p> Fornecedor<br> <select name="cod_forn" class='nova'> <option value=""></option> <? while($row3=ibase_fetch_assoc($r3)) { if ($row3["ID"]==$cod_forn) {?> <option selected value="<?print $row3['ID'];?>"><?print $row3['NOME'];?></option><? } else {?> <option value="<?print $row3["ID"];?>"><?print $row3["NOME"];?></option><? } }?> </select> <p> Nota Fiscal<br> <input name="notafiscal" id="notafiscal" class="nova" type="text" size="10" maxlength="10" value="<? echo $notafiscal ?>"> <p> Opções<br> <select name="todos" class="nova"> <option value="1" <? if ($todos==1) echo "selected";?>>Somente Entradas</option> <option value="2" <? if ($todos==2) echo "selected";?>>Somente Saídas</option> <option value="3" <? if ($todos==3) echo "selected";?>>Saldo</option> </select>&nbsp;&nbsp;&nbsp; <input name="btp" type="submit" value="OK" class="button_estilo"> <input name="btn2" type="button" value="Limpar" class="button_estilo" onClick=window.location="frmrelestoque2.php"> <input name="btn3" type="button" value="Voltar" class="button_estilo" onClick=window.location="frmmenu_almo.php"><p> <input name="bt1" id="bt1" type="button" value="Imprimir" class="button_estilo4" onClick=window.open("pdf083.php?id=<? echo $cod_estoqu?>")> </form> </td> </tr> <tr> <td colspan='2'> <table width = "100%" border = "0" cellspacing = "3" align= "left" cellpadding = "5" class="login_senha"> <tr bgcolor='#e2e2e2'> <td width="05%" align='center'>Data</td> <td width="08%" align='center'>Estoque Origem</td> <td width="03%" align='center'>Destino</td> <td width="03%" align='center'>ID</td> <td width="15%" align='center'>Item</td> <td width="04%" align='center'>Unidade</td> <td width="10%" align='center'>Fornecedor</td> <td width="03%" align='center'>NF</td> <td width="05%" align='center'>Usuário</td> <td width="03%" align='center'>Entradas</td> <td width="03%" align='center'>Saidas</td> <td width="03%" align='center'>Observação</td> </tr> <? $i=0; $sql="select a.cod_id, a.data,a.historico,c.des_estoqu as nm_origem,e.nm_pessoa as nm_fornecedor,a.notafiscal, d.des_estoqu as nm_destino, b.nome as nm_item, b.unidade_cob as nm_unidade,a.entrada,a.saida,a.usuario,a.observacao, c.des_estoqu from inter_md2a a left join inter_md2 b on b.id=a.cod_id left join cad_esto c on c.cod_estoqu=a.cod_estoqu left join cad_esto d on d.cod_estoqu=a.cod_destino left join lpessoa e on e.idpessoa=a.cod_forn where a.ai=1 "; if ($todos==1){ $sql.=" and a.entrada>0 "; } if ($todos==2){ $sql.=" and a.saida>0 "; } if (!empty($data1)){ $sql.=" and a.data between '$data1' and '$data2' "; if ($cod_estoqu>0){ $sql.=" and a.cod_estoqu=$cod_estoqu "; if ($cod_id>0){ $sql.=" and a.cod_id=$cod_id "; } }else{ if ($cod_id>0){ $sql.=" and a.cod_id=$cod_id "; } } }else{ if ($cod_destino>0){ $sql.=" and a.cod_destino=$cod_destino "; if ($cod_id>0){ $sql.=" and a.cod_id=$cod_id "; } }else{ if ($cod_id>0){ $sql.=" and a.cod_id=$cod_id "; }else{ if ($cod_forn>0){ $sql.=" and a.cod_forn=$cod_forn "; }else{ if ($notafiscal>0){ $sql.=" and a.notafiscal=$notafiscal "; }else{ $sql.=" and a.id=0 "; } } } } } $sql.=" order by 2"; //echo $sql."<p>"; $r4=ibase_query($sql); $t1=0; $t2=0; $i=0; while($row=ibase_fetch_object($r4)){ if ($i % 2){?> <tr bgcolor = "#cdf"><?; } else{?> <tr bgcolor = "#EAE2B4"><?; } $i++;?> <td align='left'><? imprimevazio(DataBR($row->DATA));?></td> <td align='left'><? imprimevazio($row->DES_ESTOQU);?></td> <td align='left'><? imprimevazio($row->NM_DESTINO);?></td> <td align='center'><? imprimevazio($row->COD_ID);?></td> <td align="left"><? imprimevazio($row->HISTORICO);?></td> <td align="left"><? imprimevazio($row->NM_UNIDADE);?></td> <td align="left"><? imprimevazio($row->NM_FORNECEDOR);?></td> <td align="left"><? imprimevazio($row->NOTAFISCAL);?></td> <td align="left"><? imprimevazio($row->USUARIO);?></td> <td align="right"><? imprimevazio(tran1($row->ENTRADA));?></td> <td align="right"><? imprimevazio(tran1($row->SAIDA));?></td> <td align="right"><? imprimevazio($row->OBSERVACAO);?></td> </tr> <?/* <td align="center"> <a href="frminvent_ver_all.php?cod_id=<? echo $row->COD_ID; ?>" title="Ver lançamentos" target="_blank">Lançamentos</a> </td> */ $t1=$t1+$row->ENTRADA; $t2=$t2+$row->SAIDA; ?> <? } if ($cod_id>0){?> <tr bgcolor="e2e2e2"> <td colspan='7' align="right"><strong>Total</strong></td> <td align='right'><strong><? echo tran1($t1) ?></strong></td> <td align='right'><strong><?echo tran1($t2)?></strong></td> </tr> <tr bgcolor="e2e2e2"> <td colspan='8' align="right"><strong>Saldo</strong></td> <td align='right'><strong><?echo tran1($t1-$t2)?></strong></td> </tr> <?} ?> </table> </td> </tr> </table> </form> </body> </html> <? }else{ mensagem('Acesso negado. (38)'); }?>  
    • Por pedroomrt
      Boa noite, estou com uma dúvida.
      Estou elaborando um controle de estoque web para minha empresa, desenvolvido com PHP, MySQLi e Bootstrap, e antes do desenvolvimento de fato, estou esboçando tudo, e surgiu a seguinte questão
      Desejo ter uma tela, onde sejam exibidos todos os produtos (com quantidades mínimas, e atuais). E que de forma automática, este site me dê um alert, ou apresente uma espécie de notificação, quando determinado produto ficar menor que a quantidade mínima. Como seria a forma mais "fácil" de idealizar?
    • Por danielmessias21
      Preciso de um sistema de estoque simples, porém sem mysql ou qualquer tipo de banco de dados, apenas index e se possivel salvar em bloco de notas, sistema de login eu já tenho sem ser mysql, alguem sabe aonde encontro?
    • Por Blau Nunes
      Eae galera, preciso fazer um software para controle de estoque porém não sei qual linguagem usar. O controle de login deve ser feito através de um AD (não faço a minima ideia de como fazer isso) e o software vai ser disponibilizado internamente em um servidor.
       
      Eu conheço o básico de C# mas não sei se é viável por causa dessas especificações. Enfim, queria a sugestão de vocês de qual linguagem usar. VLW
    • Por Eduardo Rocha Kmiecik
      Bom dia pessoal, eu estou desenvolvendo um sistema onde preciso colocar a localização de cada produto. Este material vem em lotes e cada lote possui vários produtos, porém eu preciso cadastrar a localização deles (cada produto individual) no armazém, por exemplo Produto 1: rua A, vão 2, nível 3 | Produto 2: rua B, vão 3, nível 1. (suponhamos que os respectivos são do mesmo lote).
        Cada produto tem o seu local, pensei em quando o usuário cadastrar a "quantidade" por lote, seja incluído no banco repetidamente aquele material, assim depois eu possa colocar a posição dos mesmos
        Alguém tem outra ideia que possa me ajudar, ou se é possível fazer um FOR no arquivo de ação para que ele repetidamente inclua as informações no banco? 
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.