#1
Отправлено 03 Сентябрь 2012 - 12:27
Вопрос 1: Есть клиент, на которого заводится договор на услугу формата 630-001 , где 630 идентификация клиента, а 001 идентификация услуги. Т.е. если этот же клиент заказывает другую услугу, мы создаем договор формата 630-002. Как долна выглядеть формула для такой нумерации договоров?
Вопрос 2: Есть договор, к договору создаются приложения формата 001, 002 и т.д. у каждого приложения свой шаблон. Нумерация приложений идет в рамках только того договора, к которому оно создается. Т.е. при формировании приложения к другому договору, оно так же пойдет начиная от 001
Пока не могу понять какую формулу под данную нумерацию запилить Буду признателен за помощь
#2
Отправлено 03 Сентябрь 2012 - 13:50
if (!$line['num']) { $sqlQuery = "SELECT max(`fXX1`) AS maxNUM FROM `".DATA_TABLE."YY` WHERE (`status`<>'2' AND `fXX2`='" . $line['Клиент']['ID'] . "')"; $result = mysql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR); $row = mysql_fetch_assoc($result); $line['num']=$row['maxNUM']+1; }, где fXX1 - внутреннее имя поля num в базе, fXX2 - внутреннее имя поля Клиент - поле связи Договора с Клиентом, YY - номер таблицы Договора
Далее в поле Номер вашего договора производите вычисления при сохранении в таблице:
$line['Номер']=$line['Клиент'] . "-" . $line['num'];В приложении все по аналогии. Отличие будет в условии отбора записей в sql-запросе. Отбирать нужно не по клиенту, а по Договору.
Творческая группа "ТАВР".
www.TAVR.pro Художественная ковка, металлоконструкции.
www.СтолМет.рф Складные столы, стулья и системы для их хранения
#3
Отправлено 03 Сентябрь 2012 - 17:26
#4
Отправлено 04 Сентябрь 2012 - 19:13
В таблице Договора создаете поле num, типа число. Скрываете его в настройках доступа. В вычислениях таблицы Договора создаете вычисление
if (!$line['num']) { $sqlQuery = "SELECT max(`fXX1`) AS maxNUM FROM `".DATA_TABLE."78` WHERE (`status`<>'2' AND `f849`='" . $line['Компания']['ID'] . "')"; $result = mysql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR); $row = mysql_fetch_assoc($result); $line['num']=$row['maxNUM']+1; }Устанавливаете срабатывание вычисления - Сохранение в таблице.
Касаемо внутренних имен полей. Каждое поле помимо названия, которое Вы ему присваиваете, имеет внутреннее имя. Посмотреть его можно, например, если войти в настройки полей таблицы. При наведении обычно внизу появляется ссылка перехода. Параметр field - это номер требуемого поля, внутреннее имя соответствует ему с буквой f в начале, т.е. f492, например. В случае, если ссылка при наведении не выводится, кликните по нему - в адресной строке все будет. Т.о., Вы определите имя поля num, которое создали, и имя поля связи Таблицы Контрагенты и Договора. В стандартной конфигурации это поля называется Компания и имеет имя в базе f849.
Если хотите подойти глобально к структуре базы, посмотрите здесь.
Пояснение по вычислению.
Запросом sql из таблицы Договора выбирается запись, которая не является удаленной (`status`<>'2'), в поле связи имеет номер соответствующий номеру текущего контрагента (`f849`='" . $line['Компания']['ID'] . "') и при этом имеет максимальное значение в поле num (SELECT max(`fXX1`)). После этого номер увеличивается на единицу и заносится в текущую запись (последняя строчка вычисления).
Далее.
Меняете тип поля Номер на текстовое. И в вычислениях таблицы Договора создаете еще одно:
$line['Номер']=$line['Компания'] ['ID'] . "-" . str_pad($line['num'], 3, "0", STR_PAD_LEFT);Настраиваете срабатывание также, как и в первом случае, при сохранении в таблице.
Для удобства пользователей в настройках доступа поля снимите галочку с опции Добавление. В этом случае при создании новой записи поле Номер появляться не будет, что исключит неправильное его заполнение. Но при повторном открытии записи будет возможность откорректировать номер, если в этом будет необходимость.
По вопросу 2.
Нумерацию Вы можете создать по аналогичной схеме, выбирая из таблицы Приложения запись, связанную с текущим Договором и максимальным значением поля num. Что касается шаблона - при его формировании в теле ставите отбор по тому же полю num. Если равно 1 - формируете один шаблон печати, если 2 - второй шаблон и т.д. Вот только вопрос. У Вас поля для шаблонов одни и те же или для каждого свои? Ежели вариант 2 - тогда все намного интереснее.
Творческая группа "ТАВР".
www.TAVR.pro Художественная ковка, металлоконструкции.
www.СтолМет.рф Складные столы, стулья и системы для их хранения
#5
Отправлено 09 Ноябрь 2012 - 08:54
Вопрос
а зачем конструкция условия?
if (!$line['num']) {
подскажите, что проверяется в данном условии?
Почему спрашиваю
У меня в одной таблице вычисление подобное работает прекрасно.
А во второй все полностью аналогично, но не работает - не дает максимального числа
отключил условия - заработало.
разобрался, вроде бы - условие дает сквозной номер от максимального по всей таблице
странно почему у меня не работает
может подскажете (в другой таблице такое же работает)
Вычисления сделаны на условия сохранения таблицы
f1357 - это поле Номер
f1298 - это поле с компанией (внутри этой компании Номер должен быть сквозной)
if (!$line['Номер']) { $sqlQuery = "SELECT max(`f1357`) AS maxNUM FROM `".DATA_TABLE."100` WHERE (`status`<>'2' AND `f1298`='" . $line['Контрагент']['ID'] . "')"; $result = mysql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR); $row = mysql_fetch_assoc($result); $line['Номер']=$row['maxNUM']+1; }вот не рабюотает и все
Сообщение отредактировал UmaCat: 09 Ноябрь 2012 - 08:59
#6
Отправлено 09 Ноябрь 2012 - 10:05
UmaCat (09 Ноябрь 2012 - 08:54) писал:
if (!$line['num']) {подскажите, что проверяется в данном условии?
Чтобы работало - поле должно быть типа номер и не должно стоять автонумерации. Проверьте, пожалуйста.
Ошибок в коде не увидел.
Творческая группа "ТАВР".
www.TAVR.pro Художественная ковка, металлоконструкции.
www.СтолМет.рф Складные столы, стулья и системы для их хранения
#7
Отправлено 09 Ноябрь 2012 - 11:51
andibrag (09 Ноябрь 2012 - 10:05) писал:
Чтобы работало - поле должно быть типа номер и не должно стоять автонумерации. Проверьте, пожалуйста.
Ошибок в коде не увидел.
там где работало - в таблице поле было типа "число". Поставил тип "номер" - продолжает работать
там где не работает поставил тип "номер" (было тоже число), как не работало так и не работает
Сообщение отредактировал UmaCat: 09 Ноябрь 2012 - 12:03
#8
Отправлено 09 Ноябрь 2012 - 12:44
UmaCat (09 Ноябрь 2012 - 11:51) писал:
там где не работает поставил тип "номер" (было тоже число), как не работало так и не работает
Творческая группа "ТАВР".
www.TAVR.pro Художественная ковка, металлоконструкции.
www.СтолМет.рф Складные столы, стулья и системы для их хранения
#9
Отправлено 09 Ноябрь 2012 - 12:50
if ($line['Номер']==0) {Где-то проблема с присвоением значения полю в момент создания записи. У Вас точно автонумерация отключена? И как стоит срабатывание вычисления? При сохранении?
Творческая группа "ТАВР".
www.TAVR.pro Художественная ковка, металлоконструкции.
www.СтолМет.рф Складные столы, стулья и системы для их хранения
#10
Отправлено 09 Ноябрь 2012 - 13:31
andibrag (09 Ноябрь 2012 - 12:50) писал:
if ($line['Номер']==0) {Где-то проблема с присвоением значения полю в момент создания записи. У Вас точно автонумерация отключена? И как стоит срабатывание вычисления? При сохранении?
я нашел где проблема была
в свойствах таблицы стояла галка - сохранять при добавлении (а вычисление указано срабатывать при сохранении)
соответственно когда создавалась новая запись, то это давало в поле номер цифру 0, плюсовался 1 и все.
в общем не знаю как объяснить
но проблема была именно в этом - в свойствах той таблицы где работало не стояла галка "сохранять при добавлении", а там где не работало - стояла.
снял галку в свойствах таблицы и все заработало.
Спасибо за помощь
Сообщение отредактировал UmaCat: 09 Ноябрь 2012 - 13:32
#11
Отправлено 09 Ноябрь 2012 - 13:55
UmaCat (09 Ноябрь 2012 - 13:31) писал:
Творческая группа "ТАВР".
www.TAVR.pro Художественная ковка, металлоконструкции.
www.СтолМет.рф Складные столы, стулья и системы для их хранения
#12
Отправлено 09 Ноябрь 2012 - 20:36
andibrag (09 Ноябрь 2012 - 13:55) писал:
Творческая группа "ТАВР".
www.TAVR.pro Художественная ковка, металлоконструкции.
www.СтолМет.рф Складные столы, стулья и системы для их хранения
#13
Отправлено 10 Ноябрь 2012 - 14:43
#14
Отправлено 29 Декабрь 2017 - 09:54
#15
Отправлено 29 Декабрь 2017 - 10:25
#16
Отправлено 29 Декабрь 2017 - 10:36
#17
Отправлено 29 Декабрь 2017 - 12:09
#18
Отправлено 13 Февраль 2018 - 10:48
maksbazhin (29 Декабрь 2017 - 10:36) писал:
Но это костыль, а не стандартная функция.
Творческая группа "ТАВР".
www.TAVR.pro Художественная ковка, металлоконструкции.
www.СтолМет.рф Складные столы, стулья и системы для их хранения
Количество пользователей, читающих эту тему: 3
0 пользователей, 3 гостей, 0 анонимных