Имя: Пароль:
1C
1С v8
Запретить изменение документов с установленными признаками БУ или НУ
0 AliceLight
 
31.08.15
10:46
Добрый день!
Конфа УПП 1.3.66.2, платформа 8.2.19.83.
Проблема такая: для всех документов, у которых есть реквизиты "Отражать в бух. учете" и "Отражать в нал. учете", нужно запретить изменение документа, если эти галки установлены (вернее, хотя бы 1 установлена).
Думала сделать так: подписка на событие "ПередЗаписью", в ней через Источник и Источник.Ссылка проверяем, изменена ли какая-нибудь из галок, если изменена - шлем на фиг, ничего не записываем. Естественно, перед этим проверю, есть ли в документе вообще такой реквизит.
Но такое вариант не сработает, ведь пользователь может убрать галку, натворить дел, а затем поставить галку обратно.
Никак не соображу, как исключить такой вариант.
Насколько поняла, роль "ОтражениеВРегламентированномУчете" мне мало поможет. Или это неверно?
Кто может предложить какие-то иные способы?
1 EugeniaK
 
31.08.15
10:47
(0) А зачем проверять, изменена ли галка?
2 EugeniaK
 
31.08.15
10:48
Если она вообще была установлена т.е. ссылка.ОтражатьБУ = Истина, то просто не записываем документ.
3 AliceLight
 
31.08.15
10:50
ничего себе я глобальненько стормозила
4 Azverin
 
31.08.15
10:57
(2) а проводить документы по БУ как тогда?)
5 Azverin
 
31.08.15
10:59
(0) для запрета изменения документов используйте стандартный механизм. с допилом)
6 Azverin
 
31.08.15
11:02
(0) у меня такой вопрос решён разграничением прав на отражение в БУ (роль "ОтражениеВРегламентированномУчете"): одни пользователи работают только с УУ, а кто-то с УУ и БУ. После проведения по БУ, пользователь с УУ идёт к пользователю с БУ за изменением.
7 AliceLight
 
31.08.15
11:03
Хм. EugeniaK, такой вариант тоже не пойдет, т.к. нужно оставить возможность проводить документ. Как в подписке поймать, что документ был в целом изменен? Модифицированность с "Источник" не работает.
Еще деталь, о которой не сказала: все вышеуказанное запрещать нужно только тем, у кого нет полных прав либо специально для этой цели добавленной роли.
Кроме этого, устанавливать галки тоже нужно запретить.
8 AliceLight
 
31.08.15
11:04
Azverin, вы не могли бы рассказать поподробнее? То есть просто не давать роль  "ОтражениеВРегламентированномУчете" кому не надо?
9 Cube
 
31.08.15
11:10
10 Serg_1960
 
31.08.15
11:25
(0) Разберись внимательно как работает механизм типовой конфигурации по дате запрета редактирования (НастройкаПравДоступа.ОпределитьДоступностьВозможностьИзмененияДокументаПоДатеЗапрета) - в него легко внести нужные Вам изменения (в функцию ПолучитьПараметрыПроверкиДокумента).
11 AliceLight
 
31.08.15
11:26
(9) по ссылке совсем не тот случай, т.к. в моей задаче пользователь должен иметь возможность провести такие документы. Пользователю без нужной роли нельзя снимать галки БУ, НУ; ставить галки БУ, НУ; и изменять документ, если они установлены. Проводить,ничего не меняя - можно.
(10) спасибо, сейчас попробую.
12 Cube
 
31.08.15
11:36
(11) Чего не тот-то? Условия свои вставляй и вперде...
Не забудь, что есть не только Источник, но и Источник.Ссылка...
13 Serg_1960
 
31.08.15
11:43
(11) "Пользователю без нужной роли нельзя снимать галки БУ, НУ; ставить галки БУ, НУ" - это типовой механизм конфигурации. В формах документа есть вызов РаботаСДиалогами.УправлениеПризнакомОтраженияВРеглУчете() - управление доступностью (изменение) к признакам проведения по БУ и НУ.
14 AliceLight
 
