Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Выполнение произвольного выражения (число прочтений - 6246 )
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Выполнение произвольного выражения
10. Октября 2008 :: 06:13
Печать  
Господа, подскажите, каким образом можно выполнить произвольное выражение из строки во время выпонения кода? Допустим, получил я строку из списка, а там написано "ТекущийЭлемент()". Вот я хочу вычислить значение этого выражения. В OLE есть EvalExpr(). А не через OLE?  Нерешительный
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #1 - 10. Октября 2008 :: 06:23
Печать  
Читай про ВыполняемыйМодуль
  
Наверх
ICQ  
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #2 - 10. Октября 2008 :: 06:26
Печать  
Спасибо огромное!!!  Очень довольный
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #3 - 10. Октября 2008 :: 06:40
Печать  
Есть еще сатндартный метод Шаблон()
  
Наверх
 
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #4 - 10. Октября 2008 :: 07:18
Печать  
Z1 писал(а) 10. Октября 2008 :: 06:40:
Есть еще сатндартный метод Шаблон()


Нет, это немного не то.
Вообще, может гуру скажут, стОит ли использовать этот ВыполняемыйМодуль в системе контроля прав пользователей?
Права нужно контролировать типа "Если у документа реквизит скидка между 10 и 15 процентами, то провести его может только менеджер отдела продаж". Вот и хочу в справочнике правил условия записывать в виде типа:

Код
Выбрать все
Результат = 0;
...
Если (Скидка >= 10) И (Скидка <=15) Тогда
	Результат = 0;
Иначе
	Результат = 1;
КонецЕсли;
 



Думаю, что понятно объяснил Улыбка
Может, я изначально иду в неправильном направлении и кто-нибудь меня направит в правильное русло?
Класс КонтрольПрав здесь на форуме смотрел, но это немножко не то. Мне нужно контролировать абсолютно всё, включая то, можем ли мы включить в отчет данные по контрагенту из определенной группы справочника. Также контроль пореквизитной видимости/доступности.

Может у кого работает что-то подобное?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #5 - 10. Октября 2008 :: 07:26
Печать  
ну и почему твое правило нельзя записать через шаблон ( хотя конечно выч. модуль  мощнее )
Код
Выбрать все
Результат = Шаблон("?( ( (Скидка >= 10) И (Скидка <= 15) ),1,0") 

  
Наверх
 
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #6 - 10. Октября 2008 :: 07:36
Печать  
Z1 писал(а) 10. Октября 2008 :: 07:26:
ну и почему твое правило нельзя записать через шаблон ( хотя конечно выч. модуль  мощнее )


Ну это одно из самых простых правил Улыбка А если мне нужно будет из справочников что-нибудь выбрать? Короче да, модуль намного мощнее.
Может по правам написать куда в другое место?
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #7 - 10. Октября 2008 :: 08:18
Печать  
Шаблон намного скромнее, чем ВыполняемыйМодуль.
Нет исключений, обработки ошибок, сообщения и предупреждения не показываются, и пр.
Нельзя описать процедуры, функции и обратиться к ним.
.
Для подобных целей и создан/поддерживается/рекомендуется ВыполняемыйМодуль в 1С++.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
А по скорости выполнения?
Ответ #8 - 15. Октября 2008 :: 12:04
Печать  
Чтобы не плодить темы, задам второй вопрос в этой.
Может Гуру подскажут, в каком виде лучше всего хранить значение "Вид объекта" в БД?
Это тоже относится к системе контроля прав. Т.е. мне нужно будет задавать правило, относящееся к объекту вида "Документ.ПланВыпускаПродукции". Хранить строкой? ID? Еще что-то? Это всё будет выниматься прямыми запросами. Вот и хотелось бы узнать, как это сделать лучше и быстрее?
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #9 - 15. Октября 2008 :: 12:10
Печать  
Уже есть типизирующее имя "ВидДокумента". Можешь смело использовать в запросах.
П.С. в 1С++ версиях 2.0.5.7 и далее
  
Наверх
 
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #10 - 15. Октября 2008 :: 12:24
Печать  
JohnyDeath писал(а) 15. Октября 2008 :: 12:10:
Уже есть типизирующее имя "ВидДокумента". Можешь смело использовать в запросах.


Либо я Вас не понял, либо Вы меня Улыбка
Про "ВидДокумента" я вкурсе. Дело в том, что поле не будет содержать документ определенного вида. Я даже не знаю как объяснить Улыбка Если очень упростить, то имеем табличку:

Роль ВидОбъекта Доступность
Администратор Справочник.Пользователи 1
Администратор Отчет.ЖурналРегистрации 1
Менеджер Справочник.Пользователи 0
Бухгалтер Документ.ПланВыпускаПродукции 0

Т.е. задаются права на объекты БД. Роль - это объект "Справочник.РолиПользователей", а Доступность - число. Вот, собственно, вопрос и состоит в том, в каком виде лучше хранить данные в поле "ВидОбъекта". А объектом, на который задаются права доступа, может быть и Константа, и Отчет, и Обработка, и Справочник, и Документ.  Озадачен
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #11 - 15. Октября 2008 :: 12:35
Печать  
Ну тогда может:
Код
Выбрать все
МД.ЗначениеВСамуюДлиннуюСтрокуБД(Объект) 

?
И почему то, что ты написал, тебя не устраивает?
А как будет выглядеть непосредственно контроль?
  
Наверх
 
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #12 - 15. Октября 2008 :: 12:43
Печать  
JohnyDeath писал(а) 15. Октября 2008 :: 12:35:
Ну тогда может:
Код
Выбрать все
МД.ЗначениеВСамуюДлиннуюСтрокуБД(Объект) 

?
И почему то, что ты написал, тебя не устраивает?
А как будет выглядеть непосредственно контроль?


То что я написал - это всё пока буквы Улыбка
Я не думаю что хранения прямо строки "Документ.ПланВыпускаПродукции" в виде вида объекта - это есть хорошо.
Хранение 23-символьного идентификатора мне тоже приходило в голову. Я просто решил проконсультироваться с общественностью Улыбка
А контроль будет выглядеть просто. Т.к. конфигурация самописная, и только дописывается и не обновляется, то в модули объектов будут вставлены соответствующие процедуры и функции, которые будут вылавливать из таблички разрешение на действие с данным объектом определенной роли пользователя. Рулиться права будут из обработки, храниться в справочнике. Работать всё будет на лету. Плюс еще будет реализован пореквизитный контроль. ТОлько вот по быстродействию вопрос открытым остается. Насколько всё это будет тормозить конфигурацию.  Нерешительный
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #13 - 15. Октября 2008 :: 12:52
Печать  
Посмотри на конфу "СКАТ-Профессионал". Там это дело через Регистры Правил сделано (на сколько я помню).
  
Наверх
 
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Выполнение произвольного выражения
Ответ #14 - 15. Октября 2008 :: 13:03
Печать  
JohnyDeath писал(а) 15. Октября 2008 :: 12:52:
Посмотри на конфу "СКАТ-Профессионал". Там это дело через Регистры Правил сделано (на сколько я помню).


Там, насколько я понял, всё закручено вокруг каких-то неведомых мне документов-хранилищ данных. Дальше них я разбираться не стал. Времени у меня очень мало. Да и внедрение в боевую конфигурацию классов 1С++, скорее всего, не будет одобрено руководством. Плюс у нас условия должны быть намного гибче, и в связи с этим будет использоваться исполняемый модуль.

Но вопрос был не в реализации самого контроля, а в способе хранения вида объекта в таблице - как будет быстрее его оттуда вытащить.  Нерешительный
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать