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


Вычисление даты последнего контакта с контрагентом

Вычисление дата

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

#1 novomaster

    Участник

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

Отправлено 07 Ноябрь 2015 - 16:50

Здравствуйте.
Я не программист, поэтому обращаюсь к более продвинутым пользователям за помощью.
Суть задачи: создать в таблице с контрагентами поле "Дата последнего контакта с контрагентом" по аналогии стандартного поля "Дата следующего контакта".

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

Вычисление стандартного поля "Дата следующего контакта" выглядит довольно просто, прикладываю скриншот.
Код этого поля выглядит так:

1 | if ($event['type']=='delete') $deleteCond = " AND id<>$ID";
2 | $pre = data_select_field(62, "MIN(f724) as nextdate", "status=0 {$deleteCond} AND f723=",$line['Компания']['raw']," AND f1053<>'Да'");
3 | $res = sql_fetch_assoc($pre);
4 | $line['Компания']['Дата следующего контакта'] = $res['nextdate'];

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

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

Помогите с кодом, если можете, заранее большое спасибо!

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

  • Прикрепленное изображение: 1 - вычисление даты следующего контакта.JPG


#2 novomaster

    Участник

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

Отправлено 07 Ноябрь 2015 - 17:16

Вы, наверное, будете смеяться, но я попробовал скопировал код из вычисления "Даты следующего контакта" в вычисление "Даты последнего контакта", сделав следующие изменения (выделил красным шрифтом):

if ($event['type']=='delete') $deleteCond = " AND id<>$ID";
$pre = data_select_field(62, "MIN(f724) as previousdate", "status=0 {$deleteCond} AND f723=",$line['Компания']['raw']," AND f1053<>'Нет'");
$res = sql_fetch_assoc($pre);
$line['Компания']['Дата последнего контакта'] = $res['previousdate'];

Вот. Не получилось. Никакой даты в поле "Дата последнего контакта" с таким вычислением не отображается...

#3 CbCoder

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

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

Отправлено 07 Ноябрь 2015 - 20:50

1. В оригинальном вычислении берется минимальная (то бишь самая ранняя) дата из тех, что "Выполнено" = "Нет", т.к. там нам нужна дата следующего контакта. В вашем же случае, необходимо наоборот, брать максимальную дату, т.к. вам нужна последняя дата из тех что "Выполнено" = "Да". Т.е. в запросе должно быть "MAX(f724) as previousdate".
2. Не знаю, чем руководствовался автор оригинального вычисления, но я бы явно прописал f1053='Да', а не косвенное f1053<>'Нет' (т.е. "равно Да", а не "не равно Нет").

#4 novomaster

    Участник

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

Отправлено 07 Ноябрь 2015 - 22:32

Просмотр сообщенияCbCoder (07 Ноябрь 2015 - 20:50) писал:

1. В оригинальном вычислении берется минимальная (то бишь самая ранняя) дата из тех, что "Выполнено" = "Нет", т.к. там нам нужна дата следующего контакта. В вашем же случае, необходимо наоборот, брать максимальную дату, т.к. вам нужна последняя дата из тех что "Выполнено" = "Да". Т.е. в запросе должно быть "MAX(f724) as previousdate".
2. Не знаю, чем руководствовался автор оригинального вычисления, но я бы явно прописал f1053='Да', а не косвенное f1053<>'Нет' (т.е. "равно Да", а не "не равно Нет").

Спасибо, ход мыслей понятен, у меня получился такой код:

if ($event['type']=='delete') $deleteCond = " AND id<>$ID";
$pre = data_select_field(62, "MAX(f724) as previousdate", "status=0 {$deleteCond} AND f723=",$line['Компания']['raw']," AND f1053='Да'");
$res = sql_fetch_assoc($pre);
$line['Компания']['Дата последнего контакта'] = $res['previousdate'];

Работает только при добавлении новых записей в работе с клиентом. То есть предыдущие записи, которые были, почему-то не работают.
Например, по клиенту "ххх" были следующие записи:
1) 01.08.2015 г. - первый звонок - Выполнено = "Да"
2) 03.08.2015 г. - второй звонок - Выполнено = "Да"
3) 05.08.2015 г. - последний звонок - Выполнено = "Да"
4) 11.12.2015 г. - запланированный звонок - Выполнено = "Нет".

Так вот, в поле "Дата последнего контакта" должна быть дата 05.08.2015 г., а в поле "Дата следующего контакта" - 11.12.2015 г.

Если эти записи были до того, как я создал поле "Дата последнего контакта" и прописал код вычисления, то поле пустое (не подтягиваются предыдущие записи).
А если я делаю новую запись уже сейчас, после создания вычисления, то всё работает.

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

#5 CbCoder

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

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

Отправлено 09 Ноябрь 2015 - 12:46

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





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

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