31.08.15
11:48
(12) вот мой код после подсказки EugeniaK:
ЕстьРеквизитБУ = Источник.Метаданные().Реквизиты.Найти("ОтражатьВБухгалтерскомУчете");
    ЕстьРеквизитНУ = Источник.Метаданные().Реквизиты.Найти("ОтражатьВНалоговомУчете");
    Если (ЕстьРеквизитБУ <> Неопределено ИЛИ ЕстьРеквизитНУ <> Неопределено) И (НЕ (РольДоступна("Бухгалтер") ИЛИ РольДоступна("ПолныеПрава"))) Тогда
        Если (Источник.Ссылка.ОтражатьВБухгалтерскомУчете = Истина ИЛИ Источник.Ссылка.ОтражатьВНалоговомУчете = Истина) Тогда
            сообщить("У документа " + Источник.Ссылка+ " установлены признак БУ или НУ: у вас недостаточно прав для изменения!");
            Отказ = Истина;
        ИначеЕсли (Источник.Ссылка.ОтражатьВБухгалтерскомУчете <> Источник.ОтражатьВБухгалтерскомУчете) ИЛИ (Источник.Ссылка.ОтражатьВНалоговомУчете <> Источник.ОтражатьВНалоговомУчете) Тогда
            сообщить("Документ " + Источник.Ссылка+ ": недостаточно прав для изменения отражения документа в БУ или НУ!");
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;

Итак, что получаем: зашел пользователь без указанных ролей в документ с галками и решил его перепровести: попал в первое условие, получил ругательство и не смог провести документ (при проведении ж подписка "ПередЗаписью") должна сработать.
Или: зашел пользователь в документ без галок, установил галки, изменил что-то попытался записать, попал во 2е условие, получил ругательства. А затем поставил галки обратно в измененном документе и записал. То есть дел натворил.
А задача в том, чтобы если галки стоят - перепроводил он сколько душе угодно, но ничего в самом документе не менял.
Если не стоят - и не ставил.
15 AliceLight
 
31.08.15
11:55
(13) в параметрах есть УправлениеПризнакомОтраженияВРеглУчете() есть "Форма", ее не получится использовать в подписке.
если б 1-2 документа было, это просто, а мне нужно для всех... Другого выхода, кроме подписки, не вижу, т.к. даже примерно представить у скольких документов в УПП есть эти гребаные признаки, страшно.
16 Azverin
 
31.08.15
12:03
(8) куда уж подробнее? что не понятно?
17 Azverin
 
31.08.15
12:03
(8) да, роль "ОтражениеВРегламентированномУчете" + допю. право отсутствует у некоторых пользователей.
18 Cube
 
31.08.15
12:10
(14) "но ничего в самом документе не менял"
Ну и где у тебя проверка, что он ничего не поменял? Платформа телепатировать не умеет...
19 Mirnin
 
31.08.15
12:11
ПриОткрытии, ТолькоЧтение = Истина. Для галок, табличных частей и остального что нельзя менять.
20 Cube
 
31.08.15
12:11
+(18) Попробуй через ВерсияДанных сделать такую проверку. На сколько помню, она для этого и придумана была...
21 AliceLight
 
31.08.15
12:14
(18) так и нет у меня такой проверки, я знаю. В (7) я и спрашивала: "Как в подписке поймать, что документ был в целом изменен? Модифицированность с "Источник" не работает.".
За подсказку с ВерсияДанных спасибо, ей еще не приходилось пользоваться, попробую.
и с ролью "ОтражениеВРегламентированномУчете" сейчас попробую поиграться, (17) спасибо
22 AliceLight
 
31.08.15
12:23
(20) нет, версия данных меняется при каждом сохранении объекта. После сохранения мне пользователя только поругать остается, данные-то он уже покоцает.
23 Cube
 
31.08.15
12:33
(22) То есть, ты хочешь сказать, что если открыть документ, то у него Объект.ВерсияДанных не совпадет с Ссылка.ВерсияДанных?
24 Azverin
 
31.08.15
13:01
(21) не придумывайте самокатов - есть штатный функционал для этого.
25 John83
 
31.08.15
14:21
все не читал, но чем плохо ОтражениеВРегламентированномУчете?
если права нет, то при любом раскладе пользователь идет лесом
26 AliceLight
 
01.09.15
11:37
Всем спасибо, разобралась со штатным функционалом ("ОтражениеВРегламентированномУчете" и доп.право "Разрешать отражать в регл.учете")
велосипеды и самокаты убрала)
Закон Брукера: Даже маленькая практика стоит большой теории.