Ошибка создания объекта ПоставщикДанных в 1С 7.7 на новом сервере: как исправить?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При переносе старых баз 1С 7.7 на новые сервера (особенно под управлением Windows Server 2003/2008/2012 и выше) разработчики часто сталкиваются с ситуацией, когда привычный функционал перестает работать. Одной из самых распространенных проблем является отказ форм, использующих внешнюю компоненту 1Cpp.dll и надстройку ТабличноеПоле. В этой статье мы подробно разберем, почему возникает ошибка при создании объекта ПоставщикДанных, и как восстановить работоспособность системы.

Анализируем симптомы проблемы

Рассмотрим типичную ситуацию: база перенесена, внешние компоненты 1Cpp.dll и Formex.dll отображаются в окне "Помощь -> О программе" как успешно загруженные. Однако при попытке открыть форму со списком (например, справочник контрагентов), программа выдает ошибку:


ПоставщикДанных = СоздатьОбъект("ПоставщикДанных");
ПоставщикДанных.ТипЗначений = "Справочник.КонтактыКонтрагента";
{Справочник.Контрагенты.Форма.Модуль(2336)}: Неудачная попытка создания объекта

Важно проанализировать полный текст ошибки (стек вызова), который обычно скрыт за основным сообщением. Если заглянуть глубже в логи, мы увидим следующее:


ОбъектImageListCtrl = СоздатьОбъект("MSComctlLib.ImageListCtrl");
{E:\test_base\SystemData\Classes\ПоставщикДанных\ПоставщикДанных.БиблиотекаКартинок.ert(41)}

Из этого лога мы можем сделать важный вывод: проблема заключается не в самой компоненте 1Cpp и не в лицензиях 1С, а в отсутствии в операционной системе специфического ActiveX-объекта, который используется внутри скриптов (классов) ПоставщикДанных.

Выясняем техническую причину

Класс ПоставщикДанных — это сложная надстройка над табличным полем 1Cpp, которая автоматизирует вывод данных. Для отображения иконок (пиктограмм) в списках она обращается к стандартной библиотеке Microsoft — MSComctlLib.ImageListCtrl. Этот объект является частью библиотеки mscomctl.ocx (Common Controls 6.0).

На рабочих станциях пользователей эта библиотека часто присутствует благодаря установленным приложениям (например, MS Office или Visual Studio), но на "чистых" серверных операционных системах она по умолчанию отсутствует или не зарегистрирована. Именно поэтому у пользователей "с рабочих станций" всё работает, а "на сервере" — нет.

Решение №1: Установка необходимых компонентов MS Office

Самый простой, хотя и "тяжеловесный" способ решить проблему — это установка пакета Microsoft Office на сервере. При установке Office (особенно компонентов общих средств и инструментов разработки) в систему автоматически копируются и регистрируются все необходимые библиотеки ActiveX, включая mscomctl.ocx.

Рассмотрим, почему это помогает:

  1. Система получает файл mscomctl.ocx в папку System32 (или SysWOW64).
  2. В реестре создаются записи о классе MSComctlLib.ImageListCtrl.
  3. Прописываются необходимые лицензионные ключи (Design-Time License), которые позволяют программно создавать объекты через СоздатьОбъект.

Решение №2: Ручная регистрация библиотек (без установки Office)

Если установка полного пакета Office на сервер нежелательна по соображениям безопасности или лицензирования, мы можем пойти по пути точечной настройки. Нам необходимо вручную перенести и зарегистрировать библиотеку mscomctl.ocx.

Разберем этот процесс по шагам:

  1. Найдите файл mscomctl.ocx на рабочей станции, где 1С работает корректно (обычно в C:\Windows\System32).
  2. Скопируйте его на сервер в папку C:\Windows\SysWOW64 (если сервер 64-битный) или C:\Windows\System32 (если 32-битный).
  3. Запустите командную строку от имени администратора.
  4. Выполните регистрацию командой: regsvr32 C:\Windows\SysWOW64\mscomctl.ocx

Внимание: Простого наличия файла часто бывает недостаточно. Для программного создания объекта (через метод СоздатьОбъект в 1С) системе может потребоваться специальный ключ реестра — так называемая лицензия разработчика. Если после регистрации файла ошибка сохраняется, рекомендуется установить официальный пакет Microsoft Visual Basic 6.0 Common Controls, который легально и бесплатно добавляет эти компоненты в систему.

Решение №3: Проверка конфигурационных файлов классов

Если библиотеки зарегистрированы, но 1Cpp все равно не видит классы, проанализируем файл defcls.prm. Этот файл отвечает за описание классов в 1Cpp.

Проверьте следующие моменты:

Дополнительные рекомендации по безопасности и правам

На новых серверных ОС (Windows 2008 и выше) часто срабатывают механизмы защиты. Проанализируем дополнительные факторы успеха:

Подводя итог: ошибка ПоставщикДанных::Неудачная попытка создания объекта почти всегда означает отсутствие системной библиотеки mscomctl.ocx. Исправив эту системную зависимость, вы восстановите работу всех табличных полей в вашей конфигурации 1С 7.7.

← На главную