Имя: Пароль:
1C
 
Как обойти РольДоступна() при програмной записи РС?
0 1сПупс
 
24.09.26
07:19
Коллеги, доброго утра.

В внешней обработке (подключена как БСП) делаю записи в РегСвед.
	Запрос = Новый Запрос;
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
		
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
		НоваяЗаписьРС = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
		НоваяЗаписьРС.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
		НовыйШтрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.СформироватьШтрихкодEAN13();
		НоваяЗаписьРС.Штрихкод = НовыйШтрихкод;
		НоваяЗаписьРС.Записать();

	КонецЦикла

Данную обработку будет использовать персонал.

В Модуле набора записей данного регистра_ Заказчик в расширении жестко обрезал запись РегСвед если роль не ПолныеПрава. "Мол, специально отрубили чтобы не создавали":
&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, Замещение)
	
	Если не РольДоступна("ПолныеПрава") Тогда
		Отказ = Истина;
	КонецЕсли;	
	
КонецПроцедуры


Можно ли сделать так, что если я вызываю запись из конкретной обработки контроль прав не выполнялся?
1 arsik
 
гуру
24.09.26
07:25
Передавать флаг через ДополнительныеСвойства набора записей
2 1сПупс
 
24.09.26
07:35
(1) думал об этом, но как его заполнить на стороне внешней обработки?
3 arsik
 
гуру
24.09.26
07:41
(2) Через какой объект ты записываешь во внешней обработке? Или там у тебя не программная запись?
4 1сПупс
 
24.09.26
07:47
Переписал так расширение, но тут получается что при любой программной записи не будет контроля на права. А нужно только из моей обработки:

&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, Замещение)
	
	Если Не ДополнительныеСвойства.Свойство("ИнтерактивнаяЗапись") Тогда
		Возврат;
	КонецЕсли;
	
	Если не РольДоступна("ПолныеПрава") Тогда
		Отказ = Истина;
	КонецЕсли;	
	
	
КонецПроцедуры

&После("ОбработкаПроверкиЗаполнения")
Процедура Расш1_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	
	ДополнительныеСвойства.Вставить("ИнтерактивнаяЗапись");
	
КонецПроцедуры

5 Мультук
 
гуру
24.09.26
07:46
(2)

1)

google:
1с регистрсведений наборзаписей ДополнительныеСвойства

Ответ:
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(ТекущаяДата());

// Заполняем набор записей...

// Передаем произвольный параметр через ДополнительныеСвойства
НаборЗаписей.ДополнительныеСвойства.Вставить("ИгнорироватьПроверку", Истина);

НаборЗаписей.Записать();



Там же пример кода для
Процедура Расш1_ПередЗаписью(Отказ, Замещение)



2) Это для СоздатьНаборЗаписей, а  можно так сделать для СоздатьМенеджерЗаписи ?
Нет, нельзя.
6 arsik
 
гуру
24.09.26
07:45
(4) 🤦
7 1сПупс
 
24.09.26
07:46
(3) юзер нажимает кнопку, формируются записи, серверный код привел в первом посте.
8 arsik
 
гуру
24.09.26
07:47
(7) 🤦🤦
9 1сПупс
 
24.09.26
07:52
(5) Благодарю! походу придется создавать записи через НаборЗаписей, а не  МенеджерЗаписи...
10 Lama12
 
24.09.26
07:52
А все боятся что ИИ заменит программистов. Ну, ну...
11 Garykom
 
гуру
24.09.26
07:55
Переписать расширение с добавлением специальной роли на этот РС кроме ПолныеПрава
Пользователям выдавать эту роль
12 Мультук
 
гуру
24.09.26
08:03
(11)

Тогда будет еще 20 страниц обсуждения,
чтобы такие пользователи могли программно менять регистр,
а интерактивно - нет
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан