Часто при автоматизации рабочих мест возникает необходимость программно передать данные в буфер обмена. Стандартным решением в среде 1С является использование объекта htmlfile или ParentWindow. Однако пользователи нередко сталкиваются с ситуацией, когда на одних компьютерах код отрабатывает корректно, а на других — безрезультатно. Разберем, в чем могут быть причины такого поведения и как восстановить работоспособность функционала.
Когда вы используете метод ClipboardData.SetData, вы обращаетесь к функционалу движка Internet Explorer. Даже если вы работаете в тонком клиенте 1С, многие компоненты системы по-прежнему используют системные настройки IE. Если программный доступ к буферу обмена запрещен политиками безопасности или настройками зон обозревателя, команда будет молча игнорироваться системой.
Первым делом проанализируем настройки безопасности самого браузера. Поскольку 1С использует системный движок для работы с COM-объектами, настройки зон безопасности напрямую влияют на результат.
Если проблема сохраняется, выполните полный сброс настроек браузера: перейдите на вкладку «Дополнительно» и нажмите кнопку «Сброс...». Это поможет устранить поврежденные конфигурационные файлы, которые могут блокировать работу ActiveX элементов.
Если вы работаете через удаленный рабочий стол (RDP), проблема может заключаться не в настройках IE, а в работе службы буфера обмена терминальной сессии. За передачу данных между локальным компьютером и сервером отвечает процесс rdpclip.exe.
Рассмотрим по шагам, как перезапустить этот процесс:
rdpclip.exe в списке активных задач.rdpclip.exe.Это действие принудительно обновит канал передачи данных буфера обмена для вашего текущего сеанса, а для удобства администрирования подключений можно использовать утилиту управления удалёнными рабочими столами. Для этой задачи есть утилита администрирования рабочих мест и выполнения команд.
Если методы, использующие htmlfile, работают нестабильно из-за политик безопасности, которые невозможно изменить (например, в корпоративной среде), можно воспользоваться системной утилитой clip. Этот способ работает напрямую с системным буфером, минуя движок Internet Explorer.
Посмотрим на пример реализации такого кода в 1С (для удобства редактирования подобных скриптов подойдет встраиваемая консоль кода Monaco-editor): — для этого есть встраиваемая консоль кода Monaco-editor для 1С.
// Создаем объект для управления системными командами
ОбъектShell = Новый COMОбъект("WScript.Shell");
// Формируем команду для передачи строки в буфер через канал (pipe)
Команда = "echo " + СтрокаДляКопирования + " | clip";
// Запускаем команду скрытно
// Второй параметр 0 скрывает окно консоли, третий True ожидает завершения
ОбъектShell.Run(Команда, 0, True);
Данный подход является более надежным в современных версиях Windows, так как он не зависит от настроек ActiveX и зон безопасности браузера.
При анализе ситуации всегда учитывайте следующие моменты:
COM-серверам.ActiveX.Рекомендуем начинать диагностику с проверки настроек зон в Internet Explorer.