|
Параметры процедур и функций | ☑ | ||
---|---|---|---|---|
0
nickroblogger_
04.08.15
✎
01:58
|
Здрст.
Есть процедура: Процедура П1(Регион = Неопределено) .... Регион = ?(ЗначениеЗаполнено(Регион), Регион, Константы.Регион.Получить()); .... КонецПроцедуры Есть ее вызов: .... П1(ПараметрыСеанса.ТекПользователь.Филиал.Регион); //ТекПользователь - спрСс. //Филиал - реквизит спрСс. //Регион - реквизит перечислСс. .... Почему ругается и пишет, что нельзя изменить "Регион" при выполнении? Что вообще при таком написании передается в П1()? |
|||
1
nickroblogger_
04.08.15
✎
02:01
|
обычное приложение толстый клиент
|
|||
2
tipaya
04.08.15
✎
02:39
|
может у тебя ссылка на неизменяемый или запрещенный к изменению объект.
|
|||
3
nickroblogger_
04.08.15
✎
03:02
|
(2) че-то как-то непонятно.
|
|||
4
Лодырь
04.08.15
✎
03:15
|
Ну судя по коду, ты пытаешся чтото присвоить ПараметрыСеанса.ТекПользователь.Филиал.Регион
Логично, что нихрена не присваивается. |
|||
5
nickroblogger_
04.08.15
✎
03:20
|
(4) ну то есть при вот такой записи:
П1(ПараметрыСеанса.ТекПользователь.Филиал.Регион) не создается переменная типа ПеречислениеСсылка со значением в указанном реквизите и не передается в качестве аргумента? А что тогда там передается? |
|||
6
Лодырь
04.08.15
✎
03:32
|
кстати, а строка на которую ругается - это Регион = ?(ЗначениеЗаполнено(Регион), Регион,
Константы.Регион.Получить()); или ты не смотрел? |
|||
7
nickroblogger_
04.08.15
✎
03:34
|
(6) да, при попытке присвоить в этой строке Региону значение Регион (так как тут ЗначениеЗаполнено(Регион) = истина) и происходит ошибка.
|
|||
8
tipaya
04.08.15
✎
03:52
|
Процедура П1(Регион = Неопределено)
новРегион = ?(ЗначениеЗаполнено(Регион), Регион,Константы.Регион.Получить()); КонецПроцедуры Вот так скорей всего у тебя отработает. А ты что потом хочешь делать с этой переменной? Если изменять, то попробуй дальше: НовРегион.ПолучитьОбъект() и далее. |
|||
9
tipaya
04.08.15
✎
03:55
|
ИЛи воот так:
Процедура П1(Регион = Неопределено) новРегион = ?(ЗначениеЗаполнено(Регион), Регион.ссылка,Константы.Регион.Получить()); КонецПроцедуры |
|||
10
nickroblogger_
04.08.15
✎
04:03
|
(9)
Как решить я понял, я просто перед передачей параметра в процедуру создаю переменную и инициализирую ее значением региона из параметра сеанса и ее передаю. Тогда всё отрабатывает. |
|||
11
tipaya
04.08.15
✎
04:04
|
(10) или так да.
|
|||
12
nickroblogger_
04.08.15
✎
04:09
|
(11) но меня больше интересовало не как сделать, а почему.
|
|||
13
tipaya
04.08.15
✎
04:38
|
Тебе надо посмотреть какую ссылку имеет объект.
ПараметрыСеанса.ТекПользователь.Филиал.Регион и можно ли его изменить так как это делал ты. |
|||
14
nickroblogger_
04.08.15
✎
11:35
|
(13) я вот ничего не понял. Можно пример какие бывают?
|
|||
15
Feunoir
04.08.15
✎
11:40
|
Сделай
Процедура П1(Знач Регион = Неопределено) (5) В твоём случае параметр передаётся, что называется "по ссылке". То есть передаётся ссылка на реквизит конкретного параметра сеанса. Поэтому поменять ты его и не можешь. |
|||
16
lera01
04.08.15
✎
11:43
|
(4) Ты передаешь в процедуру параметр и внутри процедуры перезаполняешь его. Вместе с этим он меняется в том месте, откуда ты его вызываешь, т.е. меняется именно то, что ты в свою процедуру передаешь. Но в твоем случае ПараметрыСеанса.ТекПользователь.Филиал.Регион вот это изменить нельзя, потому что это реквизит какого-то справочника Филиал. Чтобы изменить реквизиты справочника, нужно получать объект. Если не нужно ничего изменять, переназначь переменную как в (8) советуют, создастся новая переменная и ее можно использовать.
|
|||
17
grigo
04.08.15
✎
11:59
|
ПараметрыСеанса.ТекПользователь.Филиал.Регион - это ССЫЛКА элемента справочника "Регионы". Естественно, ССЫЛКА - это одно из полей, всегда запрещенный для изменения
|
|||
18
1Сергей
04.08.15
✎
12:03
|
только на (15) посте вспомнили про слово "Знач". стыдно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |