Имя: Пароль:
1C
1С v8
УТ 11. Запрет редактирования документа пользователю
0 sanyaka
 
02.05.24
08:31
Всем привет.

Подскажите, как программно запретить определенному пользователю редактировать все документы старее сегодняшнего дня ?

Может есть общий метод который дергается при открытии любого документа и в котором можно сделать проверку на логин пользователя ?
1 Кондер
 
02.05.24
08:38
Установи дату запрета на вчера, программно!
2 arsik
 
гуру
02.05.24
08:38
А подсистема "дата запрета редактирования" вам ну никак не подходит?
3 Ненавижу 1С
 
гуру
02.05.24
08:43
(0) Есть типовые методы установки даты запрета, можно устанавливать отдельным пользователям. Ничего программировать не нужно. Надо изучать возможности продукта, а не изобретать велосипеды.
4 sanyaka
 
02.05.24
09:24
(2) (3) Спасибо.

Настройки пользователей и прав -> Даты запрета изменения
Для конкретного пользователя можно указать "Предыдущий день".
В принципе то что нужно.

Проверим.
5 Кондер
 
02.05.24
09:26
Аж обидно, вопрос стоял программно.
6 sanyaka
 
02.05.24
10:04
(5) В принципе я начал уже пробовать. Оставалось логин пользователя выдернуть и перечислить все документы.
Форма.ТолькоПросмотр = Истина - блокирует форму.

ОбщийМодуль.МодификацияКонфигурацииПереопределяемый

// Переопределяемая процедура, вызываемая из одноименного обработчика события формы.
//
// Параметры:
//     Форма - ФормаКлиентскогоПриложения - форма, из обработчика события которой происходит вызов процедуры.
//     ТекущийОбъект - ДокументОбъект, СправочникОбъект -
//
Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт

попытка     
     Если (ЗначениеЗаполнено(Форма.Объект.Ссылка)) тогда      
        
         Если (Форма.ИмяФормы = "Документ.ПриходныйКассовыйОрдер.Форма.ФормаДокумента" или
             Форма.ИмяФормы = "Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента") тогда
             Если (Форма.Объект.Дата < НачалоДня(ТекущаяДата())) тогда
                 //Форма.ТолькоПросмотр = Истина;  
             конецесли;
         конецесли;
        
     конецесли;              
    
исключение    
конецпопытки;
    
    
КонецПроцедуры
7 unbred
 
02.05.24
10:32
Надеюсь, тебе завтра добавят ещё одного пользователя, которому тоже нужно будет запретить что-либо программно.
а послезавтра ещё одного.
8 sanyaka
 
03.05.24
06:41
Поставили дату запрета изменения.
Пока столкнулись с тем, что документы "Заказ клиента" можно править вне зависимости от даты запрета.
Подскажите, почему так ?
9 sanyaka
 
03.05.24
08:01
Где-то в интернете нашел:
"Если документ не является проводкообразующим (как например, заказ клиента), он не создает движений по финансовым регистрам.
Поэтому при установке даты запрета изменений он не блокируется."
10 sanyaka
 
03.05.24
08:05
(7) В коде завязаться не на логин, а на роль как вариант.
11 DrZombi
 
гуру
03.05.24
08:16
(8) Где-то на просторах БСП, есть модуль, где обозначают списки документов, регистров и прочей ерунды, где надо искать реквизит "Дата", для блокировки документа на изменения.

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

Пример в БП 3.0, это общий модуль "ДатыЗапретаИзмененияПереопределяемый" - Процедура "ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения"

Но его производители конфигураций переназначают, так что придется немного поискать.

Пример кода, какой искать:



    ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.ВводНачальныхОстатков"                                               , "Дата" , "БухгалтерскийУчет", "Организация");
    ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.ВозвратМатериаловИзЭксплуатации"                                     , "Дата" , "БухгалтерскийУчет", "Организация");
    ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.ВозвратОСОтАрендатора"                                               , "Дата" , "БухгалтерскийУчет", "Организация");
    ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.ВозвратТоваровОтПокупателя"                                          , "Дата" , "БухгалтерскийУчет", "Организация");
    ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.ВозвратТоваровПоставщику"                                            , "Дата" , "БухгалтерскийУчет", "Организация");
    ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.ВосстановлениеНДС"                                                   , "Дата" , "БухгалтерскийУчет", "Организация");
    ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.ВосстановлениеНДСПоОбъектамНедвижимости"                             , "Дата" , "БухгалтерскийУчет", "Организация");


12 DrZombi
 
гуру
03.05.24
08:17
(9) Бред
13 Ненавижу 1С
 
гуру
03.05.24
11:39
(9) а зачем его блокировать? если он отгружен, то изменения не даст сделать, несинхронные с реализацией, а если не отгружен, то надо регл. заданием их закрывать
14 sanyaka
 
03.05.24
12:38
(11) спасибо. Нашел. Действительно отсутствует в этом коде документ заказа клиенту.
15 sanyaka
 
06.05.24
04:19
Вот такой вопрос.
Дата запрета изменения данных. По пользователям.
Для конкретного пользователя. Указывать дату запрета - по разделам.
Общая дата для всех разделов - предыдущий день.
Закупки - 01.01.2024.

При создании документа под этим пользователем - Приобретение товаров и услуг от 30.04.2024 выдает ошибку:
Расчеты с поставщиками с полем Регистратор = "Приобретение товаров и услуг УТЦБ-ХХХ от 30.04.2024" невозможно поместить в запрещенный период. Запрещено изменять данные с  датой ранее 05.05.2024 (включительно).

Подробнее:
Пользователю "Х" недоступно изменение, поскольку дата 30.04.2024 входит в запрещенный период по 05.05.2024 (установлена общая дата запрета).

Такими настройками, хотели запретить редактирование/создание всех документов старее сегодняшнего дня. За исключением документа "приобретение товаров и услуг" для него как исключение выставили отдельно в разделе закупки дату например 01.01.2024. Но видимо общая дата влияет. Подскажите, как правильно настроить.
16 sanyaka
 
06.05.24
07:08
Попробуем выставить общую дату например 01.01.24, для закупок 01.02.24, для всех остальных разделов - вчерашний день. Наверное, получим то что хотели.
17 unenu
 
06.05.24
09:56
(15)

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


Если ТекущийПользователь().ИдентификаторПользователяИБ = Новый УникальныйИдентификатор("178c2e3f-df0a-469c-b377-fbb206806ecd") Тогда // Иванов

Условия перепишите на может/не может. Если будут "гроздья", то проще свой рс слепить и одним условием проверять в этом методе