Вы здесь

1С и буфер обмена

Для копирования данных из буфера обмена в 1С

Функция ПолучитьТекстИзБуфераОбмена() Экспорт
  #Если Клиент Тогда
    ЭлементыФормы.Добавить(Тип("ПолеHTMLДокумента"), "ПолеHTMLДокумента", Ложь);
    Попытка
      Окно = ЭлементыФормы.ПолеHTMLДокумента.Документ.ParentWindow;
      СодержимоеБуфера = Окно.ClipboardData.GetData("Text");
    Исключение
      СодержимоеБуфера = "";
    КонецПопытки;
    ЭлементыФормы.Удалить(ЭлементыФормы.Индекс(ЭлементыФормы.Найти("ПолеHTMLДокумента")));
    Возврат СодержимоеБуфера;
  #КонецЕсли
КонецФункции

Для вставки данных из 1С в буфер обмена

Процедура ВставитьТекстВБуферОбмена(СодержимоеВБуферОбмена) Экспорт
  #Если Клиент Тогда
    Если (ТипЗнч(СодержимоеВБуферОбмена) = Тип("Строка")) И (СокрЛП(СодержимоеВБуферОбмена) <> "") Тогда
      ЭлементыФормы.Добавить(Тип("ПолеHTMLДокумента"), "ПолеHTMLДокумента", Ложь);
      Окно = ЭлементыФормы.ПолеHTMLДокумента.Документ.ParentWindow;
      Окно.ClipboardData.SetData("Text", СодержимоеВБуферОбмена);
      ЭлементыФормы.Удалить(ЭлементыФормы.Индекс(ЭлементыФормы.Найти("ПолеHTMLДокумента")));
    КонецЕсли;
  #КонецЕсли
КонецПроцедуры

К сожалению, этот код и следующие не срабатывает когда в настройках безопасности IE стоит разрешить программный доступ к буферу обмена в запретить.
Можно воспользоваться и другими способами:

  • Через COM-объект
    Функция ПолучитьТекстИзБуфераОбмена() Экспорт
      #Если Клиент Тогда
        Объект = Новый COMОбъект("htmlfile");
        Возврат Объект.ParentWindow.ClipboardData.Getdata("Text");
      #КонецЕсли
    КонецФункции
    Процедура ВставитьТекстВБуферОбмена(СодержимоеВБуферОбмена) Экспорт
      #Если Клиент Тогда
        Если (ТипЗнч(СодержимоеВБуферОбмена) = Тип("Строка")) И (СокрЛП(СодержимоеВБуферОбмена) <> "") Тогда
          Объект = Новый COMОбъект("htmlfile");
          Объект.ParentWindow.ClipboardData.Setdata("Text", СодержимоеВБуферОбмена);
        КонецЕсли;
      #КонецЕсли
    КонецПроцедуры
  • Через Windows Script Host
    // через SendKeys передаем Ctrl-C и Ctrl-V    
    wsh=Новый COMОбъект("WScript.Shell");    
    // Скопировать текст    
    wsh.SendKeys("^c");      
    // Вставить текст  
    wsh.SendKeys("^v");