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


Автонумерация.. как исправить


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

#1 Termi

    Участник

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

Отправлено 27 Январь 2012 - 00:00

Добрый вечер, уважаемые.
Подскажите пожалуйста, как в таблице, поля (с автонумерацией) удалить N- строк, чтобы позже забить новые с теми же номерами.
Удаляю (и из удаленных тоже), а они продолжают нумероваться, как будто удаления не произошло.
Например:
Было 32 строки, удалил 10, осталось 22. Создаю новую запись, она имеет номер 33 (надо 23)
Спасибо.

#2 CbCoder

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

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

Отправлено 27 Январь 2012 - 09:39

http://clientbase.ru...?showtopic=3185

#3 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 28 Январь 2012 - 01:40

В качестве примера приведена автоматическая нумерация для таблицы Счета.
В поле Номер снята опция автонумерация
В вычисление по отображению поля добавлен код:
if (!$line['Номер']) {
$sqlQuery = "SELECT max(`f437`) AS maxNUM FROM `".DATA_TABLE."43` WHERE (`status`<>'2' AND YEAR(`add_time`)= YEAR(CURDATE()))";
$result = mysql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR);
$row = mysql_fetch_assoc($result);
$line['Номер']=$row['maxNUM']+1;
}
, где f437 - внутреннее имя поля Номер в таблице Счета (DATA_TABLE 43).
Нумерация начинается с 1 ежегодно.
Новая запись будет иметь номер=максимальный среди активных или архивных+1.
Удаленные записи исключены (`status`!='2' ).
При необходимости поле Номер можно отредактировать.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#4 Termi

    Участник

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

Отправлено 28 Январь 2012 - 05:43

Не получилось..
Fatal error: Unknown column 'Номер' in 'field list'
UPDATE f_data91 SET `Номер`='2' WHERE id='12'
in /home/fm2/public_html/include/functions1.php on line 185

Вычисление:

if (!$line['Номер']) {
$sqlQuery = "SELECT max(`f1267`) AS maxNUM FROM `".DATA_TABLE."91` WHERE (`status`<>'2' AND YEAR(`add_time`)= YEAR(CURDATE()))";
$result = mysql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR);
$row = mysql_fetch_assoc($result);
$line['Номер']=$row['maxNUM']+1;
}

Линк на поле:

/edit_field.php?table=91&field=1267

Поле Номер = число, автонумерация снята

#5 arsenal

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

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

Отправлено 28 Январь 2012 - 07:57

Просмотр сообщенияandibrag (28 Январь 2012 - 01:40) писал:

В качестве примера приведена автоматическая нумерация для таблицы Счета.
В поле Номер снята опция автонумерация
В вычисление по отображению поля добавлен код:
if (!$line['Номер']) {
$sqlQuery = "SELECT max(`f437`) AS maxNUM FROM `".DATA_TABLE."43` WHERE (`status`<>'2' AND YEAR(`add_time`)= YEAR(CURDATE()))";
$result = mysql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR);
$row = mysql_fetch_assoc($result);
$line['Номер']=$row['maxNUM']+1;
}
, где f437 - внутреннее имя поля Номер в таблице Счета (DATA_TABLE 43).
Нумерация начинается с 1 ежегодно.
Новая запись будет иметь номер=максимальный среди активных или архивных+1.
Удаленные записи исключены (`status`!='2' ).
При необходимости поле Номер можно отредактировать.
А почему вы названия полей в sql-запросе пишите в косых коычках? Вроде он и без них работает, и в примерах в документации их нет.

#6 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 28 Январь 2012 - 12:25

Просмотр сообщенияarsenal (28 Январь 2012 - 07:57) писал:

А почему вы названия полей в sql-запросе пишите в косых коычках? Вроде он и без них работает, и в примерах в документации их нет.
привычка

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#7 CbCoder

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

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

Отправлено 28 Январь 2012 - 12:34

