Использование внешних COM-компонент (.dll) или любых клиентских методов в регламентных заданиях серверной базы.
Разработка - Разработка внешних компонент
Например, не получится переписать компоненту, если вы не её автор и исходников просто нет. Либо если для ее работы недостаточно поддерживаемых технологией Native API простейших типов (число, строка, булево, дата).
При работе с файловой базой особых проблем нет. Регламентное задание вызывается в фоновом процессе обычного пользователя. Поэтому ему доступны клиенские вызовы. В серверной базе при запуске регламентного задания клиентского контекста нет, соответственно вызов ПодключитьВнешнююКомпоненту() недоступен.
Подробнее о том, почему недоступен, можно почитать на ИТС.
В этом случае можно вызывать компоненту на клиенте. Для этого достаточно выполнить из регламентного задания на сервере запуск еще одного сеанса 1С в котором на клиенте выполнить нужные действия. Ну и не забыть потом завершить запущенный сеанс.
Допустим, у нас в регламентном задании выполняется формирование и сохранение отчета, использующего для склонения ФИО внешнюю COM-компоненту NameDeclension.dll. На файловой базе такое регламентное задание будет работать корректно, на серверной компоненту подключить не получится.
Для устранения проблемы добавим в модуль регламентных заданий процедуру, которая в серверном режиме запустит еще один сеанс и в нем выполнит из внешней обработки вызов формирования отчета на клиенте.
#Если Клиент Тогда
Процедура ВыполнитьФормированиеИСохранениеОтчета() Экспорт
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.NAMEDECL","Скл",ТипВнешнейКомпоненты.COM) Тогда
Компонента = Новый ("AddIn.Скл.NameDeclension");
//Тут код формирования и сохранения отчета
Иначе
ЗаписьЖурналаРегистрации("РеглЗадания", УровеньЖурналаРегистрации.Ошибка,,,
"Не удалось подключить внешнюю компоненту на клиенте");
КонецЕсли;
КонецПроцедуры
#Иначе
Процедура ВыполнитьФормированиеИСохранениеОтчета() Экспорт
ВыполнитьОперациюНаКлиенте("РеглЗадания.ВыполнитьФормированиеИСохранениеОтчета()");
КонецПроцедуры
Процедура ВыполнитьОперациюНаКлиенте(ПараметрДляВыполнения) Экспорт
ИмяПользователя = "";
ПарольПользователя = "";
ПутьКВнешнейОбработке = "c:/temp/Автозапуск.epf";
Кавычка = """";
КаталогBIN = КаталогПрограммы();
ПутьККонфигурации = СтрокаСоединенияИнформационнойБазы();
ПутьККонфигурации = СтрЗаменить(ПутьККонфигурации, Кавычка, Кавычка + Кавычка);
СтрокаЗапуска = Кавычка + КаталогBIN + "1cv8.exe" + Кавычка + " ENTERPRISE"
+ " /IBConnectionString " + Кавычка + ПутьККонфигурации + Кавычка
+ " /N " + Кавычка + ИмяПользователя + Кавычка
+ " /P " + Кавычка + ПарольПользователя + Кавычка
+ " /Execute " + Кавычка + ПутьКВнешнейОбработке + Кавычка
+ " /C " + Кавычка + ПараметрДляВыполнения + Кавычка;
ЗапуститьПриложение(СтрокаЗапуска);
КонецПроцедуры
#КонецЕсли
Код внешней обработки, которая просто вызовет в контексте клиента печать нужного отчета из модуля регламентных заданий и завершит сеанс после формирования отчета.
Попытка
Выполнить(ПараметрЗапуска);
Исключение
КонецПопытки;
ЗавершитьРаботуСистемы(Ложь);
Удобство решения в том, что при настройке регламентных заданий не важно, в каком режиме будет выполняться запуск задания. Если база файловая, то сразу запустится нужная процедура. Если база серверная и при запуске клиентский контекст отсутствует, то выполнится инициализация нового сеанса и в нем процедура корректно отработает в контексте клиента.
Код для обычного приложения. Теоретически полностью аналогично будет работать и в управляемом.
p.s. Также этот подход можно использовать для выполнения любых клиентских процедур в регламентных заданиях.
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Разработка внешних компонент POS терминал Рабочее место Розничная торговля Разработчик Пользователь 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)
Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать Android-планшеты, смарт-телевизоры с Android, мониторы или проекторы под управлением Windows или Linux-компьютера. Linux-версия успешно запускается на одноплатных компьютерах Raspberri Pi и Orange Pi. Настраивается ЛЮБОЙ ДИЗАЙН экрана при помощи встроенного графического редактора! Решение можно масштабировать от одного экрана до тысяч экранов с централизованным управлением.
18300 руб.
30.05.2017 57910 12 71
Разработка внешних компонент Телефония, SIP Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)
5246 руб.
04.05.2018 52207 128 68
Разработка внешних компонент Разработчик 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)
Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).
5084 руб.
12.05.2020 34962 147 100
Разработка внешних компонент Инструментарий разработчика Разработчик 1С 8.3 Бесплатно (free)
Внешняя обработка проверяет выгрузку конфигурации, расширений и внешних обработок и находит места, где код руками делает то, что платформа умеет штатно: регулярки через COM, пауза пустым циклом, свой хеш и Base64, распаковка архивов программой, буфер обмена через HTML-поле. По каждой находке пишет, доступна ли замена на месте или мешает тонкий клиент.
13.10.2026 1366 146 nedomolkov.ivan 5
Разработка внешних компонент Разработчик 1С:Предприятие 8 Бесплатно (free)
Нативная внешняя компонента для 1С 8 для чтения файлов Excel без установленного Excel и делает это быстро, файл 68МБ загружается в таблицу значений ~1 секунду. Компонента поддерживает чтение двух форматов: Excel 2007+ и Excel 97-2003 Формат файла определяется автоматически по сигнатуре (первые 8 байт файла), а не по расширению. Позволяет открывать XLS и XLSX файлы и получать содержимое листов в виде ТаблицыЗначений или JSON-массива.
03.07.2026 2396 skyadmin 31
Разработка внешних компонент Разработчик 1С 8.3 Бесплатно (free)
В современных корпоративных решениях на платформе 1С:Предприятие 8.3 всё чаще возникает потребность в визуальном моделировании и автоматизации бизнес-процессов с использованием нотации BPMN 2.0. Стандартные средства платформы не предоставляют полноценного редактора BPMN, однако интеграция открытой библиотеки bpmn-js позволяет реализовать интерактивное моделирование бизнес-процессов непосредственно в 1С. В статье рассмотрены архитектура решения, пошаговая инструкция по сборке библиотеки из исходников для WebKit, а также примеры программного взаимодействия между 1С и JavaScript.
03.04.2026 4316 SultanovStas 8
Разработка внешних компонент Разработчик 1С 8.3 Россия Бесплатно (free)
Создать NativeAPI-компоненту для Python-скриптов? Это просто!
20.10.2025 11047 IlyaKuznetsov 10
Разработка внешних компонент Системный администратор Разработчик Стажер Бесплатно (free)
Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!
14.01.2025 8244 bayselonarrend 17
Конечно, это не идеальное решение. Скорее костыль, но вполне универсальный и стабильно работающий.
Использование запуска клиентских сессий на сервере еще чревато тем, что есть вероятность получения модального окна и зависшей сессии.
Вот те на. Всю жизнь обмен через COM-соединение отлично работал на сервере, а тут оказывается что он "банально не работает". Это как?
UPD.
ПодключитьВнешнююКомпоненту (AttachAddIn)
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. Может я действительно чего-то не понимаю, но в чем собственно проблема?
Не подключаются на сервере com-компоненты. Уже очень давно.
Работают в файловой базе, так как доступен толстый клиент. Но не в серверной.
32.3. Особенности работы на сервере
При работе на сервере «1С:Предприятия» допустимо использовать только компоненты, разработанные по технологии Native API, которые могут быть как отдельными файлами, так и упакованными в специальные ZIP-архивы.
В СП описано 2 варианта подключения. Первый только для Native API. Второй для любых.
Но:
Описание варианта метода:
Компонент должен быть выполнен по технологии COM и зарегистрирован в реестре MS Windows.
Эти компоненты совместимы с компонентами 1С:Предприятия 7.7.
Внимание! Вариант метода не работает на сервере и во внешнем соединении.
В документации на ИТС по ссылке выше подробнее.
Оно работает корректно.
Это не внешняя компонента для 1С, это компонента для Виндовс.
Она не просто загружается в 1С, а устанавливается в Виндовс через службы компонентов.
Не могу объяснить, в чем разница, но технология другая.
Возможно, кто-то другой по принципу ее работы подскажет.
Все понятно. Действительно, компоненты в "старом" формате на сервере недоступны. В общем-то они могут регистрироваться через regsvr32 (увы, необязательно), а далее через Новый COMОбъект.
А вот с теми кто не может регистрироваться придется держать отдельного клиента, который через обработку ожидания будет выполнять действия. Ваш вариант решает, конечно, задачу, но уж сильно "костыльно".
Возможно, чего-то не учитываю и есть нюансы.
По comcntr.dll мне самой хотелось бы понять, как она работает. Но информации не нашла.
А всё достаточно просто:
COM объект - самостоятельная программа, предоставляющая для работы с ней свои интерфейсы, через которые программы, поддерживающие технологию COM (теперь уже принято её ActiveX называть) могут обращаться к его свойствам и методам..
А вот внешняя COM компонента - это вспомогательная программа (плагин для 1С), которая взаимодействует с 1С, через только через интерфейсы, предоставляемые самой системой 1С:Предприятие. Ну и, соответственно наша внешняя COM компонента - плагин может быть запущена только в рабочем процессе 1С Предприятия.
Теоретически тоже возможно. Из минусов, появляется дополнительная прослойка и необходимость сериализации/десериализации данных, если для них простых типов Native API недостаточно.
Но лично я не умею такие обёртки писать, необходимости пока не было.
Может автор 32 битную запускает ? Или с визуализацией ?
Вообще что это было ?
У нас используется много разных com на сервере - и все прекрасно работает и при очень большой нагрузке
Которые подключаются с использованием синтаксиса ПодключитьВнешнююКомпоненту().
О том, почему они не работают, описано выше в комментариях и по ссылкам на ИТС.
И во многих случаях проблемы использования com-компонент вызваны особенностями разрядности Windows (х32, х64) а не контекстом выполнения.
Разрядности Windows (х32, х64) это отдельная история. Но по ней уже вроде достаточно информации. Как именно оборачивать компоненту, чтобы она работала на Виндовс с другой разрядностью. Эту тему уже много раз поднимали.
там строка была Компонента = Новый ("AddIn.SW");
сейчас в 1с8.3 (управляемая форма) надо писать как тут описано в примере
Компонента = Новый ("AddIn.Скл.NameDeclension");
Вот интересует NameDeclension - что это такое? откуда брать?
"NameDeclension" это прописанное в ней имя.
Вообще если пишите сами, то лучше переделать сразу правильно на Native.
Будет стабильнее работать и удобнее.
Указанный в статье подход можно использовать исключительно если есть старая уже готовая компонента и нет возможности ее изменить (т.е. компонента чужая и банально нет исходников или специалистов по ней).
а есть пример написания COM и Native в Delphi?
у меня в делфи вот так описано CreateAddIn('sw', ObjectGUID, TDM1,'AddInFPList');
в 1с8 вызывал Компонента = Новый ("AddIn.SW");
если теперь вызываю Компонента = Новый ("AddIn.SW.TDM1"); - то ошибка Тип не определен...
меня интересует что должно быть написано третим...AddIn.SW.хххххх - вместо ххххххх
что за класс?
CreateAddIn('sw', ObjectGUID, TDM1,'AddInFPList')....TDM1 - это класс который создается...но если я его подставляю в 1С то ошибка Тип не определен...
Кстати в есть пример обмена данными по TCP/IP
Смысл в том, что экономишь на запуске 1С, компоненты итд.
А так созданшь обработку, в которой запускаешь Tcp/IP клиента и обмениваешься данными.
Аналогичный обмен здесь
У меня внешняя dll с com-объектами, через которую надо подключиться к сторонней базе (не 1С) и забрать некоторые данные.
Хотел делать это в фоновом задании. Если это регламентное задание запустит на клиенте - проходит в лет. А через фоновое - доходит до строки ЗапуститьПриложение(СтрокаЗапуска);
и все. Новый сеанс не создается, и фоновое подвисает в бесконечности. Убить получается только перезапуском службы 1С на сервере.
Если тема еще актуальна,
а вот так: Компонента = Новый COMОбъект("AddIn.NameDeclension"); - не работает?
&НаСервере
...Сайт = Новый COMObject("AddIn.MySQL"){ВнешняяОбработка.ОпенКартДляРегламентного.МодульОбъекта(6873)}:
Ошибка при вызове конструктора (COMObject) Сайт = Новый COMObject("AddIn.MySQL");
по причине: Установлен безопасный режим. Выполнение операции запрещеноПараметрыРегистрации.БезопасныйРежим = Ложь;Менеджер = РегистрыСведений.РежимыПодключенияВнешнихМодулей.СоздатьМенеджерЗаписи();
Менеджер.ИдентификаторПрограммногоМодуля = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Загрузка заказов ОпенКарт по расписанию",Истина).УникальныйИдентификатор();
Менеджер.ТипПрограммногоМодуля = Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоНаименованию("Дополнительные отчеты и обработки (Справочник)", Истина);
Менеджер.БезопасныйРежим = Ложь;
Менеджер.Записать(Истина);Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 317865
Создание 10.12.14 23:15
Обновление 10.12.14 23:15
Просмотры 60876
Загрузки 0
Рейтинг
61
Комментарии 51
Код открыт Не указано
Рубрики Разработка внешних компонент
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)