«Жемчужный» доступ к 1С: Предприятию 8.2

01.04.13

База данных - Инструменты администратора БД

Думаю, всем вам известен такой программный продукт, как 1С: Предприятие 8.2. И, наверное, многим из вас известен тот факт, что к 1С: Предприятию можно подключиться, используя OLE/COM-соединение. А многие ли из вас знают, что с помощью OLE/COM-соединения можно не только выполнять программный код 1С, но и “управлять” сервером 1С: Предпрития? К примеру, можно подключиться к Агенту кластера серверов 1С: Предприятия, получить список открытых клиентских сессий, прочитать информацию о выданных им лицензиях… К тому же, наличие варианта подключения посредством OLE/COM-соединения расширяет в арсенале программиста добавляет возможность выбора языка программирования, отличного от встроенного языка 1С: Предприятия. Можно выбрать любой язык, который способен работать с OLE/COM-компонентами: будь то VB.Net, C#.Net, или Java, или даже… Perl. Да, вы не ослышались. Именно Perl.
Итак…

Задача.


Необходимо реализовать автоматический рестарт службы Агент сервера 1С: Предприятия 8.2 с помощью планировщика задач Windows. Но перед рестартом необходимо проверить, не работает ли кто-нибудь в базе Base, расположенной на сервере 1С: Предприятия. Если кто-нибудь работает, то перезапуск службы недопустим.

Решение.


Итак. Задача поставлена. Основной проблемой для меня стало условие проверки существующих подключений к определенной БД. Для реализации поставленной задачи я решил не использовать встроенный язык 1С: Предприятия, ни один из .Net-языков, а также Java (only console, only true linux-way).

В синтаксис-помощнике 1С: Предприятия был найден метод проверки наличия подключений к БД, но он предполагал использование OLE/COM-соединения к Агенту сервера 1С: Предприятия. Что ж… Приступим.


Выдержка из синтаксис-помощника

Соединение с агентом сервера (IServerAgentConnection)
GetInfoBaseConnections (GetInfoBaseConnections)
Синтаксис:

GetInfoBaseConnections(, )

Параметры:

(обязательный)
Тип: Кластер серверов. Кластер серверов, для которого должен быть получен массив описаний соединений.

(обязательный)
Тип: Описание информационной базы. Информационная база, для которой должен быть получен массив описаний соединений.

Возвращаемое значение:
Тип: COMSafeArray. Массив описаний соединений кластера. Каждое описание соединения представлено объектом с интерфейсом Описание соединения.

Описание:
Получает массив описаний соединений информационной базы.

Доступность:
Интеграция.

Для работы с OLE/COM-объектами средствами Perl нам понадобиться задействовать модуль Win32::OLE. В используемой мной сборке StrawberryPerl данный модуль уже был предустановлен. Но даже если это не так, можно установить его через CPAN:

C:\Perl\perl\bin\cpan Win32::OLE

Чтобы получить список соединений базы данных 1С, нам нужно:

  • Создать COM-подключение к объекту V82.COMConnector;
  • Подключиться к агенту кластера серверов 1С: Предприятия;
  • Получить объект кластера 1С;
  • Авторизоваться на кластере;
  • Получить список баз 1С на этом кластере;
  • Найти необходимую нам базу;
  • Получить список активных соединений к этой базе данных.



Вот код с комментариями, который получает список активных соединений клиентов с базой данных 1С: Предприятия, расположенной на сервере 1С: Предприятия.

use strict;

use warnings;


use Win32::OLE;


use Data::Dumper;


