niks111111
Пользователь
 Специалист
Постов: 25 |   |
|
Поддержание контакта с контрагентом - 25.07.2014 19:03
Добрый день, господа!
Такой вопрос.
Моя задача - периодически оживлять контакт с контрагентами.
Дата последнего контакта фиксируется вкладкой "история контакта" в карточке.
Хотел бы, чтобы можно было отчетом выводить перечень контрагентов, по которым последняя активность была раньше какой-либо даты.
При этом, в отчете, где я ввел просто выборку по дате (меньше или равно текущей), по одному и тому же контакту предсказуемо отображаются ВСЕ записи о контактах с датой меньше введенной.
Как отсечь их так, чтобы в отчет попадала самая молодая из записей?
|
|
|
admin
Администратор
 Администратор
Постов: 2728 |  |
|
В ответ на: Поддержание контакта с контрагентом - 28.07.2014 21:48
Поскольку эта задача требует "подзапроса", то надо создать отчет с помощью SQL запроса.
Создаем новый отчет, переключаемся на - Использовать язык запросов (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 |   |
|
В ответ на: Поддержание контакта с контрагентом - 07.05.2015 15:54
Пожалуйста проясните как работает скрипт. Фактически получается что он делает выборку по последним напоминаниям старше указанной даты. (t.dt>@dt) Каким образом получить список контактов, последнее общение с которыми было именно ДО определенной даты? (dt) Нужно именно последнее. Спасибо
|
|
|
admin
Администратор
 Администратор
Постов: 2728 |  |
|
В ответ на: Поддержание контакта с контрагентом - 07.05.2015 17:35
Там была чуть другая задача. Что касается Вашего вопроса - мы не знаем как именно у вас построен рабочий процесс. Если считать что он происходил с записями в Историю контакта, то надо вот так:
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 |   |
|
В ответ на: Поддержание контакта с контрагентом - 25.05.2015 13:34
Благодарю за подробный ответ! Действительно на выходе получается список всех карточек с последними переговорами до определенной даты. Мы используем программу именно как вы сказали - записями в историю. Конечная задача - формировать список для менеджеров из клиентов, с которыми давно не было связи. Так, хотелось бы получить данные в эксель с указанием этой самой даты последней связи, чтобы можно было фильтровать данные. В идеале - выводить в ту же таблицу последнюю запись в истории контакта.
Возможно ли это? Спасибо.
|
|
|
Zheka
Пользователь
 Эксперт
Постов: 61 |   |
|
В ответ на: Поддержание контакта с контрагентом - 25.05.2015 17:22
Я встряну в разговор с Вашего позволения, может я не правильно понял, но я делал такой отчёт через стандартные средства. Т.е. мне нужно сделать выборку по "заброшенным" контрагентам с такой-то даты. Я выбираю менеджера и дату, и отчёт выводит всех контрагентов этого менеджера, по которым нет записей в "истории" после этой даты. И при этом есть экспорт в Excel. Правильно я понял?
Сохраняйте тонкую грань между "удержать покупателя" и "прогнуться под покупателя" |
|
|
Zheka
Пользователь
 Эксперт
Постов: 61 |   |
|
В ответ на: Поддержание контакта с контрагентом - 25.05.2015 17:25
Если так, могу помочь как стандартными средствами сделать такой отчёт. Саму запись из истории я у себя не вывожу, т.к. они как правило длинные и всё равно не читабельны ни в отчёте, ни в Excel (надо раздвигать строки и столбцы), а вывожу лишь дату последней записи и параметры контрагента (любые). Но если надо, то можно и саму запись выводить...
Сохраняйте тонкую грань между "удержать покупателя" и "прогнуться под покупателя" |
|
|
admin
Администратор
 Администратор
Постов: 2728 |  |
|
В ответ на: Поддержание контакта с контрагентом - 25.05.2015 17:37
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
|
|
|
|
Zheka
Пользователь
 Эксперт
Постов: 61 |   |
|
В ответ на: Поддержание контакта с контрагентом - 25.05.2015 18:48
admin писал(а):
Например если нужна последняя по времени строка в которой есть ключевое слово “в заказе” можно сделать так:
Кстати, про ключевые слова...Хорошая подсказка, надо эту тему осветить, как легко по ключевым словам в "История контакта" собирать информацию.
Сохраняйте тонкую грань между "удержать покупателя" и "прогнуться под покупателя" |
|
|
villkin
Пользователь
 Наблюдающий
Постов: 9 |   |
|
В ответ на: Поддержание контакта с контрагентом - 01.07.2015 13:20
Да, идея неплохая. Пока мы разбираемся с заброшенными контактами. Кстати, как вы этот вопрос решали стандартными средствами? Буду благодарен за наводку!
|
|
|
admin
Администратор
 Администратор
Постов: 2728 |  |
|
В ответ на: Поддержание контакта с контрагентом - 01.07.2015 16:21
Самый простой и точный вариант, это добавить на Карточку поле - Дата последнего контакта, и тогда простым отчетом через мастера смотрим клиентов у которых дата последнего контакта меньше чем определенный Вами период.
|
|
|
villkin
Пользователь
 Наблюдающий
Постов: 9 |   |
|
В ответ на: Поддержание контакта с контрагентом - 01.07.2015 18:26
Согласен, но есть человеческий фактор. Как при этом привязать к полю автоматический скрипт, подставляющий дату из истории?
|
|
|
admin
Администратор
 Администратор
Постов: 2728 |  |
|
В ответ на: Поддержание контакта с контрагентом - 01.07.2015 19:52
Лучше наверное создать SQL - метку прямо на карточке и скриптом вносить туда дату.
Справка по SQL - меткам: http://a-number.com/index.php?option=com_content&task=view&id=133
|
|
|
Zheka
Пользователь
 Эксперт
Постов: 61 |   |
|
В ответ на: Поддержание контакта с контрагентом - 09.07.2015 19:44
Через мастер отчётов создаём новый отчёт. 1. Отмечаем Основную закладку и Историю контактов 2. Выбираем нужные поля в Основной закладке и поля в Истории контактов: Дата созд.записи и Сообщение 3. Делаем удобные названия полей в отчёте 4. Выбираем "Группировка" и указываем для поля "Дата созд.записи" = "Максимум", для остальных полей ставим "Группировать". 5. Следующий шаг "Логические операции". Здесь выбираем поле "Дата созд.записи" , операция "<=", Поле или значение "Дата" с галочкой "Использовать как параметр", связь "И". Второе поле я например делал "Менеджер", операция "=", поле или значение "Справочник" с галочкой "Использовать как параметр", связь ничего не ставим. Всё отчёт готов! При вызове отчёта появляется диалоговое окно, где я указываю дату и менеджера. Выводится список клиентов конкретного менеджера по которым нет записей в истории после указанной даты.
Сохраняйте тонкую грань между "удержать покупателя" и "прогнуться под покупателя" |
|
|
villkin
Пользователь
 Наблюдающий
Постов: 9 |   |
|
В ответ на: Поддержание контакта с контрагентом - 25.09.2015 03:11
К сожалению, результатом этого фильтра выводится ошибка: Недопустимое имя объекта "#Prom_AdvDCicle"
Кстати, Вы не указали, участвует ли поле пользователь в 1й группировке. Если его не внести, тогда выполнить фильтр по нему будет невозможно.
|
|
|
Zheka
Пользователь
 Эксперт
Постов: 61 |   |
|
В ответ на: Поддержание контакта с контрагентом - 25.09.2015 18:28
У меня в карточках есть специальное поле "менеджер", где указан человек, который НА ДАННЫЙ момент ведёт эту карточку (тип поля справочник). Пользователь в данном случае для меня не подходит, ведь в истории могут быть разные пользователи, а нужно отфильтровать именно те карточки, которые сейчас закреплены за конкретным менеджером. По ошибке: нужно всё проверить...
Сохраняйте тонкую грань между "удержать покупателя" и "прогнуться под покупателя" |
|
|
|