Вопрос

Доброго дня. 

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

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

Однако, если у Контрагентов один Ответственный - это ведущий менеджер, то у Контактов пользователь 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

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

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

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

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

Нет.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день. Нужно решение такой задачи.

"Каждый ответственный видит только своих контрагентов"

Подскажите пожалуйста как её организовать?

Фильтрами + права доступа, или бизнес процессом. Поделитесь пожалуйста опытом.

Спасибо

У меня такой же вопрос

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

Здравствуйте, Григорий!

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

"своих контрагентов" - это тех, которых он создал? Или тех,  в которых он ответственный?

Первый вариант решается, как описал Андрей.
Второй вариант решается бизнес-процессом

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день.
Кейс следующий - у пользователя должен быть доступ к чтению всех контрагентов (для дедубликации при обработке лида), но при этом не хотелось бы давать ему доступ ко всем записям в реестре, а тем более к их фильтрации. Вижу 2 возможных решения, хотелось бы с вами проконсультироваться:

1) Вшить в раздел Контрагенты фильтр или группу, которую нельзя снять. Идельно - дать пользователю возможность выбирать 1 из групп, но запретить любую прочую фильтрацию, или доступ к реестру без группы.

2) Сделать зеркальный раздел, который будет с иными правами доступа. Контрагенты будут доступны для чтения всем и будут использоваться для дедубликации, но не будет доступен в виде реестра пользователям. Контрагент Зеркало будет с ограниченными правами доступа и доступен в виде реестра. Данный вариант выглядит значительно сложнее в дальнейшем администрировании. 

Первый вариант выглядит разумнее, но вдруг вы подскажете что-то ещё.

У меня такой же вопрос

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

Данил. Вам стоит смотреть в сторону замещения метода initQueryFilters в разделе. Он будет фильтровать записи при загрузке раздела и физически снять его пользователи не смогут.

В лиде делать выбор не из объекта Контрагенты, а из объекта, построенного на VIEW (заодно и покажете только те поля, которые хотите показать).

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

 

Есть 75 Контрагентов, который нужно сменить Ответственного. Каким образом это можно сделать?

У меня такой же вопрос

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

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

Добрый день. Самый оптимальный вариант - написать UpdateQuery. Вы можете задаться вопросом, почему бы не сделать это непосредственно в базе с помощью SQL скрипта? Дело в том, что данный вариант не затронет бизнес-логику приложения, как минимум - новому Ответственному не будут выданы полные права на запись, а также не будут запущены процессы, которые начинаются на изменение Ответственного. В то время как вариант с UpdateQuery идентичен изменению Ответственного в интерфейсе приложения.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Собственно вопрос в заголовке.
Дело в том, что в лиде это отдельные схемы контейнеров LeadAccountProfileSchema и LeadContactProfileSchema.
А мне нужно вывести список контактов выбранного контрагента.
Как организовать данный фильтр? Пробовал замещать карточку лида и в ней указывать но не работает.
Да и не понятно какие колонки они используют? Такие: Account и Contact? Или что-то другое?

Можете дать готовое решение или хотя-бы объяснить всё понятно.

У меня такой же вопрос

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

Добрый день, Максим!

Думаю, самый простой вариант - добавить бизнес-правило. Если у Вас 7.10 - можно через мастер, если нет - то в карточке. Поля, которые Вам нужно - QualifiedContact и QualifiedAccount, это можно подсмотреть в объекте. Просто Contact и Account - это текстовые поля, а не справочные. Насколько я понимаю, потому что в момент создания лида не всегда они известны, да и можно написать название с ошибками.

"Мотков Илья" написал:

Добрый день, Максим!

Думаю, самый простой вариант - добавить бизнес-правило. Если у Вас 7.10 - можно через мастер, если нет - то в карточке. Поля, которые Вам нужно - QualifiedContact и QualifiedAccount, это можно подсмотреть в объекте. Просто Contact и Account - это текстовые поля, а не справочные. Насколько я понимаю, потому что в момент создания лида не всегда они известны, да и можно написать название с ошибками.

Спасибо. Помогло с этими полями - QualifiedContact и QualifiedAccount!

"Сазонов Максим" написал:А мне нужно вывести список контактов выбранного контрагента.

