Имя: Пароль:
1C
1С v8
Как получить значение константы в модуле управляемого приложения?
0 Lex_Liven
 
01.08.12
11:39
Нужно мне получить значение константы еще до открытия главного окна.
В толстом клиенте (Модуль обычного приложения) проблем нет:

Процедура ПередНачаломРаботыСистемы(Отказ)
   ТекущийРежим     = Константы.РежимЗавершенияРаботыПользователей.Получить();
КонецПроцедуры

А в тонком (Модуль управляемого приложения) такая конструкция не работает - не может найти объект "Константы".
Перенос кода в функцию &НаСервере - тоже не помогает, говорит, не найдена функция.

Какие-то еще варианты есть?
1 TheRockstar
 
01.08.12
11:46
Из модуля управляемого приложения вызвать клиентскую функцию общего модуля, а из нее уже серверную
2 Lex_Liven
 
01.08.12
11:48
10 минут на попробовать.
3 Агент Инфостарта
 
01.08.12
11:48
4 Ненавижу 1С
 
гуру
01.08.12
11:50
(1) какие же они извращенцы
5 ТеньПустоты
 
01.08.12
11:50
о это я делал
делаешь общий модуль. в нем экспортную функцию возвращающую значение константы

а в модуле упр приложени я пишешь

Процедура ПередНачаломРаботыСистемы(Отказ)
   ТекущийРежим     = НазваниеОбщегоМодуля.ИмяЭкспортнойПроцедуры;

и тута действия в твоей константою
КонецПроцедуры
6 Lex_Liven
 
01.08.12
11:53
(1)(5) {ОбщийМодуль.ОбщийМодульУправляемого.Модуль(21,10)}: Процедура или функция с указанным именем не определена (ОтказВЗапускеПриложенияСР)
   Возврат <<?>>ОтказВЗапускеПриложенияСР();
(3) Читал. Теперь вы прочитайте внимательно шапку. Пункты про "НаКлиенте" и "НаСервере"
7 izekia
 
01.08.12
11:53
(4) да не то слово, мне кажется это вполне можно было сделать неявно, уже надоело эти конструкции рисовать
все равно большинство одинэсников пишущие на управляемых формах так далеки от мыслей об оптимизации, что даже забывают про тупой вызов без контекста, не говоря уже о более веселых вещах, типа таскания тз туда сюда
8 izekia
 
01.08.12
11:54
(6) запросом не предлагать?
9 Lex_Liven
 
01.08.12
11:55
(8) Запросы на клиенте не взлетают. А вызов серверной процедуры/функции - к тому же результату.
10 izekia
 
01.08.12
11:57
(9) да уже понял, полностью код покажи в модулях?
11 Lex_Liven
 
01.08.12
11:58
(10) Модуль "ОбщийМодульУправляемого" не глобальный, птички "Клиент (управляемое приложение)" и "Сервер" стоят.

&НаСервере
Функция ОтказВЗапускеПриложенияСР() Экспорт
   Отказ = Ложь;
   ТекущийРежим     = Константы.РежимЗавершенияРаботыПользователей.Получить();
   Предупреждение("Режим: "+ТекущийРежим,30,"Запуск запрещен");
   РежимыЗавершения = Перечисления.РежимыЗавершенияРаботыПользователей;
   Пользователь= Справочники.Пользователи.НайтиПоКоду(ИмяПользователя());
   
   Если ПравоДоступа("Изменение", Метаданные.Константы.РежимЗавершенияРаботыПользователей,ПользователиИнформационнойБазы.ТекущийПользователь()) Тогда
       Отказ = Ложь;
   ИначеЕсли ТекущийРежим = РежимыЗавершения.ЗавершитьБезусловно
         ИЛИ ТекущийРежим = РежимыЗавершения.ЗавершитьССохранениемДанныхПользователя Тогда
       Предупреждение("Запуск программы временно запрещен администратором.",30,"Запуск запрещен");
       Отказ = Истина;
   КонецЕсли;
   Возврат Отказ;
КонецФункции

&НаКлиенте
Функция ОтказВЗапускеПриложенияКЛ() Экспорт
   Возврат ОтказВЗапускеПриложенияСР();
КонецФункции


Модуль управляемого приложения

