Не пойму логику условия

1. sasha-asn 12.12.19 15:42 Сейчас в теме
Уважаемые эксперты, пожалуйста подскажите логику условия! Какой же хочется закричать от беспомощности, голова не варит! Прошу Вас помогите

У меня есть документ; есть перечисление с тремя реквизитами (А,Б,В); и есть Роль

У меня есть два варианта событий -
1 вариант) Если роль не доступна и/или в документе не выбрано данное перечисление А -> Тогда записать документ нельзя
2 вариант) Если роль доступна тогда можно выбрать любое из перечислений (А,Б,В)

Я написал так и мой код не работает -
Если НЕ РольДоступна("ЭтаСамаяРоль") ИЛИ НЕ Перечисления.ВидыОпераций.А = Истина
Тогда Отказ = Истина;
Сообщить("Нет роли и выбрали вид операции Списание А - Вам не положено");
Иначе
Сообщить("Можно выбрать операцию Списания");    
Отказ = Ложь;
КонецЕсли;
По теме из базы знаний
Найденные решения
43. Sashares 34 12.12.19 17:43 Сейчас в теме
(40)При сравнении с перечислением - сравнивай реквизит документа, в котором это перечисление пользователь выбирает.
Реквизит документа и значение перечисления.
Сейчас ты сравниваешь значение перечисления и Истина.
mrChOP93; user774630; sasha-asn; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. TrofimovOK 12.12.19 16:53 Сейчас в теме
(1) Более правильное условие такое:
Если НЕ РольДоступна("ЭтаСамаяРоль") И НЕ Перечисления.ВидыОпераций.А = Истина Тогда // 1 вариант) Если роль не доступна и в документе не выбрано перечисление А 
    Отказ = Истина;
    Сообщить("Нет роли и выбрали вид операции Списание А - Вам не положено");
ИначеЕсли РольДоступна("ЭтаСамаяРоль") И Не ЗначениеЗаполнено(Перечисления.ВидыОпераций) // Если роль доступна тогда можно выбрать любое из перечислений (А,Б,В)
    Сообщить("Можно выбрать операцию Списания");    
КонецЕсли;
12. Denis_CFO 48 12.12.19 16:57 Сейчас в теме
(1)
Если НЕ РольДоступна("ЭтаСамаяРоль") ИЛИ НЕ Перечисления.ВидыОпераций.А = Истина

что за *овнокод??? Вот здесь: Перечисления.ВидыОпераций.А = Истина???
2. VmvLer 12.12.19 15:47 Сейчас в теме
последний раз мне хотелось
закричать от беспомощности

когда я хотел пойти на "Аванопст" и в кассе кинотеатра
мне шепнули: "Не ходи"

тс лукавит или пишет сценарий второй части на то, куда я не ступил.
4. FetisovAN 12.12.19 15:49 Сейчас в теме
3. FetisovAN 12.12.19 15:48 Сейчас в теме
постановка задачи у вас интересная "и/или" - понимай как хочешь :)

Но судя по всему Либо у сотрудника есть роль, либо он может использовать только А.

Так и пишите условие :

Если РольДоступна ИЛИ А тогда
     "можно"
Иначе
     "нельзя"
11. sasha-asn 12.12.19 16:55 Сейчас в теме
(3) на счёт И/ИЛИ поясню:


(8) не пока что разбираюсь
13. Denis_CFO 48 12.12.19 16:59 Сейчас в теме
(11)
НЕ РольДоступна("ЭтаСамаяРоль") ИЛИ РеквизитДокументаСПеречислением <> Перечисления.ВидыОпераций.А Тогда
5. Lenten 25 12.12.19 15:59 Сейчас в теме
и еще аккуратнее с переменно Отказ
если до вашей процедуры он стал Отказ= истина , вы своим Отказ= Ложь можете ситуацию поменять, что не верно
FetisovAN; +1 Ответить
6. FetisovAN 12.12.19 16:12 Сейчас в теме
(5) Отказ = Ложь просто не надо писать. Если нельзя - то Отказ Истина, если можно то ничего не делать ...
7. Aftee 12.12.19 16:47 Сейчас в теме
Хрень какая-то в постановке задачи )
Получается, что если не выбрано А, тогда должна быть доступна роль, чтобы записать документ? А если выбрано А, тогда роль не имеет значения и документ можно записать. Так?


