![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 25.03.2014 Ostrzeżenie: (0%)
|
Witam,
Mam taki problem z nadawaniem nr spraw od początku wraz z rozpoczęciem kolejnego roku. Zaczął się nowy rok i chciałbym aby moja składnia nadawała numery od 1, a nie od ostatniego znajdującego się w bazie. Funkcja wygląda tak: Kod public function nadajSprawy(array $bifs) { $rok = date('Y'); $da = $this->getDefaultAdapter(); try { // rozpocznij transakcję $da->beginTransaction(); // zablokuj bazę (read only) $da->exec("lock table sprawy in share mode;"); // trzeba wziąść listę tych bez sprawy, posortowane według bif_id $bezSpraw = $this->select() ->where("sprawa = ?", "") ->where(new Zend_Db_Expr("date_part('year', rekord_data) = " . $rok)) ->order("bif_id ASC"); $lista = $this->fetchAll($bezSpraw); //echo "Ilość pozycji bez spraw w tym roku: ".count($lista)."<br>"; // pobrać ostatnią, najwyższą wartość sprawy $ostatnia = $this->select() //->columns(array("sprawa")) ->where("sygnatura <> ?", "") ->where(new Zend_Db_Expr("date_part('year', rekord_data) = " . $rok)) ->order("bif_id DESC") ->limit("1"); $ostatniWiersz = $this->fetchRow($ostatnia); $lp = 0; $indexOsobowy = 0; //echo "Rok: " . $rok . "<br>"; if ($ostatniWiersz !== NULL) { //echo "Ostatnia sprawa: " . $ostatniWiersz->sprawa . "<br>"; // wyizolować części ostatniej sprawy $parts = explode(".", $ostatniWiersz->sprawa); // odnaleźć indeks części osobowe w tabeli $indexOsobowy = array_search($parts[5], $this->osobowy); $lp = $parts[4]; } //echo "ostatni LP: " . $lp . "<br>"; //echo "ostatni osobowy: " . $this->osobowy[$indexOsobowy] . "<br>"; // ustawic sprawe, zwiększająć wartość o jeden i wykorzytując wartość osobowa o wskazanym indeksie foreach ($lista as $row) { /** @var Zend_Db_Table_Row $row */ $lp++; // jeśli wartość % 100 = 1, zwiększyć indeks osobowy o 1, chyba ze max osiagniety, wówczas licz od 0 if ($lp % 100 == 1) { $indexOsobowy++; if ($indexOsobowy >= sizeof($this->osobowy)) { $indexOsobowy = 0; } } // ustaw wymagane wartosci pol wiersza i zapisz $row->lp = $lp; $row->osobowy_index = $indexOsobowy; //echo "BIF_ID: ".$row->bif_id."; LP: ".$row->lp. "; Sprawa ".$row->sprawa ."<br>"; $row->save(); } // commit $da->commit(); Z góry dziękuję za pomoc. Ten post edytował chrisstim 25.03.2014, 11:17:16 |
|
|
|
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
1) Uzywaj BBCODE dla kodu ktory wstawiasz !
2) Nie chce mi sie analizowac Twojego kodu bo to sieczka jakas i to bez bbcode na dodatek O to prosty algorytym: pobierasz najwyzszy numer dla danego roku. Jak nie ma, to ustawiasz na 1. Jak jest, to ustawiasz na numer o jeden wiekszy. Proste. ps: najwyzszy numer uzyskasz dzieki MAX() w mysql. |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 25.03.2014 Ostrzeżenie: (0%)
|
Przepraszam, za brak bbcode i sieczke "nie" mojego kodu. Chodzi mi tylko o to gdzie by można było tam wcisnąć coś co by startowało od 1 z nadawaniem nr spraw.
|
|
|
|
Post
#4
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Dla kodu php uzywa sie BBCODE PHP a nie CODE.
Trzeba bylo od razu pisać, że to nie Twoj kod i ze sie w ogole na tym nie znasz. W takim wypadku nie podawalbym algorytmu, bo i tak nic z nim nie zrobisz. |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 0 Dołączył: 3.03.2012 Ostrzeżenie: (0%)
|
Też się zastanawiałem ostatnio nad zmianą nr dokumentów przy zmianie roku myślę że najprostszy i skuteczny sposób jest taki
Kod <? // Pobieram z bazy MySQL ostatni zapisany rok który aktualizuje się przy każdym logowaniu do systemu $ostatni_rok = '2013'; // 2013 - rok pobrany z bazy wpisany przy ostatnim logowaniu // Pobieram aktualny rok $aktualny_rok = date("Y"); // Robię porównanie if ($ostatni_rok =! $aktualny_rok) { // Jeżeli wynik jest różny wpisujesz Update który zresetuje nr dokumentu na np 1 } // jeżeli rok jest taki sam resetowanie nie zadziała i skrypt zacznie wykonywać dalszą część kodu ?> Co o tym sądzicie ? |
|
|
|
![]() ![]() |
|
Aktualny czas: 20.12.2025 - 18:22 |