[8.2] Глобальные переменные в контексте сервера (управляемое приложение)

23.03.10

Разработка - Универсальные функции

Можно ли в 8.2 на сервере хранить ссылку на объект внешней компоненты?
Можно! Рассмотрим на примере...
Эта статья - отчет на вопрос в http://infostart.ru/forum/forum14/topic29689/

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО

Наименование Скачано Бесплатно
Тестовая база
.dt 9,77Kb
204 Скачать бесплатно

Как оказалось все очень просто.

И так...

1. Добавляем в параметры сеанса строковый параметр, скажем длиной 255 символов.

(для хранения ссылки на объект и возможности вызова из любого серверного метода)

К примеру, с именем "ВК".

2. В общий серверный модуль добавляем инициализацию компоненты (в моем примере он привилегированный и имеет имя "Тестовый"):

Функция ИнитВК() Экспорт
      
ИмяВК = "Душелов.ExcelEditor1C";

       Попытка
            
ВК = Новый COMОбъект(ИмяВК);
       Исключение
            
Сообщить("Ошибка создания объекта внешней компоненты: " + ИмяВК);
             Возврат Ложь;
       КонецПопытки;

      
ПараметрыСеанса.ВК = ПоместитьВоВременноеХранилище(ВК, Новый УникальныйИдентификатор);
      Возврат Истина;
КонецФункции

и тестовую функцию

Процедура ТестВК() Экспорт
       Если
ПараметрыСеанса.ВК = Неопределено Тогда
             Возврат;
       КонецЕсли;

      
ВК = ПолучитьИзВременногоХранилища(ПараметрыСеанса.ВК);
      
Сообщить(ВК.ПолучитьКоличествоЛистов());
КонецПроцедуры

И все :) Из любого места сервера и клиента объект внешней компоненты доступен!

Процедура ПриНачалеРаботыСистемы()
      
Тестовый.ИнитВК();
      
Тестовый.ТестВК();
КонецПроцедуры

В файлах статьи добавил тестовую базу, на которой можно проверить вызов метода ком-объекта из "глобальной переменной".

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3396    Abysswalker    8    

45

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    6312    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    48636    dimanich70    83    

169

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7285    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    60796    atdonya    31    

69

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9077    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. larisab 160 09.12.09 20:37 Сейчас в теме
Отлично! Супермолодец! :)
2. Tatitutu 3852 09.12.09 22:07 Сейчас в теме
Василий - на ходу подметки режешь .Зачет
да.... "обломал" ты меня (мой маленький секретик)
3. Душелов 4024 09.12.09 22:59 Сейчас в теме
(2) Сколько еще таки "секретов" вперед :)
4. kote 537 10.12.09 01:24 Сейчас в теме
(2) А жадничать - нехорошо :)
5. Арчибальд 2709 10.12.09 12:04 Сейчас в теме
Когда внятно написано, и дураку понятно. Я вот все понял :D
6. BigB 193 10.12.09 13:09 Сейчас в теме
(0) Ругается чего то на
{МодульУправляемогоПриложения(2,2)}: Переменная не определена (Тестовый)
<<?>>Тестовый.ИнитВК(); (Проверка: Тонкий клиент)
{МодульУправляемогоПриложения(3,2)}: Переменная не определена (Тестовый)
<<?>>Тестовый.ТестВК(); (Проверка: Тонкий клиент)
{МодульУправляемогоПриложения(2,2)}: Переменная не определена (Тестовый)
<<?>>Тестовый.ИнитВК(); (Проверка: Веб-клиент)
{МодульУправляемогоПриложения(3,2)}: Переменная не определена (Тестовый)
<<?>>Тестовый.ТестВК(); (Проверка: Веб-клиент)
7. larisab 160 10.12.09 13:12 Сейчас в теме
В общий серверный модуль добавляем инициализацию компоненты (в моем примере он привилегированный и имеет имя "Тестовый"):
8. BigB 193 10.12.09 13:21 Сейчас в теме
(7)
Прикрепленные файлы:
9. BigB 193 10.12.09 13:23 Сейчас в теме
У меня в "Проверка конфигурации" стоят все галки
Прикрепленные файлы:
10. BigB 193 10.12.09 13:35 Сейчас в теме
(0) В режиме "Управляемое приложение" это не работает, а в режиме "Обычное приложение" работает.
11. Душелов 4024 10.12.09 14:20 Сейчас в теме
(10) А галочку "Вызов сервер" кто ставить будет?
13. BigB 193 10.12.09 14:37 Сейчас в теме
(11) Упс. Недоглядел. Спасибо.
12. Душелов 4024 10.12.09 14:34 Сейчас в теме
Добавил тестовую базу ;)
14. RomDron 14.12.09 08:50 Сейчас в теме
Плюс! Поставил бы даже за то, что инфа по 8.2. А то создается такое впечатление,что под УП никто ничего сам не пишет. :-) А Жаль, платформа очень интересная.
15. Virsy 14.12.09 09:24 Сейчас в теме
А как быть, если объект подключен через Новый(), а не Новый COMОбъект?

ИмяВК="AddIn.DushelovICQ";
Попытка
ПодключитьВнешнююКомпоненту(ИмяВК);
JabberДоступен = Истина;
Исключение
Возврат ("Не удалось подключить компоненту "+ИмяВК);
КонецПопытки;

