Как найти и подключить внешнюю компоненту addin_rmk40.dll для ускорения расчетов в 1С?

Программист 1С v8.3 (Обычные формы) Управленческий учет Торговля и дистрибуция
← На главную

При работе с отраслевыми решениями для розничной торговли (например, на базе разработок «Штрих-М») или кастомными конфигурациями для управления продажами, программисты часто сталкиваются с использованием внешних библиотек, написанных на C++. Одной из таких специфических библиотек является addin_rmk40.dll. Рассмотрим ситуацию, когда при запуске обработки или конфигурации возникает ошибка «не удалось создать объект внешней компоненты», и разберем по шагам, как восстановить работоспособность системы.

Анализ проблемы: для чего нужна эта библиотека?

Прежде всего, проанализируем, за что отвечает данный компонент. Судя по коду и названию (RMK 4.0), эта библиотека является частью фронт-офисных систем и используется как математический акселератор. В 1С сложные расчеты, например, расчет многомерных матриц скидок или распределение товаров по сложным алгоритмам, могут выполняться достаточно медленно. Внешняя компонента addin_rmk40.dll берет на себя эти вычисления, предоставляя 1С готовый результат через COM-интерфейс.

Если компонента не подключена, система выдает предупреждение: «Скорость расчета будет замедлена». Это означает, что в коде предусмотрен альтернативный алгоритм на встроенном языке 1С, но он менее эффективен.

Шаг 1: Поиск библиотеки внутри конфигурации

Если у вас есть сама конфигурация или внешняя обработка, но нет файла DLL в системных папках, первым делом проверим макеты. Разберем, как разработчики обычно «упаковывают» такие файлы внутрь 1С. Как правило, библиотека хранится в макете с типом Двоичные данные.

  1. Откроем конфигуратор и найдем нужную обработку или общий макет.
  2. Посмотрим список макетов. Если мы видим макет с именем AddIn_dll или похожим, это и есть наша библиотека.
  3. Нажмем правой кнопкой мыши на макет и выберем пункт «Сохранить в файл». Сохраним его под именем addin_rmk40.dll.

Проанализируем программный код, который пытается инициализировать компоненту. Рассмотрим пример типичного блока инициализации:


АльтернативныйРасчетМатрицы = Ложь;
Попытка
    // Попытка регистрации компоненты в сеансе
    ПодключитьВнешнююКомпоненту("AddIn.AddInObject");
Исключение
    ОписаниеРезультата = "не удалось загрузить внешнюю компоненту ""addin_rmk40.dll"". Скорость расчета будет замедлена.";
    Сообщить(ОписаниеРезультата, СтатусСообщения.Важное);
    АльтернативныйРасчетМатрицы = Истина;
КонецПопытки;

Если АльтернативныйРасчетМатрицы = Ложь Тогда
    Попытка
        // Создание объекта для выполнения расчетов
        МатрицаОбъект = Новый("AddIn.Matrix", Неопределено);
    Исключение
        ОписаниеРезультата = "не удалось создать объект внешней компоненты ""addin_rmk40.dll""";
        Сообщить(ОписаниеРезультата, СтатусСообщения.Важное);
    КонецПопытки;
КонецЕсли;

Шаг 2: Правильное использование методов установки и подключения

Выясним причину, по которой ПодключитьВнешнююКомпоненту может возвращать Ложь. Часто разработчики забывают, что перед подключением компоненту нужно физически «положить» на диск и зарегистрировать. В современных версиях 1С (начиная с 8.2) для этого используется метод УстановитьВнешнююКомпоненту().

Рассмотрим правильную последовательность действий в коде:

  1. УстановитьВнешнююКомпоненту: Этот метод берет данные из макета и сохраняет их в локальный каталог пользователя на компьютере.
  2. ПодключитьВнешнююКомпоненту: Метод загружает библиотеку в адресное пространство процесса 1С.
  3. Новый (создание объекта): Создает экземпляр класса (в нашем случае AddIn.Matrix).

Если в коде вашей обработки отсутствует вызов УстановитьВнешнююКомпоненту(), то 1С будет искать библиотеку только в системных путях Windows или в реестре. Попробуем добавить этот вызов перед попыткой подключения.

Шаг 3: Технические ограничения и разрядность (x86 vs x64)

Проанализируем ситуацию с точки зрения системного администрирования. Библиотека addin_rmk40.dll создавалась во времена активного использования 32-битных систем. Это накладывает критическое ограничение:

Важно: Если вы используете 64-битный клиент «1С:Предприятие», 32-битная компонента (которой почти наверняка является данная DLL) работать не будет. При попытке подключения вы всегда будете получать ошибку, так как 64-битный процесс не может загрузить 32-битный модуль.

Выясним, как решить эту проблему:

Шаг 4: Ручная регистрация в операционной системе

Если программные методы 1С не помогают, рассмотрим вариант ручной регистрации COM-объекта. Для этого нам понадобятся права администратора.

  1. Скопируем файл addin_rmk40.dll в папку C:\Windows\SysWOW64 (для 64-битных ОС) или C:\Windows\System32 (для 32-битных ОС).
  2. Запустим командную строку (cmd) от имени администратора.
  3. Выполним команду: regsvr32 "C:\Windows\SysWOW64\addin_rmk40.dll".

Если регистрация прошла успешно, в реестре Windows появятся записи для AddIn.AddInObject и AddIn.Matrix. После этого 1С сможет создать объект без дополнительных манипуляций с макетами.

Возможные ошибки при регистрации

Иногда при попытке регистрации возникает ошибка «Модуль не найден». Разберем, что это значит. Часто это не означает отсутствие самого файла DLL, а указывает на отсутствие зависимых библиотек (например, Microsoft Visual C++ Redistributable). Для addin_rmk40.dll может потребоваться установка старых версий пакетов Visual C++ (2005 или 2008 года), так как компонента была разработана именно под эти стандарты.

Подведем итог: если вы нашли конфигурацию без этой библиотеки, попробуйте сначала найти её в макетах. Если её там нет — придется искать оригинальный дистрибутив «Штрих-М: РМК» или аналогичного решения, так как библиотека является проприетарной. Однако, как показывает практика, наличие в коде «Альтернативного расчета» позволяет работать и без неё, хоть и с меньшей производительностью на больших объемах данных.

← На главную