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


Формирование номера заказа из даты +

номер дата

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

#1 max3z

    Участник

  • Пользователи
  • PipPip
  • 14 сообщений
  • Пол:Мужчина
  • Город:Balts
  • Интересы:Дизайн

Отправлено 20 Май 2013 - 13:10

Здравствуйте уважаемые программисты.

Помогите пожалуйста с кодом вычисления в таблице.

Задача такая: Нужно формировать номер заказа в ячейке автоматически!
Номер из себя представляет следующий вид: (ГГММДД01)

ГГ - последние цифры года MMДД - соответственно месяц и дата, и последняя пара цифр - это номер заказа за день. т.е. каждый день новая последовательность

Заранее спасибо!

#2 Гость_Roman_*

  • Гости

Отправлено 20 Май 2013 - 16:36

Например, у Вас таблица имеет id 43.

if (!$line['Номер заказа'])
  {
    $result = data_select_field(43, "COUNT(*) AS `cnt`", "`status`=0 and `add_time`>='",date("Y-m-d 00:00:00"),"' and `add_time`<='",date("Y-m-d 23:59:59"),"'");
    $row = sql_fetch_assoc($result);
    $new_cnt = $row['cnt'] + 1;
    if (strlen($new_cnt) < 2) $new_cnt = "0".$new_cnt;
    $line['Номер заказа'] = date("Ymd").$new_cnt;
  }
Ставите условие вычисления на сохранение в таблице.

#3 max3z

    Участник

  • Пользователи
  • PipPip
  • 14 сообщений
  • Пол:Мужчина
  • Город:Balts
  • Интересы:Дизайн

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

Спасибо за код.

Извините, спрошу наверное глупость. А где этот id для таблицы найти?

Я подставил Ваши вычисления, но поле "Номер заказа" получает немного другой вид т.е. год подставляется полностью, а не последние 2 цифры. и еще не ведется подстановка последовательных цифр. т.е. добавляю один за другим 3 задания и везде отображается номер заказа 2013052001

#4 Гость_Roman_*

  • Гости

Отправлено 21 Май 2013 - 07:31

В предпоследней строке можно поменять Y на y, тогда будет две цифры от года.
$line['Номер заказа'] = date("ymd").$new_cnt;
Id таблицы можно узнать, посмотрев в адресную строку, находясь в самой таблице, например, http://mysite.ru/fields.php?table=43 - в данном случае 43 - это и есть id таблицы. Собственно, без правильного id у Вас и не прибавляются заказы.

#5 max3z

    Участник

  • Пользователи
  • PipPip
  • 14 сообщений
  • Пол:Мужчина
  • Город:Balts
  • Интересы:Дизайн

Отправлено 21 Май 2013 - 11:36

Спасибо, заработало!!! Только вот есть одна проблема.

Во-первых, почему-то последние две цифры отображают исчисления не с 1, а с 2. буд-то уже существует заказ под номером 01
Во-вторых, почему поле "Номер" продолжает последовательность, даже если задания удалены?

Прикрепленные изображения

  • Прикрепленное изображение: 2013-05-21 11.31.07 am.png


#6 Гость_Roman_*

  • Гости

Отправлено 21 Май 2013 - 11:46

Может потому, что есть фильтр? На самом деле вычисление со всеми проверками будет довольно объёмным, все условия не опишешь в сообщении. Приведённый код - всего лишь пример реализации.

#7 max3z

    Участник

  • Пользователи
  • PipPip
  • 14 сообщений
  • Пол:Мужчина
  • Город:Balts
  • Интересы:Дизайн

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

Просмотр сообщенияRoman (21 Май 2013 - 11:46) писал:

Может потому, что есть фильтр? На самом деле вычисление со всеми проверками будет довольно объёмным, все условия не опишешь в сообщении. Приведённый код - всего лишь пример реализации.
Спасибо, я понял. буду пробовать. На самом деле помогли! :)

#8 max3z

    Участник

  • Пользователи
  • PipPip
  • 14 сообщений
  • Пол:Мужчина
  • Город:Balts
  • Интересы:Дизайн

Отправлено 21 Май 2013 - 13:34

решил свой вопрос!

if (!$line['Номер заказа'])
  {
    $result = data_select_field(47, "COUNT(*) AS `cnt`", "`status`=0 and `add_time`>='",date("Y-m-d 00:00:00"),"' and `add_time`<='",date("Y-m-d 23:59:59"),"'");
    $row = sql_fetch_assoc($result);
    $new_cnt = $row['cnt'];
    if (strlen($new_cnt) < 2) $new_cnt = "0".$new_cnt;
    $line['Номер заказа'] = date("ymd").$new_cnt;
  }

проблем не возникнет с таким кодом?

Сообщение отредактировал max3z: 21 Май 2013 - 13:35


#9 Гость_Roman_*

  • Гости

Отправлено 21 Май 2013 - 13:52

Не должно, только тут не учитываются удаляемые записи. Может произойти такая ситуация, что после удаления одного заказа и создания нового, выйдут два одинаковых номера.

#10 max3z

    Участник

  • Пользователи
  • PipPip
  • 14 сообщений
  • Пол:Мужчина
  • Город:Balts
  • Интересы:Дизайн

Отправлено 22 Май 2013 - 09:46

Просмотр сообщенияRoman (21 Май 2013 - 13:52) писал:

