Доброе время суток, вопрос скорей всего глупый и для многих не составит труда его реализовать но я не смог, есть база Бухгалтерия предприятия КОРП, редакция 3.0 редакция 3.0 (3.0.67.54), нужно закрыть в документе поле дата для всех кроме одного пользователя, подскажите как можно это реализовать.
Заранее спасибо
---
Создайте отдельную роль, например "РедактированиеДатыДокументов", отключите у нее все права. Назначьте ее нужным пользователям. В обработчике создания формы напишите:

```1c
    Если Не Пользователи.РолиДоступны("РедактированиеДатыДокументов") Тогда
    Элементы.Дата.Доступность = Ложь;
    КонецЕсли;
```
---
Ну вот если совсем просто и не брежно можно написать что то вроде этого:

```1c
    Если ИмяПользователя() = "Иванов Иван Ивановнич" Тогда
    Элементы.Дата.Доступность = Истина;
    Иначе
    Элементы.Дата.Доступность = Ложь;
    КонецЕсли
```
---
закрыть всем я сделал

```1c
    Процедура ПриОткрытии(Отказ)

    Элементы.Дата.Доступность = Ложь;

    КонецПроцедуры
```
---
Создайте отдельную роль, например "РедактированиеДатыДокументов", отключите у нее все права. Назначьте ее нужным пользователям. В обработчике создания формы напишите:

```1c
    Если Не Пользователи.РолиДоступны("РедактированиеДатыДокументов") Тогда
    Элементы.Дата.Доступность = Ложь;
    КонецЕсли;
```
---
Создайте отдельную роль, например "РедактированиеДатыДокументов", отключите у нее все права. Назначьте ее нужным пользователям. В обработчике создания формы напишите:

выдает ошибку Переменная не определена (Пользователи)
---
Вы точно написали приведенный мной код в обработчике "ПриСозданииНаСервере", а не "ПриОткрытии"?
---
) Вы точно написали приведенный мной код в обработчике "ПриСозданииНаСервере", а не "ПриОткрытии"?

при создании все отработало, спасибо, а как сделать что бы при открытии?
---
Например использовать серверный метод для проверки:

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)

    Если Не РедактированиеДатыДоступно() Тогда
    Элементы.Дата.Доступность = Ложь;
    КонецЕсли;

    КонецПроцедуры

    &НаСервереБезКонтекста
    Функция РедактированиеДатыДоступно()
    Возврат Пользователи.РолиДоступны("РедактированиеДатыДокументов");
    КонецФункции
```

Но зачем? :)
---
Для развития...

Спасибо за помощь!!!
---
обработчике создания формы напишите

А как сделать что бы при открытии то же такое правило действовало?
---
Ну вот если совсем просто и не брежно можно написать что то вроде этого:

```1c
    Если ИмяПользователя() = "Иванов Иван Ивановнич" Тогда
    Элементы.Дата.Доступность = Истина;
    Иначе
    Элементы.Дата.Доступность = Ложь;
    КонецЕсли
```
---
Спасибо такой вариант для открытия подошел.
---
Знаю я таких программистов. Не учите неправильному коду. Потом начинаешь разбираться с чужим кодом, действуешь по наитию "правильно" - ищешь проблему в ролях, а находишь такие ляпы страшные.

Потратьте время и научитесь правильным решениям, чтобы за свой труд не стыдно было.
---
Я когда предложил я явно указал - цитирую "Ну вот если совсем просто и не брежно можно написать что то вроде этого: ". Понятно что это очень не красиво, ну это вариант. Одну задачу можно решить разными способами, ну а от того какой способ правильный каждый для себя принимает сам. Если Вы заботитесь о том что когда то ваши наработки будет кто то еще разбирать то да тут нужно думать как лучше написать. А с другой стороны что тут не правильно, можно и так предложить и по другому предложить все будет работать. Что не правильного??? Понятия правильно ни где не описано. Есть задача которую нужно решить а решить ее можно по разному. Это тоже самое что 2+2 = 4 и 1 + 1+ 1+1 = 4 и 2*2 = 4 или 2 в степени 2 тоже 4. Ведь ответ один и тот же а подход разный. Тут нужно понимать с точки зрения логики правильный подходит или нет, но не как само решение. А вот как правильно писать - ни где еще не видел такую прям инструкцию. Есть рекомендации и не более того. Так что вот!
---
Соглашусь с вами частично. Это мое мнение, что если программист (разработчик) имеет опыт и знает несколько способов решения, то стоит об этом упомянуть, когда даешь плохой совет. Иначе складывается ощущение, что кроме 2+2 вы не знаете другой арифметики.

Понятия правильно ни где не описано. Есть задача которую нужно решить а решить ее можно по разному.
Почитайте желтые книжки, там все прекрасно описано каким должен быть код. Когда задача решается в одно действие, то при наличии минимального опыта будет достаточно решить ее правильно. При увеличении объема работы увеличивается риск допустить ошибки и принять не правильные решения - это и есть опыт, который определяет ваш уровень.
---
и еще добавляю к написаному - это не ляп. ЛЯПЫ это когда 2+2 = 5 вот это ляп. А то что вам трудно как то разобраться в чужом коде ну тут напишу вашими словами "Знаю я таких программистов". Знаете когда пишут конфигурации специалисты 1С - знаеете там тоже иногда не ту логики, особенно касательно ранее вышедших конфигураций типа 1С УПП, торговля 10 и др. Это сейчас у них подход к написанию как то унифицировался и новые решения они уже более обдумано пишутся, но и то бывает встречаешь код типа по 10 раз одну и туже таблицу обходят и что то проверяют - но сам конечный результат он верен!
---
Вы оправдываете свою некомпетентность.
Таким образом, можно на любой вопрос отвечать простым ответом в стиле - правьте все руками в коде конфигурации.
Такие ответы - это не то, что изобретение велосипеда, а какого-то ненужного механизма.

Возможно, вы хороший программист и имеете хороший опыт, но как человек - даете неправильные советы. Вместо того, чтобы писать тирады мне, лучше потратьте время на автора.

Ну вот, исправил одного человека, остался еще один миллион (шутка).