Вы здесь
1С и буфер обмена
чт, 02.06.2011 - 09:00 - krak
Для копирования данных из буфера обмена в 1С
Функция ПолучитьТекстИзБуфераОбмена() Экспорт
#Если Клиент Тогда
ЭлементыФормы.Добавить(Тип("ПолеHTMLДокумента"), "ПолеHTMLДокумента", Ложь);
Попытка
Окно = ЭлементыФормы.ПолеHTMLДокумента.Документ.ParentWindow;
СодержимоеБуфера = Окно.ClipboardData.GetData("Text");
Исключение
СодержимоеБуфера = "";
КонецПопытки;
ЭлементыФормы.Удалить(ЭлементыФормы.Индекс(ЭлементыФормы.Найти("ПолеHTMLДокумента")));
Возврат СодержимоеБуфера;
#КонецЕсли
КонецФункции
#Если Клиент Тогда
ЭлементыФормы.Добавить(Тип("ПолеHTMLДокумента"), "ПолеHTMLДокумента", Ложь);
Попытка
Окно = ЭлементыФормы.ПолеHTMLДокумента.Документ.ParentWindow;
СодержимоеБуфера = Окно.ClipboardData.GetData("Text");
Исключение
СодержимоеБуфера = "";
КонецПопытки;
ЭлементыФормы.Удалить(ЭлементыФормы.Индекс(ЭлементыФормы.Найти("ПолеHTMLДокумента")));
Возврат СодержимоеБуфера;
#КонецЕсли
КонецФункции
Для вставки данных из 1С в буфер обмена
Процедура ВставитьТекстВБуферОбмена(СодержимоеВБуферОбмена) Экспорт
#Если Клиент Тогда
Если (ТипЗнч(СодержимоеВБуферОбмена) = Тип("Строка")) И (СокрЛП(СодержимоеВБуферОбмена) <> "") Тогда
ЭлементыФормы.Добавить(Тип("ПолеHTMLДокумента"), "ПолеHTMLДокумента", Ложь);
Окно = ЭлементыФормы.ПолеHTMLДокумента.Документ.ParentWindow;
Окно.ClipboardData.SetData("Text", СодержимоеВБуферОбмена);
ЭлементыФормы.Удалить(ЭлементыФормы.Индекс(ЭлементыФормы.Найти("ПолеHTMLДокумента")));
КонецЕсли;
#КонецЕсли
КонецПроцедуры
#Если Клиент Тогда
Если (ТипЗнч(СодержимоеВБуферОбмена) = Тип("Строка")) И (СокрЛП(СодержимоеВБуферОбмена) <> "") Тогда
ЭлементыФормы.Добавить(Тип("Поле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");