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

Переменная1 = "Частный покупатель";
 СтроковоеПредставление = Строка(Объект.Контрагент.ПолучитьОбъект());

 ЕСЛИ Найти(Строка(ПользователиКлиентСервер.ТекущийПользователь()),"Администратор") и СтроковоеПредставление = Переменная1
    тогда
   Отказ = Истина;
   Сообщить("НЕЗЯ");
  КонецЕсли;
---
СтроковоеПредставление = Строка(Объект.Контрагент.ПолучитьОбъект());
Вот это прям очень не очень. Хотя бы так делайте:

```1c
    СтроковоеПредставление = Строка(Объект.Контрагент);
```

А потом поднатореете и дойдёте до функции БСП "ЗначениеРеквизитаОбъекта" в общем модуле "ОбщегоНазначения", и что глобальная функция "Найти" уже устарела, и что проверять надо не имя пользователя, а его права и так далее и так далее.
Функция строки от ссылки/объекта Вам в случае со справочником Контрагент в большинстве случаев вернёт значение реквизита "наименование" этого контрагента, отсюда получается, что вот эта проверка "СтроковоеПредставление = Переменная1" вам вернёт истину, если будет полное совпадение, а так как наименование контрагента доступна для редактирования пользователям с соответствующими правами, то проживет ваше решение именно до того момента, пока пользователи не влезут в наименование. Скорее всего, это может и никогда не случиться. В рамках Вашего решения лучше проверять пару ИНН и КПП, они уникальны у нас в стране, например так:
Объект.Контрагент.ИНН = ИНН и Объект.Контрагент.КПП = КПП, определив выше эту пару ИНН и КПП по коду, как у Вас сделано с "Переменная1 ".
А так прям по правильному, то контрагентов, по которым требуется срабатывание условия, нужно выводить в какой-нибудь регистр сведений, к примеру, и организовать возможность его редактировать ответственному (назначить права доступа на такой регистр), а в условии уже проверять вхождение контрагента в этот регистр. Так Вы дадите пользователям контроль над данной проверкой, которая сегодня нужна, а завтра нет или нужна ещё по одному контрагенту. С текущем же решением проблемы Вы создали работу для программиста, так как когда понадобится изменение условия (нужен ещё по одному контрагенту, например), то пользователям потребуется помощь программиста, без него не смогут ничего сделать.
---
сравнение не верное
Объект.Контрагент тип ссылка
"Частный покупатель" тип строка
---
наймите программиста. Автор кода не понимает разницу между ссылкой и строкой, то есть не знает самых азов, ему учиться и учиться. Дешевле нанять программиста программировать, эффективнее. Задача копеечная.
---
Ну это понятное дело проще нанять, ну как я тогда научусь
---
научиться несложно, курсы, преподаватель, все объяснит. Не сразу же работать.
---
Я и не работаю программистом.
---
Как минимум, Радченко прочитай, а не лезь в "продакшн" без понимания как оно там работает
---
Хорошо, буду начинать изучать
---
Лопни мои глаза
---
Почитал как советовали все, в итоге разобрался

Переменная1 = "Частный покупатель";
 СтроковоеПредставление = Строка(Объект.Контрагент.ПолучитьОбъект());

 ЕСЛИ Найти(Строка(ПользователиКлиентСервер.ТекущийПользователь()),"Администратор") и СтроковоеПредставление = Переменная1
    тогда
   Отказ = Истина;
   Сообщить("НЕЗЯ");
  КонецЕсли;
---
СтроковоеПредставление = Строка(Объект.Контрагент.ПолучитьОбъект());
Вот это прям очень не очень. Хотя бы так делайте:

```1c
    СтроковоеПредставление = Строка(Объект.Контрагент);
```

А потом поднатореете и дойдёте до функции БСП "ЗначениеРеквизитаОбъекта" в общем модуле "ОбщегоНазначения", и что глобальная функция "Найти" уже устарела, и что проверять надо не имя пользователя, а его права и так далее и так далее.
Функция строки от ссылки/объекта Вам в случае со справочником Контрагент в большинстве случаев вернёт значение реквизита "наименование" этого контрагента, отсюда получается, что вот эта проверка "СтроковоеПредставление = Переменная1" вам вернёт истину, если будет полное совпадение, а так как наименование контрагента доступна для редактирования пользователям с соответствующими правами, то проживет ваше решение именно до того момента, пока пользователи не влезут в наименование. Скорее всего, это может и никогда не случиться. В рамках Вашего решения лучше проверять пару ИНН и КПП, они уникальны у нас в стране, например так:
Объект.Контрагент.ИНН = ИНН и Объект.Контрагент.КПП = КПП, определив выше эту пару ИНН и КПП по коду, как у Вас сделано с "Переменная1 ".
А так прям по правильному, то контрагентов, по которым требуется срабатывание условия, нужно выводить в какой-нибудь регистр сведений, к примеру, и организовать возможность его редактировать ответственному (назначить права доступа на такой регистр), а в условии уже проверять вхождение контрагента в этот регистр. Так Вы дадите пользователям контроль над данной проверкой, которая сегодня нужна, а завтра нет или нужна ещё по одному контрагенту. С текущем же решением проблемы Вы создали работу для программиста, так как когда понадобится изменение условия (нужен ещё по одному контрагенту, например), то пользователям потребуется помощь программиста, без него не смогут ничего сделать.
---
СтроковоеПредставление = Строка(Объект.Контрагент);
Хорошо, спасибо за информацию. Только такой момент что на этом контрагенте не записан ИНН и КПП, поэтому и ищу наименование.
---
Уже понял, спасибо) (11) полностью расписал
---
в таком случае можно зацепиться за реквизит "код". Если он не виден в карточке контрагента или в списке контрагентов, то смотрите в сторону изменить форму, эта кнопка находится в меню "ещё", скорее всего там просто надо галку поставить напротив этого реквизита. Реквизит "код" в справочниках 1С является уникальным в обычных случаях для всего справочника. Редко когда этот реквизит делают не уникальным, т.е. могут быть несколько записей с одинаковым кодом, так же возникают случаи задвоения по коду при переносах из других 1С, но это уже тонкости.

```1c
    Код ="000-001";
    Если Объект.Контрагент.Код = Код Тогда
    ...
    КонецЕсли;
```
---
Сообщить("НЕЗЯ"); Здесь ошибка - правильно "НИЗЗЯ"!!! :)
---
Вот это
```1c
    СтроковоеПредставление = Строка(Объект.Контрагент.ПолучитьОбъект());
```

Ни в какие ворота! Получать объект и его в строку? Это.... атас
Либо Строка(Объект.Контрагент), а лучше Объект.Контрагент.Наименование
---
Либо Строка(Объект.Контрагент), а лучше Объект.Контрагент.Наименование
по этому поводу, что тут лучше можно ещё поспорить. Насколько я знаю, то строка от ссылки вызывает запрос представления этой ссылки и только его тащит, а вот обращение к наименованию через точку вызовет запрос ко всем элементам ссылки и возвращать будет с сервера данные по всей ссылке. Так что оптимальнее всё же строка(ссылка)
---
Пока писал. Более конкретно разъяснили