Попытка
Jabber = Новый(ИмяВК);//Новый COMОбъект(ИмяВК);//
Исключение
Возврат "Не удалось создать объект Jabber!";
КонецПопытки;
16. Душелов 4024 14.12.09 13:50 Сейчас в теме
(15) В рамках данной статьи без разницы, как создается объект.
17. Expert1C 665 15.12.09 13:04 Сейчас в теме
18. Душелов 4024 15.12.09 14:01 Сейчас в теме
(17) Вариантов решения, думаю много.
19. ValeriVP 1371 15.12.09 17:09 Сейчас в теме
(18) я знаю 4 разных варианта :)
20. Душелов 4024 16.12.09 12:59 Сейчас в теме
(19) Ну мы определили 2 :) Какие еще 2? Очень даже интересно!
21. ValeriVP 1371 16.12.09 13:09 Сейчас в теме
(20) еще один используется тут: http://www.intelis-it.ru/software/intelis/urbd.html
...«ИНТЕЛИС: Управление распределенной базой 8» содержит механизмы (в том числе специально разработанный для целей повышения производительности COM-объект), позволяющие при выполнении в контексте сервера «1С: Предприятие 8» кэшировать необходимые для работы подсистемы данные, что позволяет использовать преимущества выполнения операций в контексте сервера без затрат ресурсов сервера на работу подсистемы...
Это кстати прошло 1С Совместимо

и еще один - модификация пи-кода модуля - это конечно 1С не Совместимо :)
22. Душелов 4024 16.12.09 13:15 Сейчас в теме
(21) Очень интересно... Есть над чем поломать голову :)
23. Душелов 4024 25.12.09 16:52 Сейчас в теме
Кстати, прелесть этого подхода - возможность передачи ссылки на объект в фоновое задание, инициированное из клиентского сеанса (из "Руководства разработчика)....
24. ValeriVP 1371 06.12.10 20:46 Сейчас в теме
(23) а ты пробовал передавать com объекты между клиентом и сервером? ИМХО не получится.
25. Душелов 4024 07.12.10 01:30 Сейчас в теме
(24) Не получится никак. Согласен.
26. Qseft 05.10.11 16:14 Сейчас в теме
С 8.1 я так понял не прокатит, а жаль. Спасибо за идею.
27. DimaP 64 16.05.12 17:07 Сейчас в теме
1-1.5 года назад мучился с подобным, в частности, хранить коннект к другой базе таким образом не полчалось - ком категорически не хотел так сохраняться и восстанавливаться ))
28. rozer 314 02.11.12 18:28 Сейчас в теме
29. Evil Beaver 8386 21.02.13 12:41 Сейчас в теме
>ПоместитьВоВременноеХранилище(ВК)

Вот это же не будет работать! Во врем. хранилище можно размещать только сериализуемые объекты. В противном случае, сервер будет их убивать по своему желанию, например, при передаче серверного вызова на другую машину кластера. В этот момент он будет сериализовывать значение, лежащее в хранилище (с COM он явно это сделать не сможет).
30. DancingShadow 30.04.13 10:27 Сейчас в теме
Удобно для объектов у которых нет входящих событий. Т.е. получить из хранилища, вызвать метод получается на ура, а вот обработать входящее событие COM объекта - увы и ах.
31. matashin 12.09.13 10:40 Сейчас в теме
Реализовывал соединение с MSSQL, все работает в 8.2 через временное хранилище и сохранение ссылки на него в параметрах сеанса, но через некоторое время параметр сеанса становиться неопределен, решил его реинициализацией, по необходимости.
32. piton66 2 12.12.13 18:08 Сейчас в теме
Почему у меня не получается?
RS=Новый COMОБъект("MSCOMMLib.MSComm");
RS.Settings = "115200,n,8,1";
RS.CommPort=10;
RS.Handshaking = 1;
RS.RThreshold = 1;
RS.SThreshold = 1;
RS.InputLen = 0;
RS.RTSEnable = 1;
RS.InputMode = 0 ;

RS.PortOpen = Не RS.PortOpen;
       
 Если RS.PortOpen Тогда
       Сообщить("Comm. Port " + RS.CommPort + " Settings: " + RS.Settings);
       Сообщить(RS.Input);
	   ПараметрыСеанса.АдресКом=ПоместитьВоВременноеХранилище(RS,Новый УникальныйИдентификатор());
       Возврат Истина;
 Иначе
       Сообщить("Comport Problem");
	   Возврат ЛОЖЬ;
 КонецЕсли; 
Показать


Выдает ошибку Переданное значение не может быть помещено во временное хранилище.
Что не так делаю?
34. garrycrannon 28.08.18 12:57 Сейчас в теме
(32) в 8.3 во временное хранилище можно помещать или сериализуемые значения, или двоичные данные (т.е. содержимое какого-либо файла). Ком-объект не является ни тем, ни другим, потому его поместить во временное хранилище не получится никоим образом. Сам бьюсь над задачей, адекватного решения пока не придумал.
33. piton66 2 13.12.13 15:03 Сейчас в теме
Это вроде 8.3 косяк.
Для отправки сообщения требуется регистрация/авторизация