Добрый день! Схема такая: В разделе Контрагенты права настроены таким образом, что каждый сотрудник видит только свои записи, но почему-то не срабатывает проверка на дубли если такой контрагент уже есть у сотрудника Иванова, а пытается его ввести сотрудник Петров.
Подскажите пожалуйста что необходимо сделать чтобы проверка на дубли функционировала и в таком случае. Заранее спасибо!
Нравится
Здравствуйте!
Это решается только раздачей на чтение всем пользователям на все записи раздела "Контрагенты" и "Контакты".
Тогда прийдется немного потрудится :)
1. Создать хранимые процедуры на сервере, которые принимают значения полей по которым искать дубли. В них напрямую обращаться к таблицам tbl_Contact/tbl_Account
2. Дать права на запуск - PUBLIC
3. При создании/редактировании карточки Контакта/Контрагента запускать ХП со значениями, которые ввел пользователь.
4. Запуск зависит от версии, которую Вы используете.
5. Если ХП вернут флаг, что дубли есть, то выдавать предупреждение, что есть дубли.
Необходимо повесить запуск ХП на BeforePost. Так как у Вас версия 3.2.1, то можете сделать примерно так:\
... var Parameters = System.CreateObject('TSObjectLibrary.Parameters'); var Parameter = Parameters.CreateItem(); Parameter.Name = 'ID'; Parameter.ParamType = 2; Parameters.Add(Parameter); var SQLText = 'execute tsp_Test :id output' Connector.DBEngine.ExecuteCustomSQL(SQLText, Parameters); Log.Write(1, Parameter.Value); ...
Сама ХП выгладит так:
create procedure tsp_Test( @id int output ) as begin set @id = 5 end GO
Это толко пример. Вам же надо самому будет реализовать логику.
Сейчас все работает без ХП, поэтому и обычные пользователи не могут узнать о существовании записей, на которые у них нет доступа - что логично.
Попробовал сделать как вы описали выше, но выдает ошибку на строке Connector.DBEngine.ExecuteCustomSQL(SQLText, Parameters);:
TSMSSQLEngineLibrary.MSSQLEngine: Неверный входящий поток табличных данных (TDS) по протоколу удаленного вызова процедур (RPC). Параметр 3 (""): тип данных 0xE7 имеет недопустимую длину данных или длину метаданных
Serega,
по опыту могу сказать, что при таком подходе (я имею в виду доступ менеджера только к своим записям по контактам и контрагентам) возникает ряд проблем организационного характера.
Например, система может сообщить менеджеру, что есть дубли у добавляемой записи, но что это за дубли и дубли ли это вообще менеджер проанализировать не сможет (не прав доступа на чтение к предполагаемым дублям). Так как чаще всего новые записи добавляются в привязке к другой информации (назначенная встреча, полученное письмо), то невозможность добавить запись может привести к задержке в процессе работы пользователя и потере определённой информации (письмо, задача не привязаны к клиенту, теряется история работы с ним и т.п.). Поэтому следует хорошо продумать регламенты работы, которые описывают решение всех возможных коллизий при добавлении новых записей.
Да для 2005 сервера изменился тип по умолчанию. Измените скрипт:
... var Parameter = Parameters.CreateItem(); Parameter.DataType = 1; //<--- Необходимо указать тип Parameter.Name = 'ID'; Parameter.ParamType = 2; ...