«Жемчужный» доступ к 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С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

24900 руб.

20.08.2024    64176    337    162    

299

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

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

17000 руб.

10.11.2023    24459    92    42    

101

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 1С 8.3 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, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 17.06.2025, версия 1.3

21960 руб.

06.12.2023    21937    79    10    

112

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

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

14640 руб.

29.04.2020    49299    134    159    

90

Файловый обмен (TXT, XML, DBF), FTP Поиск данных Инструменты администратора БД Корректировка данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная обработка позволит Вам легко и просто, а главное - быстро, выполнить сравнение данных между ЛЮБЫМИ базами (и РИБ, по правилам конвертаций) по контрольным суммам выбранных объектов баз 1С, работающих на платформах 8.3 и выше. Удобный и понятный интерфейс в виде "мастера". Высокая скорость сравнения достигается за счет специального алгоритма расчета контрольной суммы объекта/записи и сравнения по данным суммам объектов 2х баз через файл. Имеется возможность выбора реквизитов, по которым система будет сравнивать объекты. Сравнение количества записей в движениях документов, возможность сравнивать данные по правилам конвертации и не только! Выбор объектов конфигурации для КАЖДОГО узла в отдельности с индивидуальным отбором для каждого объекта конфигурации, работа с FTP, сохранение или загрузка настроек, сохранение или загрузка результата сравнения, регистрация на обмен объекта и его движений. (Обновление от 12.11.2024, версия 2.2-2.5)

24400 руб.

27.10.2017    45122    31    13    

49

Чистка данных Инструменты администратора БД Администрирование 1С 8.3 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Решение представляет собой набор из 6 обработок для 1С по удалению организаций и справочников из базы по фильтрам, документов по фильтрам, универсальное сжатие данных, очистка битых движений регистратора, удаление устаревших регистров сведений, удаление устаревших документов "Электронное письмо входящее" и "Электронное письмо исходящее"

23999 руб.

20.02.2026    784    1    0    

4

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

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

5490 руб.

10.11.2015    65999    102    59    

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

Ну а вместо назначенных заданий windows в конфе используются регламентные задания 1С. Это позволяет запускать скрипты на языке 1С и там уже использовать возможности монитора кластера.
2. andrewks 1383 01.04.13 15:27 Сейчас в теме
(1) adapter, я так понял , разработка платная?
3. boy13 169 01.04.13 15:39 Сейчас в теме
(1) adapter, я как раз и не хочу использовать встроенный язык 1С.
11. Поручик 4609 01.04.13 23:38 Сейчас в теме
(1) Я разбираюсь. Perl когда-то был моим основным языком, потом уже эта ваша 1С стала.
14. boy13 169 02.04.13 00:50 Сейчас в теме
(11) Поручик, :) а я вот - наоборот, ухожу, расширяюсь...
31. NosovK 17 03.04.13 23:42 Сейчас в теме
(1) adapter, немогу оценить всю обработку, но модуль мониторинга кластера - чудесен.
А нет у вас его в виде отдельной обработки?
4. adapter 462 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 338 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 1008 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 153 03.04.13 12:06 Сейчас в теме
Перл - это хорошо, когда он сам по себе парсит строки, часто юзаю микроскрипты для обработки файлов с использованию регулярных выражений.
, но не вижу смысла вязать с 1с..
26. DoctorRoza 03.04.13 12:26 Сейчас в теме
Крутотень или изврат? :) Но + однозначно!
27. asved.ru 37 03.04.13 17:29 Сейчас в теме
перл придумали марсиане. Из соседнего с создателями регэкспов канала.
29. andrewks 1383 03.04.13 19:23 Сейчас в теме
(27) asved.ru, а кто же тогда придумал пролог?
32. adapter 462 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 1938 07.04.13 14:55 Сейчас в теме
На WSH кто-нибудь подобное может исполнить?
37. iceflash 4 08.04.13 14:53 Сейчас в теме
Вообще-то, существует штатный механизм, при котором происходит "мягкий" рестарт процессов rphost самим сервером 1с через процесс менеджера кластера сервера(процесс rmngr). Настраивается элементарно через оснастку сервера 1с предприятия. К чему такие костыли?
Незнание заставляет изобретать велосипеды?;)
Вообще можно задать параметры, по лимитам привышения, и сколько должен продержаться лимит (например процесс выделил сверх лимита память, но возможно это ресурсоемкая операция, и рубить ее сразу смысла нет, ставим отсрочку в 1-2 минуты, если память сверх лимита рестарт такого процесса). Причем после рестарта, клиенты подвиснут на определенный момент времени, если будет выполняться какая то операция, и переключаться на свободный процесс который может их принять. И для пользователя это будет "не заметно".

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