Перейти к содержимому


Автоматическая нумерация в зависимости от года


Сообщений в теме: 6

#1 Илья

    Активный участник

  • Пользователи
  • PipPipPip
  • 173 сообщений

Отправлено 19 Август 2015 - 21:29

Здравствуйте!Уже третий день соображаю и курю форум, но не смог найти решения.Хочу сделать нумерацию исходящей корреспонденции с привязкой к году и подстановкой префикса/постфикса, т.е., чтоб номер письма имел вид "И-12-2015", например.Взяв код, приведённый andibrag (огромное ему спасибо за его посты, масса полезной информации и примеров) немного изменил его под свои нужды, всё в порядке, работает, если письмо вносится в 2015 году, ему присваивается оди номер, если в 2016 - то другой.На всякий пожарный, покажу код:

$datefrom = date("Y", strtotime($line['Дата (от)']));
//Скрипт запускать только на сохранение записи, тк. этот код только проверяет заполненность номера, и если поле заполнено - не срабатывает
if (!$line['Номер']) {
    $sqlQuery = "SELECT max(`f11250`) AS maxNUM FROM `".DATA_TABLE."730` WHERE (`status`'2' AND YEAR(`f8630`)= $datefrom)";
    $result = mysql_query($sqlQuery) or user_error(mysql_error() . "" . $sqlQuery . "", E_USER_ERROR);
    $row = mysql_fetch_assoc($result);
    $line['Номер'] = $row['maxNUM'] + 1;
}

По сути, просто заменено сравнение года с текущим, вместо этого берется значение года, указанное в строке "Дата (от)".С префиксами и постфиксами я представляю как быть, тут проблем не должно возникнуть.Заткнулся я вот на чем: в случае смены даты, данный код не сработает, т.к. поле "Номер" уже заполнено.Если, допустим, отключить условие if (!$line['Номер']), и сделать вычисление только при изменении поля, то всё будет более-менее сносно, можно сделать сравнение с текущим максимальным значением номера, и если оно не изменилось - то не изменять значение номер.Однако, если произойдет изменение года, то sqlQuery отработает найдет максимум не по вновь введенному году поля "Дата (от)", а по тому значению поля, которое было до него, т.к. запись в таблицу ещё не сделана. Я догадываюсь, что надо сначала записать новое значение даты, но как это сделать правильно - не представляю, и поэтому прошу помощи.

#2 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 19 Август 2015 - 23:31

Честно сказать, прочитав ваше сообщение - я нечего не понял. Более-менее понятно, что вы делаете. Но что вы хотите получить и при каких условиях - увы.

#3 Илья

    Активный участник

  • Пользователи
  • PipPipPip
  • 173 сообщений

Отправлено 20 Август 2015 - 07:53

wondertalik, прошу прощения, толком не могу отформатировать сообщения, что-то с форумом творится. Даже на Андроиде. Исправлено

Попробую написать по-другому.
Нужна нумерация исходящей корреспонденции в зависимости от года.
Однако, при этом нужна защита от обезьян с гранатами - при изменении даты исходящего письма (ну мало ли, опечатались, решили сменить дату), нужно сделать так, чтобы вычисление вновь срабатывало и присваивало номер письму уже с учетом новой даты исходящего.

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 20 Август 2015 - 09:55

Цитата

Однако, если произойдет изменение года, то sqlQuery отработает найдет максимум не по вновь введенному году поля "Дата (от)", а по тому значению поля, которое было до него, т.к. запись в таблицу ещё не сделана.

Не понял данной фразы, честно говоря. Год в ваш запрос подставляется из поля "Дата (от)", а оно в вычислении уже должно быть новым, т.к. вычисление сработало по изменению этого поля. То, что вы пишите, что год якобы старый - никак не может соответствовать действительности.

#5 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 20 Август 2015 - 09:56

Цитата

толком не могу отформатировать сообщения, что-то с форумом творится

Проблемы из-за перевода сайта на https, исправили.

#6 Илья

    Активный участник

  • Пользователи
  • PipPipPip
  • 173 сообщений

Отправлено 20 Август 2015 - 10:21

CbCoder, ура, теперь можно писать нормально, спасибо! :D

Я, действительно, сумбурно выразился.
Добавил второе вычисление по условию "Изменения поля", отключив проверку заполнения поля "Номер", пока всё логично.

Немножко потыкаю, пойму, что меня не устраивает в этой логике. Тяжело из себя изображать пользователя иногда. :)

Всем большое спасибо!

#7 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 13 Октябрь 2016 - 17:06

Ошибка не `status`'2' а `status`!='2'





Количество пользователей, читающих эту тему: 3

0 пользователей, 3 гостей, 0 анонимных