Если Не А И Не РольДоступна Тогда
//не записываем
Иначе
//записываем
КонецЕсли;
8. micha26 12.12.19 16:51 Сейчас в теме
9. micha26 12.12.19 16:51 Сейчас в теме
Отладчик то что пишет?
15. sasha-asn 12.12.19 17:04 Сейчас в теме
(9) что именно? где в какой переменной? что посмотреть в отладчике?
22. micha26 12.12.19 17:19 Сейчас в теме
(15)
* Вот здесь точка останова -Если НЕ РольДоступна("ЭтаСамаяРоль") ИЛИ НЕ Перечисления.ВидыОпераций.А = Истина
Тогда Отказ = Истина;
Сообщить("Нет роли и выбрали вид операции Списание А - Вам не положено");
Иначе
Сообщить("Можно выбрать операцию Списания");    
Отказ = Ложь;
КонецЕсли;

Что именно не работает?
23. Denis_CFO 48 12.12.19 17:23 Сейчас в теме
(22)
НЕ Перечисления.ВидыОпераций.А = Истина
- вот здесь точно не работает :)
поэтому у него в этой строке
НЕ РольДоступна("ЭтаСамаяРоль") ИЛИ НЕ Перечисления.ВидыОпераций.А = Истина
всегда будет Ложь.
25. micha26 12.12.19 17:25 Сейчас в теме
(23)Эм, тут надо сравнивать со значением перечисления а не с истиной.
29. Denis_CFO 48 12.12.19 17:28 Сейчас в теме
(25) так я ему это ещё в (13) сказал, а он всё ешё сравнивает :)
30. micha26 12.12.19 17:28 Сейчас в теме
(29)Ну упорство хорошее качество )))))
27. sasha-asn 12.12.19 17:26 Сейчас в теме
(23) Если убрать Истину у "Перечисления.ВидыОпераций.А" тогда ошибка - Преобразование значения к типу Булево не может быть выполнено
31. Denis_CFO 48 12.12.19 17:30 Сейчас в теме
(27)
Если убрать Истину у "Перечисления.ВидыОпераций.А" тогда ошибка
все правильно, потому что только при таком условии будет истина:
Перечисления.ВидыОпераций.А = Перечисления.ВидыОпераций.А

реквизит документа сравнивай с перечислением.
sasha-asn; +1 Ответить
41. Sashares 34 12.12.19 17:42 Сейчас в теме
(23)
всегда будет Ложь.

Всегда будет Истина же.
Denis_CFO; +1 Ответить
42. Denis_CFO 48 12.12.19 17:43 Сейчас в теме
(41) Точно, про НЕ забыл, спс.
24. sasha-asn 12.12.19 17:25 Сейчас в теме
(22) условие не срабатывает, ошибок в название реквизитов нет, проверок других при записи - тоже нет
Если НЕ РольДоступна("ЭтаСамаяРоль") ИЛИ НЕ Перечисления.ВидыОпераций.А = Истина
Тогда Отказ = Истина;
14. sasha-asn 12.12.19 17:04 Сейчас в теме
Товарищи, подскажите есть Процедура при Записи, там нет до этого Отказов, делаю проверку, но она почему то не срабатывает, реквизиты правильно указал

Если НЕ РольДоступна("АСН_РазрешитьВидОперацииСписаниеУКорректировки") И НЕ Перечисления.ВидыОперацийКорректировкаДолга.СписаниеЗадолженности = Истина Тогда  
    Отказ = Истина;
    Сообщить("Нет роли и выбрали вид операции Списание А - Вам не положено");
ИначеЕсли РольДоступна("АСН_РазрешитьВидОперацииСписаниеУКорректировки") И Не ЗначениеЗаполнено(Перечисления.ВидыОперацийКорректировкаДолга) Тогда
	Сообщить("Можно выбрать операцию Списания");
КонецЕсли;
16. sasha-asn 12.12.19 17:05 Сейчас в теме
(14) это более подробно без всяких А, Б, В....
17. Denis_CFO 48 12.12.19 17:06 Сейчас в теме
(14)
НЕ Перечисления.ВидыОперацийКорректировкаДолга.СписаниеЗадолженности = Истина

Да что же ты значение перечисления с Истиной то сравниваешь???
18. sasha-asn 12.12.19 17:07 Сейчас в теме
(17) Истина если у меня выбрано именно это перечесление

