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


Вопросы по вычислениям


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

#1 TelecomMedia

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

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

Отправлено 09 Октябрь 2014 - 16:07

Добрый день, есть несколько вопросов.

1. Суть вычисления заключается в том чтобы считать кол-во записей по контакту и если запись первая по счету - присваивать полю "Звонок" значение "Первый". Соответственно если запись вторая и далее - "Повторный".

$result = data_select_field(961, "count(f23261) as cnt_rec", "status=0 AND f23251=",$line['ID']);
$row = sql_fetch_assoc($result);

if ($row['cnt_rec'] = '1')
$line['Звонок'] = 'Первый';

if ($row['cnt_rec'] > '1')
$line['Звонок'] = 'Повторный';

Сейчас всем записям присваивается значение "Первый".


2. На доп действие стоит js:

if (document.getElementById("value22181").value=="") { alert ("Укажите дату следующего звонка!"); return false; }
else return true;

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

3. В настройках таблицы в "Заголовок страки" использую шаблоны:
Взято в работу - {Кол-во взятых сегодня заявок}. Осталось взять - {Осталось взять в работу}. Передано заявок - {Кол-во переданных}. Осталось передать - {Осталось передать}

Можно ли как то с помощью js переносить запись на новую строчку, так чтобы это выглядело след. образом:
Взято в работу - {Кол-во взятых сегодня заявок}.
Осталось взять - {Осталось взять в работу}.
Передано заявок - {Кол-во переданных}.
Осталось передать - {Осталось передать}

#2 CbCoder

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

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

Отправлено 10 Октябрь 2014 - 11:30

1. if ($row['cnt_rec'] == '1') В php знак "=" - это присвоение, а не равенство. Т.к. присваивается "1", что равнозначно true - условие выполняется всегда.

2. Не совсем понял логики вопроса. Если поле непустое, какая именно проверка должна быть, что должно проверяться? И не понял какая взаимосвязь между js и update_query, функция update_query выполняется в вычислениях, а не в js. Это две совершенно разных задачи.

3. Теоретически наверное можно, меняя содержимое элемента.

#3 TelecomMedia

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

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

Отправлено 10 Октябрь 2014 - 12:20

1.
$result = data_select_field(961, "count(f23261) as cnt_rec", "status=0 AND f23251=",$line['ID']);
$row = sql_fetch_assoc($result);

if ($row['cnt_rec'] == '1')
$line['Звонок'] = 'Первый';

if ($row['cnt_rec'] > '1')
$line['Звонок'] = 'Повторный';

Такой код вообще не проставляет значение.

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

#4 CbCoder

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

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

Отправлено 10 Октябрь 2014 - 14:01

1. Значит запрос возвращает 0, соответственно ни первое ни второе условие не выполняются. Проверяйте вывод $row['cnt_rec'], возможно сам запрос некорректен.

2. Код доп.действия выполняется после JS, а не до него.

#5 TelecomMedia

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

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

Отправлено 10 Октябрь 2014 - 14:27

1. Скорее всего. Как переформулировать запрос, если я пытаюсь посчитать количество записей в той же таблице откуда делается запрос?
$result = data_select_field(961, "count(f23251) as cnt_rec", "status=0 ");
$row = sql_fetch_assoc($result);
$line['Звонок'] = $row['cnt_rec'];
Такой код выводит общее кол-во записей в таблице

2. Т.е. нет никого способа обнулить значение поля до выполнения кода js?

#6 CbCoder

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

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

Отправлено 10 Октябрь 2014 - 15:51

1. Не понял вопроса. Вы просто убрали условие f23251=",$line['ID'], естественно будет возвращено кол-во всех активных (status=0) записей в таблице. Если у вас возвращается 0 при условии f23251=",$line['ID'], значит само условие не соответствует вашей задаче.

2. Зачем вам вообще обнулять значение поля? Обнулить поле можно через сам JS (до проверки и вывода сообщения), но тогда сообщение будет выходить всегда, т.к. поле будет в любом случае пустым из-за предварительного обнуления. У вас по-моему сама постановка задачи некорректная, или вы мне что-то не договариваете.

#7 TelecomMedia

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

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

Отправлено 13 Октябрь 2014 - 09:18

1. Попробую привести пример:
Есть основная т. в которой ведется работа по компании "А".
В подтаблице отображаются действия (звонки) по компании "А".
Поля подтаблицы:
- Компания
- Дата звонка
- Звонок (первый или повторный)

Требуется вычислением подсчитать кол-во совершенных действий по полю "Компания" (не обращаясь к основной таблице, т.е. подсчитать это кол-во в подтаблице).
Если кол-во таких записей = 1, то в поле "Звонок" отобразить - Первый, если больше одного - Повторный.

2. Попробую снова привести пример:

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

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

#8 CbCoder

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

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

Отправлено 13 Октябрь 2014 - 11:19

1. Если обращение идет не из основной таблицы, тогда зачем используется $line['ID'] в условии "f23251=",$line['ID']"? Правильно будет условие "f23251=",$line['f23251']", т.е. "выбрать записи с таким же значением поля связи с родительской, как в текущей записи". У вас же сейчас условие для вычисления из основной таблицы (т.к. поле связи приравнено к ID текущей записи). Немудренно, что выдается 0 - как я и сказал, из-за неверного условия запроса.

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

#9 TelecomMedia

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

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

Отправлено 13 Октябрь 2014 - 13:24

1. Все сделал как вы сказали, упростил запрос, чтобы посмотреть работает ли он. В поле звонок хочу вывести результат, т.е. логично получить в итоге при добавлении первой записи - 1, второй - 2 и т.д.

$result = data_select_field(961, "count(f23251) as cnt_rec", "status=0 AND f23251=",$line['Компания']);
$row = sql_fetch_assoc($result);
$line['Звонок'] = $row['cnt_rec'];

В итоге постоянно получаю "0".

2. А как тогда можно реализовать такое в js?

#10 CbCoder

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

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

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

1. Значит где-то еще ошибка, но где именно - сказать затрудняюсь.

2. Это вам в документацию по JS. Сюда например.





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

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