Проверка на дубли, не имея прав доступа

Добрый день! Схема такая: В разделе Контрагенты права настроены таким образом, что каждый сотрудник видит только свои записи, но почему-то не срабатывает проверка на дубли если такой контрагент уже есть у сотрудника Иванова, а пытается его ввести сотрудник Петров.
Подскажите пожалуйста что необходимо сделать чтобы проверка на дубли функционировала и в таком случае. Заранее спасибо!

Нравится

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

Здравствуйте!
Это решается только раздачей на чтение всем пользователям на все записи раздела "Контрагенты" и "Контакты".

Спасибо, а если политика фирмы такова, что каждый менеджер может видеть только свои записи...что же тогда делать?

Тогда прийдется немного потрудится :)
1. Создать хранимые процедуры на сервере, которые принимают значения полей по которым искать дубли. В них напрямую обращаться к таблицам tbl_Contact/tbl_Account
2. Дать права на запуск - PUBLIC
3. При создании/редактировании карточки Контакта/Контрагента запускать ХП со значениями, которые ввел пользователь.
4. Запуск зависит от версии, которую Вы используете.
5. Если ХП вернут флаг, что дубли есть, то выдавать предупреждение, что есть дубли.

Спасибо! Это лучше сделать именно через хранимые или можно написать скрипт на проверку по полям например "Имя" и "Код ОКПО" и повесить его на обработчик Post? Версия 3.2.1.4 на MS SQL 2005

Необходимо повесить запуск ХП на 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;
...
Показать все комментарии