Моя задача - периодически оживлять контакт с контрагентами.
Дата последнего контакта фиксируется вкладкой "история контакта" в карточке.
Хотел бы, чтобы можно было отчетом выводить перечень контрагентов, по которым последняя активность была раньше какой-либо даты.
При этом, в отчете, где я ввел просто выборку по дате (меньше или равно текущей), по одному и тому же контакту предсказуемо отображаются ВСЕ записи о контактах с датой меньше введенной.
Как отсечь их так, чтобы в отчет попадала самая молодая из записей?
Создаем новый отчет, переключаемся на - Использовать язык запросов (SQL)
В верхнее окно, помещаем код
Code:
if object_id('tempdb..#t') is not null drop table #t
create table #t (dt datetime, id_contacts int)
insert #t(dt, id_contacts)
select min(h.[date]), h.id_contacts
from historycontacts h
group by h.id_contacts
select * from #t t, contacts k where k.id_contacts=t.id_contacts
and t.dt>@dt
В нижнем вносим параметры.
Параметры
@dt
Наименование параметров
Дата
Тип параметров
дата
villkin
Пользователь
Наблюдающий
Постов: 9
В ответ на: Поддержание контакта с контрагентом -
Пожалуйста проясните как работает скрипт. Фактически получается что он делает выборку по последним напоминаниям старше указанной даты. (t.dt>@dt) Каким образом получить список контактов, последнее общение с которыми было именно ДО определенной даты? (dt) Нужно именно последнее. Спасибо
admin
Администратор
Администратор
Постов: 2728
В ответ на: Поддержание контакта с контрагентом -
Там была чуть другая задача. Что касается Вашего вопроса - мы не знаем как именно у вас построен рабочий процесс. Если считать что он происходил с записями в Историю контакта, то надо вот так:
Code:
--1 шаг переменные, чтобы понятно было о чем речь, в скрипт их вставлять не надо
declare @dt datetime
set @dt='2015-03-12 13:01:40.000'
--2 шаг Это список из номеров контакта и даты последнего общения, тоже для понимания сути процесса. Это тоже не скрипт. Тут берем контакты и последние даты из истории до определенной даты.
select max(h.[date]), h.id_contacts
from historycontacts h where [date]<=@dt
group by h.id_contacts
--Но поскольку такое (дата+номер контакта) редко когда надо, на третьем шаге используем промежуточную таблицу чтобы далее к ней добавлять все что нам нужно.
--3 шаг, временная таблица
if object_id('tempdb..#t') is not null drop table #t
create table #t (dt datetime, id_contacts int)
insert #t(dt, id_contacts)
select max(h.[date]), h.id_contacts
from historycontacts h where [date]<=@dt
group by h.id_contacts
-- 4 шаг. Ради примера к временной таблице прикрепляем таблицу Cоntacts
select * from #t t, contacts k where k.id_contacts=t.id_contacts
--Итог, некий скрипт который выглядит вот так (естественно @dt нужно задать как параметр):
if object_id('tempdb..#t') is not null drop table #t
create table #t (dt datetime, id_contacts int)
insert #t(dt, id_contacts)
select max(h.[date]), h.id_contacts
from historycontacts h where [date]<=@dt
group by h.id_contacts
select * from #t t, contacts k where k.id_contacts=t.id_contacts
villkin
Пользователь
Наблюдающий
Постов: 9
В ответ на: Поддержание контакта с контрагентом -
Благодарю за подробный ответ! Действительно на выходе получается список всех карточек с последними переговорами до определенной даты. Мы используем программу именно как вы сказали - записями в историю. Конечная задача - формировать список для менеджеров из клиентов, с которыми давно не было связи. Так, хотелось бы получить данные в эксель с указанием этой самой даты последней связи, чтобы можно было фильтровать данные. В идеале - выводить в ту же таблицу последнюю запись в истории контакта.
Возможно ли это? Спасибо.
Zheka
Пользователь
Эксперт
Постов: 61
В ответ на: Поддержание контакта с контрагентом -
Я встряну в разговор с Вашего позволения, может я не правильно понял, но я делал такой отчёт через стандартные средства. Т.е. мне нужно сделать выборку по "заброшенным" контрагентам с такой-то даты. Я выбираю менеджера и дату, и отчёт выводит всех контрагентов этого менеджера, по которым нет записей в "истории" после этой даты. И при этом есть экспорт в Excel. Правильно я понял?Сохраняйте тонкую грань между "удержать покупателя" и "прогнуться под покупателя"
Zheka
Пользователь
Эксперт
Постов: 61
В ответ на: Поддержание контакта с контрагентом -
Если так, могу помочь как стандартными средствами сделать такой отчёт. Саму запись из истории я у себя не вывожу, т.к. они как правило длинные и всё равно не читабельны ни в отчёте, ни в Excel (надо раздвигать строки и столбцы), а вывожу лишь дату последней записи и параметры контрагента (любые). Но если надо, то можно и саму запись выводить...Сохраняйте тонкую грань между "удержать покупателя" и "прогнуться под покупателя"
admin
Администратор
Администратор
Постов: 2728
В ответ на: Поддержание контакта с контрагентом -
villkin писал(а): Благодарю за подробный ответ! Действительно на выходе получается список всех карточек с последними переговорами до определенной даты. Мы используем программу именно как вы сказали - записями в историю. Конечная задача - формировать список для менеджеров из клиентов, с которыми давно не было связи. Так, хотелось бы получить данные в эксель с указанием этой самой даты последней связи, чтобы можно было фильтровать данные. В идеале - выводить в ту же таблицу последнюю запись в истории контакта..
На самом деле Вы говорите о том, что уже есть в приведенном скрипте.
Конкретно, вот сам запрос, который выделяет последнюю по дате запись (максимальная дата и есть последняя)
Code:
select max(h.[date]), h.id_contacts
from historycontacts h where [date]<=@dt
group by h.id_contacts
Может Вы имели ввиду, что Вам надо добавить какой то текстовой признак, можно добавить еще и его через лайк.
Например если нужна последняя по времени строка в которой есть ключевое слово “в заказе” можно сделать так:
Code:
select max(h.[date]), h.id_contacts
from historycontacts h where [date]<=@dt and [Message] like '%в заказе%'
group by h.id_contacts
Кстати, про ключевые слова...Хорошая подсказка, надо эту тему осветить, как легко по ключевым словам в "История контакта" собирать информацию. Сохраняйте тонкую грань между "удержать покупателя" и "прогнуться под покупателя"
villkin
Пользователь
Наблюдающий
Постов: 9
В ответ на: Поддержание контакта с контрагентом -
Да, идея неплохая. Пока мы разбираемся с заброшенными контактами. Кстати, как вы этот вопрос решали стандартными средствами? Буду благодарен за наводку!
admin
Администратор
Администратор
Постов: 2728
В ответ на: Поддержание контакта с контрагентом -
Самый простой и точный вариант, это добавить на Карточку поле - Дата последнего контакта, и тогда простым отчетом через мастера смотрим клиентов у которых дата последнего контакта меньше чем определенный Вами период.
В ответ на: Поддержание контакта с контрагентом -
Через мастер отчётов создаём новый отчёт. 1. Отмечаем Основную закладку и Историю контактов 2. Выбираем нужные поля в Основной закладке и поля в Истории контактов: Дата созд.записи и Сообщение 3. Делаем удобные названия полей в отчёте 4. Выбираем "Группировка" и указываем для поля "Дата созд.записи" = "Максимум", для остальных полей ставим "Группировать". 5. Следующий шаг "Логические операции". Здесь выбираем поле "Дата созд.записи" , операция "<=", Поле или значение "Дата" с галочкой "Использовать как параметр", связь "И". Второе поле я например делал "Менеджер", операция "=", поле или значение "Справочник" с галочкой "Использовать как параметр", связь ничего не ставим. Всё отчёт готов! При вызове отчёта появляется диалоговое окно, где я указываю дату и менеджера. Выводится список клиентов конкретного менеджера по которым нет записей в истории после указанной даты.Сохраняйте тонкую грань между "удержать покупателя" и "прогнуться под покупателя"
Кстати, Вы не указали, участвует ли поле пользователь в 1й группировке. Если его не внести, тогда выполнить фильтр по нему будет невозможно.
Zheka
Пользователь
Эксперт
Постов: 61
В ответ на: Поддержание контакта с контрагентом -
У меня в карточках есть специальное поле "менеджер", где указан человек, который НА ДАННЫЙ момент ведёт эту карточку (тип поля справочник). Пользователь в данном случае для меня не подходит, ведь в истории могут быть разные пользователи, а нужно отфильтровать именно те карточки, которые сейчас закреплены за конкретным менеджером. По ошибке: нужно всё проверить...Сохраняйте тонкую грань между "удержать покупателя" и "прогнуться под покупателя"