sub getConnectionsCount {

    # имя сервера (с портом) и имя базы будем получать из параметров метода

    my ($server, $dbname) = @_;

    # создаем COM-соединение

    my $ole1c = Win32::OLE->new("V82.COMConnector") or die "Could not create OLE-connector!\n";

    # создаем объект Агента сервера 1С:Предприятия

    my $_agent = $ole1c->ConnectAgent($server) or die "Could not connect to server!\n" . cnv(Dumper $ole1c->ErrorDescription());

    # получаем объект кластера (у меня один кластер)

    my $_cluster = $_agent->GetClusters()->[0] or die "Could not get cluster 0 from array\n";

    # авторизуемся на кластере серверов.

    # Авторизоваться надо с помощь логина и пароля Администратора кластера серверов,

    # которого можно задать в утилите Администрирования сервера 1С:Предприятия.

    # не путайте этого администратора с администратором базы данных, что заводится

    # через конфигуратор в пользователях.

    # У меня нет администраторов, оставляю пустыми параметры логина и пароля.

    $_agent->Authenticate($_cluster, "", "");

    # получаем список баз данных, расположенных в данном кластере

    my $_basesinfo = $_agent->GetInfoBases($_cluster);

    # найдем нашу базу данных

    my @_bases = grep { defined $_->{Name} && $_->{Name} =~ m/^$dbname$/ } @$_basesinfo;

    # она точно будет одна

    my $_base = $_bases[0];

    # заведем счетчик подключений

    my $connCounter = 0;

    # получим все активные подключения или сразу вернем 0

    my $_baseconns = $_agent->GetInfoBaseConnections($_cluster, $_base) or return 0;

    # “отсечем” все соединения по типу приложения, на которые можно не обращать внимание.

    # если эти подключения есть, то можно смело перегружать службу

    # Агента сервера 1С:Предприятия

    foreach (@$_baseconns) {

       # нам не важны планировщики задач и подключения через консоль кластера

       if ($_->{Application} !~ m/JobScheduler/ && $_->{Application} !~ m/SrvrConsole/) {

           $connCounter++;

       }

    }


    return $connCounter;

}


# вызов очень простоой.

# только порт нужно указывать тот, который слушает агент кластера серверов 1С:Предприятия

print “There are “ . getConnectionsCount(“localhost:1540”, “Base”) . “ active connections\n”;

 


Перезапустить службу Агента можно с помощью команд “net start” и “net stop”:

net stop 
net start



Полный код, выполняющий поставленную задачу я расположил на Bitbucket-е (для тех, у кого есть доступ). У кого нет доступа, привожу здесь:

 

use strict;
use warnings;

#use locale;
#use encoding 'cp1251';

use utf8;

use Win32::OLE;
use Win32::OLE::Variant;

# раскомментировать, если непонятные ошибки или не работает
# но тогда не будет видно комментариев о перезапуске службы
#Win32::OLE->Option(Warn => 3);
#binmode STDOUT, ':encoding(cp1251)';
#`chcp 1251`;

use Data::Dumper;

my $DEBUG = 0;

# настройки
my $_S = {
    host => 'localhost', #адрес агента сервера 1С
    port => '1540', #порт агента!
    bases => [ #список баз
        {
            name => 'GTVCopy', #имя базы, которую надо проверять, как оно задано в кластере сервера 1С
            killall => 0 #удалять ли открытые сессии
        },
        {
            name => 'MET',
            killall => 1
        }
    ],
    serviceName => '1C:Enterprise 8.2 Server Agent (x86-64)', #имя службы сервера 1С
    serviceRestart => {
        need => 1, #нужно ли рестартовать службу сервера 1С
        ifNoConnectionsOnly => 1 #только в том случае, если нет подключений ко всем БД из списка выше
    }

};



sub prn {
    print "\n" . shift . "\n" if $DEBUG;
}

sub getConnectionsCount {
    my ($server, $dbname) = @_;

    my $counter = 1;
    print "GET CONNECTIONS\n" if $DEBUG;

    prn 1;
    my $ole1c = Win32::OLE->new("V82.COMConnector") or die "Could not create OLE-connector!\n";
    print "COM-connector created...\n" if $DEBUG;
    prn 2;
    my $_agent = $ole1c->ConnectAgent($server) or die "Could not connect to server!\n" . cnv(Dumper $ole1c->ErrorDescription());
    prn 3;
    my $_cluster = $_agent->GetClusters()->[0] or die "Could not get cluster 0 from array\n";
    print "CLUSTER: \n" . Dumper $_cluster if $DEBUG;
    prn 4;
    $_agent->Authenticate($_cluster, "", "");

    prn 5;
    my $_basesinfo = $_agent->GetInfoBases($_cluster);
    my @_bases = grep { defined $_->{Name} && $_->{Name} =~ m/^$dbname$/ } @$_basesinfo;
    my $_base = $_bases[0];
    print Dumper $_base if $DEBUG;

    prn 6;
    my $connCounter = 0;
    my $_baseconns = $_agent->GetInfoBaseConnections($_cluster, $_base) or return 0;
    foreach (@$_baseconns) {
        if ($_->{Application} !~ m/JobScheduler/ && $_->{Application} !~ m/SrvrConsole/) {
            print $_->{Application} . "\n" if $DEBUG;
            $connCounter++;
        }
    }

    return $connCounter;
}

sub killAllSessions {
    my ($server, $dbname) = @_;

    my $counter = 1;
    print "KILL SESSIONS\n" if $DEBUG;

    prn 1;
    my $ole1c = Win32::OLE->new("V82.COMConnector") or die "Could not create OLE-connector!\n";
    print "COM-connector created...\n" if $DEBUG;
    prn 2;
    my $_agent = $ole1c->ConnectAgent($server) or die "Could not connect to server!\n" . cnv(Dumper $ole1c->ErrorDescription());
    prn 3;
    my $_cluster = $_agent->GetClusters()->[0] or die "Could not get cluster 0 from array\n";
    print "CLUSTER: \n" . Dumper $_cluster if $DEBUG;
    prn 4;
    $_agent->Authenticate($_cluster, "", "");

    prn 5;
    my $_basesinfo = $_agent->GetInfoBases($_cluster);
    my @_bases = grep { defined $_->{Name} && $_->{Name} =~ m/^$dbname$/ } @$_basesinfo;
    my $_base = $_bases[0];
    print Dumper $_base if $DEBUG;

    my $_sessions = $_agent->GetSessions($_cluster);

    return unless defined $_sessions;

    my @_sessions = grep { defined $_->{infoBase}->{Name} && $_->{infoBase}->{Name} eq $_base->{Name} } @$_sessions;
    #print Dumper @_sessions;

    foreach (@_sessions) {
        if ($_->{AppID} !~ m/JobScheduler/ && $_->{AppID} !~ m/SrvrConsole/) {
            $_agent->TerminateSession($_cluster, $_);
        }
    }
}




#print "Connections count: " . getConnectionsCount("localhost", ) . "\n";
#killAllSessions("localhost:2040", $ARGV[0]);
#print "Connections count: " . getConnectionsCount("localhost", $ARGV[0]) . "\n";

my $host = $_S->{host} . $_S->{port} ne '' ? ":" . $_S->{port} : '';

my $cons = 0;

for my $base (@{$_S->{bases}}) {
    print "Checking connections in base named $base->{name}...";
    my $connCount = getConnectionsCount($host, $base->{name});
    print "$connCount\n";
    if ($base->{killall} && $connCount > 0) {
        print "Killing connections...\n";
        killAllSessions($host, $base->{name});
    }
    $cons += getConnectionsCount($host, $base->{name});
}

print "Total active connections: $cons\n";

if ($_S->{serviceRestart}->{need}) {
    if ($_S->{serviceRestart}->{ifNoConnectionsOnly} && $cons > 0) {
        print "Will not restart service.\n";
        exit;
    }
    print "Restarting service named $_S->{serviceName}...\n";
    print `net stop "$_S->{serviceName}"`;
    print `net start "$_S->{serviceName}"`;
}

См. также

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

12000 руб.

06.12.2023    2972    13    1    

34

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3521    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177734    1073    0    

849

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27374    79    146    

59

Система хранения присоединенных файлов в томах на диске

Инструменты администратора БД Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Платные (руб)

Конфигурация Комплексная автоматизация 1.1 (и УПП 1.3 тоже) хранит файлы и изображения в справочнике Хранилище дополнительной информации в реквизите Хранилище типа ХранилищеЗначений. Та же история с ВложениямиЭлектроннойПочты. Но при этом присоединенные файлы в Электронном документообороте хранит в томах на диске. Эта доработка позволяет использовать стандартный механизм хранения файлов, изображений и вложений электронных писем в томах на диске. При этом можно разделить тома хранения по объектам конфигурации.

4200 руб.

10.11.2015    61313    88    59    

73

"Менеджер потоков 2.1": УПП: "Восстановление партий"

Инструменты администратора БД Платформа 1С v8.3 1С:Управление производственным предприятием Россия Бухгалтерский учет Управленческий учет Платные (руб)

Как оптимизировать то, что, считалось, не поддается оптимизации? Как повысить доступность базы данных? Как проводить самую «времяемкую» операцию не по паре раз в неделю, а по несколько раз в день*? Ответ есть!

20000 руб.

12.09.2019    11745    5    9    

7

Брандмауэр для сервера 1С Предприятие 8 - внешнее управление сеансами

Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Управление возможностью начала и возобновления сеансов пользователей по различным условиям, ограничение общего числа возможных сеансов для работы с информационной базой, резервирование возможности работы с информационной базой определенных польззователей, запрет запуска нескольких сеансов для пользователя, журнализация событий начала (возобновления) и завершения (гибернации) сеансов, ведение списка активных сеансов для информационных баз кластера серверов

3600 руб.

06.02.2017    31109    31    18    

47

Хранилище файлов на SQL

Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Управленческий учет Платные (руб)

Привязка файлов / сканов к объектам 1С с сохранением их на SQL-сервере

12000 руб.

09.10.2019    10982    5    8    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. adapter 417 01.04.13 14:27 Сейчас в теме
Хорошая статья, тока в этой "перловке" мало кто из 1С-ников разбирается, поэтому применить на практике не сможет. А вот если сделать это на 1С, то получаются отличные инструменты. У меня например вот такой:
"Мониторинг кластеров серверов 1С" http://www.adaptersoft.ru/helpdesk/?p=501
Показывает расход ключей, реализует механизм "лимита производительности", собирает историю, показывает диаграммы\графики

Ну а вместо назначенных заданий windows в конфе используются регламентные задания 1С. Это позволяет запускать скрипты на языке 1С и там уже использовать возможности монитора кластера.
2. andrewks 1368 01.04.13 15:27 Сейчас в теме
(1) adapter, я так понял , разработка платная?
3. boy13 169 01.04.13 15:39 Сейчас в теме
(1) adapter, я как раз и не хочу использовать встроенный язык 1С.
11. Поручик 4670 01.04.13 23:38 Сейчас в теме
(1) Я разбираюсь. Perl когда-то был моим основным языком, потом уже эта ваша 1С стала.
14. boy13 169 02.04.13 00:50 Сейчас в теме
(11) Поручик, :) а я вот - наоборот, ухожу, расширяюсь...
31. NosovK 16 03.04.13 23:42 Сейчас в теме
(1) adapter, немогу оценить всю обработку, но модуль мониторинга кластера - чудесен.
А нет у вас его в виде отдельной обработки?
4. adapter 417 01.04.13 15:53 Сейчас в теме
да разработка платная, мониторинг кластера это только одна из доп. функций системы. Такую обработку не сложно сделать и самостоятельно, все по справочнику функций.
5. cool.vlad4 2 01.04.13 16:42 Сейчас в теме
а почему perl, - я так понимаю из-за вкусовщины? поскольку это под виндами(а иначе быть не может), то можно выбрать, то, что уже есть - либо vbs, либо powershell. просто не понимаю, зачем использовать этот страшный perl (лучше уж python тогда, да простят меня апологеты perl-а). Но за разнообразие +
6. boy13 169 01.04.13 16:46 Сейчас в теме
(5) cool.vlad4, потому что я его знаю, и пока нет желания изучать vbs, powershell, python и иже с ними. И чтобы остальные не боялись перл.
7. Новиков 292 01.04.13 20:37 Сейчас в теме
За перл - плюс.

