|
Нельзя изменять поле, содержащее объект данных формы | ☑ | ||
---|---|---|---|---|
0
distorter
08.05.12
✎
00:12
|
В модуле формы элемента справочника хочу автоматически менять наименование при изменении реквизита. Выдает ошибку.
&НаКлиенте Процедура УлицаПриИзменении(Элемент) Объект.Наименование = СформироватьНаименование(Объект); КонецПроцедуры &НаСервереБезКонтекста Функция СформироватьНаименование(Объект) Улица = Строка(Объект.Улица); Номер = Строка(Объект.Номер); Корпус = Строка(Объект. Корпус); Строение = Строка(Объект.Строение); Адрес = Улица + ", " + Номер + ", корп. " + Корпус + ", стр. " + Строение; Возврат Адрес; КонецФункции |
|||
1
artems
08.05.12
✎
00:22
|
А почему без контекста? Сделай серверной процедурой, в ней меняй наименование и вызывай ее при изменении всех зависимых полей.
|
|||
2
distorter
08.05.12
✎
00:26
|
(1) Вот так?
&НаКлиенте Процедура УлицаПриИзменении(Элемент) СформироватьНаименование(Объект); КонецПроцедуры &НаСервере Процедура СформироватьНаименование(Объект) Улица = Строка(Объект.Улица); Номер = Строка(Объект.Номер); Корпус = Строка(Объект.Корпус); Строение = Строка(Объект.Строение); Адрес = Улица + ", " + Номер + ", корп. " + Корпус + ", стр. " + Строение; Объект.Наименование = Адрес; КонецПроцедуры Ту же самую ошибку выдает. |
|||
3
proger2011
08.05.12
✎
00:29
|
Можно Объект не передавать на сервер, он и так там доступен
|
|||
4
distorter
08.05.12
✎
00:36
|
(3) Если не передавать, то работает. А без контекста никак нельзя?
|
|||
5
artems
08.05.12
✎
00:39
|
(4) а зачем именно без контекста?
|
|||
6
distorter
08.05.12
✎
00:41
|
(5) Предполагается работа исключительно в тонком клиенте. Хочется, чтобы быстрее работало.
|
|||
7
proger2011
08.05.12
✎
00:42
|
(4) Попробуй преобразовать
ДанныеФормыВЗначение(<Объект>, <Тип>) Параметры: <Объект> (обязательный) Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура; ДанныеФормыДерево. Данные формы. <Тип> (обязательный) Тип: Тип. Тип значения, получаемого из данных формы. Возвращаемое значение: Тип: Произвольный. Описание: Преобразует данные формы в объект прикладного типа. Доступность: Сервер, толстый клиент. Примечание: |
|||
8
artems
08.05.12
✎
00:44
|
Не ускорит настолько, что бы было критично.
Сделай как в (7) сказали и заметь производительность. Я думаю что гонять реквизит формы в значение даже дольше получится... |
|||
9
proger2011
08.05.12
✎
00:46
|
(8) Да я чёта написал а потом засомневался, если без контекста то по идее Объект не доступен будет.
|
|||
10
artems
08.05.12
✎
00:49
|
А зачем там объект? В клиентской процедуре реквизит в значение, значение на сервер без контекста, а оттуда возвращать строку наименования. Хотя по моему это извращение )))
|
|||
11
distorter
08.05.12
✎
00:55
|
(10) Я еще не сделал как в (7) говорит что-то про несоответствие типов во втором параметре. К какому типу я Объект привести должен?
|
|||
12
Garkin
08.05.12
✎
01:00
|
(6) Если хочешь быстро - тогда не вызывай сервер без необходимости, поставь для "Функция СформироватьНаименование()" - "&НаКлиенте".
|
|||
13
artems
08.05.12
✎
01:02
|
Ну тут уж сам поковыряйся ) с чем тебе на сервере работать проще будет. Я бы попробовал с ДанныеФормыСтруктура.
|
|||
14
distorter
08.05.12
✎
01:06
|
(12) а ведь правда, сервер не нужен - все данные на форме.
вот так работает отлично, так же как (3) &НаКлиенте Процедура УлицаПриИзменении(Элемент) СформироватьНаименованиеНаКлиенте(); КонецПроцедуры &НаКлиенте Процедура СформироватьНаименованиеНаКлиенте() Улица = Строка(Объект.Улица); Номер = Строка(Объект.Номер); Корпус = Строка(Объект.Корпус); Строение = Строка(Объект.Строение); Адрес = Улица + ", " + Номер + ", корп. " + Корпус + ", стр. " + Строение; Объект.Наименование = Адрес; ЭтаФорма.Заголовок = Объект.Наименование; КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ЭтаФорма.Заголовок = Объект.Наименование; КонецПроцедуры |
|||
15
artems
08.05.12
✎
01:06
|
А если говорить о производительности, то не в ту сторону смотришь. Сколько раз у тебя наименование переписываться будет? Я вижу как минимум 4. Может лучше в процедуре перед записью проверить должно поменяться наименование и если должно, то один раз всего поменять.
|
|||
16
distorter
08.05.12
✎
01:07
|
Тогда еще вопрос - где лучше формировать заголовок формы при открытии (автоформирование целенаправленно отключено в свойствах формы) - на сервере или на клиенте?
|
|||
17
distorter
08.05.12
✎
01:09
|
(15) я хочу чтобы пользователь видел результирующую строку в заголовке в процессе своих действий. Наименование вообще отсутствует на форме как реквизит. А так ему придется в уме прикидывать как будет называться элемент справочника в результате его действий.
|
|||
18
artems
08.05.12
✎
01:15
|
Ну сделай наименование недоступным для редактирования и не надо с заголовком мудрить.
|
|||
19
distorter
08.05.12
✎
01:25
|
(18) Заголовок скрыть, оставить наименование в виде Декорация текст? (не хочется делать его просто реквизитом - затеряется в толпе :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |