Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Pegar o último número do documento e adicionar mais um Bom dia... Tenho o seguinte cenário: Em um formulário de coleta, a numeração não obedece a sequência de auto numeração com base na id, há um campo (numero_coleta) que deve ser preenchido com o valor da última numeração + 1, ou seja, preciso no botão onSave o valor do último número de coleta, somar +1 e gravar no campo numero da coleta. Alguém poderia me ajudar a fazer esse cód...
RF
Pegar o último número do documento e adicionar mais um  
Bom dia...

Tenho o seguinte cenário: Em um formulário de coleta, a numeração não obedece a sequência de auto numeração com base na id, há um campo (numero_coleta) que deve ser preenchido com o valor da última numeração + 1, ou seja, preciso no botão onSave o valor do último número de coleta, somar +1 e gravar no campo numero da coleta.
Alguém poderia me ajudar a fazer esse código, ler o último registro e somar +1.

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (5)


RL

Bom dia Robson,

Você precisa fazer isso no Adianti ou pode fazer pelo banco através de um gatilho?
RF

Olá Rod Limão!

Na verdade é dentro do código, não pelo banco, a ideia é ler o último número da solicitação e depois incrementar +1, estou fazendo isso porque a solicitação tem também o campo série, sendo assim, na mudança da série a numeração volta para 1, mas não quero mexer na ID, ou seja, ela (a id) sempre segue a sequência.

Consegui explicar melhor
RL

Você já tem uma tabela de controle: numero + serie? Bom,... eu não vej outra maneira a não ser fazer uma pesquisa no banco.

  1. <?php
  2. TTransaction::open("base");
  3. $sql "SELECT IFNULL(numeracao,0) FROM tabela WHERE serie = ? ORDER BY numeracao DESC"// MySQL
  4. // $sql = "SELECT ISNULL(numeracao,0) FROM tabela WHERE serie = ? ORDER BY numeraacao DESC"; // MSSQL
  5. $conn TTransaction::get();
  6. $stmt $conn->prepare($sql);
  7. $stmt->bindParam(1NSPDO::PARAM_INT); // NS = número da série
  8. $stmt->execute();
  9. $numeracao $stmt->fecthColumn();
  10. TTransaction::close();
  11. // $numeracao vai conter o último valor ou zero se não for encontrada a serie
  12. $numeracao++;
  13. ?>


Espero poder ter ajudado.
RF

Boa tarde Rod Limão, perfeito, muito obrigado, vou pegar essa ideia e o código que você colocou (como base).
Depois de pronto posto o código aqui, e se tiver mais alguma duvida eu aviso... Obrigado!!!
RF

Bom dia, Rod Limão.

Obrigado pela atenção, e com base no que conversamos por aqui, consegui fazer o que desejava, segue abaixo o código.
Coloquei no botão onSave, no começo do código, acho que pode ajudar outras pessoas.
Só me desculpem pelo código não ser muito bonito, eu sou iniciante em PHP e no Adianti.



try
{
// Pega a informação dos campos
$data = $this->form->getData();
// Pega a informação do campo Status
$grava = $data->status;
// Pega a informação do campo serie
$nS = $data->serie_coleta;
// Se já estiver Lançado ou cancelado não deixa gravar

if ($grava == 2) { //"Emitido"
new TMessage('info', "Não se pode alterar uma Solicitação já Emitida, um documento em branco será apresentada para digitação.");
// Limpa os campos para digitaão de nova coleta
$this->form->clear(true);
TSession::setValue('nfe_solicitacao_solicitacao_items', null);
$this->onReload();

} else if ($grava == 3) { //"Cancelado"
new TMessage('info', "Solicitação já Cancelada, um documento em branco será apresentada para digitação.");
// Limpa os campos para digitaão de nova coleta
$this->form->clear(true);
TSession::setValue('nfe_solicitacao_solicitacao_items', null);
$this->onReload();

} else { //"Lançado"

try
{
if ($grava != 1) {
TTransaction::open('transpalog');
$num = 0;
$conn = TTransaction::get();
$sql = "SELECT numero_coleta FROM solicitacao WHERE serie_coleta = '".$nS."' ORDER BY numero_coleta DESC LIMIT 1";
$result = $conn->query($sql);
$objects = $result->fetchAll(PDO::FETCH_CLASS, "stdClass");

if($objects)
{
foreach($objects as $object)
{
$num = $object->numero_coleta;
$num++;
$object = new stdClass();
$object->numero_coleta = $num;
TForm::sendData(self::$formName, $object);
}
}
TTransaction::close();
}
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
//new TMessage('error', ('Preencha corretamente a solicitação para salvar!'));
}