А как иначе? предложите пожалуйста
19. sasha-asn 12.12.19 17:08 Сейчас в теме
(18) как мне указать что именно вот это пересечение одно из трёх выбрано, тогда Записать можно
20. Denis_CFO 48 12.12.19 17:09 Сейчас в теме
21. Denis_CFO 48 12.12.19 17:13 Сейчас в теме
(18)
Истина если у меня выбрано именно это перечесление


Кто знает, что именно ЭТО ЗНАЧЕНИЕ выбрано? В представленном коде этого нет.
sasha-asn; +1 Ответить
26. micha26 12.12.19 17:26 Сейчас в теме
(18)так со значением перечисления-то сравни.
sasha-asn; +1 Ответить
28. micha26 12.12.19 17:27 Сейчас в теме
НЕ Перечисления.ВидыОпераций.А = Истина

Один цэ не знает что у тебя выбрано. Какую ошибку отладчик пишет? давай так.
sasha-asn; +1 Ответить
32. micha26 12.12.19 17:31 Сейчас в теме
Топик стартер - ты жив?
sasha-asn; +1 Ответить
36. sasha-asn 12.12.19 17:39 Сейчас в теме
(32) я думаю) спасибо что подсказываете
38. micha26 12.12.19 17:41 Сейчас в теме
(36)Ну хоть живой. И слава Богу.
sasha-asn; +1 Ответить
33. Denis_CFO 48 12.12.19 17:32 Сейчас в теме
он у Волшебника то же самой спрашивает... А ему то же самое и отвечают. Алгоритм от форума то не зависит. А тут всё просто: ТС-у надо отдохнуть :)
sasha-asn; +1 Ответить
34. micha26 12.12.19 17:35 Сейчас в теме
(33)Ну, ладно, авось дойдет.
sasha-asn; +1 Ответить
35. Sashares 34 12.12.19 17:39 Сейчас в теме
(33)
А тут всё просто: ТС-у надо отдохнуть :)

Да, тут без пол-литра не разобраться =)))
sasha-asn; +1 Ответить
37. sasha-asn 12.12.19 17:40 Сейчас в теме
(33) спасибо) вроде тривиальная задача, но чото я повис на ней
39. sasha-asn 12.12.19 17:41 Сейчас в теме
всем спасибо за подсказки, надеюсь до меня дойдет
40. sasha-asn 12.12.19 17:42 Сейчас в теме
ребят, а можете на примере моего полный код написать, где я ошибся?
43. Sashares 34 12.12.19 17:43 Сейчас в теме
(40)При сравнении с перечислением - сравнивай реквизит документа, в котором это перечисление пользователь выбирает.
Реквизит документа и значение перечисления.
Сейчас ты сравниваешь значение перечисления и Истина.
mrChOP93; user774630; sasha-asn; +3 Ответить
44. user809472 13.12.19 09:55 Сейчас в теме
Постановка задачи - бред какой-то. А что вам мешает написать так, как советуют коллеги?
Исправьте условие по реквизиту с типом Перечисление.

Если НЕ РольДоступна("ЭтаСамаяРоль") ИЛИ <ТвойКакойтоРеквизит <> Перечисления.ВидыОпераций.А Тогда 
        Отказ = Истина;
        Сообщить("Нет роли и/или выбрали вид операции Списание А - Вам не положено");
Иначе
        Сообщить("Можно выбрать операцию Списания");    
КонецЕсли;
45. sasha-asn 13.12.19 10:10 Сейчас в теме
Всем спасибо кто помогал! Реально помогло отдохнуть, прийти на работу и сделать

Если НЕ РольДоступна("АСН_РазрешитьВидОперацииСписаниеУКорректировки") И ВидОперации = Перечисления.ВидыОперацийКорректировкаДолга.СписаниеЗадолженности
	Тогда Отказ = Истина;
	Сообщить("Нет роли и выбрали вид операции Списание А - Вам не положено");
ИначеЕсли РольДоступна("АСН_РазрешитьВидОперацииСписаниеУКорректировки")
	Тогда Отказ = Ложь;
	Сообщить("Роль доступно, документ можно записать");
КонецЕсли;
46. Sanella_nt 14.12.19 12:43 Сейчас в теме
Ну тебе написали же

Если Не А И Не РольДоступна Тогда
//не записываем
Иначе
//записываем
КонецЕсли;
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот