Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Подсоединиться к запущенному сеансу. (http://forums.kuban.ru/f1040/podsoedinit-sya_k_zapushennomu_seansu-3153717.html)

feedergood 08.10.2012 22:22

Подсоединиться к запущенному сеансу.
 
Здравствуйте.
Я соединяюсь из 1С 8.2 (назовем ее Б1) через ОЛЕ к другой базе 1С 8.2. (назовем ее Б2). Но для этого надо, чтобы на компьютере у пользователя Б2 не была запущена. Если запущена, то сначала пользователь ее закрывает, а потом Б1 ее запускает с интерфейсом. Пользователь может работать как с Б1, так и с Б2, а также Б1 может работать с Б2. Б2 приоритетнее, поэтому она часто запущена у пользователя прежде чем требуется запустить Б1. Я хочу пользователям упростить этот момент - сначала закрывать Б2, чтобы запустить Б1, а она потом Б2. Сам вопрос - могу ли я в Б1 соединиться к уже запущенному сеансу Б2 с интерфейсом? Как пример - из конфигуратора я могу к запущенному процессу, правда этой же базы, подсоединиться для отладки, хотя конфигуратор был позднее запущен.
В общем, как-то так.

qweqwe123123 08.10.2012 22:56

можно и нового пользователя завести в Б2

feedergood 08.10.2012 23:42

Пользователь имелся в виду физический - сам оператор. В обоих базах он заведен. Из Б1 в Б2 подключаться может. Просто надо, чтобы если Б2 уже запущена, то не создавался новый сеанс Б2 с интерфейсом, а Б1 получала ОЛЕ соединение к уже запущенной Б2.

feedergood 08.10.2012 23:50

В справке описана функция ПолучитьCOMОбъект(). Написано, что если первый параметр опустить, а во втором передать имя класса, то, вроде как можно получить соединение к уже запущенному ОЛЕ серверу. Пробовал - не получилось. Да и не пойму, а если несколько будет запущено баз, то как определять к какой соединиться (если, конечно получилось бы - а тож нет)?

DeiMos 09.10.2012 07:31

2-Фидер > "Просто надо, чтобы если Б2 уже запущена, то не создавался новый сеанс Б2 с интерфейсом"
- Так по ОЛЕ - никакого интерфейса юзер и не увидит...

Заводи служебного пользователя "Робот" в Б2 и не выноси мосх ни себе ни людям...

qweqwe123123 10.10.2012 10:57

я вот тоже не понял про интерфейс по OLE. может от жизни отстал, конечно... дай код посмотреть как OLE с интерфейсом запустить? а главное, зачем?
по идее, подключился, хапнул данных, отключился... жамкает юзер только в экземпляре-источнике (иначе всё равно запутается).

feedergood 10.10.2012 15:43

СоединениеСИнтерфейсом = Новый COMОбъект("V82.Application");
Попытка
СоединениеСИнтерфейсом.Connect("Srvr=""srv01"";Ref=""prod""");
СоединениеСИнтерфейсом.Visible = True;
Исключение
...
КонецПопытки;

Надо затем, что у пользователя и так почти всегда запущена Б2. То что надо делать с Б2 из Б1 работает только при соединении с интерфейсом. Если у пользователя уже открыта Б2, то приходится из Б1 открывать второй сеанс к Б2, что тянет ресурсы (компы не ахти, а сеанс с интерфейсом существенно тянет ресурсы). Для того, чтобы работало быстрее пользователи знают, что надо тогда закрыть Б2, открыть Б1 и она снова откроет Б2. Тогда они могут работать с меньшими тормозами и с Б1 и с Б2 и Б1 с Б2.
Создавать "Робот2" и др. мне не поможет и смысла нет, т.к. количество подключений у меня к Б2 по пользователю не ограничено.

qweqwe123123 10.10.2012 15:56

6-Фидер > погляжу про подключение к существующему.
но по идее подключение к базе (хоть по OLE хоть ещё как) нужно только для получения или передачи данных. и запускать у каждого клиента вторую базу с интерфесом довольно-таки... не экономно. имхо.
может всё-таки можно без интерфейса и выполнять на сервере... по обработке ожидания... или ещё как?
в общем, чего в интерфейсе юзеры монстрячат?

qweqwe123123 10.10.2012 15:59

если это тупо обмен документами, то зачем в реальном режиме времени? и проще вести обе организации в одной базе (типовая БП проф не запрещает).

DeiMos 10.10.2012 17:31

6-Фидер > Спасибо за пример.

Остался вопрос: Зачем обязательно с интерфейсом?

"сеанс с интерфейсом существенно тянет ресурсы".

Как вариант - без ОЛЕ тогда обходись, либо наращивай ресурсы на данном ПК, либо переходи на СУБД, либо переходи на терминал...

Без ОЛЕ:
Из Б1 что-то куда-то выгружать по кнопочке, В Б2 - оттуда загружать по кнопочке...

roma n 10.10.2012 17:48

А что, ComConnector ещё не предлагали?
Я так и не вкурил зачем "внутри" сеанса Б1 иметь кусок интерфейса Б2...

feedergood 10.10.2012 19:49

7,8.Зеленый тролль, DeiMos, roma_n. Я уже все предложенные вами варианты до этого пересмотрел. Ситуация такая как я пишу. Б1 интегрировать в Б2 будет сложно, да и не нужно - Б2 самостоятельная и Б1 в ней делает то, что пользователь мог бы делать и сам. Еще куча приколов есть в этом взаимодействии. С точки зрения Б2 она и не знает (конечно условно), что вместо пользователя ее параллельно робот пользует - для нее все как обычно. Но так и надо. Многие вещи не работают без интерфейса (это для roma_n - так что ComConnector не подходит, а жаль - это бы все решило, тем более что ресурсов почти не тянет).
Я просто что хочу сказать. Сейчас все работает как надо - за одним исключением: пользователю надо выходить из Б2 и запускать ее снова через Б1 чтобы не тормозило или тормозило хотя бы приемлемо. Пользователи не жалуются - им все нравится что я им делаю и даже за такую реализацию благодарны, но я чую, что это не кашерно как-то и хочу, если есть возможность, сделать чтобы подключаться к уже запущенной на компе Б2. Может быть покажусь слишком самоуверенным, но то что мне нужно - это единственный вариант, если не трогать Б2. Я в помощи нашел функцию ПолучитьCOMОбъект() - по описанию должна была помочь, но не получается, а если бы и получалось, то не понятно как указывать к какой из открытых баз соединиться.

roma n 10.10.2012 20:05

[em]Многие вещи не работают без интерфейса[/em]
- например?

DeiMos 10.10.2012 20:31

Многие вещи не работают без интерфейса
- например?

qweqwe123123 10.10.2012 21:14

интерфейс полностью грузится? тогда сменить всем юзерам пароли к Б2 и заставить запускать только через Б1.

feedergood 10.10.2012 23:47

12 и 13. В ряде открытых форм в Б2 пользователь выполняет ввод данных. Производятся промежуточные вычисления самой Б2 при изменении того или иного реквизита как документа, так и в табличных частях. Б1 следит за этим и помогает изменять значения требуемым образом используя при этом свои данные. Пользователи могли бы это делать и без Б1, но тогда пришлось бы справляться к некоторой требуемой информации. Ну такая особенность. Б2 менять не надо. Компы уж какие есть.
14. Да интерфейс грузится полностью. Принуждать никого не надо. Пользователи и так работают. Улучшить - это моя собственная инициатива. Не получится и ладно. Но если так можно сделать - то я реализую и успокоюсь. Просто иногда нужна Б1, а иногда нет, а Б2 всегда нужна. Если всегда запускать сразу Б2 из Б1, а Б1 не нужна, то компы будут притормаживать без надобности (когда Б1 не нужна, а запущена).

Если я правильно понял, то либо нельзя так сделать, либо вы как и я не знаете как так сделать.

Я по инету искал - информация встречается скудно, да и та, что встречается ни одна не дает нужного ответа. По ходу нельзя так сделать в 1с.

roma n 11.10.2012 08:10

15-Фидер > ни вразумительного, ни невнятного ответа на вопрос (12,13) в (15) я не вижу. Зачем интерфейс-то? Что отрабатывает OLE и невозможно при данных условиях отработать в COMconnector?

feedergood 11.10.2012 09:18

16.roma n - ну как же не видно вразумительного? Я же пишу пользователь заполняет/меняет реквизиты документа (это как пример из ряда ситуаций у меня). Документ еще не записан и до его записи еще далеко! В COMconnector я этого не увижу и не отреагирую, а значит пользователю все придется заполнять и справляться как надо самому. Т.е. опять, так сказать, в "каменный век". Б2 менять не надо. Если бы можно было - все было бы куда прозаичнее и этой темы от меня не было бы.

Maximus 11.10.2012 10:48

чего наводить тень на плетень ? что там за расчёты ? юзер воводит то что вводит, записал. Скопируй и перепиши нужны и недостающие расчёты-данные

roma n 11.10.2012 11:58

17-Фидер > Каким образом Application узнаёт, что "пользователь что-то вводит в документ который ещё не записан"? Как этому помогает интерфейс? Печёнкой чую, что вызов функций/методов Applicanion производится [b]явно[/b]. Так что мешает вызвать эти процедуры/функции в Com ???
Интерфейс нужен, если [u]необходимо организовать интерактивный ввод данных[/u] в "чужую" базу. Во всех остальных случаях - консерватория не та. ИМХО

Lexusss 11.10.2012 16:54

Фактически, тебе нужен какой то канал передачи данных между 2мя запущенными работающими 1Сками. И это будет точно не OLE - обмен файлами или UDP

feedergood 11.10.2012 18:13

Блин, ну что за форум? Я спрашиваю как мне именно надо, а вы мне все в сторону уйти предлагаете. Причем каждый раз я же говорю - все работает и так, только перезапускаться надо. И каждый раз в сторону предложение. Мне что, всю кухню тут надо расписать? Что за допросы с пристрастием?

Всем спасибо, тема закрыта.

qweqwe123123 11.10.2012 19:55

21-Фидер > так и пиши в вопросе "[b]отвечать только <да> или <нет>[/b]".

Maximus 12.10.2012 06:51

плохому танцору всегда что-то мешает

roma n 12.10.2012 07:59

21-Фидер > а мы не ищем лёгких путей... :)
Мне вот, честно, интересно узнать ответы.
Мало ли... Неизвестно где и когда опыт может пригодиться, а я так и не понял каким образом решить задачу тебе помогает интерфейс "чужой" базы...

feedergood 12.10.2012 22:25

24 roma n, "Мне вот, честно, интересно узнать ответы. " - спасибо за честность. А то я уже подумал - то ли лыжи ..., то ли я ...

EarlyBird 13.10.2012 01:17

[img]http://demotivators.to/media/posters/4017/936159_nu-nakonets-to.jpg[/img]

DeiMos 13.10.2012 12:01

25-Фидер > Ты не отмазывайся, ты на вопросы Жаждущего сообщества ответь?


Вопросы (12, 13)...

Примеры приведи нужды в интерфейсе?


Текущее время: 02:11. Часовой пояс GMT +3.