При попытке сохранить и открыть макет конфигурации с типом Двоичные данные разработчики часто сталкиваются с ситуацией, когда офисные программы не могут распознать формат файла. Если макет относится к драйверу торгового оборудования, простая замена вложенной библиотеки .dll обычно не приводит к желаемому результату — 1С продолжает игнорировать изменения или выдает ошибку загрузки. Выясним причину такого поведения платформы и подробно разберем по шагам, как устроен данный механизм и как правильно подключить нужную библиотеку.
Тип макета Двоичные данные не привязан к конкретному расширению: внутри может содержаться произвольный поток байтов — от исполняемых файлов и библиотек до картинок и упакованных архивов. В типовых конфигурациях на базе Библиотеки подключаемого оборудования (БПО) макеты драйверов (например, ДрайверШтрихМФискальныеРегистраторы) практически всегда представляют собой упакованный ZIP-архив.
Если выгрузить такой макет из конфигуратора на диск, файлу необходимо вручную присвоить расширение .zip. После этого его можно открыть любым стандартным архиватором. Внутри архива располагаются:
MANIFEST.XML или info.xml)..dll для операционных систем Windows и .so для Linux).Проанализируем ситуацию, при которой разработчик помещает новую библиотеку в архив макета, но платформа 1С отказывается с ней работать. Для этого есть несколько ключевых причин:
MANIFEST.XML строго регламентирует структуру поставки: в нем зафиксированы точные имена файлов библиотек, их версии, поддерживаемые операционные системы, архитектуры процессора и используемая технология (Native API или COM). Если поместить в архив файл с другим именем или не скорректировать манифест, загрузчик БПО не сможет сопоставить библиотеку с текущей средой выполнения.IComponentBase для Native API). Если разработчик пытается внедрить произвольную системную библиотеку производителя, не адаптированную под требования 1С, платформа не сможет вызвать типовые методы инициализации.Рассмотрим, как правильно отредактировать макет, если новая библиотека поддерживает стандартные интерфейсы подключаемого оборудования 1С.
.zip..dll на новую версию, обращая внимание на разрядность (рекомендуется подготавливать сборки как для 32-битного, так и для 64-битного клиента).MANIFEST.XML в текстовом редакторе и скорректируйте параметры:
<bundle>
<component type="Native" os="Windows" path="ShtrihDriver_x86.dll" architecture="i386"/>
<component type="Native" os="Windows" path="ShtrihDriver_x64.dll" architecture="x86_64"/>
<version>2.1.0.1</version>
</bundle>
version, чтобы платформа принудительно перезаписала устаревшие файлы в кэше.MANIFEST.XML и .dll должны лежать в корне архива, а не во вложенной подпапке.Разберем более безопасный и рекомендуемый разработчиками БПО путь, не требующий снятия конфигурации с поддержки и прямого редактирования макетов.
Посмотрим на пример, когда сторонняя библиотека не разрабатывалась под стандарты БПО и представляет собой классический COM-сервер (ActiveX/COM). В этом случае стандартный механизм драйверов БПО использовать не получится — потребуется обращаться к объекту напрямую из встроенного языка 1С.
Для этого библиотека должна быть предварительно зарегистрирована в операционной системе с помощью утилиты regsvr32. Затем макет можно выгрузить на диск и создать объект программно:
// Извлекаем макет с двоичными данными во временный файл
ДвоичныеДанныеМакета = УправлениеОборудованием.ПолучитьМакет("ДрайверШтрихМФискальныеРегистраторы");
ИмяВременногоФайла = КаталогВременныхФайлов() + "CustomDriver.dll";
ДвоичныеДанныеМакета.Записать(ИмяВременногоФайла);
// Если библиотека COM зарегистрирована в Windows, инициализируем ее напрямую по ProgID
Попытка
ДрайверCOM = Новый COMОбъект("AddIn.CustomShtrihDriver");
// Вызов методов сторонней библиотеки
ДрайверCOM.Connect();
Исключение
Сообщить("Не удалось инициализировать COM-объект: " + ОписаниеОшибки());
КонецПопытки;
Рассмотренный подход позволяет полностью обойти типовые ограничения БПО и работать с нестандартными или самописными библиотеками напрямую из модулей конфигурации.