![]() |
![]() |
![]() |
|
Как перенести глобальную переменную на управляемые формы Мультук, PLUT, laeg, Anton1307, DemonShinji2, Prog_man, vicof, alex_kld_2024, anikev, Chai Nic, Bad_Aleks, TormozIT, 1nvertex, Jackman, Михаил_, phabeZ, Волшебник, arsik, АЛьФ, Уран Ренгенович, Timon1405, serpentt, reg0303, ptiz, Redaktor, DiMel_77, АгентБезопаснойНацио, Hawk_1c, yurikmellon2, АНДР, Wern, Tarlich, Alex33, lubitelxml, trk415e76, zenik, dva1c, craxx, DimR_71, dmt, Maestro2020, X Leshiy, alexela, Lama12, strange2007, qwerty, eddy_n, shuhard, Ненавижу 1С, Fedor-1971, ads55
| ☑ | ||
---|---|---|---|---|
0
anikev
26.06.25
✎
10:06
|
Всем привет! Переношу самописанный документ из обычных форм в управляемые.
В Обычных формах : В модуле объекта объявлена переменная Перем ФлИзмененОператор Экспорт; далее процедурами меняются значения В форме документа методом ПередОткрытием(Отказ, СтандартнаяОбработка) она инициализируется ФлИзмененОператор = Ложь; Вот я не знаю, как мне такую же конструкцию реализовать в Управляемых формах. 1. Думал так же объявить в модуле объекта с директивой &НаКлиенте, но у меня там только серверные процедуры. 2. Еще есть вариант объявить ее с директивой &НаСервере, но тогда она будет жить, только во время серверного вызова, а мне нужна, пока открыта форма. 3. Можно было создать реквизит формы, но я не смогу получить значение этого реквизита из модуля объекта 4. Можно эту переменную хранить в реквизите объекта, тогда можно будет обращаться и с клиента и сервера, но это будет избыточно, так как значение переменной проверяется только, когда пользователь тыкает кнопки на форма Вот уже всю голову сломал, как еще можно хранить значение, чтобы доступ был и с сервера и с клиента |
|||
1
vicof
26.06.25
✎
10:10
|
Надо сначала понять, нахрена эта переменная нужна.
|
|||
2
arsik
гуру
26.06.25
✎
10:13
|
просто добавь реквизит формы, но на форму его не клади
|
|||
3
craxx
26.06.25
✎
10:13
|
(0) "2. Еще есть вариант объявить ее с директивой &НаСервере, но тогда она будет жить, только во время серверного вызова, а мне нужна, пока открыта форма."
Форма живет и на сервере тоже |
|||
4
Мультук
гуру
26.06.25
✎
10:14
|
(0)
>>3. Можно было создать реквизит формы, но я не смогу получить значение этого реквизита из модуля объекта Получить - нет. Передать в модуль объекта - да. В какой процедуре/функции эта переменная нужна ? В остальном (1) + 1 |
|||
5
anikev
26.06.25
✎
10:14
|
(1) при изменении других полей проверяется значение этой переменной (булево) и заполняются, очищаются другие поля
|
|||
6
anikev
26.06.25
✎
10:15
|
(2) из модуля объекта не смогу взять значение
|
|||
7
vicof
26.06.25
✎
10:19
|
(5) Реквизит формы тебя спасет. см (2)
|
|||
8
vicof
26.06.25
✎
10:19
|
(6) Не надо из модуля объекта значения брать, все в форме делай
|
|||
9
anikev
26.06.25
✎
10:20
|
(4) (1) Используется:
1. На форме при нажатии на другую кнопку, меняется ее значение 2. В модуле объекта ПередЗаписью(),ОбработкаПроведения() |
|||
10
vicof
26.06.25
✎
10:23
|
(9) Передавай ее из формы в ДополнительныеСвойства
|
|||
11
anikev
26.06.25
✎
10:23
|
(7) Я не нашел примера, как мне обратиться к реквизиту формы из модуля объекта, подскажите плиз
|
|||
12
arsik
гуру
26.06.25
✎
10:24
|
(6) Это передается через ДополнительныеСвойства
Например в процедуре формы &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ТекущийОбъект.ДополнительныеСвойства.Вставить("ФлИзмененОператор", ФлИзмененОператор); КонецПроцедуры |
|||
13
craxx
26.06.25
✎
10:25
|
(11) Форма.ИмяТвоегоРеквизита
|
|||
14
arsik
гуру
26.06.25
✎
10:26
|
(9) А как ты это обрабатываешь, если из формы списка записать или провести?
|
|||
15
Мультук
гуру
26.06.25
✎
10:27
|
(9) Опередил
&НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ТекущийОбъект.ДополнительныеСвойства.Вставить("МояПрелесть", МояПрелесть); //тут еще всякое конецПроцедуры Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Если ДополнительныеСвойства.Свойство("МояПрелесть") Тогда МояПрелесть = ДополнительныеСвойства.МояПрелесть; конецЕсли; //тут еще всякое конецПроцедуры |
|||
16
PLUT
гуру
26.06.25
✎
10:27
|
может будет достаточно проверить на Модифицированность* перед записью и эта переменная нафиг не нужна? и если у документа есть сцылка (это не новый), то можно зачитать было/стало у нужного реквизита документа и там уже много думать, если изменился...
|
|||
17
vicof
26.06.25
✎
10:29
|
(14) Тадададам))
|
|||
18
anikev
26.06.25
✎
10:30
|
(14) В Обычных формах переменная объявляется в модуле объекта - она экспортная. Вот и брать ее может и форма и сам модуль объекта.
|
|||
19
anikev
26.06.25
✎
10:31
|
(18) Просто это сейчас работает так)
|
|||
20
arsik
гуру
26.06.25
✎
10:32
|
(15)
Если ДополнительныеСвойства.Свойство("МояПрелесть") Тогда МояПрелесть = ДополнительныеСвойства.МояПрелесть; конецЕсли; Есть конструкция поинтереснее в БСП ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "МояПрелесть", Ложь); // Возвращает значение свойства структуры. // // Параметры: // Структура - Структура // - ФиксированнаяСтруктура - объект, из которого необходимо прочитать значение ключа. // Ключ - Строка - имя свойства структуры, для которого необходимо прочитать значение. // ЗначениеПоУмолчанию - Произвольный - возвращается когда в структуре нет значения по указанному // ключу. // Для скорости рекомендуется передавать только быстро вычисляемые значения (например примитивные типы), // а инициализацию более тяжелых значений выполнять после проверки полученного значения (только если это // требуется). // // Возвращаемое значение: // Произвольный - значение свойства структуры. ЗначениеПоУмолчанию если в структуре нет указанного свойства. |
|||
21
Мультук
гуру
26.06.25
✎
10:33
|
(20)
Спс. Еще один синтаксический сахар в мою сахарницу :-) |
|||
22
anikev
26.06.25
✎
10:46
|
(20) Я правильно понимаю, что можно записывать и считывать дополнительные свойства только на сервере?
|
|||
23
vicof
26.06.25
✎
10:51
|
(22) Нет. Можно на сервере, толстом клиенте, внешнем соединении, мобильном приложении (сервер), мобильном автономном сервере.
|
|||
24
Мультук
гуру
26.06.25
✎
10:51
|
(22)
В (15) лежит готовый пример. Что еще нужно то ? а) В модуле объекта всегда сервер б) &НаСервере Процедура ПередЗаписьюНаСервере Тоже сервер, дальше исполнение кода уходит в модуль объекта в) На клиенте твоя переменная всегда доступна как ЭтаФорма.МояПрелесть |
|||
25
ptiz
26.06.25
✎
10:52
|
(22) Объект и модуль объекта в принципе существуют только на сервере. Когда выполняется код в форме - считай, что объекта и его модуля не существует, вообще. Данные формы всего лишь преобразуются в объект и обратно при необходимости.
|
|||
26
arsik
гуру
26.06.25
✎
11:09
|
(24) ЭтаФорма??? Может все-таки ЭтотОбъект? Или вообще без ЭтотОбъект.
|
|||
27
vicof
26.06.25
✎
10:55
|
А вообще я бы сделал реквизит документа "оператор".
И перед записью смотрел, отличается он от значения по ссылке или нет, и в зависимости от этого делал действия. Кода в разы меньше. |
|||
28
Мультук
гуру
26.06.25
✎
11:04
|
(26)
1) потому что мой пример вырван из контекста. И я специально написал именно так (простите не привык ЭтотОбъект) 2) Вопрос "ляля" это реквизит формы или локальная переменная ? Может сказать наверняка в пункте а? а) ляля = Истина; б) ЭтотОбъект.ляля = Истина; |
|||
29
anikev
26.06.25
✎
11:08
|
(24) Все, понял. Спасибо!
|
|||
30
Chai Nic
26.06.25
✎
11:10
|
В управляемых формах нет глобальных переменных вне серверного контекста. То есть, переменную то объявить можно. И она будет доступна во всем стеке вызова серверных процедур. Но как только мы вернемся на клиент - то всё. При следующем серверном вызове она опять будет пустой.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |