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