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

23.03.10

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

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

Скачать файл

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

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

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

И так...

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    22017    dimanich70    81    

147

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

18.03.2024    4241    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

12.02.2024    20852    atdonya    25    

58

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    5714    ke.92@mail.ru    17    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    15472    YA_418728146    7    

169

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3769    59    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18758    173    sapervodichka    112    

136
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. larisab 160 09.12.09 20:37 Сейчас в теме
Отлично! Супермолодец! :)
2. Tatitutu 3847 09.12.09 22:07 Сейчас в теме
Василий - на ходу подметки режешь .Зачет
да.... "обломал" ты меня (мой маленький секретик)
3. Душелов 4021 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. Душелов 4021 10.12.09 14:20 Сейчас в теме
(10) А галочку "Вызов сервер" кто ставить будет?
13. BigB 193 10.12.09 14:37 Сейчас в теме
(11) Упс. Недоглядел. Спасибо.
12. Душелов 4021 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. Душелов 4021 14.12.09 13:50 Сейчас в теме
(15) В рамках данной статьи без разницы, как создается объект.
17. Expert1C 664 15.12.09 13:04 Сейчас в теме
18. Душелов 4021 15.12.09 14:01 Сейчас в теме
(17) Вариантов решения, думаю много.
19. ValeriVP 1338 15.12.09 17:09 Сейчас в теме
(18) я знаю 4 разных варианта :)
20. Душелов 4021 16.12.09 12:59 Сейчас в теме
(19) Ну мы определили 2 :) Какие еще 2? Очень даже интересно!
21. ValeriVP 1338 16.12.09 13:09 Сейчас в теме
(20) еще один используется тут: http://www.intelis-it.ru/software/intelis/urbd.html
...«ИНТЕЛИС: Управление распределенной базой 8» содержит механизмы (в том числе специально разработанный для целей повышения производительности COM-объект), позволяющие при выполнении в контексте сервера «1С: Предприятие 8» кэшировать необходимые для работы подсистемы данные, что позволяет использовать преимущества выполнения операций в контексте сервера без затрат ресурсов сервера на работу подсистемы...
Это кстати прошло 1С Совместимо

и еще один - модификация пи-кода модуля - это конечно 1С не Совместимо :)
22. Душелов 4021 16.12.09 13:15 Сейчас в теме
(21) Очень интересно... Есть над чем поломать голову :)
23. Душелов 4021 25.12.09 16:52 Сейчас в теме
Кстати, прелесть этого подхода - возможность передачи ссылки на объект в фоновое задание, инициированное из клиентского сеанса (из "Руководства разработчика)....
24. ValeriVP 1338 06.12.10 20:46 Сейчас в теме
(23) а ты пробовал передавать com объекты между клиентом и сервером? ИМХО не получится.
25. Душелов 4021 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 311 02.11.12 18:28 Сейчас в теме
29. Evil Beaver 8253 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 Сейчас в теме
Оставьте свое сообщение