Не должно, только тут не учитываются удаляемые записи. Может произойти такая ситуация, что после удаления одного заказа и создания нового, выйдут два одинаковых номера.

А условие "Запрещать дублирование значений" тут не работает??? Точно. Проверил. Создаются дубликаты :(


#11 Гость_Roman_*

  • Гости

Отправлено 22 Май 2013 - 09:54

Конечно, вычисление имеет больший приоритет, чем системные проверки.

#12 max3z

    Участник

  • Пользователи
  • PipPip
  • 14 сообщений
  • Пол:Мужчина
  • Город:Balts
  • Интересы:Дизайн

Отправлено 22 Май 2013 - 10:35

Просмотр сообщенияRoman (22 Май 2013 - 09:54) писал:

Конечно, вычисление имеет больший приоритет, чем системные проверки.

Перевел поле в число, и дублирований теперь нет!!! Образуются последовательности. После удаления строки из таблицы, последовательность продолжается.

Но возник следующий вопрос: можно ли численным придавать вид?

Т.е. Сейчас число в моей ситуации выглядит так 13 052 201, а хотелось бы сгруппировать немного иначе. Так например 130520 01 или просто 13052001

Сообщение отредактировал max3z: 22 Май 2013 - 10:36


#13 Гость_Roman_*

  • Гости

Отправлено 22 Май 2013 - 10:54

Форматирование поля типа "число" не меняется.

#14 kingston

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

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

Отправлено 22 Май 2013 - 17:01

Я присоединяюсь к мнению предыдущего оратора - во многих случаях группировка (разбиение числа пробелами по три цифры) приводит к значительным неудобствам - например, оно перестает восприниматься как число экселеобразными процессорами, во вторых, оно перестает целиком выбираться двойным кликом (например, в браузере), в третьих, перезванивают клиенты и переспрашивают по поводу счета номер"130 225" - "Вы выписали Двести двадцать пятый счет или у вас в середине что-то не напечаталось? " В четвертых - (стыдно сказать) - счет с таким номером (с пробелом, если сделать копипаст из таблицы в строку поиска ) не ищется собственным поисковиком "КБ" . Но зато если тут же в строке поиска вручную удалить пробел - поисковик находит нужный счет, Но в столбце номера мы видим этот же номер опять с пробелом. Надо исправлять.
Резюме - реалии сегодняшнего дня и высокие стандарты качества, на пятки которых наступает и в затылок которых дышит "КБ" настоятельно требуют от разработчиков дополнить свое мудрое решение об императивной группировке "чисел" возмоожностью выбора - ГАЛОЧКОЙ (группировать\негруппировать (или что лучше ввести описатель формата по скольку чисел группировать), чтобы предоставить пользователю полную демократию и свободу в формате представления.

#15 CbCoder

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

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

Отправлено 22 Май 2013 - 18:06

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

#16 max3z

    Участник

  • Пользователи
  • PipPip
  • 14 сообщений
  • Пол:Мужчина
  • Город:Balts
  • Интересы:Дизайн

Отправлено 23 Май 2013 - 10:15

Просмотр сообщенияRoman (21 Май 2013 - 13:52) писал:

Не должно, только тут не учитываются удаляемые записи. Может произойти такая ситуация, что после удаления одного заказа и создания нового, выйдут два одинаковых номера.

C данным кодом возникла проблема приводящая к дублированию! Помогите разобраться.

Суть:

вычисления номера заказа задаются в таблице "Счет". Если создать счет непосредственно в таблице, $new_cnt не равен 0, а равен 1. по этой причине работает код -
$new_cnt = $row['cnt'];
Но если создать счет непосредственно из таблицы с клиентами/контрагентами, $new_cnt равняется 0, и тут работает изначально Ваш код -
$new_cnt = $row['cnt'] + 1;

В этой связи возможны ситуации дублирования даже без удаления строк. В чем проблема? почему происходят такие разные вычисления?

Сообщение отредактировал max3z: 23 Май 2013 - 10:17


#17 max3z

    Участник

  • Пользователи
  • PipPip
  • 14 сообщений
  • Пол:Мужчина
  • Город:Balts
  • Интересы:Дизайн

Отправлено 23 Май 2013 - 12:46

Вобщем имеет место смещение значений переменой
$row['cnt']
при оформлении Счета из связанных таблиц. Что делать ? куда копать?

Такая проверка,
if ($new_cnt == $row['cnt']) $new_cnt = $row['cnt'] + 1;
не решила проблемы :(

#18 max3z

    Участник

  • Пользователи
  • PipPip
  • 14 сообщений
  • Пол:Мужчина
  • Город:Balts
  • Интересы:Дизайн

Отправлено 23 Май 2013 - 17:47

Заметил, что подобное поведение как-то связанно с кодом вычисления в доп.действии кнопки. т.е. если закомментировать строку
//$new_id = insert_query($schet, "Счета");
все становится на свои места. Помогите разобраться!

#19 Гость_Roman_*

  • Гости

Отправлено 24 Май 2013 - 11:55

Данная строка вставляет новый счёт в соответствующую таблицу. Тут необходимо поменять код доп.действия, чтобы номер счёта добавлялся сразу без участия вычисления.

#20 kingston

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

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

Отправлено 24 Май 2013 - 11:56

Просмотр сообщенияCbCoder (22 Май 2013 - 18:06) писал:

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

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

Сообщение отредактировал kingston: 24 Май 2013 - 11:59






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

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