Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 13:07

Изменить внешней обработкой роли в документах

Автор skillful, 25 авг 2018, 12:47

0 Пользователей и 1 гость просматривают эту тему.

skillful

Здравствуйте. Есть 1с она будет часто обновляться. Сложность в том, что в конфигураторе в 15 документах особым способом назначены роли. Т. е. я вручную сидел и в 15 документах такие как "Счет на оплату, счета-фактуры и т.д." изменял роли, допустим у роли "Полные права" стоят все галочки (чтение, добавление, изменения и т.д.), у другой роли уже другие галочки (чтение и добавление только). Так вот после обновлений конфигурации все эти мои настройки затираются и приходится опять проделать все эти манипуляции с 15-ю документами, к тому же их в будущем будет еще больше.

Собственно вопрос. Можно ли внешней обработкой автоматизировать этот процесс изменения в ролях. Допустим просто указать какие документы нужно изменить, допустим через запятую и какие галочки должны быть проставлены у определенных ролей. См. скриншот для наглядности.

AIFrame

Насоздавай своих ролей и не используй типовые, кроме базовой роли и полных прав.

skillful

Цитата: AIFrame от 25 авг 2018, 16:02
Насоздавай своих ролей и не используй типовые, кроме базовой роли и полных прав.
Т. к. начальство сказало, чтоб никакие документы не редактировались, то думаю сделать так:

Создать роль, включить в нее всех пользователей, снять галки у всех остальных ролей кроме "Полные права" и выставить запрет на редактирование абсолютно всех типов документов, а не только 15-ти (как на скриншоте). Тогда после обновления останется проделать это заново, а не сидеть у всех 15-ти документах править....

AIFrame

Цитата: skillful от 26 авг 2018, 19:14выставить запрет на редактирование
"Запрет редактирования" это такая же обычная роль, как любая другая. Хоть колбасой ее назови.
Платформенного механизма запрета (именно запрета, а не отсутствия разрешения) в 1С нет. А значит этот твой "Запрет редактирования" связан с подпиской на событие или общим модулем, который прописан во всех документах. А значит ты всем пользователям запретишь редактирование и уже никакими ролями, кроме полных прав (как правило, для них всегда делают исключение в коде), не разрешишь.
Делай свои роли, не изобретай велосипеды.

skillful

Цитата: AIFrame от 27 авг 2018, 04:41
Цитата: skillful от 26 авг 2018, 19:14выставить запрет на редактирование
"Запрет редактирования" это такая же обычная роль, как любая другая. Хоть колбасой ее назови.
Платформенного механизма запрета (именно запрета, а не отсутствия разрешения) в 1С нет. А значит этот твой "Запрет редактирования" связан с подпиской на событие или общим модулем, который прописан во всех документах. А значит ты всем пользователям запретишь редактирование и уже никакими ролями, кроме полных прав (как правило, для них всегда делают исключение в коде), не разрешишь.
Делай свои роли, не изобретай велосипеды.

Думаю сделать так: (во всяком случае работает в тестовой базе)

1. Создаешь "Подписку на событие". Источник-ДокументОбъект, Событие-ПередЗаписью, Обработчик-ЯПередЗаписьюВсехДокументов.ЯПодпискаПередЗаписьюВсехДокументов

2. В общих модулях "ЯПередЗаписьюВсехДокументов" в процедуре "ЯПодпискаПередЗаписьюВсехДокументов" делаешь, что хочешь. Я сделал так

Если НЕ Источник.Номер = "" Тогда

Соответственно если документ создан, проведен, записан, помечен на удаление, не проведен, то у документа есть уже "Номер", а значит сработает Если НЕ Источник.Номер = "" Тогда и соответственно все действия будут приостановлены...


А дальше можно спокойно обновлять конфу хоть каждый день. Настройки ролей на документах сбрасываются, а пункты которые сделал я (1 и 2) остаются в базе и запрет редактирования пожизненно остается в конфигураторе... Спасибо за помощь гуглу..

AIFrame

Цитата: skillful от 28 авг 2018, 22:07Соответственно если документ создан, проведен, записан, помечен на удаление, не проведен, то у документа есть уже "Номер", а значит сработает Если НЕ Источник.Номер = "" Тогда и соответственно все действия будут приостановлены...
ДокументОбъект.ЭтоНовый() :kmtu:
Если ПустаяСтрока(Источник.Номер) Тогда :kmtu:

skillful

Цитата: AIFrame от 29 авг 2018, 01:40
Цитата: skillful от 28 авг 2018, 22:07Соответственно если документ создан, проведен, записан, помечен на удаление, не проведен, то у документа есть уже "Номер", а значит сработает Если НЕ Источник.Номер = "" Тогда и соответственно все действия будут приостановлены...
ДокументОбъект.ЭтоНовый() :kmtu:
Если ПустаяСтрока(Источник.Номер) Тогда :kmtu:

Спасибо. Изменил. А как сделать, чтобы "записанный" документ можно было "провести" (удалить, пометить на удаление - нельзя) только провести.

alex0402

Цитата: skillful от 29 авг 2018, 18:23А как сделать, чтобы "записанный" документ можно было "провести" (удалить, пометить на удаление - нельзя) только провести.

Объекте перед записью проверять текущее состояние запросом и новое Проведен,ПометкаУдаления.
Спасибо за Сказать спасибо

AIFrame

Зачем запросом? Ссылка. И перед записью Ссылка все еще в старом состоянии.
Если Ссылка.Проведен и РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда // это перепроведение

Для подписки на событие где будет Источник как ДокументОбъект - Источник.Ссылка.Проведен и т.д.

skillful

Сделал так:

Если ДокументПроведен истина ИЛИ ДокументПомеченНаУдаление ИЛИ ДокументПопыткаПометитьНаУдаление тогда
    Отказ;
КонецЕсли;


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

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск