Todas Atividades
Atualizada automaticamente
- Yesterday
-
Cleimar Lemes começou a seguir Erro no meu codigo Gera_xml nfe 4.00
-
esto com problemas pra gerar um xml já tentei de tudo make, nfphp-/sped-phpnfe já fiz de tudo. e nunca gera so erro erro.. segue meu codigo do gera.. <?php // views/gera_xml.php - // Requisitos / autoload require __DIR__ . '/../includes/auth.php'; require_once __DIR__ . '/../config/database.php'; require_once __DIR__ . '/../vendor/autoload.php'; use NFePHP\NFe\Make; use NFePHP\Common\Exception\ValidationException; date_default_timezone_set('America/Sao_Paulo'); // ---------- GET ID $id = isset($_GET['id']) ? (int) $_GET['id'] : null; if (!$id) die("❌ ID da NFe não informado. Use ?id=NUMERO"); // ---------- Carregar NFe try { $stmt = $pdo->prepare("SELECT * FROM nfe WHERE id = ?"); $stmt->execute([$id]); $nfe = $stmt->fetch(PDO::FETCH_ASSOC); } catch (\PDOException $e) { die("❌ Erro ao carregar NFe: " . $e->getMessage()); } if (!$nfe) die("❌ NFe não encontrada."); // ---------- Carregar emitente ATIVO try { $stmt = $pdo->prepare("SELECT * FROM emitentes WHERE ativo = 1 LIMIT 1"); $stmt->execute(); $emit = $stmt->fetch(PDO::FETCH_ASSOC); } catch (\PDOException $e) { die("❌ Erro ao carregar emitente: " . $e->getMessage()); } if (!$emit) die("❌ Emitente ativo não encontrado. Marque um emitente como ativo."); // ---------- Carregar destinatário (clientes_nfe preferencial) $destCliente = null; if (!empty($nfe['dest_id'])) { try { $stmt = $pdo->prepare("SELECT * FROM clientes_nfe WHERE id = ?"); $stmt->execute([$nfe['dest_id']]); $destCliente = $stmt->fetch(PDO::FETCH_ASSOC); } catch (\PDOException $e) { $destCliente = null; } } // ---------- Carregar itens (nfe_itens JOIN produtos) try { $sqlItens = $pdo->prepare(" SELECT i.*, p.xProd AS produto_nome, COALESCE(p.uCom, p.uTrib) AS produto_unidade, p.NCM AS produto_NCM, p.CEST AS produto_CEST, p.CFOP AS produto_CFOP, p.preco_venda AS produto_preco_venda, p.csosn AS produto_csosn, p.cst_pis AS produto_cst_pis, p.cst_cofins AS produto_cst_cofins, p.cst_ipi AS produto_cst_ipi FROM nfe_itens i JOIN produtos p ON p.id = i.produto_id WHERE i.nfe_id = ? ORDER BY i.id ASC "); $sqlItens->execute([$id]); $itens = $sqlItens->fetchAll(PDO::FETCH_ASSOC); } catch (\PDOException $e) { die("❌ Erro ao carregar itens: " . $e->getMessage()); } if (!$itens) $itens = []; // ---------- Inicializa Make try { $make = new Make(); } catch (\Throwable $e) { die("❌ Erro ao inicializar NFePHP Make: " . $e->getMessage()); } // ---------------- utilitários (DV mod11, montagem manual da chave) function calculaDVMod11NFe($chave43) { $peso = 2; $soma = 0; for ($i = strlen($chave43) - 1; $i >= 0; $i--) { $soma += intval($chave43[$i]) * $peso; $peso++; if ($peso > 9) $peso = 2; } $resto = $soma % 11; $dv = 11 - $resto; if ($dv == 10 || $dv == 11) $dv = 0; return (string)$dv; } function montaChaveManual($cUF, $ano2, $mes2, $cnpj, $mod, $serie, $nNF, $tpEmis, $cNF) { $cUF = str_pad(substr($cUF, 0, 2), 2, "0", STR_PAD_LEFT); $aamm = str_pad($ano2, 2, "0", STR_PAD_LEFT) . str_pad($mes2, 2, "0", STR_PAD_LEFT); $cnpj = str_pad(preg_replace("/\D/","",$cnpj), 14, "0", STR_PAD_LEFT); $mod = str_pad($mod, 2, "0", STR_PAD_LEFT); $serie = str_pad($serie, 3, "0", STR_PAD_LEFT); $nNF = str_pad($nNF, 9, "0", STR_PAD_LEFT); $tpEmis = str_pad($tpEmis, 1, "0", STR_PAD_LEFT); $cNF = str_pad($cNF, 8, "0", STR_PAD_LEFT); $chave43 = $cUF . $aamm . $cnpj . $mod . $serie . $nNF . $tpEmis . $cNF; $dv = calculaDVMod11NFe($chave43); return $chave43 . $dv; } // ---------------- montar campos chave $cnpj_emit = $emit['CNPJ'] ?? ($emit['cnpj'] ?? ''); $cnpj_emit = preg_replace('/\D/','',$cnpj_emit); $mod = '55'; $serie = $nfe['serie'] ?? 1; $numero = $nfe['nNF'] ?? 0; $tpEmis = $nfe['tpEmis'] ?? 1; $codigo = $nfe['cNF'] ?? ($nfe['cNF'] ?? ''); $ufEmit = $nfe['cUF'] ?? ($emit['cMun'] ?? ($emit['UF'] ?? ($emit['uf'] ?? '52'))); $dtEmissao = isset($nfe['dhEmi']) ? new DateTime($nfe['dhEmi']) : new DateTime(); $ano2 = $dtEmissao->format('y'); $mes2 = $dtEmissao->format('m'); $cNF = str_pad($codigo, 8, "0", STR_PAD_LEFT); // ---------------- gerar chave com fallback $chave = null; try { if (class_exists('NFePHP\NFe\Common\KeyNFe')) { try { if (method_exists('NFePHP\NFe\Common\KeyNFe', 'build')) { $chave = \NFePHP\NFe\Common\KeyNFe::build($ufEmit, $ano2, $mes2, $cnpj_emit, $mod, $serie, $numero, $tpEmis, $codigo); } else { $k = new \NFePHP\NFe\Common\KeyNFe($ufEmit, $ano2, $mes2, $cnpj_emit, $mod, $serie, $numero, $tpEmis, $cNF); if (method_exists($k, 'monta')) $chave = $k->monta(); } } catch (\Throwable $e) { $chave = null; } } if (empty($chave) && method_exists($make, 'montaChave')) { try { $chave = $make->montaChave($ufEmit, $ano2, $mes2, $cnpj_emit, $mod, $serie, $numero, $tpEmis, $cNF); } catch (\Throwable $e) { $chave = null; } } if (empty($chave)) { $chave = montaChaveManual($ufEmit, $ano2, $mes2, $cnpj_emit, $mod, $serie, $numero, $tpEmis, $cNF); } } catch (\Throwable $e) { die("❌ Erro ao gerar chave: " . $e->getMessage()); } if (empty($chave) || strlen($chave) != 44) die("❌ Chave inválida gerada: " . htmlspecialchars($chave)); $cDV = substr($chave, -1); // ---------------- taginfNFe $std = new \stdClass(); $std->Id = 'NFe' . $chave; // assinador pode alterar o Id (pfx...) $std->versao = '4.00'; $make->taginfNFe($std); // ---------------- IDE $ide = new \stdClass(); $ide->cUF = $nfe['cUF'] ?? substr($ufEmit, 0, 2); $ide->cNF = $cNF; $ide->natOp = $nfe['natOp'] ?? 'VENDA'; $ide->mod = 55; $ide->serie = (int)$serie; $ide->nNF = (int)($nfe['nNF'] ?? 0); $ide->dhEmi = $dtEmissao->format('Y-m-d\TH:i:sP'); $ide->dhSaiEnt = $dtEmissao->format('Y-m-d\TH:i:sP'); $ide->tpNF = (int)($nfe['tpNF'] ?? 1); $ide->idDest = (int)($nfe['idDest'] ?? 1); $ide->cMunFG = $nfe['cMunFG'] ?? ($emit['cMun'] ?? ''); $ide->tpImp = 1; $ide->tpEmis = (int)$tpEmis; $ide->cDV = $cDV; $ide->tpAmb = (int)($nfe['tpAmb'] ?? 2); $ide->finNFe = (int)($nfe['finNFe'] ?? 1); $ide->indFinal = (int)($nfe['indFinal'] ?? 1); $ide->indPres = (int)($nfe['indPres'] ?? 1); $ide->procEmi = 0; $ide->verProc = '1.0'; $make->tagide($ide); // ---------------- EMITENTE $emitente = new \stdClass(); $emitente->CNPJ = preg_replace('/\D/','',$emit['CNPJ'] ?? ''); $emitente->xNome = $emit['xNome'] ?? ''; $emitente->xFant = $emit['xFant'] ?? ''; $emitente->IE = $emit['IE'] ?? ''; $emitente->CRT = $emit['CRT'] ?? 1; $make->tagemit($emitente); // endereco emitente $enderEmit = new \stdClass(); $enderEmit->xLgr = $emit['xLgr'] ?? ''; $enderEmit->nro = $emit['nro'] ?? ''; $enderEmit->xCpl = $emit['xCpl'] ?? ''; $enderEmit->xBairro = $emit['xBairro'] ?? ''; $enderEmit->cMun = $emit['cMun'] ?? ''; $enderEmit->xMun = $emit['xMun'] ?? ''; $enderEmit->UF = $emit['UF'] ?? ''; $enderEmit->CEP = preg_replace('/\D/','',$emit['CEP'] ?? ''); $enderEmit->cPais = $emit['cPais'] ?? 1058; $enderEmit->xPais = $emit['xPais'] ?? 'BRASIL'; $enderEmit->fone = preg_replace('/\D/','',$emit['fone'] ?? ''); $make->tagenderEmit($enderEmit); // ---------------- DESTINATÁRIO $dest = new \stdClass(); if ($destCliente) { $dest->CPF = preg_replace('/\D/','',$destCliente['CPF'] ?? $destCliente['cpf'] ?? ''); $dest->CNPJ = preg_replace('/\D/','',$destCliente['CNPJ'] ?? $destCliente['cnpj'] ?? ''); $dest->xNome = $destCliente['xNome'] ?? $destCliente['nome'] ?? ''; $dest->indIEDest = (strlen($dest->CPF) == 11) ? 9 : 1; } else { $dest->CPF = preg_replace('/\D/','',$nfe['dest_cpf'] ?? ''); $dest->CNPJ = preg_replace('/\D/','',$nfe['dest_cnpj'] ?? ''); $dest->xNome = $nfe['dest_nome'] ?? ($nfe['destinatario'] ?? ''); $dest->indIEDest = (strlen($dest->CPF) == 11) ? 9 : 1; } $make->tagdest($dest); // endereco dest $enderDest = new \stdClass(); if ($destCliente) { $enderDest->xLgr = $destCliente['xLgr'] ?? $destCliente['logradouro'] ?? ''; $enderDest->nro = $destCliente['nro'] ?? $destCliente['numero'] ?? ''; $enderDest->xBairro = $destCliente['xBairro'] ?? $destCliente['bairro'] ?? ''; $enderDest->cMun = $destCliente['cMun'] ?? $destCliente['codigo_municipio'] ?? ''; $enderDest->xMun = $destCliente['xMun'] ?? $destCliente['municipio'] ?? ''; $enderDest->UF = $destCliente['UF'] ?? $destCliente['uf'] ?? ''; $enderDest->CEP = preg_replace('/\D/','',$destCliente['CEP'] ?? $destCliente['cep'] ?? ''); } else { $enderDest->xLgr = $nfe['dest_logradouro'] ?? ''; $enderDest->nro = $nfe['dest_numero'] ?? ''; $enderDest->xBairro = $nfe['dest_bairro'] ?? ''; $enderDest->cMun = $nfe['dest_cod_municipio'] ?? ''; $enderDest->xMun = $nfe['dest_municipio'] ?? ''; $enderDest->UF = $nfe['dest_uf'] ?? ''; $enderDest->CEP = preg_replace('/\D/','',$nfe['dest_cep'] ?? ''); } $enderDest->cPais = 1058; $enderDest->xPais = 'BRASIL'; $make->tagenderDest($enderDest); // ---------------- ITENS (det / prod / imposto) $nItem = 1; $total_vProd = 0.00; $emitCRT = intval($emit['CRT'] ?? 1); // 1 = Simples Nacional, else regime normal foreach ($itens as $item) { $produto_id = $item['produto_id']; $xProd = $item['produto_nome'] ?? ''; $NCM = $item['NCM'] ?? $item['produto_NCM'] ?? ''; $CEST = $item['CEST'] ?? $item['produto_CEST'] ?? ''; $CFOP = $item['CFOP'] ?? $item['produto_CFOP'] ?? ($nfe['CFOP'] ?? '5102'); $qCom = floatval($item['qCom'] ?? 0.0000); $vUnCom = floatval($item['vUnCom'] ?? ($item['produto_preco_venda'] ?? 0.00)); $vProd = floatval($item['vProd'] ?? round($qCom * $vUnCom, 2)); $total_vProd += $vProd; // PROD $prod = new \stdClass(); $prod->item = $nItem; $prod->cProd = ''; // conforme XML assinado você pode deixar vazio $prod->cEAN = ''; $prod->xProd = $xProd; $prod->NCM = $NCM; $prod->CFOP = $CFOP; $prod->uCom = $item['produto_unidade'] ?? 'UN'; $prod->qCom = number_format($qCom, 4, '.', ''); $prod->vUnCom = number_format($vUnCom, 10, '.', ''); // manter precisão alta $prod->vProd = number_format($vProd, 2, '.', ''); $prod->cEANTrib = ''; $prod->uTrib = $prod->uCom; $prod->qTrib = $prod->qCom; $prod->vUnTrib = number_format(0, 10, '.', ''); // conforme seu xml assinado: 0.0000000000 $prod->indTot = 1; $make->tagprod($prod); // ---------- imposto: tagimposto (stdClass) obrigatório $stdImposto = new \stdClass(); $stdImposto->item = $nItem; $stdImposto->vTotTrib = number_format(0.00, 2, '.', ''); $make->tagimposto($stdImposto); // ---------- ICMS if ($emitCRT === 1 && method_exists($make, 'tagICMSSN')) { // Simples Nacional -> CSOSN $icmssn = new \stdClass(); $icmssn->item = $nItem; $icmssn->orig = $item['orig'] ?? 0; $icmssn->CSOSN = $item['csosn'] ?? $item['produto_csosn'] ?? '102'; $icmssn->pCredSN = '0.00'; $icmssn->vCredICMSSN = '0.00'; $make->tagICMSSN($icmssn); } else { // Regime normal -> ICMS00 if (method_exists($make, 'tagICMS00')) { $icms00 = new \stdClass(); $icms00->item = $nItem; $icms00->orig = $item['orig'] ?? 0; $icms00->pICMS = floatval($item['pICMS'] ?? 0.00); $icms00->vBC = number_format(0, 2, '.', ''); $icms00->vICMS = number_format(0, 2, '.', ''); $make->tagICMS00($icms00); } elseif (method_exists($make, 'tagICMS')) { $icms = new \stdClass(); $icms->item = $nItem; $icms->orig = $item['orig'] ?? 0; $icms->CST = $item['cst_icms'] ?? '00'; $icms->modBC = '3'; $icms->vBC = '0.00'; $icms->pICMS = floatval($item['pICMS'] ?? 0); $icms->vICMS = number_format(($vProd * ($icms->pICMS/100)), 2, '.', ''); $make->tagICMS($icms); } } // ---------- IPI (stdClass required by your NFePHP) if (method_exists($make, 'tagIPI')) { $ipi = new \stdClass(); $ipi->item = $nItem; $ipi->clEnq = ''; $ipi->CNPJProd = ''; $ipi->cSelo = ''; $ipi->qSelo = ''; $ipi->cEnq = '999'; $ipi->CST = $item['cst_ipi'] ?? $item['produto_cst_ipi'] ?? '99'; $ipi->vBC = '0.00'; $ipi->pIPI = '0.00'; $ipi->vIPI = '0.00'; $make->tagIPI($ipi); } // ---------- PIS (PISNT stdClass preferred) if (method_exists($make, 'tagPISNT')) { $pisnt = new \stdClass(); $pisnt->item = $nItem; $pisnt->CST = $item['cst_pis'] ?? $item['produto_cst_pis'] ?? '01'; $make->tagPISNT($pisnt); } elseif (method_exists($make, 'tagPIS')) { // fallback to parameter version $make->tagPIS($nItem, $item['cst_pis'] ?? $item['produto_cst_pis'] ?? '99', '0.00', '0.00', '0.00'); } // ---------- COFINS (COFINSNT stdClass preferred) if (method_exists($make, 'tagCOFINSNT')) { $cofinsnt = new \stdClass(); $cofinsnt->item = $nItem; $cofinsnt->CST = $item['cst_cofins'] ?? $item['produto_cst_cofins'] ?? '01'; $make->tagCOFINSNT($cofinsnt); } elseif (method_exists($make, 'tagCOFINS')) { $make->tagCOFINS($nItem, $item['cst_cofins'] ?? $item['produto_cst_cofins'] ?? '99', '0.00', '0.00', '0.00'); } $nItem++; } // ---------------- TOTAL (ICMSTot) $icmstot = new \stdClass(); $icmstot->vBC = '0.00'; $icmstot->vICMS = number_format($nfe['vICMS'] ?? 0, 2, '.', ''); $icmstot->vICMSDeson = '0.00'; $icmstot->vFCP = '0.00'; $icmstot->vBCST = '0.00'; $icmstot->vST = '0.00'; $icmstot->vFCPST = '0.00'; $icmstot->vFCPSTRet = '0.00'; $icmstot->vProd = number_format($total_vProd, 2, '.', ''); $icmstot->vFrete = '0.00'; $icmstot->vSeg = '0.00'; $icmstot->vDesc = '0.00'; $icmstot->vII = '0.00'; $icmstot->vIPI = '0.00'; $icmstot->vIPIDevol = '0.00'; $icmstot->vPIS = '0.00'; $icmstot->vCOFINS = '0.00'; $icmstot->vOutro = '0.00'; $icmstot->vNF = number_format($total_vProd, 2, '.', ''); $make->tagICMSTot($icmstot); // ---------------- TRANSPORTE $transp = new \stdClass(); $transp->modFrete = 9; $make->tagtransp($transp); // ---------------- COBRANCA (FAT / DUP) if (method_exists($make, 'tagfat')) { $nFat = $nfe['nNF'] ?? ''; $vOrig = number_format($total_vProd, 2, '.', ''); $vLiq = $vOrig; $make->tagfat($nFat, $vOrig, $vLiq); if (method_exists($make, 'tagdup')) { $dVenc = date('Y-m-d', strtotime('+30 days')); $make->tagdup('001', $dVenc, $vOrig); } } // ---------------- infAdic if (!empty($nfe['observacoes']) && method_exists($make, 'taginfAdic')) { $make->taginfAdic('', $nfe['observacoes']); } // ---------------- Monta/gera XML $xml = ''; if (method_exists($make, 'montaNFe')) { $xml = $make->montaNFe(); } elseif (method_exists($make, 'getXML')) { $xml = $make->getXML(); } else { die("❌ Não foi possível gerar XML: método de geração não encontrado."); } // Salvar sem assinatura $xmlDir = __DIR__ . '/xmls'; if (!is_dir($xmlDir)) mkdir($xmlDir, 0777, true); $arquivo = $xmlDir . "/{$chave}-sem-assinatura.xml"; if (file_put_contents($arquivo, $xml) === false) { die("❌ Erro ao salvar XML em $arquivo. Verifique permissões."); } // Sucesso header('Content-Type: text/html; charset=utf-8'); echo "✔ XML gerado com sucesso!<br>"; echo "🔑 Chave: <b>{$chave}</b><br>"; echo "📄 Arquivo: <a href='xmls/{$chave}-sem-assinatura.xml'>Baixar XML</a><br>"; echo "<hr><h3>Preview (2KB):</h3><pre>" . htmlspecialchars(substr($xml,0,2048)) . "</pre>"; os erros abaixo.. Fatal error: Uncaught TypeError: NFePHP\NFe\Make::tagPIS(): Argument #1 ($std) must be of type stdClass, int given, called in C:\xampp\htdocs\madeireira\views\gera_xml.php on line 338 and defined in C:\xampp\htdocs\madeireira\vendor\nfephp-org\sped-nfe\src\Traits\TraitTagDetPIS.php:27 Stack trace: #0 C:\xampp\htdocs\madeireira\views\gera_xml.php(338): NFePHP\NFe\Make->tagPIS(1, '99', '0.00', '0.00', '0.00') #1 C:\xampp\htdocs\madeireira\index.php(194): require('C:\\xampp\\htdocs...') #2 {main} thrown in C:\xampp\htdocs\madeireira\vendor\nfephp-org\sped-nfe\src\Traits\TraitTagDetPIS.php on line 27 uso o xampp..
-
poorabi gupta se registrou na comunidade
-
Urbanrise The World of Joy Miyapur se registrou na comunidade
-
Laura Mix se registrou na comunidade
- Última semana
-
sarah jamson se registrou na comunidade
-
Raam International se registrou na comunidade
-
Urban Closet se registrou na comunidade
-
Shivansh Shukla se registrou na comunidade
-
[AJUDA] Como gerar um texto com opções em VBA, usando UseForm no Excel?
pergunta respondeu ao BodeJNR18 de qwwq qwwqqw em Visual Basic
Olá! Tudo bem? O que você quer fazer é totalmente possível via VBA, e na verdade acaba ficando até mais flexível que o PROCV no Excel. A ideia é simples: quando o usuário escolher o Produto e a Embalagem no UserForm e clicar em Gerar, o VBA deve percorrer a planilha, filtrar as linhas que atendem aos critérios e somar os valores. A lógica básica funciona assim: Ler o valor selecionado nos ComboBoxes (por exemplo, cmbProduto e cmbEmbalagem). Percorrer todas as linhas da planilha onde estão os dados. Verificar se o Produto e a Embalagem da linha coincidem com a seleção. Se sim, acumular na variável de soma. Retornar o resultado no seu TextBox ou Label no UserForm. Aqui vai um exemplo simples para te ajudar a estruturar: Private Sub btnGerar_Click() Dim ws As Worksheet Dim ultimaLinha As Long Dim i As Long Dim prod As String Dim emb As String Dim soma As Double Set ws = ThisWorkbook.Sheets("Dados") ' nome da aba com os dados ultimaLinha = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row prod = cmbProduto.Value emb = cmbEmbalagem.Value soma = 0 ' Percorre todos os dados For i = 2 To ultimaLinha If ws.Cells(i, 1).Value = prod And ws.Cells(i, 2).Value = emb Then soma = soma + ws.Cells(i, 3).Value ' supondo que a soma está na coluna C End If Next i txtResultado.Value = soma End Sub Basta ajustar as colunas conforme a estrutura da sua planilha. Se quiser, pode mandar a imagem do UserForm e alguns exemplos de dados — aí posso adaptar o código exatamente ao que você precisa. -
Boa tarde! Pelo que entendi, você precisa agrupar os dados e somar os valores correspondentes usando VBA, transformando uma lista “massiva” em uma tabela resumida, semelhante ao exemplo da imagem. Uma abordagem simples e eficiente é usar um Dictionary para ir acumulando os valores por cada chave (por exemplo, por categoria, código, ou o campo que estiver na primeira coluna). Depois, basta escrever o resultado consolidado numa nova área da planilha. Aqui vai um exemplo de código VBA que costuma resolver exatamente esse tipo de problema: Sub AgruparESomar() Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Dados") ' ajustar nome da folha Dim ultimaLinha As Long ultimaLinha = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Dim i As Long Dim chave As String Dim valor As Double ' Ler dados da lista original For i = 2 To ultimaLinha ' assumindo cabeçalho na linha 1 chave = ws.Cells(i, 1).Value valor = ws.Cells(i, 2).Value If dict.exists(chave) Then dict(chave) = dict(chave) + valor Else dict.Add chave, valor End If Next i ' Escrever resultado Dim linhaSaida As Long linhaSaida = 2 ' onde começar a saída Dim k As Variant For Each k In dict.Keys ws.Cells(linhaSaida, 4).Value = k ' coluna D = chave ws.Cells(linhaSaida, 5).Value = dict(k) ' coluna E = soma linhaSaida = linhaSaida + 1 Next k MsgBox "Processo concluído!" End Sub Como funciona: Lê cada linha da tabela original. Usa o Dictionary para somar valores repetidos. Escreve o resultado agrupado numa nova parte da planilha. Caso precise adaptar para mais colunas, somar vários campos ou usar critérios diferentes, posso ajustar o código conforme a sua estrutura de dados. Se puder, envie os nomes das colunas ou um exemplo textual da tabela!
-
Hoje eu precisei criar três botões dentro de um <form>. Utilizei três <button>, só que os dois últimos botões não funcionaram da maneira que esperava, eles estavam submetendo o formulário, quando eu não queria isso. Assim, eu decidi mudar os últimos botões para um link, eles faziam o que eu esperava, mas tudo ficou desalinhado. O navegador desenha o <button> de um jeito e o <a> de outro. O Copilot sugeriu eu usar a classe inline-block dentro do marcador <a> e deu certo! <script src="https://cdn.tailwindcss.com"></script> <form method=post action="?rota=Entrada_modalModificado"> <button type="submit" class="w-[100px] border border-4 rounded-lg px-2"> Atualizar </button> <a class="w-[100px] border border-4 rounded-lg px-2 inline-block text-center" href='?rota=Entrada_excluir_<?=$e->id?>'> Excluir </a> <a class="w-[100px] border border-4 rounded-lg px-2 inline-block text-center" href='?rota=Entrada_entraProduto'> Cancelar </a> </form>
- Mais Cedo
-
Muhammad Arsalan Butt alterou sua foto pessoal
-
Dr Shoaib Aslam alterou sua foto pessoal
-
Eman Gynae alterou sua foto pessoal
-
Dr Syed Hassan Ahmed alterou sua foto pessoal
-
Dr Faizan Ahmad alterou sua foto pessoal
-
mahwish majeed alterou sua foto pessoal
-
man poke começou a seguir Solução Para O Erro De Permissões !
-
William Richard alterou sua foto pessoal
-
Piter Freide começou a seguir Avaliem Meu Site!
-
Amigos!!!
-
BOYSO x começou a seguir Navegar em células visíveis em uma tabela filtrada utilizando VBA
-
Busca cep e endereço para adicionar no form.
pergunta respondeu ao Cleimar Lemes de Cleimar Lemes em Tutoriais & Dicas - PHP
-
Busca cep e endereço para adicionar no form.
pergunta respondeu ao Cleimar Lemes de Frank K Hosaka em Tutoriais & Dicas - PHP
Muito bom! Fiz o teste por aqui e deu certo, parabéns! -
Hardik Astroera alterou sua foto pessoal
-
Cleimar Lemes começou a seguir Busca cep e endereço para adicionar no form.
-
Busca cep e endereço para adicionar no form.
uma questão postou Cleimar Lemes Tutoriais & Dicas - PHP
<!-- Etapa 2 --> <div class="etapa hidden"> <label class="block mb-2">CEP: <input type="text" id="cep" name="cep" value="<?= htmlspecialchars($cliente['cep'] ?? '') ?>" class="mt-1 block w-full border-gray-300 rounded-md" required> </label> <label class="block mb-2">Endereço: <input type="text" id="endereco" name="endereco" value="<?= htmlspecialchars($cliente['endereco'] ?? '') ?>" class="mt-1 block w-full border-gray-300 rounded-md" required> </label> <label class="block mb-2">Setor/Bairro: <input type="text" id="setor" name="setor" value="<?= htmlspecialchars($cliente['setor'] ?? '') ?>" class="mt-1 block w-full border-gray-300 rounded-md" required> </label> <label class="block mb-2">Cidade: <input type="text" id="cidade" name="cidade" value="<?= htmlspecialchars($cliente['cidade'] ?? '') ?>" class="mt-1 block w-full border-gray-300 rounded-md" required> </label> <label class="block mb-2">Estado: <input type="text" id="estado" name="estado" value="<?= htmlspecialchars($cliente['estado'] ?? '') ?>" class="mt-1 block w-full border-gray-300 rounded-md" required> </label> <!-- Campo oculto para código IBGE, se quiser armazenar --> <input type="hidden" id="ibge" name="ibge"> </div> <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script> <script> $(document).ready(function() { function limpaFormularioCep() { $("#endereco").val(""); $("#setor").val(""); $("#cidade").val(""); $("#estado").val(""); $("#ibge").val(""); } $("#cep").blur(function() { var cep = $(this).val().replace(/\D/g, ''); if (cep !== "") { var validacep = /^[0-9]{8}$/; if (validacep.test(cep)) { $("#endereco").val("..."); $("#setor").val("..."); $("#cidade").val("..."); $("#estado").val("..."); $("#ibge").val("..."); $.getJSON("https://viacep.com.br/ws/" + cep + "/json/?callback=?", function(dados) { if (!("erro" in dados)) { $("#endereco").val(dados.logradouro); $("#setor").val(dados.bairro); $("#cidade").val(dados.localidade); $("#estado").val(dados.uf); $("#ibge").val(dados.ibge); } else { limpaFormularioCep(); alert("CEP não encontrado."); } }); } else { limpaFormularioCep(); alert("Formato de CEP inválido."); } } else { limpaFormularioCep(); } }); }); </script> segue o codigo da parte do formulario de endereço e abaixo o script de busca.. o cep deve ser digitado sem - ou . assim: 75402035 -
Cleimar Lemes começou a seguir Tutoriais & Dicas - PHP
-
(Resolvido) Impressora Térmica não imprime carácter especial
pergunta respondeu ao robinhocne de Jose Santos em Delphi, Kylix
Cara, estamos em 2025 e ainda assim o seu foi o melhor comentário! Por mais pessoas assim!! Ainda ajuda muito a sua solução até hoje! -
Depois de muito tempo consegui encontrar com o Copilot a sintaxe para pegar o valor do <input> no Livewire: <input value="{{dec($histped[$indicador]['qt'])}}" wire:change="corrigirQt({{$indicador}},$event.target.value)" size="1" class="ml-3 text-right bg-transparent py-0 text-gray-500"> A maneira mais fácil de pegar o valor do input é o wire:model, onde o Livewire pode fazer uma conexão direita entre uma variável pública (tipo $histped) e o <input>, o meu problema é que usei o $histped para conectar diretamente no MySQL. O problema é que o MySQL e também o PHP usam o ponto como separador de decimal, mas o usuário no Brasil usa a vírgula. Logo não dá para usar o wire:model nesse caso. Mas,se não dá para usar o wire:model, como pegar o valor do input? Com a ajuda do Copilot, hoje conheci o parâmetro $event.target.value.
-
Travel-Pa alterou sua foto pessoal
-
LeoTaps Backlinks alterou sua foto pessoal
-
Testei hoje o seguinte código no arquivo index.php <script src="https:cdn.tailwindcss.com"></script> <div class="text-red-500">Olá mundo!</div> e deu certo, mas ontem o meu programa Orçamento apareceu sem nenhum estilo. O Copilot sugeriu mudar a conexão para <script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script> O correto é criar o arquivo output.css mas eu não consegui, o melhor para mim foi pedir para o PHP conectar no servidor para buscar o estilo do Tailwind. O DevTools do Chrome reclama que não é para usar a conexão no modo produção, mas como a conexão funciona do jeito que eu espero, eu desconsidero o alerta.
-
Sub Query
pergunta respondeu ao Amauri de barros Alves de Amauri de barros Alves em Tutoriais & Dicas - SQL Server
R E S O L V I D O ******************************************************************* Eu coloquei As teste ao final da query e ele funcionou, o problema é que estava funcionando no Firebird sem precisas informar... o final da queri fucou assim: ... co.STATUS='F' and ci.fk_produto=1 ) As Teste group by CODIGO ORDER BY CODIGO ... Obrigadio -
Amauri de barros Alves começou a seguir Sub Query
-
Boa tarde, Eu estou analizando uma query que esta em um adoquery do Delphi e eletem uma query que no sql server não esta funcionando, e eu analizei e vi que ela não tem um operador para a subquery alguém já viu isto a query é esta aqui ******************************************************************************************** SELECT CODIGO, coalesce(sum(QTDRENTRADA-QTDRSAIDA),0) QTDR FROM( select ci.fk_produto as codigo, coalesce(ci.qtd,0) qtdrentrada, 0 as qtdrsaida from compra_itens ci left join produto pro on pro.codigo=ci.fk_produto left join compra co on co.id=ci.fk_compra where co.STATUS='F' and ci.fk_produto=1 ) group by 1 ORDER BY CODIGO ******************************************************************************************* Ele me retorna este erro: Mensagem 156, Nível 15, Estado 1, Linha 9 Sintaxe incorreta próxima à palavra-chave 'group'. Sei que voces não estão aqui pra me ensinar a gerenciar o banco mas não consigo ter nem ideia por onde começar, até porque no delphi acontece o seguinte: No firebird ele da o mesmo erro quando eu pego esta query e jogo na console, mas no fdquery que é o componente que le o banco firebird ele valida a fdquery. Agora na adoquery que é componente que le o sqlserver no delphi ele da o mesmo erro do enterprise manager alguém consegue me ajudar nisso? apenas para complementar o debugador do enterprise manager me retorna este erro
-
Criar uma coluna virtual na consulta
uma questão postou Jocimar Pequeno Tutoriais & Dicas - SQL Server
Saudações! Tenho uma tabela com 5 colunas: ANO_MES VALOR, JUROS. DESCONTOS ESTADO Onde o estado “P” é para quem pagou. Não tem a coluna valor pago que é o VALOR + JUROS – DESCONTOS O que preciso: Apresentar a soma de todas a colunas agrupadas do ANO_MES e acrescentar a coluna VLPAGO, também agrupada por ANO_MES. Fiz isso aqui, mas assim que completa, dá um erro: declare @vl_pago decimal(20,2); set @vl_pago = (select ANO_MES, (SUM(VALOR + JUROS - DESCONTOS)) as pagamento from arrecadacoes where ESTADO = 'P' and idcobranca = 1 and IDLAYOUT = 1 and ANO_MES > '202412' GROUP BY ANO_MES); SELECT ANO_MES AS ANO_MES, COUNT(ANO_MES) AS QTD, FORMAT(SUM(VALOR), 'N2') AS VLREC, FORMAT(SUM(JUROS), 'N2') AS VLJUR, FORMAT(SUM(DESCONTOS), 'N2') AS VLDES, @vl_pago AS VLPAG FROM ARRECADACOES WHERE ANO_MES>'202412' AND IDCOBRANCA = '1' AND IDLAYOUT = 1 GROUP BY ANO_MES ORDER BY ANO_MES, QTD -
It seems like you've run into a common issue when trying to manage form closure events in Visual Basic. Your approach to disable Alt + F4 using the `Form_QueryUnload` event is logical, but it's crucial to manage the `ReadyToClose
-
I can relate to the confusion around the 'while' function when I was new to programming as well. It's a loop that continues as long as a specified condition is true, which can be incredibly useful for tasks that require repetition until a certain condition is
-
À medida que abrimos as abas (documentos) no CorelDRAW 2021, é a qntd de arquivos que ele mostra ao clicarmos no ícone do corel na barra de tarefas do Windows 11... Isso é muito irritante, pois seria melhor a janela vir para frente e aí escolheríamos para qual das abas ir. Se alguém souber alguma configuração que tire isso, por favor, entre cm contato. Muito obrigado, antecipadamente.
-
Preciso criar um site de controle de escala.
pergunta respondeu ao Diogo Cabral Santos de Cleimar Lemes em Tutoriais & Dicas - PHP
OLA.. vou ver se consigo fazer alguma coisa no estilo.. não sei se ainda precisa mas vamos. la.. -
envio de formulário de cadastro com redirecionamento
pergunta respondeu ao Siames de kyeh mvrs em Tutoriais & Dicas - PHP
Que legal ver essa discussão sobre formulários PHP! Jogos como quebra-cabeças com dominó e jornada de escolhas morais também dependem de lógica e escolhas. Vocês já pensaram em usar essa lógica de programação para criar mecânicas de jogo? -
Oi pessoal, Estou testando a ideia de colocar um jogo de Mahjong em HTML5 direto em uma página web, usando CSS + Flexbox para deixar o layout simples e responsivo. A estrutura é basicamente uma grade de <div> onde cada tile é um item flex. Uso flex-wrap: wrap para que as peças se reorganizem automaticamente quando a janela muda de tamanho. Também centralizo tudo com justify-content: center e defino tamanhos proporcionais usando vw e vh. O desafio é manter o layout leve mesmo com muitas sombras e animações. Em alguns navegadores, o Flexbox pode ficar lento se houver muitos elementos. Outro ponto é ajustar o espaçamento — nem muito apertado nem muito solto — em diferentes resoluções. Alguém aqui já tentou algo parecido? Usaram só Flexbox ou combinaram com CSS Grid? Estou curioso pra saber qual abordagem funciona melhor em jogos com muitas peças.
-
Esse é o rascunho que pretendo usar no Condomínio do Cleimar Lemes, ele foi totalmente montado pelo Copilot, pedi para ele considerar a saída do relatório dentro de um celular no modo retrato (eu ainda não verifiquei se isso tudo cabe na tela do celular): <?php // Vetor de movimentos: formato 'Dia H:i:s' => valor (1 = saída, 0 = entrada) $movimentos = [ '2025-10-07 06:15:00' => 1, '2025-10-07 06:30:00' => 0, '2025-10-07 07:15:00' => 1, '2025-10-07 12:15:00' => 0, '2025-10-07 12:45:00' => 1, '2025-10-07 18:15:00' => 0, ]; // Emojis como separadores $emojis = [ 0 => '🔽', // Entrada 1 => '🔺', // Saída ]; // Construindo a linha $linha = ''; foreach ($movimentos as $dataHora => $tipo) { $horaMinuto = date('H:i', strtotime($dataHora)); $linha .= "{$emojis[$tipo]} $horaMinuto "; } // Exibir echo trim($linha); ?> Resultado: 🔺 06:15 🔽 06:30 🔺 07:15 🔽 12:15 🔺 12:45 🔽 18:15
-
PHP Obsoleto
pergunta respondeu ao Conan.Destemido de Christine Barber em Repositório de Scripts - PHP
Esse não é um arquivo do seu site, mas sim um arquivo padrão do servidor usado para exibir listagens de diretório (autoindex) -
Fonte Delphi SIGEP WEB Correios
tópico respondeu ao Marcos Fernandes de Alessandro Oliveira em Classificados & Serviços
Bom dia. Você comercializa o fontes do SIGEP Web em Delphi? Qual o valor? -
Como criar um relógio artificial no PHP? (Resolvido)
pergunta respondeu ao Frank K Hosaka de Cleimar Lemes em PHP
top.. parabens.. visto que hoje em dia o trem ta evoluindo pra reconhecimento facial pra resgistrar as entradas e saida ne.. mas o objetivo e estudar e gerar alternativas.. -
O Cleimar criou a tabela movimentações assim: id, idVisitante, nomeVisitante, placa,dataEntrada,horaEntrada,dataSaída,horaSaída,Acompanhantes. Eu fiz uma adaptação, usando o principio da atomicidade, e a tabela ficou assim: id, idPessoa, direcao, dataHora. Cada tabela tem que representar uma única tarefa, no caso de movimentação, alguém entra ou sai num determinado momento. O Cleimar fez um Controle de Entrada e Controle de Saída, eu já ajuntei tudo, e eu fiz o Movimento com dois botões, mais ou menos assim: <form><select /><input type="submit" name="entrada" value="registrar entrada" /><input type="submit" name="saida" value="registrar saída" /></form> Isso vai funcionar? O Copilot disse que sim, o HTML vai informar ao PHP qual o <input type="submit" /> que o usuário apertou. Eu já cadastrei o "João", ele é o único morador do condomínio. Não tem ninguém na portaria, logo o único que vai registrar a entrada e saída é ele mesmo. Mas para fazer o teste, eu precisava de um relógio artificial. Agora é 29/09/25 05:28, e para mudar isso eu preciso esperar 60 segundos. Eu precisava de um relógio mais rápido. ---- com a ajuda do Copilot e vários testes consegui isso: <?php session_start(); if (!isset($_SESSION['relogio'])) { $_SESSION['relogio'] = date('Y-m-d\TH:i:s'); } if (isset($_POST['entrada'])) { $relogioFormatado = date('Y-m-d\TH:i:s', strtotime($_POST['relogio_iso'])); $_SESSION['registros'][] = "🟢 Entrada " . date('d/m/y H:i',strtotime($_POST['relogio_iso'])); $_SESSION['relogio'] = $relogioFormatado; } if (isset($_POST['saida'])) { $relogioFormatado = date('Y-m-d\TH:i:s', strtotime($_POST['relogio_iso'])); $_SESSION['registros'][] = "🔴 Saída " . date('d/m/y H:i',strtotime($_POST['relogio_iso'])); $_SESSION['relogio'] = $relogioFormatado; } ?> <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Registro de Movimentações</title> <script src="https://cdn.tailwindcss.com"></script> </head> <body class="bg-gray-100 flex items-center justify-center min-h-screen"> <form method="post" class="bg-white p-8 rounded-lg shadow-md space-y-4 w-full max-w-md"> <h2 class="text-2xl font-bold text-gray-800 text-center">🕒 Registro de Movimentações</h2> <input type="submit" name="entrada" value="Registrar Entrada" class="w-full bg-green-500 hover:bg-green-600 text-white font-semibold py-2 px-4 rounded transition"> <input type="submit" name="saida" value="Registrar Saída" class="w-full bg-red-500 hover:bg-red-600 text-white font-semibold py-2 px-4 rounded transition"> <div class="flex flex-col"> <label for="relogio" class="text-gray-700 font-medium mb-1">Horário Atual</label> <input name="relogio" id="relogio" readonly class="bg-gray-200 text-gray-800 font-mono px-4 py-2 rounded border border-gray-300 cursor-pointer hover:bg-gray-300 transition"> <small class="text-gray-500 mt-1">Clique no campo para avançar 2 horas</small> <input type="hidden" name="relogio_iso" id="relogio_iso"> </div> <?php if (!empty($_SESSION['registros'])): ?> <div class="mt-4 bg-gray-50 p-4 rounded border border-gray-200"> <h3 class="text-lg font-semibold text-gray-700 mb-2">📋 Registros:</h3> <ul class="list-disc list-inside text-gray-600 space-y-1"> <?php foreach ($_SESSION['registros'] as $registro): ?> <li><?= htmlspecialchars($registro) ?></li> <?php endforeach; ?> </ul> </div> <?php endif; ?> </form> <script> let relogioInput = document.getElementById('relogio'); let dataAtual = new Date("<?= $_SESSION['relogio'] ?>"); function atualizarRelogio() { relogioInput.value = dataAtual.toLocaleString('pt-BR'); document.getElementById('relogio_iso').value = dataAtual.toISOString().slice(0, 19); } setInterval(() => { dataAtual.setMinutes(dataAtual.getMinutes() + 30); atualizarRelogio(); }, 1000); relogioInput.addEventListener('click', () => { dataAtual.setHours(dataAtual.getHours() + 2); atualizarRelogio(); }); atualizarRelogio(); </script> </body> </html>
-
Estatísticas dos Fóruns
-
Tópicos152,5k
-
Posts652,4k
-