Имя: Пароль:
1C
1С v8
Права пользователя в УПП 1.3
,
0 demonprodigy
 
09.08.18
17:36
Здравствуйте, подскажите.
Как называется право на то, чтобы была возможность редактировать документ "Заявка на расходование денежных средств" в состоянии "К рассмотрению"
Не могу найти, если конечно это типовая роль. Благодарю заранее.
3 dchumak
 
10.08.18
03:48
Редактирование разрешается не по роли, а по согласованию заявки.

Процедура ПриОткрытии()
...
Если НЕ ЭтоНовый() Тогда
        //Если используется функционал согласования заявок - проверим можно ли редактировать заявку
        Если НЕ ЭтаФорма.ТолькоПросмотр Тогда
            ЭтаФорма.ТолькоПросмотр = НЕ УправлениеДенежнымиСредствами.РазрешеноИзменениеЗаявки(Ссылка);
        КонецЕсли;
    КонецЕсли;


Функция РазрешеноИзменениеЗаявки(ДокументСсылка, ТекстСообщенияПользователю = "") Экспорт
    Если НЕ ИспользуетсяСогласованиеЗаявок(ДокументСсылка.Организация, ДокументСсылка.Дата) Тогда
        Возврат Истина;
    КонецЕсли;
    ТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
    //Получим маршруты согласования, в которых текущий пользователь назначен основным
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ
    |    Ссылка КАК МаршрутСогласования
    |ПОМЕСТИТЬ МаршрутыТекущегоПользователя
    |ИЗ Справочник.МаршрутыСогласования.СогласующиеЛица
    |ГДЕ Пользователь = &ТекПользователь
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ
    |СостоянияСогласования.Состояние,
    |СостоянияСогласования.Этап,
    |СостоянияСогласования.Пользователь,
    |СостоянияСогласования.Уровень,
    |СогласующиеЛица.Пользователь             КАК СледующийСогласующий,
    |ВЫБОР КОГДА
    |        СостоянияСогласования.Этап В ИЕРАРХИИ
    |            (ВЫБРАТЬ МаршрутСогласования ИЗ МаршрутыТекущегоПользователя)
    |        И СостоянияСогласования.Этап НЕ В
    |            (ВЫБРАТЬ МаршрутСогласования ИЗ МаршрутыТекущегоПользователя)
    |ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ             КАК НижестоящийЭтапСогласования
    |ИЗ РегистрСведений.СостоянияСогласованияЗаявок.СрезПоследних(,Заявка = &ТекущаяЗаявка) КАК СостоянияСогласования
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |    Справочник.МаршрутыСогласования.СогласующиеЛица КАК СогласующиеЛица
    |    ПО СогласующиеЛица.Ссылка = СостоянияСогласования.Этап.Родитель
    |";
    Запрос.УстановитьПараметр("ТекПользователь", ТекущийПользователь);
    Запрос.УстановитьПараметр("ТекущаяЗаявка", ДокументСсылка);
    РезультатыЗапросов = Запрос.ВыполнитьПакет();
    Выборка = РезультатыЗапросов[1].Выбрать();
    //Маршрут согласования заявки не определен
    Если НЕ Выборка.Следующий() Тогда
        Возврат Истина;
    КонецЕсли;
    //Заявка еще не начала проходить по маршруту согласования
    Если НЕ ЗначениеЗаполнено(Выборка.Состояние) ИЛИ Выборка.Состояние = Перечисления.СостоянияОбъектов.Подготовлен Тогда
        Возврат Истина;
    //Заявка уже согласована к оплате
    ИначеЕсли Выборка.Состояние = Перечисления.СостоянияОбъектов.Утвержден Тогда
        ТекстСообщенияПользователю = НСтр("ru = 'Утвержденная заявка не может быть изменена.'");
        Возврат Ложь;
    Иначе
        //Заявка проходит по маршруту согласования.
        //    Возможность изменения зависит от пользователя, который пытается изменить заявку
        //Заявка в процессе согласования у текущего пользователя (в состоянии Отложен или Отклонен)
        Если Выборка.Пользователь = ТекущийПользователь И
            (Выборка.Состояние = Перечисления.СостоянияОбъектов.Отклонен ИЛИ
            Выборка.Состояние = Перечисления.СостоянияОбъектов.Отложен) Тогда
            Возврат Истина;
        //Заявка перешла на согласование текущему пользователю
        ИначеЕсли Выборка.Состояние = Перечисления.СостоянияОбъектов.Согласован И
            (Выборка.СледующийСогласующий = ТекущийПользователь) Тогда
            Возврат Истина;
        //Заявка находится на согласовании у "нижестоящих" этапов согласования
        ИначеЕсли Выборка.НижестоящийЭтапСогласования Тогда
            Возврат Истина;
        КонецЕсли;
    КонецЕсли;
    ТекстСообщенияПользователю = НСтр("ru = 'Заявка в процессе согласования, не может быть изменена.'");
    Возврат Ложь;
КонецФункции