Jump to content
Fórum Script Brasil

All Activity

This stream auto-updates

  1. Today
  2. O meu conhecimento em HTML é precário, o máximo que eu aprendi foi usar o marcador <table>. Eu criei três <table>, um dentro do outro. Eu acreditava que era impossível colocar um <table> do lado do outro, mas a Gemini disse que é possível, assim: <table style=float:left> <tr> <td> <tr> <td> <table style=float:right> Como a Gemini é 50% confiável, fiz o teste, e funcionou! Arquivo MVC.php (provisório, estou usando no lugar do Index.php) <?php ini_set('display_errors', 1); require __DIR__ . '/Modelos/Config.php'; if($_GET) { $comando=explode('_',key($_GET)); $controle=new $comando[0]; $funcao=$comando[1]; if(count($comando)==3) { $_GET[$funcao]=$comando[2]; } call_user_func(array($controle,$funcao)); } else { $login=new ControleLogin(); $login->login(); } Arquivo Modelos / Config.php <?php date_default_timezone_set('America/Sao_Paulo'); defined('PROJETO') || define('PROJETO',$_SERVER['DOCUMENT_ROOT'].'/Frank/'); defined('CONTROLES') || define('CONTROLES',PROJETO.'/Controles/'); defined('MODELOS') || define('MODELO',PROJETO.'/Modelos/'); defined('VISOES') || define('VISOES',PROJETO.'/Visoes/'); defined('HOST') || define('HOST','localhost'); defined('DBNAME') || define('DBNAME','Diario'); defined('USER') || define('USER','Root'); defined('PASSWORD') || define('PASSWORD','14061406'); spl_autoload_register(function($Class) { $includeDir = false; $findDir = ['Controles','Modelos','Visoes']; foreach ($findDir as $DirName) { if (!$includeDir && file_exists(FindClass($DirName, $Class)) && !is_dir(FindClass($DirName, $Class))) { include_once (FindClass($DirName, $Class)); $includeDir = true; } } if (!$includeDir) { die("$Class - Erro interno no servidor ao encontrar dados cruciais de funcionamento!"); } }); function FindClass($dir, $class) { return ( $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . '/frank/' . DIRECTORY_SEPARATOR . $dir . DIRECTORY_SEPARATOR . $class . '.php'); } function apuracao($dia) { $ano=date('Y',strtotime($dia)); $mes=date('m',strtotime($dia)); $mesVetor=['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho', 'Agosto','Setembro','Outubro','Novembro','Dezembro']; $apuracao=$mesVetor[$mes-1] . " de $ano"; $primeiroDia="$ano-$mes-01"; $ultimoDia=date('Y-m-t',strtotime($primeiroDia)); return json_decode(json_encode(['apuracao'=>$apuracao,'primeiroDia'=>$primeiroDia, 'ultimoDia'=>$ultimoDia])); } function dec($value) { if($value==null) { return null; } return number_format($value,2,',','.'); } function deca($num) { $value=str_replace(".","",$num); return str_replace(",",".",$value); } function fmt($date) { return date('d/m/y',strtotime($date)); } Arquivo Controles / ControleVenda.php <?php class ControleVenda extends Controle { public function inicio() { $detalhes=[];$detalhe=""; if(isset($_GET['inicio'])) { $detalhe=$_GET['inicio']; $detalhes=$this->Conexao->select("* from tbpedido where dia='$detalhe' and horavenda is not null group by horavenda order by horavenda desc"); } if(!isset($_SESSION['apuracao'])) { $_SESSION['apuracao']=date('Y-m-1'); } $primeiroDia=apuracao($_SESSION['apuracao'])->primeiroDia; $ultimoDia=apuracao($_SESSION['apuracao'])->ultimoDia; $grupos=$this->Conexao->select("date(horavenda) as ddia,sum(total) as ttotal from tbpedido where date(horavenda) between '$primeiroDia' and '$ultimoDia' and horavenda is not null group by ddia order by ddia desc"); $vendaMensal=$this->Conexao->select("date_format(horavenda,'%Y-%m') as mes, sum(total) as total from tbpedido where horavenda is not null group by mes order by mes desc"); return $this->view('Venda',['grupos'=>$grupos, 'vendaMensal'=>$vendaMensal,'detalhes'=>$detalhes,'detalhe'=>$detalhe]); } public function apuracao() { $_SESSION['apuracao']=$_GET['apuracao']."-1"; return $this->inicio(); } } Arquivo Visoes / Venda.php <?php include VISOES . "Menu.php"; ?> <script> document.title="Relatório de Vendas" btmenu.innerHTML="Relatório de Vendas" </script> <table class='table table-striped linha w-25' style=float:left> <tr><td colspan=2>Detalhe por mês <?php foreach($vendaMensal as $venda): ?> <tr><td><a href=?ControleVenda.apuracao.<?=$venda->mes?>><?=$venda->mes?></a> => R$ <td class='text-danger text-end'> <?=dec($venda->total)?> <?php endforeach; ?> </table> <table class='table table-striped linha w-25' style=float:right> <tr><td colspan=2>Detalhe por dia <tr class=fw-semibold><td>Dia<td class=text-end>Total <?php foreach($grupos as $grupo): ?> <tr class=fw-semibold onclick="location.replace('?ControleVenda.inicio.<?=$grupo->ddia?>')"> <td><?=date('d/m/y',strtotime($grupo->ddia))?> <td class=text-end><a href=?ControleVenda.inicio><?=dec($grupo->ttotal)?></a> <?php if($detalhe==$grupo->ddia): ?> <tr><td> <table class="table table-striped linha"> <tr class=fw-semibold><td><?=$grupo->ddia?><td>Pedido<td>Total<td>dinheiro<td>troco<td>cartão<td>pix <?php foreach($detalhes as $grupo): ?> <tr> <td class=text-end><?=date('H:i',strtotime($grupo->horavenda))?> <td class=text-end><?=$grupo->ped?> <td class=text-end><?=dec($grupo->total)?> <td class=text-end> <?php if(abs($grupo->dinheiro)>0): ?> <?=dec($grupo->dinheiro)?> <?php endif; ?> <td class=text-end> <?php if(abs($grupo->troco)>0): ?> <?=dec($grupo->troco)?> <?php endif; ?> <td class=text-center> <?php if($grupo->cartao==1): ?> x <?php endif; ?> <td class=text-center> <?php if($grupo->pix==1): ?> x <?php endif; ?> <?php endforeach; ?> </table> <?php endif; ?> <?php endforeach; ?>
  3. Olá, pessoal. Estou com uma planilha do Excel, em que tenho um botão que eu clico, e ele gera um modelo de laudo para mim, em formato de Word. E quando ele faz isso, já puxa todos os dados que estão no Excel e coloca nesse arquivo.doc. Porém, devido ao pedido de um cliente, preciso trabalhar com um novo modelo de laudo e, portanto, terei que ter MAIS DE UM BOTÃO na planilha, sendo um para cada tipo de laudo. Gostaria de saber se conseguem me ajudar no passo a passo de como fazer esse novo botão e como criar uma nova programação no VBA para incluir esse novo modelo de laudo. Anexo envio a foto do Excel e a programação VBA Obrigado Option Explicit Const modeloUS = "C:\Anima\Modelo Laudos\Laudo Abdominal.dotx" Const pastaLaudos = "C:\Anima\Laudos\Cabeçalhos Prontos\" Dim wdApp As Word.Application Private Sub btnGerarLaudo_Clique() Dim wdDoc As Word.Document, rgFoco As Excel.Range, rgTbl As Excel.Range, nomeArq As String Set rgTbl = Range("A1").CurrentRegion.Offset(1, 0) Set rgTbl = rgTbl.Resize(rgTbl.Rows.Count - 1) Set rgFoco = Intersect(rgTbl, ActiveCell.EntireRow) If Not rgFoco Is Nothing Then rgFoco.Select On Error Resume Next Set wdApp = GetObject(, "Word.Application") If wdApp Is Nothing Then Set wdApp = New Word.Application On Error GoTo 0 wdApp.Visible = True Set wdDoc = wdApp.Documents.Add(Template:=modeloUS, DocumentType:=wdNewBlankDocument, Visible:=True) With wdDoc.Bookmarks .Item("bkmLaudo").Range.Text = rgFoco.Columns("B").Value .Item("bkmData").Range.Text = rgFoco.Columns("G").Value .Item("bkmNome").Range.Text = rgFoco.Columns("I").Value .Item("bkmEspécie").Range.Text = rgFoco.Columns("J").Value .Item("bkmRaça").Range.Text = rgFoco.Columns("L").Value .Item("bkmSexo").Range.Text = rgFoco.Columns("M").Value .Item("bkmIdade").Range.Text = rgFoco.Columns("O").Value .Item("bkmTutor").Range.Text = rgFoco.Columns("P").Value .Item("bkmVeterinário").Range.Text = rgFoco.Columns("Q").Value .Item("bkmClínica").Range.Text = rgFoco.Columns("R").Value .Item("bkmCidade").Range.Text = rgFoco.Columns("X").Value .Item("bkmDia").Range.Text = rgFoco.Columns("AB").Value .Item("bkmMes").Range.Text = rgFoco.Columns("AD").Value .Item("bkmAno").Range.Text = rgFoco.Columns("AE").Value End With nomeArq = Trim(pastaLaudos & Replace(rgFoco.Columns("B").Value, "/24", "")) nomeArq = nomeArq & " - " & rgFoco.Columns("I") wdDoc.SaveAs2 Filename:=nomeArq, FileFormat:=WdSaveFormat.wdFormatDocumentDefault End If Set rgFoco = Nothing: Set rgTbl = Nothing Set wdDoc = Nothing: Set wdApp = Nothing End Sub
  4. Yesterday
  5. deveria existir uma regra neste forum, sobre formatos de posts. imagine este post aqui, sendo um golpe, pois não apresenta praticamente nenhuma informação, nome da empresa, registro, projeto, etc pode ser um golpe envolvendo trafico humano, 'vir para portugal', ou esperar expansão, de quem? não falou nem o nome da empresa.
  6. Last week
  7. Gostaria de uma ajuda, a indicação de um curso para iniciante em sql a avançado. com bons conteudo e que realmente agregue conhecimento na pratica.
  8. Eu não consegui colocar o HTML dentro de uma função do PHP, mas consegui fazer o contrário. Com a ajuda da Gemini consegui montar o seguinte código: arquivo teste.html <meta charset="UTF-8"> <style> #divMensagem {width:500;margin:0 auto} .numero {color:blue} .numero:hover{color:red} </style> <script> function enviar(apuracao) { dialog=document.createElement("dialog") dialog.innerHTML="o período selecionado foi o " + apuracao document.body.appendChild(dialog) dialog.showModal() } async function apuracao() { response = await fetch('apuracao.php') dados = await response.json() array=dados.toString().split(",") ano=array[0].substring(0,4) divMensagem.innerHTML="Selecione um período de apuração:<br>" divMensagem.innerHTML+=ano + " " for(i=0;i<array.length;i++) { if(array[i].substring(0,4)!=ano) { ano=array[i].substring(0,4) divMensagem.innerHTML+="<br>" + array[i].substring(0,4) + " " } divMensagem.innerHTML+="<spam class=numero id=" + array[i] + " onclick=enviar(this.id)>" + array[i].slice(-2) + "</spam> " } } apuracao() </script> <div id="divMensagem" ></div> arquivo Apuracao.php <?php require 'Config.php'; class Apuracao extends Controle { public function inicio() { $primeiroDia=$this->Conexao->select('dia from tbdiario order by dia')[0]->dia; $ultimoDia=$this->Conexao->select('dia from tbdiario order by dia desc')[0]->dia; $apuracoes=[]; while($primeiroDia<=$ultimoDia) { $apuracoes[]=date('Y-m',strtotime($primeiroDia)); $data=new DateTime($primeiroDia); $primeiroDia=date_modify($data,'+1 month')->format('Y-m-1'); } rsort($apuracoes); echo json_encode($apuracoes); } } $Controle=new Apuracao(); $Controle->inicio();
  9. Boa tarde! Me chamo Bruno. e estou com dificuldade em colocar 'constraints' em minha tabela, pois aponta erro na sintaxe. a versão do meu mysql é 8.036. obrigado pela ajuda.
  10. Sempre que eu encontro informações desencontradas, eu preciso logar na Hostinger, digitar a senha, passar pela autenticação de dupla etapa, passar por um labirinto de painéis até chegar no painel de banco de dados. Chegando lá, me dá um branco, e eu me pergunto: o que eu vim fazer aqui? Hoje decidi acabar com esse constrangimento. Toda vez que eu encontrar algo estranho na tela do meu projeto, eu duplico a página, e numa delas eu vou no Painel SQL: Arquivo Controles / Controle.php <?php session_start(); require_once $_SERVER['DOCUMENT_ROOT'].'/Modelos/Config.php'; class Controle { public function painel() { $sql=""; $resposta=""; if(isset($_POST['sql'])) { $sql=$_POST['sql']; $resposta=$this->Conexao->select($sql); } return $this->view('PainelSQL',['sql'=>$sql,'resposta'=>$resposta]); } Arquivo Visoes / PainelSQL.php <?php include VISOES . 'Menu.php'; ?> <script>btmenu.innerHTML='Painel SQL'</script> SQL => SELECT <form method=post action=?Controle.painel> <textarea name=sql rows=5 cols=60> <?=$sql?> </textarea> <p></p> <input type=submit> </form> <hr> <p class=text-danger>Resposta</p> <div><?=var_dump($resposta)?></div>
  11. Frank K Hosaka

    PHP readline

    Ontem, eu perguntei para a Gemini se é possível colocar um HTML dentro de uma função do PHP. Ela disse que sim, e sugeriu esse código: <?php function solicitarPeriodoApuracao() { echo "Selecione o período de apuração:\n"; $apuracao = readline("Data inicial (dd/mm/aaaa): "); return [ 'apuracao' => $apuracao ]; } $teste=solicitarPeriodoApuracao(); var_dump($teste); Eu testei e não funcionou. Reclamei com a Gemini, e ela disse que eu preciso instalar a extensão readline no PHP. Eu procurei a extensão, e não achei. O problema da Gemini é o mesmo do Bard, ela não testa os códigos que ela divulga. Isso me fez lembrar do Basic que eu vi na década de 1980, ele usava o comando Input para aguardar informações do usuário. Na década de 1990, a Microsoft inventou o Office e com ele o Visual Basic. O Visual Basic apresentou o InputBox, ele é muito bacana, você pode botar a caixa aonde você quiser. Mas em 2020 eu conheci o PHP. Para o meu desespero, não existe nenhum meio do PHP conversar com o usuário senão usando o HTML. Ao invés de descartar a ideia da Gemini, tentei criar um projeto assim: <?php function solicitarPeriodoApuracao() { if(isset($_POST)) { return $_POST; } ob_start(); ?> <form method=post> Entre com a data da apuração AAAA-mm-dd <input name=apuracao> </form> <?php ob_flush(); } $teste=solicitarPeriodoApuracao(); var_dump($teste); Pura perda de tempo! Não funciona!
  12. Eu tenho um código que ajuda o usuário a escolher um período de apuração. O problema é que eu tenho um código chamado balancete, outro chamado razão e finalmente um chamado Mercado Pago. Os três precisam da rotina para escolher o período de apuração. A pergunta é: como o código da apuração vai saber quem iniciou o serviço? No PHP, temos o comando function ( ), ele devolve o comando para quem lhe chamou, sem precisar de nenhum código adicional. Eu tentei colocar um view dentro da function ( ) e o resultado foi um desastre. A minha saída foi criar um roteador dentro da função apuração. Para chamar a função, usei o comando <a href=?ControleDiario.apuracao.razao> dentro do view balancete e do view razão e <a href=?ControleDiario.apuracao.mercado> dentro do view Mercado Pago. Para melhorar mais ainda, a própria função apuração recebe o valor escolhido pelo usuário, coisa do tipo <a href=?ControleDiario.apuracao.2024-02> dentro do view Apuracao. Ou seja, eu coloquei o nome do solicitante bem como a apuração escolhida pelo usuário dentro da mesma chave. Olha só a baderna que ficou: Arquivo Controles/ControleDiario.php <?php class ControleDiario extends Controle { public function apuracao() { if(isset($_GET['apuracao'])) { if(is_numeric(substr($_GET['apuracao'],0,4))) { $apuracao=apuracao($_GET['apuracao']."-1"); $_SESSION['dia']=$apuracao->primeiroDia; if($_SESSION['endereco']=="mercado") { return $this->mercado(); } return $this->razao(); } else { $_SESSION['endereco']=$_GET['apuracao']; } } $primeiroDia=$this->Conexao->select('dia from tbdiario order by dia')[0]->dia; $ultimoDia=$this->Conexao->select('dia from tbdiario order by dia desc')[0]->dia; $apuracoes=[]; while($primeiroDia<=$ultimoDia) { $apuracoes[]=date('Y-m',strtotime($primeiroDia)); $data=new DateTime($primeiroDia); $primeiroDia=date_modify($data,'+1 month')->format('Y-m-1'); } rsort($apuracoes); $this->view('Apuracao',['apuracoes'=>$apuracoes]); } // ... } Arquivo Views/Apuracao.php <?php include VISOES . 'Menu.php'; echo "<table class='table table-striped'> <tr class='fw-semibold'><td><td>Selecione o período de apuração"; foreach($apuracoes as $apuracao) { $ano = substr($apuracao,0,4); $mes = substr($apuracao,5,2); if(!isset($anoAnterior)) { echo "<tr><td>$ano<td>";$anoAnterior=$ano; } if($ano!==$anoAnterior) { echo "<tr><td>" . $ano ."<td><a href=?ControleDiario.apuracao.$apuracao>$mes</a> "; $anoAnterior=$ano; } else { echo " <a href=?ControleDiario.apuracao.$apuracao>$mes</a> "; } } echo "</table>"; Isso é uma grande gambiarra, mas funciona.
  13. Para eu ter um site preciso pagar R$ 74,98 todo ano, eles chamam o produto de Dominio. O plano de hospedagem é basicamente dois: o compartilhado "Premium Web Hosting" e o VPS (aqui tem várias subcategorias, eu peguei o mais barato). O valor do plano VPS é de 24.99 por mês, mas eu paguei R$ 719,16 para os anos de 2024 e 2025. A Hostinger mudou o preço sem eu perceber, eles cobraram todo o valor do pacote de uma só vez. Isso é um péssimo negócio. Agora, eles voltaram a cobrar por mês, mas o meu dinheiro já foi para o saco. Para testar o VPS, eu não precisei comprar um Domínio novo, eu criei vários subdomínios, e eles funcionaram sem nenhum problema. O problema foi na hora de apontar o domínio para o novo IP do servidor VPS. Eu consegui criar o site baseado no domínio, mas não consegui instalar o certificado de credibilidade Let's Encrypt. Eu pedi ajuda, e eles me informaram que o erro está no servidor, o único que pode consertar isso era somente eu, pois eles não têm acesso ao conteúdo do servidor. Eu fiquei indignado. Fui pesquisar na internet, e só obtive mais orientações confusas, do tipo que eu deveria verificar o IPv6. Sem a ajuda da Hostinger e sem a ajuda da internet, tudo o que restou foi o famoso método científico da tentativa e erro. Eu imaginei que o problema estava fora do servidor. Não basta apontar o domínio para o novo IP. Então eu decidi destruir todo o site que eu criei dentro do Premium Web Hosting. Tentei instalar o certificado, e outra vez eu não consegui. Mas pelo menos eu consegui abrir o domínio no navegador, apesar dele reclamar que o site não é nada confiável. Depois de várias horas, eu tentei de novo, e finalmente consegui instalar o certificado. Agora o navegador abre o domínio sem reclamar e com a clássica mensagem do index.php "Hello World!". Para administrar os sites criados no VPS, eu uso o painel CloudPanel, pois eu não entendo nada de servidor. Não é fácil se familiarizar com essa ferramenta, eu tive que destruir os sites umas três vezes, até pegar o jeito, e aprendi da pior maneira que não é para ficar brincando com o Gerenciador de DNS, você não pode criar um DNS, destruir e recriar o mesmo DNS por mais de três vezes. A maior diferença entre a hospedagem VPS e o compartilhado além do preço é um novo recurso chamado Ubuntu. Eu tenho pavor dele, e a Hostinger já deixou bem claro que não dá nenhuma assistência com essa ferramenta. Já brinquei com ele e me dei mal, eu tive que destruir os sites e começar do zero. O meu conhecimento em Linux é mais precário do que eu sei de PHP, HTML, JavaScript e Laravel, mas preciso instalar o programa npm, e só assim eu poderei estudar melhor o Laravel. O Laravel usa o Taiwinds CSS e só dá para mexer nele somente com a ajuda do Linux. E eu nem sei como logar nele.
  14. Eu tentei no meu computador em casa mais o office atualizou e nem eu sei usar na versão mais recente. kkkk Segue o comando que tenho para fazer conexão com banco de dados do access: 'Criado por Alyson Ronnan Martins 'Data: 2021/11/12 'Utilizar a referência: Microsoft ActiveX Data Objects 6.1 Library Public db As ADODB.Connection Public rs As ADODB.Recordset Public Const DB_PATH As String = "C:\DB\" Public Const DB_NAME As String = "database.accdb" Public Sub cConnectOpen() On Error Resume Next Set db = New ADODB.Connection Dim Caminho As String Caminho = DB_PATH & DB_NAME If Dir(Caminho) = "" Then MsgBox "Não foi encontrador o banco de dados!" & Chr(13) & _ "Solicitar o suporte da verificar o caminho abaixo:" & Chr(13) & _ DB_PATH & DB_NAME, vbCritical, _ "Erro crítico!" Application.Quit End If With db .ConnectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};" & _ "ReadOnly=0;" & _ "DBQ=" & Caminho & ";" & _ "DefaultDir=" & DB_PATH '& _ "Uid=Admin;Pwd=;" .Open End With 'Exemplo de fazer consulta 'Set rs = db.Execute("SELECT * FROM TABELA") 'rs.Close: Set rs = Nothing End Sub Public Sub cConnectClose() On Error Resume Next db.Close Set db = Nothing End Sub Agora para consultar os dados você cria um procedimento para executar uma consulta: sSQL = "SELECT * " & _ "FROM [nome tabela] " & _ Set rs = New ADODB.Recordset rs.Open sSQL, db, adOpenDynamic, adLockReadOnly retornoSQL = rs.EOF If retornoSQL = False Then Do Until rs.EOF Sheets("Planilha1").Cells(x + 1, 1).Value = rs.Fields("") Sheets("Planilha1").Cells(x + 1, 2).Value = rs.Fields("") Sheets("Planilha1").Cells(x + 1, 3).Value = rs.Fields("") Sheets("Planilha1").Cells(x + 1, 4).Value = rs.Fields("") Sheets("Planilha1").Cells(x + 1, 5).Value = rs.Fields("") rs.MoveNext x = x + 1 Loop end if @Domingos Oliveira Avalia se consegue entender e utilizar.
  15. Boa tarde Alyson. Através de VBA posso associar a execução do mesmo a um botão para importar a tabela. Fica mais automatizado. você poderia me dar um exemplo com SQL ? Grato
  16. Boa tarde @Domingos Oliveira Precisa mesmo ser VBA? O import do EXCEL já traz as informações e é possível fazer SQL na hora de trazer as informações do ACCESS.
  17. Boa tarde, Gostaria de saber se alguém tem o código em VBA da rotina para importar para o EXCEL, uma tabela do ACCESS. Desde já, muito grato.
  18. Eu fiz besteira. Não dá para esquecer o view do MySQL. É possível fazer consultas mais rápidas no PHP, mas o PHP não é o único cliente do MySQL. Eu tenho uma planilha do Excel que faz auditoria no MySQL, ele é capaz de enxergar a discrepância entre o valor disponível no MySQL e o que ele espera. Mas para o Excel enxergar melhor o MySQL, ele precisa de um view. O view não é o único meio do Excel se comunicar com o MySQL, mas é o mais fácil.
  19. Ao invés de criar um view no MySQL, muito mais simples é montar a consulta no PHP, mesmo sabendo que o PHP é cliente do MySQL. Lá em 2020, eu criei esse view: CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `vw_contacorrente` AS SELECT `tbcontacorrente`.`docto` AS `docto`, `tbcontacorrente`.`lcto` AS `lcto`, `tbcontacorrente`.`vcto` AS `vcto`, `tbcontacorrente`.`pgto` AS `pgto`, FORMAT((CASE WHEN ((`tbdiario`.`contad` = 130) OR (`tbdiario`.`contad` = 211)) THEN `tbdiario`.`valor` END), 2, 'de_DE') AS `debito`, FORMAT((CASE WHEN ((`tbdiario`.`contac` = 130) OR (`tbdiario`.`contac` = 211)) THEN `tbdiario`.`valor` END), 2, 'de_DE') AS `credito`, `tbpessoa`.`pessoa` AS `pessoa`, CONCAT(CONVERT( DATE_FORMAT(`tbdiario`.`dia`, '%d/%m') USING UTF8MB4), ' ', `tbdiario`.`hist`) AS `hist` FROM ((`tbdiario` JOIN `tbcontacorrente` ON ((`tbdiario`.`docto` = `tbcontacorrente`.`docto`))) LEFT JOIN `tbpessoa` ON ((`tbcontacorrente`.`codp` = `tbpessoa`.`codp`))) WHERE (`tbcontacorrente`.`pgto` <> 1) ORDER BY `tbcontacorrente`.`vcto` Eu não lembro como eu consegui montar isso, mas chegou a hora de jogar fora. Eu copiei o código do jeito que está no PHP, esse é outro código que vou jogar fora, assim que eu terminar o MVC Mas no Laravel, eu não tive escolha, eu tive que montar a consulta: <?php // ... public function pagar( ) { //... $vetores=tbcontacorrente::where('pgto','<>','1') ->orderBy('vcto')->with('pessoa')->get(); $pendencias=[]; foreach($vetores as $vetor) { $diario=tbdiario::where('docto',$vetor->docto)->first(); tbcontacorrente::where('docto',$vetor->docto) ->update(['lcto'=>$diario->lcto]); if($diario->contad) { $debito=$diario->valor; $credito=null; } else { $debito=null; $credito=$diario->valor; } $pendencias[]=['docto'=>$vetor->docto,'lcto'=>$diario->lcto,'vcto'=>$vetor->vcto, 'pgto'=>$vetor->pgto, 'codp'=>$vetor->codp, 'pessoa'=>$vetor->pessoa->pessoa, 'debito'=>$debito,'credito'=>$credito,'hist'=>$diario->hist]; } $pendencias=json_decode(json_encode($pendencias)); return view('pagar',compact('pendencias')); } Note que é bem mais fácil entender o PHP do que o MySQL.
  20. Boa tarde pessoal, estou precisando de ajuda. Tenho uma página web que possue botões e quando eu passo o mouse em cima deles outros botões se expandem para os lados. A questão é que ao se expandir elas estão indo para o lado e passando da janela criando uma barra de rolagem e dificultando a leitura desses botões. Eu quero que quando esses botões forem passar da janela eles se expandam para baixo ao invés de se expandirem para o lado, mas apenas os botões que vão ultrapassar a janela. Conseguem me ajudar dizendo como fazer isso no CSS?
  21. Boa noite pessoal estou com um problema no meu banco de dados Fui fazer o shrink do meu log de transação pois estava muito grande e ia estourar meu disco físico . Coloquei pra rodar o shrink rodou uns 15 minutos e depois já apareceu que meu banco estava em recuperação já tem mais de 3 horas e não sei oque fazer
  22. Arquivo Index.php <?php $mysqli=new mysqli("localhost","root","","diario"); function query($sql) { $mysqli=$GLOBALS['mysqli']; $query=$mysqli->query($sql); return json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC))); } arquivo Exemplo.php <?php require 'Index.php'; $exemplo=query("select * from tbprod where prod like '%maçã%'"); foreach($exemplo as $ex) { echo $ex->prod . "<br>"; }
  23. Estou criando um formulário e tem um campo onde a pessoa digita um valor número, tipo kilimetragen do veícul. Mas preciso que seja feito uma validação do valor que ela digitou quando ela for para o próximo campo, retornando se o valor digitado é superior ao limite permitido. Já procurei vários modelos de código javascript, mas todos dão exemplo de fazer a validação após clicar no botão enviar.
  24. Olá Pessoal, Estou com um situação nessa consulta, venho pedir auxilio aqui no grupo para tentar resolver, Nessa imagem apresenta os dados de uma consulta, porem preciso calcular a diferença de dias entre cada situação ou seja, na coluna Dias seria a diferença entre as datas dos campos Data e DtEmissao, agora preciso calcular a diferença entre os dias do Campo Dias, exemplo: Numero| Dias | Diferenca_dias 554 7 null 554 12 (12-7) 5 554 23 (23-12) 11 554 23 (23-23) 0 590 8 Null 590 9 (9-8) 1 595 13 Null Obs: para os valores Null poderia repedir os valores da coluna dias ⚠️ Outro detalhe: tentei utilizar a função LAG porem sem sucesso, pois nossa versão do banco é 2005 🫣 SELECT D.Numero ,D.DtEmissao ,D.CodigoSituacao ,C.Descricao as Cargo ,Data ,INS.Descricao as Situação ,P.NomeUsual as Responsavel ,CASE WHEN ins.Descricao = 'Liberado' THEN DATEDIFF(DAY,D.DtMovimento, ISL.Data) WHEN ins.Descricao = 'Liberado' THEN DATEDIFF(DAY,ISL.Data,ISL.Data) ELSE DATEDIFF (day,D.DtEmissao,ISL.Data) END as Dias ,null as Diferenca_Dias --,LAG(ISL.Data,1) OVER (PARTITION BY D.Numero ORDER BY D.Numero, ISL.Data) as Numero_Dias FROM MotivoContratacaoCandidato MCC LEFT JOIN RequisicaoCandidato RC ON RC.OIDMotivoContratacaoCandidato = MCC.OIDMotivoContratacaoCandidato LEFT JOIN RequisicaoCandidatoMov RCM ON RC.OIDdocumento = RCM.OIDRequisicaoCandidatoMov LEFT JOIN Documento D on D.OIDdocumento = RC.OIDdocumento LEFT JOIN Cargo C ON C.OIDCargo = Rc.oidcargo LEFT JOIN IndicativoSituacaoLog ISL on D.OIDDocumento = ISL.OIDDocumento LEFT JOIN IndicativoSituacao INS on ins.OIDIndicativoSituacao = ISL.OIDIndicativoSituacao LEFT JOIN Pessoa P ON P.OIDPessoa = ISL.OIDResponsavel WHERE YEAR(D.DtEmissao) = 2024 AND D.Numero in ('590','595','554','521')
  1. Load more activity


  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.6k
×
×
  • Create New...