Почему не работает перетаскивание (drag and drop) файлов из проводника в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При повседневной разработке и администрировании баз 1С мы часто используем удобный механизм перетаскивания файлов: например, переносим внешнюю обработку (.epf), внешний отчет (.erf) или файл конфигурации напрямую из проводника Windows в окно конфигуратора или в режим «1С:Предприятие». Однако иногда мы можем столкнуться с ситуацией, когда курсор мыши при наведении показывает значок «плюс», но после отпускания кнопки мыши файл не открывается и ничего не происходит.

Выясним причину такого поведения операционной системы и платформы, а также разберем по шагам, как вернуть работоспособность механизма drag and drop.

Причина проблемы: изоляция интерфейса UIPI в Windows

Проанализируем ситуацию: начиная с Windows Vista и во всех современных версиях (Windows 8, 10, 11) на уровне операционной системы функционирует механизм контроля учетных записей (UAC), частью которого является User Interface Privilege Isolation (UIPI) — изоляция привилегий пользовательского интерфейса.

Механизм UIPI предназначен для защиты системы от передачи потенциально опасных оконных сообщений. Стандартный проводник Windows (explorer.exe) всегда запускается с обычным уровнем прав (Medium Integrity Level). Если исполняемый файл 1С (1cv8.exe или 1cv8c.exe) запущен в режиме «От имени администратора» (High Integrity Level), операционная система блокирует обмен системными сообщениями WM_DROPFILES и протокол OLE drag-and-drop между процессом с низким уровнем прав и процессом с высоким уровнем прав. В результате визуальный курсор может сигнализировать о возможности бросить файл, но сама передача данных полностью блокируется ядром Windows.

Важно отметить: простое опускание ползунка уведомлений UAC на минимальный уровень в панели управления Windows не отключает механизм изоляции интерфейса — разница в правах процессов сохраняется.

Основное решение: отключение запуска 1С от имени администратора

Разберем по шагам, как вернуть стандартный запуск платформы:

  1. Найдем ярлык запуска 1С на рабочем столе или в меню «Пуск» и откроем его свойства (правой кнопкой мыши — «Свойства»).
  2. Перейдем на вкладку «Совместимость».
  3. Снимем флажок «Запускать эту программу от имени администратора».
  4. Если флажок недоступен или заблокирован, нажмем кнопку «Изменить параметры для всех пользователей» и снимем указанный флажок там.
  5. Перейдем в каталог установки платформы (например, C:\Program Files\1cv8\8.3.X.XXXX\bin\) и проверим свойства непосредственно файлов 1cv8s.exe, 1cv8.exe и 1cv8c.exe, убедившись, что у них также отключен запуск от администратора.
  6. Перезапустим платформу 1С и проверим работу перетаскивания файлов из проводника.

Устранение первопричин, требовавших админских прав

Часто режим запуска от администратора включается программистами или системными администраторами вынужденно — например, если при работе конфигурации происходит распаковка внешних файлов, компонент или работа с временными каталогами, вызывающая ошибки доступа. Рассмотрим правильные способы устранения таких ошибок без повышения привилегий всего процесса 1С:

  1. Использование стандартных временных каталогов: Убедимся, что выгрузка и распаковка файлов во встроенном языке выполняются в каталоги, доступные текущему пользователю без повышенных прав. Для получения пути к временной папке следует использовать стандартную функцию КаталогВременныхФайлов():
    
    ИмяВременногоФайла = КаталогВременныхФайлов() + "unpacked_data.tmp";
    // Дальнейшая работа с файлом в доступном каталоге
    
  2. Корректировка прав файловой системы (NTFS): Если конфигурация требует сохранения данных в определенную папку на диске (например, каталог обмена или шаблонов), предоставим полные права доступа учетной записи пользователя именно на этот конкретный каталог, а не на запуск всей системы от имени администратора.

Альтернативные варианты, если запуск от администратора необходим

Если специфика задач строго требует работы 1С с повышенными привилегиями, рассмотрим способы сохранения функции перетаскивания:

  1. Перетаскивание через файловый менеджер с повышенными правами: Если запустить сторонний файловый менеджер (например, Total Commander или FAR Manager) в режиме «От имени администратора», оба процесса (менеджер и 1С) будут находиться на одном уровне целостности (High Integrity Level). В этом случае перетаскивание файлов между ними работает штатно.
  2. Отключение UAC через системный реестр: Для полного отключения виртуализации и механизма UIPI можно открыть редактор реестра (regedit), перейти в ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System, установить параметр EnableLUA равным 0 и перезагрузить компьютер. Обратите внимание: данный способ снижает общую безопасность операционной системы.

Особенности Drag and Drop в различных режимах работы 1С

Проанализируем дополнительные сценарии, влияющие на работу механизма перетаскивания в 1С:

  1. Работа в веб-клиенте: При работе через интернет-браузеры прямое перетаскивание файлов в рабочую область конфигуратора или форм может блокироваться политиками безопасности самого браузера.
  2. Программная обработка перетаскивания в управляемых формах: Для того чтобы таблица или поле формы принимали перетаскиваемые из проводника файлы, у элемента формы должно быть установлено свойство РазрешитьПеретаскивание в значение Истина, а в свойствах указан СпособПеретаскиванияФайлов (например, Как файл). В коде формы при этом должны быть определены обработчики событий ПроверкаПеретаскивания и Перетаскивание.
  3. Сеансы удаленного рабочего стола (RDP / RemoteApp): Перетаскивание файлов напрямую между локальным проводником клиентского компьютера и окном удаленного приложения 1С блокируется протоколом RDP, если не настроено перенаправление дисков или буфер обмена.
← На главную