Процедура ПередНачаломРаботыСистемы(Отказ)
   Отказ = ОбщийМодульУправляемого.ОтказВЗапускеПриложенияКЛ();    
КонецПроцедуры
12 H A D G E H O G s
 
01.08.12
11:59
(7) Тупой "вызов без контекста" никуа не дает преимуществ, если ты:
1) Не меняешь метаданные формы (а их лучше вообще не менять)
2) Не получаешь в контексте Объект из его отображения (РеквизитФормыВЗначение())
13 Lex_Liven
 
01.08.12
12:01
(12) Это полный оффтоп, но преимущества преизрядные, поверьте. Если у вас есть реквизит формы типа "ТаблицаЗначений", например. "&НаСервереБезКонтекста" не погонит таблицу на сервер.
Знаю, что это показатель неоптимальности формы, но что есть случаи.
14 izekia
 
01.08.12
12:01
(12) с какого релиза началась оптимизация вызовов?
15 H A D G E H O G s
 
01.08.12
12:06
(13) Когда таблички небольшие на это можно тупо забить и не посылать параметризированную процедурку. Вебсервер и Тонкий клиент нехило жмут траффик, а данных в форме в переводе на килобайты - мизер.
А вот если меняешь хоть текст надписи в формочке - тогда да, тогда вся форма (все ее описание) похоже поползет на сервер синхронизироваться, тут уже сотни килобайт стандартной УФ реализации в УПП.
16 izekia
 
01.08.12
12:07
(11) "вызов сервера" стоит?
попробуй разделить модули? или явно прописать
17 Lex_Liven
 
01.08.12
12:08
(16) стоит.
Попробовал разделить - не видит серверную функцию.
18 Lex_Liven
 
01.08.12
12:10
Платформа 8.2.15.310. Режим совместимости не установлен, если это важно.
19 H A D G E H O G s
 
01.08.12
12:12
&НаСервере убрать. И читать СП
20 H A D G E H O G s
 
01.08.12
12:12
21 izekia
 
01.08.12
12:13
(19) это не мешает
а что в СП?
22 Lex_Liven
 
01.08.12
12:15
(19) убирал. Начинает выполняться, похоже, на клиенте, и спотыкается на обращении к "Константы", потому что "КонстантаМенеджер", хоть зачитайся СП, недоступно на тонком клиенте.
23 H A D G E H O G s
 
01.08.12
12:16
Дай коннект
24 Lex_Liven
 
01.08.12
12:17
(23) коннект куда? к базе? не дам. Какая информация интересует - скажу.
25 Leksus
 
01.08.12
12:17
Сделай общий модуль глобальным.
26 H A D G E H O G s
 
01.08.12
12:18
Все, увидел, почему у меня работало.
27 H A D G E H O G s
 
01.08.12
12:19
Надо разнести по 2 модулям.
28 H A D G E H O G s
 
01.08.12
12:20
Странно конечно, что из УМ приложения не видит серверную процедуру ОМ
29 Lex_Liven
 
01.08.12
12:20
(25) не помогло. Не видит серверную.
(26) оба модуля "Сервер" И "Клиент"?
30 jenny_tea
 
01.08.12
12:21
Еще на сколько я помню на сервере не работает Предупреждение
31 H A D G E H O G s
 
01.08.12
12:21
Либо убрать галку "Клиент (управляемое приложение)" у ОМ
32 Lex_Liven
 
01.08.12
12:23
(30) не работает. Это не важно, вопрос в другом.
(31) и вызывать из модуля приложения сразу серверную?
33 izekia
 
01.08.12
12:24
(30) о точно
(32) поэтому она на сервере и не компилится
34 H A D G E H O G s
 
01.08.12
12:24
(32) Да, сразу.
35 Lex_Liven
 
01.08.12
12:26
(31) Взлетело, спасибо.
(33) Странно, что это нигде не указано.
36 H A D G E H O G s
 
01.08.12
12:27
(33) Она компилиться и на сервере и на клиенте, просто УМ ломиться на клиентскую часть ОМ.
37 H A D G E H O G s
 
01.08.12
12:28
Тоже самое в модуле управляемых форм, там сначало надо перейти на сервер в самой форме, либо вызывать серверную процедуру ОМ, который только на сервере.