Правда не понятно, что мешает автору сначала поставить во всех базах режим "мягкого выгона" всех пользователей, дождаться пока оные выйду и уже потом сделать ГАРАНТИРОВАННЫЙ рестарт сервера 1С? При этом вся моя предыдущая строка, впишется в один батник, число строчек в котором будет напорядок меньше, чем в приведенном скрипте :) Это не критика, просто здоровый интерес - почему было принято именно такое перловское решение?
12. boy13 169 02.04.13 00:47 Сейчас в теме
(7) Новиков, Ничего не мешает. Кроме упоротости автора, т.е. меня :), с какого-то времени по этому древнему языку.
Захотелось сделать все с минимальным участием 1С. Гибко и переносимо.
8. stanru1 91 01.04.13 21:34 Сейчас в теме
Ставлю "плюс" - ради хакерской ценности круто управлять 1с через перл. Для совместимости и переносимости стоило бы еще написать на стороне 1с веб-сервисы, которые бы позволяли "рулить" кластером без COM (например, из линукса).
15. boy13 169 02.04.13 00:52 Сейчас в теме
(8) stanru1, да, круто. Но, повторюсь, я не хотел использовать никакую базу 1С и ее внутренний язык. Только извне.
9. ediks 335 01.04.13 21:48 Сейчас в теме
А почему "Жемчужный" доступ? PERL <> PEARL. :)
10. cool.vlad4 2 01.04.13 22:22 Сейчас в теме
Название языка представляет собой аббревиатуру, которая расшифровывается как Practical Extraction and Report Language — «практический язык для извлечения данных и составления отчётов»[1]. Первоначально аббревиатура состояла из пяти символов и в таком виде в точности совпадала с английским словом pearl («жемчужина»). Но затем стало известно, что такой язык существует (см. PEARL (англ.)), и букву «a» убрали.
(9) ediks,
13. boy13 169 02.04.13 00:49 Сейчас в теме
(9) ediks, В интернете много аналогий перла с "жемчугом". Хоть тут.
16. boy13 169 02.04.13 00:57 Сейчас в теме
ВСЕМ ВОПРОШАЮЩИМ О ВЫБОРЕ СРЕДСТВА отвечу еще раз. Ну вот захотелось мне разнообразия. Почему нет? just for fun с выгодой для работы.
Да и к тому же, если глючит 1с, то надо бы избежать ее использования для ее же "починки". :)
17. Новиков 292 02.04.13 09:34 Сейчас в теме
(16) я тоже иногда на перле пишу, но серьезного давно не писал :) Ну джаст фор фан, так джаст фор ван, как говориться.
18. vbuots 20 02.04.13 11:29 Сейчас в теме
Отличная статья, а вот так это можно сделать с помощью Power Shell на win сервере:
Stop-Service "1C:Enterprise 8.2 Server Agent (x86-64)" -Force
Start-Sleep -s 15
Get-Process -Name rphost*,rmngr*,ragent* | Stop-Process -Force
Start-Sleep -s 5
Start-Service "1C:Enterprise 8.2 Server Agent (x86-64)"

