Доброго дня. 

Есть в системе Контрагент, и есть Контакт у этого Контрагента.



И есть ответственный, как у Контрагента, так и у Контакта.



Однако, если у Контрагентов один Ответственный - это ведущий менеджер, то у Контактов пользователь Supervisor.



Как бы привести в соответствие ответственных из Контрагента в Контакты. Не в ручную, а автоматизированно. 

 

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

Если это так, то подскажите, какая документация может помочь? 

Или если не бизнес-процессы, то что? 

Или может даже есть почти рабочий бизнес-процесс, который надо будет немного отредактировать под себя.

Нравится

14 комментариев
Лучший ответ

Добрый день!

Ответственный у контрагентов и контактов - это тот, кто создал контрагент и контакт.

Привести в соответствие по вашему описанию можно скриптом в базе, например:

update c
set OwnerId = a.OwnerId
from Contact as c
join Account as a on c.AccountId = a.Id
 
либо (в зависимости от связи)
 
update c
set OwnerId = a.OwnerId
from Contact as c
join Account as a on c.Id = a.PrimaryContactId

Но, при создании новых контрагентов или контактов владельцы все равно будут проставлены по описанной выше логике. Так что надо будет либо сделать периодический бизнес процесс по обновлению, либо процесс по сигналу создания объекта (контрагента или контакта).

Добрый день!

Ответственный у контрагентов и контактов - это тот, кто создал контрагент и контакт.

Привести в соответствие по вашему описанию можно скриптом в базе, например:

update c
set OwnerId = a.OwnerId
from Contact as c
join Account as a on c.AccountId = a.Id
 
либо (в зависимости от связи)
 
update c
set OwnerId = a.OwnerId
from Contact as c
join Account as a on c.Id = a.PrimaryContactId

Но, при создании новых контрагентов или контактов владельцы все равно будут проставлены по описанной выше логике. Так что надо будет либо сделать периодический бизнес процесс по обновлению, либо процесс по сигналу создания объекта (контрагента или контакта).

Сидоров Александр В.,

То есть в бизнес-процесс можно зашить этот скрипт?

Bogdan Zozulya,

Да, можно. Элемент "Задание сценарий", в нем вызов CustomQuery

Можно, но не нужно. Внутри БП для этого есть более подходящие способы: элементы чтения и изменения данных или работа в скрипте с EntitySchemaQuery.

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

Зверев Александр, 

Вот с этим сейчас и завяз. Вроде все логично, вижу эти возможности, но пока не осознал, как с этим совладать. В связи с чем у меня был попутный вопрос в стартовом посте насчет справочной инфы. В принципе на часть вопроса Вы уже ответили. Что это действительно возможно. Попробую в документации узнать как именно это сделать. 

Bogdan Zozulya,

С документацией по настройке бизнес-процессов можете ознакомиться по этой ссылке на Академии и более подробно по работе с данными здесь.

Алла Савельева,

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

Можно сделать два отдельных механизма: один — для разового запуска в начале, другой — постоянно готовый сработать БП на событии изменения поля «Ответственный» контрагента: получаем значение поля и элементом изменения данных меняем ответственного во всех контактах, у которых указан этот контрагент.

Bogdan Zozulya,

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

Алла Савельева,

Спасибо, пожалуй воспользуюсь. Вот здесь как указать чтобы он взял данные из Ответственного в Контрагенте? 

Сидоров Александр В.,

А как разницу связей выявить? Куда мне посмотреть, чтобы определить какой из вариаций скрипта мне подходит?

В зависимости от того, как связаны интересующие контакты с контрагентом: по полю в контрагенте «Основной контакт» или наоборот, по полю в контакте «Контрагент».

Зверев Александр,

Понял, внимательно изучил, второй вариант, по полю «Контрагент» в «Контакте». Выходит второй вариант скрипта. верно?  

update c
set OwnerId = a.OwnerId
from Contact as c
join Account as a on c.Id = a.PrimaryContactId
Показать все комментарии

Есть необходимость переименовать во всей системе, глобально, где есть упоминания два поля: Ответственный и Автор на Исполнитель и Ответственный соотв., т.к. нам кажется такой порядок более логичным и понятным.

Посему вопрос: нет ли здесь подводных камней, не столкнемся ли с проблемами к примеру, при обновлении версии и пр, и можно ли это сделать на уровне запроса в БД или эти наименования могут храниться не только в БД?

Нравится

1 комментарий

изменения будут храниться (1) в сервисах таблиц и датасетов (меняем соответствующие названия полей), т. е. метаданные; (2) в названиях полей таблиц непосредственно в базе (так как переименовываем в сервисах таблиц).
повлияет на процесс перехода на новую версию однозначно - пакет перехода делается универсальным, а у вас внесены изменения - поэтому при обновлении версии переносим свои изменения руками

Показать все комментарии

Как максимально быстро произвести земену одинарных слешей на двойные?

Нравится

4 комментария
text = text.replace('\','\\')
t = t.replace(/\\/g,'\\\\');

Fishi, Ваш код работать не будет, т.к. метод String.replace() первым аргументом принимает регулярное выражение

уже нагуглил)):wink:

Показать все комментарии

Здравствуйте!

Подскажите, каким прямым обращением к базе MSSQL (для версии CRM 2.8) можно решить следующую задачу:
Во всех значениях поля "Адрес" заменить "ул. " (там, где эта часть в адресе присутствует) на "" (то есть привести все значения адресов к формату без "ул.")?

Спасибо!

Нравится

2 комментария

Здравствуйте, Дмитрий!

Вы можете изменить формат значения установленного поля адреса с помощью запроса в Query Analyzer или в Management Studio:

update cm_Contact
set Address = replace(Address, 'ул.', '')

Приятной работы!

Terrasoft Support Team

Благодарю за помощь!

Показать все комментарии