Косые кавычки обязательны только в случае совпадения имен полей с ключевыми полями SQL, поэтому в наших примерах их нет. Можно ставить, можно нет, как вам удобнее.

#8 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 06 Март 2012 - 14:08

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

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#9 CbCoder

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

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

Отправлено 11 Март 2012 - 09:52

Почему Вы решили что это баг? Это ключевая особенность типа "номер", по которой он собственно и отличается от полей с типом "число" (см. документациию). Если вам не нужен сдвиг, используйте тип "число" с включенной автонумерацией.

#10 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 11 Март 2012 - 11:13

Просмотр сообщенияРазработчик (11 Март 2012 - 09:52) писал:

Это ключевая особенность типа "номер", по которой он собственно и отличается от полей с типом "число"
действительно упустил эту особенность

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#11 Save

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

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

Отправлено 15 Март 2013 - 15:09

Снова требуется помощь. Где-то с середины января перестал работать этот код. Т.е. с 1 января были счета, которые начинались с единички, и где-то с 10 счета, нумерация стала продожаться с прошлого года.

Как я думаю, у меня программа не видит текущий год, но дату счета ставит правильную.

#12 Save

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

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

Отправлено 15 Март 2013 - 15:35

Попробовал в демоверсии, тоже вроде не работает.

#13 CbCoder

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

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

Отправлено 15 Март 2013 - 16:26

Цитата

Где-то с середины января перестал работать этот код

Какой именно код?

#14 Save

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

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

Отправлено 16 Март 2013 - 12:41

Этот.

Просмотр сообщенияandibrag (28 Январь 2012 - 01:40) писал:

В качестве примера приведена автоматическая нумерация для таблицы Счета.
В поле Номер снята опция автонумерация
В вычисление по отображению поля добавлен код:
if (!$line['Номер']) {
$sqlQuery = "SELECT max(`f437`) AS maxNUM FROM `".DATA_TABLE."43` WHERE (`status`<>'2' AND YEAR(`add_time`)= YEAR(CURDATE()))";
$result = mysql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR);
$row = mysql_fetch_assoc($result);
$line['Номер']=$row['maxNUM']+1;
}
, где f437 - внутреннее имя поля Номер в таблице Счета (DATA_TABLE 43).
Нумерация начинается с 1 ежегодно.
Новая запись будет иметь номер=максимальный среди активных или архивных+1.
Удаленные записи исключены (`status`!='2' ).
При необходимости поле Номер можно отредактировать.

Или есть еще какой-то?

#15 CbCoder

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

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

Отправлено 18 Март 2013 - 12:27

Вряд ли тут дело в коде, он корректный, тем более что работал раньше. Скорее всего, у вас была изменена дата одного из прошлогодних счетов, в результате чего его номер "пролез" в текущий год, и соответственно повлиял на нумерацию новых счетов (отсчет пошел с него)

#16 Save

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

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

Отправлено 18 Март 2013 - 15:12

Странно, старый бэкап восстанавливал, даже за тот год. Да и в демонстрационной версии тоже не работает вроде.

Я больше склоняюсь к изменению самой КБ при обновлении.

#17 CbCoder

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

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

Отправлено 18 Март 2013 - 17:07

Цитата

Я больше склоняюсь к изменению самой КБ при обновлении.

Никакое изменение в КБ не могло повлиять на данный код, он тривиальный и использует нативные функции PHP. По крайней мере я не вижу в нем ничего, что могло само по себе сбить вашу нумерацию. Все таки рекомендую проверить по логам изменение даты счетов.

#18 eqpersonal

    Новичок

  • Пользователи
  • Pip
  • 4 сообщений
  • Пол:Мужчина

Отправлено 21 Март 2013 - 00:33

Указанный код не работает. Номерация продолжается вне зависимости от даты заведенных счетов. Можно внести счет за прошлый год и новый номер будет +1

#19 Save

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

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

Отправлено 21 Март 2013 - 08:20

Приношу свои извинения за переполох. Код работает.

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





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

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