Однако удобнее всего повесить эти команды на SQL Server Agent.
21. boy13 169 02.04.13 22:49 Сейчас в теме
(18) vbuots, у нас он отказался job-ы выполнять :)
24. vbuots 20 03.04.13 09:28 Сейчас в теме
(21) запуск службы надо сделать от имени Администратора (например локального). И погуглить как разрешить Power Shell выполнять команды от того или иного пользователя...
28. boy13 169 03.04.13 18:54 Сейчас в теме
(24) vbuots, не, слетели DCOM-библиотеки какие-то.
19. yuraos 991 02.04.13 14:18 Сейчас в теме
А есть ли стандартная раскраска кода для "Жемчуга" ???
22. boy13 169 02.04.13 22:49 Сейчас в теме
20. serega3333 02.04.13 16:14 Сейчас в теме
нормальный замес, перл круто смотрится, спасибо за инфу что можно и перл прикрутить
23. boy13 169 02.04.13 22:50 Сейчас в теме
(20) serega3333, пожалуйста! У меня есть еще одна разработка на перле, которая активно используется. Но 1С там опосредованно. Бекапы баз скульных делаю замысловато. Если надумаю, выложу.
25. 1cmax 152 03.04.13 12:06 Сейчас в теме
Перл - это хорошо, когда он сам по себе парсит строки, часто юзаю микроскрипты для обработки файлов с использованию регулярных выражений.
, но не вижу смысла вязать с 1с..
26. DoctorRoza 03.04.13 12:26 Сейчас в теме
Крутотень или изврат? :) Но + однозначно!
27. asved.ru 36 03.04.13 17:29 Сейчас в теме
перл придумали марсиане. Из соседнего с создателями регэкспов канала.
29. andrewks 1368 03.04.13 19:23 Сейчас в теме
(27) asved.ru, а кто же тогда придумал пролог?
32. adapter 417 04.04.13 14:06 Сейчас в теме
Нету, механизм шире чем просто обработка, поэтому является частью конфигурации. Обсуждение HD предлагаю вести
в профильной теме http://infostart.ru/community/groups/740/
33. artem666 29 05.04.13 15:42 Сейчас в теме
Автор, исправь вводную статьи, java не поддерживает OLE/COM
34. cool.vlad4 2 05.04.13 15:48 Сейчас в теме
35. cool.vlad4 2 05.04.13 15:52 Сейчас в теме
(33) и если говорить про COM и про все, то что имеет доступ к api винды, как оно может не поддерживать COM?
38. frc 11.04.13 00:57 Сейчас в теме
(35) cool.vlad4,
то что имеет доступ к api винды, как оно может не поддерживать COM?

Так и может.
COM не равно API.
Наоборот, АПИ "делает" COM.
COM - технология доступа к приложениям, лицензированная Микрософт. С какого пререпугу COM опустился на уровень АПИ и стал поддерживаться любым приложением (и процессом, им генерируемым)?
(3)
все это прекрасно реализуется из 1С - все теми же средствами.
Причем бесплатно.
36. echo77 1868 07.04.13 14:55 Сейчас в теме
На WSH кто-нибудь подобное может исполнить?
37. iceflash 4 08.04.13 14:53 Сейчас в теме
Вообще-то, существует штатный механизм, при котором происходит "мягкий" рестарт процессов rphost самим сервером 1с через процесс менеджера кластера сервера(процесс rmngr). Настраивается элементарно через оснастку сервера 1с предприятия. К чему такие костыли?
Незнание заставляет изобретать велосипеды?;)
Вообще можно задать параметры, по лимитам привышения, и сколько должен продержаться лимит (например процесс выделил сверх лимита память, но возможно это ресурсоемкая операция, и рубить ее сразу смысла нет, ставим отсрочку в 1-2 минуты, если память сверх лимита рестарт такого процесса). Причем после рестарта, клиенты подвиснут на определенный момент времени, если будет выполняться какая то операция, и переключаться на свободный процесс который может их принять. И для пользователя это будет "не заметно".

Доступ через ole/com довольно ресурсоемкая операция, все зависит от задачи конечно, возможно просто не удачный пример=)
Оставьте свое сообщение