Вывести где ?
по нажатию кнопки, по наступлению какого-то события или состояния, при открытии карточки ?
В общем и в целом ничего сложного в Вашем кейсе нет.
Необходимо задать себе несколько вопросов:
1) Как связаны целевые Контрагент и Контакты (я подразумеваю что речь идет о детали "Контакты Контрагента") ?
2) Что мне необходимо сделать концептуально, н/п "У меня есть справочное поле контакт, и мне необходимо чтобы пользователь выбрал там значение из "открывающегося окна выбора"/"из выпадающего списка"(нужное подчеркнуть), при этом доступный список контактов должен быть отфильтрован по принципу присутствия в детали "Контакты Контрагента", для контрагента который в данный момент у казан в справочном поле контрагента текущей карточки".

Ответьте мне на эти вопросы, и я помогу Вам реализовать Ваш кейс.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Доброго времени суток!
Нужна информация о том способна ли BPM на сие деяние.
Итак возьмем раздел Контрагенты.

В нем мы создали деталь - "Команда контрагента".
В этой детали находятся пользователи которые относятся к данному контрагенту.

Итак вопрос, каким образом можно ограничить количество полей/сущностей на карточке по условию, что пользователь не находится в команде контрагента?
Необходимо чтобы в карточке отображалось максимум 3-4 поля и 1 вкладка - Основная информация и самое главное, необходимо чтобы как только грузится карточка не было никаких задержек.

У кого какие есть представления по поводу данной проблемы, коллеги?

На данный момент скрытие происходит при вызове моей функции, и видимость основных перводоступных полей зависит от аттрибута.

        hideAccountCard: function(_item) {
                if (_item !== 1) {
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=1]").setStyle("display", "none");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=2]").setStyle("display", "none");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=3]").setStyle("display", "none");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=4]").setStyle("display", "none");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=5]").setStyle("display", "none");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=6]").setStyle("display", "none");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=6]").setStyle("display", "none");
                        this.showInformationDialog("Вы не входите в команду контрагента!");
                } else {
                        his.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=1]").setStyle("display", "");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=2]").setStyle("display", "");
                        his.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=3]").setStyle("display", "");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=4]").setStyle("display", "");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=5]").setStyle("display", "");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=6]").setStyle("display", "");
                                }
                        },

У меня такой же вопрос

11 комментариев

а чем вам фильтрация записей в детали-то не угодила? esq долго выполняется?

Просто от момента открытия карточки до времени скрытия 2-3 секунды.
Такой фриз клиента не устраивает.
Вот я и ищу другие выходы из ситуации.

Хммм... это вообще ненормально. У меня у одного клиента такое настроено, так изменение мнговенное почти. Фриз более полсекунды явно свидетельствует о наличии проблем технического свойства. Онсайт?

"Дмитрий Степанов" написал: У меня у одного клиента такое настроено, так изменение мнговенное почти

А может, вы настраивали еще, чтобы эти пользователи не могли эти поля вытащить в колонки реестра?

"Владимир Соколов" написал:
Дмитрий Степанов пишет:

У меня у одного клиента такое настроено, так изменение мнговенное почти

А может, вы настраивали еще, чтобы эти пользователи не могли эти поля вытащить в колонки реестра?


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

"Владимир Соколов" написал:
Дмитрий Степанов пишет:

У меня у одного клиента такое настроено, так изменение мнговенное почти

А может, вы настраивали еще, чтобы эти пользователи не могли эти поля вытащить в колонки реестра?

я отключал сам пункт меню с этой возможностью :)

"Дмитрий Степанов" написал:я отключал сам пункт меню с этой возможностью :)

Я с точки зрения безопасности данных. Всё равно у пользователей останется возможность отфильтровать по этим полям список...

"Владимир Соколов" написал:

Я с точки зрения безопасности данных. Всё равно у пользователей останется возможность отфильтровать по этим полям список...

Если изменить режим использования поля на уровне объекта на "Никогда", то после очистки кеша по полю нельзя будет отфильтровать и отобразить его в реестре раздела.

"Демьяник Алексей" написал:Если изменить режим использования поля на уровне объекта на "Никогда", то после очистки кеша по полю нельзя будет отфильтровать и отобразить его в реестре раздела.

Вопрос в комбинации доступа к записи и полям. То есть, если пользователь является ответственным по контрагенту, то он видит все поля. В противном случае - только название и код...
Так что, на уровне объекта это не решить

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

Максим Шевченко, кстати дельный совет.
Кажется это решит проблему, спасибо)

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день.

