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

23.03.10

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

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

Скачать файлы

Наименование Файл Версия Размер
Тестовая база
.dt 9,77Kb
199
.dt 9,77Kb 199 Скачать бесплатно

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

И так...

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

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

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

1 стартмани

18.03.2024    2656    0    John_d    8    

53

GUID в 1С 8.3 - как с ними быть

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

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

12.02.2024    4591    atdonya    22    

45

Переоткрытие внешних обработок

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

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

30.11.2023    3951    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8799    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

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

2 стартмани

22.08.2023    2069    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 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    16139    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

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

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7241    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. larisab 160 09.12.09 20:37 Сейчас в теме
Отлично! Супермолодец! :)
2. Tatitutu 3855 09.12.09 22:07 Сейчас в теме
Василий - на ходу подметки режешь .Зачет
да.... "обломал" ты меня (мой маленький секретик)
3. Душелов 4013 09.12.09 22:59 Сейчас в теме
(2) Сколько еще таки "секретов" вперед :)
4. kote 536 10.12.09 01:24 Сейчас в теме
(2) А жадничать - нехорошо :)
5. Арчибальд 2706 10.12.09 12:04 Сейчас в теме
Когда внятно написано, и дураку понятно. Я вот все понял :D
6. BigB 191 10.12.09 13:09 Сейчас в теме
(0) Ругается чего то на
{МодульУправляемогоПриложения(2,2)}: Переменная не определена (Тестовый)
<<?>>Тестовый.ИнитВК(); (Проверка: Тонкий клиент)
{МодульУправляемогоПриложения(3,2)}: Переменная не определена (Тестовый)
<<?>>Тестовый.ТестВК(); (Проверка: Тонкий клиент)
{МодульУправляемогоПриложения(2,2)}: Переменная не определена (Тестовый)
<<?>>Тестовый.ИнитВК(); (Проверка: Веб-клиент)
{МодульУправляемогоПриложения(3,2)}: Переменная не определена (Тестовый)
<<?>>Тестовый.ТестВК(); (Проверка: Веб-клиент)
7. larisab 160 10.12.09 13:12 Сейчас в теме
В общий серверный модуль добавляем инициализацию компоненты (в моем примере он привилегированный и имеет имя "Тестовый"):
8. BigB 191 10.12.09 13:21 Сейчас в теме
(7)
Прикрепленные файлы:
9. BigB 191 10.12.09 13:23 Сейчас в теме
У меня в "Проверка конфигурации" стоят все галки
Прикрепленные файлы:
10. BigB 191 10.12.09 13:35 Сейчас в теме
(0) В режиме "Управляемое приложение" это не работает, а в режиме "Обычное приложение" работает.
11. Душелов 4013 10.12.09 14:20 Сейчас в теме
(10) А галочку "Вызов сервер" кто ставить будет?
13. BigB 191 10.12.09 14:37 Сейчас в теме
(11) Упс. Недоглядел. Спасибо.
12. Душелов 4013 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. Душелов 4013 14.12.09 13:50 Сейчас в теме
(15) В рамках данной статьи без разницы, как создается объект.
17. Expert1C 663 15.12.09 13:04 Сейчас в теме
18. Душелов 4013 15.12.09 14:01 Сейчас в теме
(17) Вариантов решения, думаю много.
19. ValeriVP 1303 15.12.09 17:09 Сейчас в теме
(18) я знаю 4 разных варианта :)
20. Душелов 4013 16.12.09 12:59 Сейчас в теме
(19) Ну мы определили 2 :) Какие еще 2? Очень даже интересно!
21. ValeriVP 1303 16.12.09 13:09 Сейчас в теме
(20) еще один используется тут: http://www.intelis-it.ru/software/intelis/urbd.html
...«ИНТЕЛИС: Управление распределенной базой 8» содержит механизмы (в том числе специально разработанный для целей повышения производительности COM-объект), позволяющие при выполнении в контексте сервера «1С: Предприятие 8» кэшировать необходимые для работы подсистемы данные, что позволяет использовать преимущества выполнения операций в контексте сервера без затрат ресурсов сервера на работу подсистемы...
Это кстати прошло 1С Совместимо

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