Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z nadawaniem nr spraw
chrisstim
post
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
Go to the top of the page
+Quote Post
nospor
post
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.
Go to the top of the page
+Quote Post
chrisstim
post
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.
Go to the top of the page
+Quote Post
nospor
post
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.
Go to the top of the page
+Quote Post
Lacki2006
post
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 ?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.12.2025 - 18:22