В карточке договора расположено поле "Реквизиты контрагента". При клике на поле появляется список, который отображает значения, которые указаны в определенном поле в платежном реквизите контрагента. Мне нужно отображать значение другого поля, указанного в платежном реквизите. Подскажите, как это сделать? Может кто-то сталкивался и реализовывал подобное.

У меня такой же вопрос

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

Добрый день Елена!!!

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

"Власов Михаил Викторович" написал:

Добрый день Елена!!!

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


Михаил, у меня в платежных реквизитах создано поле "Юр.лицо" (тестовое поле). Мне вот нужно, чтобы при нажатии на "Реквизиты контрагента" в договоре, отображался список именно того, что занесено в данное поле (юр.лицо).

Добрый день.

Вам необходимо изменить значение свойства "Отображаемое значение" на уровне объекта справочника.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Подскажите пожалуйста как сделать задание!

Добавить на страницу создания/изменения/просмотра контрагента поля на закладку «Основная информаци»: «Кол-во продаж» (целое число), «Средний чек» (дробное 4 знака после запятой), «Дата последней продажи» (дата без времени), «Потенциал» (список, выбор из справочника «Приоритет активности»)

Я добавляю "Замещающий пакет", указываю родительский объект "Контрагент", затем добавляю в Columns : Кол-во продаж» (целое число), «Средний чек» (дробное 4 знака после запятой), «Дата последней продажи» (дата без времени), «Потенциал» (список, выбор из справочника «Приоритет активности»)
Затем кликаю сохранить и опубликовать!
Как теперь сделать так, чтобы измененное состояния показывалось на сайте?

У меня такой же вопрос

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

Алексей, здравствуйте!

Вам необходимо отобразить добавленные поля на странице редактирования с помощью мастера разделов.

Обучающий видеоролик - https://www.youtube.com/watch?v=DLFjsAR2CbI
Статья на Академии - https://academy.terrasoft.ru/documents/sales-enterprise/7-9/master-razd…

Вильшанский Дмитрий,

А как указать 4 знака после запятой и убрать время в дате?

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

У меня такой же вопрос

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

Сделайте новое поле мастером раздела и потом можно изучить созданные автоматически замещающий объект и модуль :smile:

"Алексей Сахоров" написал:-Создаю замещающий клиентский объект;
А в родительском объекте не знаю что выбрать

по контексту - замещающий клиентский модуль все же...
Родителем указываете то, что хотели заместить, если карточка раздела Контрагента то AccountPageV2 (Страница редактирования контрагента)

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

В карточке контакта есть поле "Email"
В карточке контрагента есть поле "Домен e-mail"

Нужно реализовать следующую задачу: если при создании контакта в карточке не был указан контрагент, то он определился по Домену e-mail.

Например:
В системе создан контрагент "Компания", у которого "Домен e-mail" указан "gmail.com"
Cоздали контакт "Иванов Иван", у которого указали почту "123@gmail.com" и не указали контрагента. После добавления записи, контрагент должен подставиться автоматически, то есть "Компания"

Создан БП, который должен запускаться при создании контакта и если в карточке контакта не указан контрагент. В качестве начального события используется Сигнал (если добавлен контакт), далее элемент Чтение контакта (считываем данные добавленного контакта). Далее нам нужно найти контрагента, чей домен содержится в e-mail клиента.

Как это реализовать? Ведь я от контакта получаю почту "123@gmail.com", а в домене контрагента указан gmail.com

У меня такой же вопрос

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

"Гольфельд Елена Андреевна" написал:В карточке контрагента есть поле "Домен e-mail"

Добрый день Елена!!!

поле "Домен email" это постоянное поле? или данное поле создано в средствах связи контрагента. поясните данный момент.

"Гольфельд Елена Андреевна" написал:Как это реализовать? Ведь я от контакта получаю почту "123@gmail.com", а в домене контрагента указан gmail.com

а в этом вам поможет следующая документация с сайта Майкрасофт. String.Split

т.е вам Елена после получения емайл его нужно распарсить (разделить на части) и полученный домен сравнить с доменом контрагента. вот решение вашего вопроса.

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

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

В системе такая логика реализована при загрузке писем в систему - на деталь "Участники активности" добавляются контакты, у которых на детали средство связи есть записи, которые совпадают со значениями в поле "От кого", "Кому", "Копия". Поскольку в email приходят значения вида test@test.test<'Test email user'>, то данное выражение по регулярному выражению преобразовывается в email вида test@test.test. И уже после преобразования значения сравниваются.

Войдите или зарегистрируйтесь, чтобы комментировать