Подключение торгового оборудования на стороне сервера 1С — задача не самая тривиальная, особенно когда речь идет о весах. В отличие от клиентского подключения, где драйвер часто работает в интерактивном режиме, серверное использование требует четкого понимания разрядности платформы, технологии Native API и особенностей прав доступа службы 1С. В данной статье мы подробно разберем, как подключить внешнюю компоненту MassaKDriverR1C, избежать ошибки «Тип не определен» и правильно организовать обмен данными с весами в серверном контексте. При необходимости вы можете задействовать готовое решение для программной работы с весами Масса-К через механизмы БПО.
Прежде чем приступать к коду, давайте проанализируем ситуацию с самой библиотекой. Традиционно многие драйверы регистрировались в системе через regsvr32. Однако современные компоненты от «Масса-К» используют технологию Native API. Это критически важный момент: такие библиотеки не нужно и бесполезно регистрировать в реестре Windows. Они подключаются динамически непосредственно из кода 1С. Если вы пытаетесь использовать библиотеку с суффиксом x64, убедитесь, что ваш сервер 1С также имеет 64-битную разрядность, так как 32-битный рабочий процесс 1С (rphost) просто не сможет «проглотить» 64-битную DLL.
Рассмотрим основные причины, по которым метод Новый() отказывается создавать объект драйвера, даже если файл физически существует на диске:
Microsoft Visual C++ Redistributable. Если на сервере их нет, операционная система не даст 1С загрузить библиотеку.1С:Предприятие (обычно USR1CV8), должен иметь права на чтение и выполнение в папке, где лежит DLL.Вместо того чтобы мучиться с выбором конкретного DLL-файла, мы рекомендуем использовать «сборку» — ZIP-архив, предоставляемый производителем. Внутри него находится файл manifest.xml, который сообщает 1С, какую именно библиотеку нужно вытащить для текущей операционной системы и её разрядности. Это делает ваш код универсальным.
Рассмотрим пошагово, как это реализовать. Предположим, вы загрузили архив в макет конфигурации или положили его в сетевую папку.
// Пример подключения из ZIP-архива, хранящегося в макете
ИмяВК = "MassaK_Driver"; // Произвольный псевдоним для текущего сеанса
ПутьКАрхиву = "C:\Distr\MassaK_Native.zip"; // Путь к сборке с манифестом
// 1. Подключаем компоненту
РезультатПодключения = ПодключитьВнешнююКомпоненту(ПутьКАрхиву, ИмяВК, ТипВнешнейКомпоненты.Native);
Если РезультатПодключения Тогда
// 2. Создаем объект. Важно: "MassaKDriverR1C" - это внутреннее имя из манифеста
Попытка
ДрайверВесов = Новый("AddIn." + ИмяВК + ".MassaKDriverR1C");
Исключение
Сообщить("Объект не создан: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Иначе
Сообщить("Не удалось загрузить внешнюю компоненту!");
КонецЕсли;
Проанализируем строку Новый("AddIn.ИмяВК.MassaKDriverR1C"). Здесь AddIn — это стандартный префикс для всех внешних компонент в 1С. ИмяВК — это тот самый второй параметр, который вы передали в функцию ПодключитьВнешнююКомпоненту. MassaKDriverR1C — это жестко заданное имя класса внутри самой DLL. Если вы ошибетесь хотя бы в одном символе или регистре (Native API чувствителен к регистру), вы получите ошибку определения типа.
Выясним, чем отличается работа с весами на сервере от работы на клиенте. Когда вы вызываете методы драйвера на сервере, помните:
Настроить() или любой другой, который выводит визуальное окно выбора порта. Все параметры связи (IP-адрес весов, порт, таймаут) должны быть установлены программно через свойства объекта ДрайверВесов.Давайте разберем полный цикл взаимодействия с устройством. После того как мы успешно создали объект ДрайверВесов, нам нужно выполнить последовательность действий по опросу устройства.
// Установка параметров (пример для весов с Ethernet-модулем)
ДрайверВесов.IPAddress = "192.168.1.100"; // IP весов в вашей сети
ДрайверВесов.PortNumber = 5001; // Стандартный порт для Масса-К
ДрайверВесов.Protocol = 1; // Уточните номер протокола в документации к вашей модели
// Установка соединения
Если ДрайверВесов.Connect() Тогда
// Запрос веса
Если ДрайверВесов.GetWeight() Тогда
ТекущийВес = ДрайверВесов.Weight;
Стабильность = ДрайверВесов.Stable;
Если Стабильность Тогда
Сообщить("Вес успешно получен: " + ТекущийВес);
Иначе
Сообщить("Вес не стабилен, попробуйте еще раз.");
КонецЕсли;
Иначе
Сообщить("Ошибка при запросе веса: " + ДрайверВесов.LastErrorDescription);
КонецЕсли;
// Обязательно отключаемся
ДрайверВесов.Disconnect();
Иначе
Сообщить("Не удалось установить связь с весами!");
КонецЕсли;
Если вы все сделали правильно, но код всё равно выдает ошибку, проанализируем следующие моменты. Проверьте логи сервера 1С. Часто там можно найти информацию о том, что системе не удалось загрузить библиотеку из-за отсутствия прав доступа к временной папке. 1С при вызове ПодключитьВнешнююКомпоненту распаковывает DLL во временный каталог текущего пользователя (в данном случае — пользователя, под которым работает сервер 1С). Если папка Temp переполнена или заблокирована антивирусом, загрузка не произойдет.
Также посмотрим на версию самой библиотеки. Производитель «Масса-К» регулярно обновляет драйверы (например, серия 8.15 и выше). Мы рекомендуем всегда использовать последнюю версию с официального сайта, так как в старых версиях могли быть проблемы с утечкой памяти при работе в многопоточном режиме сервера 1С.
Подводя итог, скажем: программное подключение весов через DLL на сервере — это надежное решение для автоматизированных систем, где требуется исключить человеческий фактор при взвешивании. Главное — строго соблюдать разрядность, использовать Native API и правильно обрабатывать исключения в коде. При сложностях с пробросом портов на сервере можно применить архитектурное решение для интеграции с весами по COM-порту через HTTP-сервис.