|
![]() |
#1 |
Участник
|
Закрыть копирование - не достаточно.
Запретить придется не только копирование, но и ряд других возможностей - автоотчет - предварительный просмотр - экспорт в ексель Кроме того если вы закроете копирование совсем - пользователи будут серьезно возмущаться, так как часто копируют не весь справочник, а отдельные поля справочника клиентов (код клиента или адрес например). Закрыть копирование сразу всего - не гуманно. Лучше проверить сколько записей выделенно в данный момент в гриде - это не сложно, например так X++: client static boolean isSingleRecordSelected(FormDataSource _formDataSource) { common record; ; if (!_formDataSource) return false; record = _formDataSource.getFirst(true); if (!record) return true; return false; } Я написал такой статичный метод X++: static client void checkAccessTaskCopy(int _taskId, FormDataSource _formDataSource, FormName _formName) { #define.taskSend(310) #define.taskPreView(299) #define.taskAutoReport(278) #define.taskCopy(771) #define.taskExport2Excel(4436) #define.taskFilterByField(2843) ; if (_taskId == #taskAutoReport || _taskId == #taskCopy || _taskId == #taskExport2Excel || _taskId == #taskPreView || _taskId == #taskSend) { if (isSingleRecordSelected(_formDataSource) == false || _taskId != #taskCopy) { if ("Дополнительная проверка прав" == false) throw error("Нет прав"); } } } X++: public int task(int _taskId) { int ret; #task ; // --> Global::checkAccessTaskCopy(_taskId, CustTable_ds, element.name()); // <-- // If Control+N and datasource is not CustTable then call create on CustTable if (_taskId == #taskNew && (confind(skipCreateDataSources,this.dataSource().id()) || !custTable)) { custTable_ds.create(); ret = 1; } else { ret = super(_taskId); } return ret; } |
|
|
За это сообщение автора поблагодарили: Ivanhoe (3). |
Теги |
законченный пример, защита информации, копирование |
|
|