Здравствуйте.
Я не программист, поэтому обращаюсь к более продвинутым пользователям за помощью.
Суть задачи: создать в таблице с контрагентами поле "Дата последнего контакта с контрагентом" по аналогии стандартного поля "Дата следующего контакта".
Как я понимаю, поле "Дата следующего контакта" появляется автоматически при создании задачи в таблице "Работа с клиентами". то есть статус такой задачи в поле "Выполнено" должен быть равен "Нет", что означает - задача открыта.
Вычисление стандартного поля "Дата следующего контакта" выглядит довольно просто, прикладываю скриншот.
Код этого поля выглядит так:
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'];
Думаю создать аналогичное поле, но подкорректировать данный код под задачу отображения последней даты работы с клиентом со статусом в поле "Выполнено" = "Да".
Но я абсолютно не разбираюсь с кодами и не могу понять практически никакой логики в коде, указанном выше.
Помогите с кодом, если можете, заранее большое спасибо!
2
Вычисление даты последнего контакта с контрагентом
Автор novomaster, 07 нояб. 2015 16:50
Вычисление дата
Сообщений в теме: 4
#1
Отправлено 07 Ноябрь 2015 - 16:50
#2
Отправлено 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'];
Вот. Не получилось. Никакой даты в поле "Дата последнего контакта" с таким вычислением не отображается...
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
Отправлено 07 Ноябрь 2015 - 20:50
1. В оригинальном вычислении берется минимальная (то бишь самая ранняя) дата из тех, что "Выполнено" = "Нет", т.к. там нам нужна дата следующего контакта. В вашем же случае, необходимо наоборот, брать максимальную дату, т.к. вам нужна последняя дата из тех что "Выполнено" = "Да". Т.е. в запросе должно быть "MAX(f724) as previousdate".
2. Не знаю, чем руководствовался автор оригинального вычисления, но я бы явно прописал f1053='Да', а не косвенное f1053<>'Нет' (т.е. "равно Да", а не "не равно Нет").
2. Не знаю, чем руководствовался автор оригинального вычисления, но я бы явно прописал f1053='Да', а не косвенное f1053<>'Нет' (т.е. "равно Да", а не "не равно Нет").
#4
Отправлено 07 Ноябрь 2015 - 22:32
CbCoder (07 Ноябрь 2015 - 20:50) писал:
1. В оригинальном вычислении берется минимальная (то бишь самая ранняя) дата из тех, что "Выполнено" = "Нет", т.к. там нам нужна дата следующего контакта. В вашем же случае, необходимо наоборот, брать максимальную дату, т.к. вам нужна последняя дата из тех что "Выполнено" = "Да". Т.е. в запросе должно быть "MAX(f724) as previousdate".
2. Не знаю, чем руководствовался автор оригинального вычисления, но я бы явно прописал f1053='Да', а не косвенное f1053<>'Нет' (т.е. "равно Да", а не "не равно Нет").
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
Отправлено 09 Ноябрь 2015 - 12:46
Так и должно быть, т.к. вычисление настроено на события изменения полей в подтаблице. Нет событий - нет работы вычисления. Для старых записей можно создать и применить по ним доп.действие с тем же кодом. По сути это тоже самое вычисление, только запускаемое вручную по кнопке.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных