Имя: Пароль:
1C
1C 7.7
v7: Работа с буфером обмена Windows
0 AL CAPONE
 
18.05.17
16:25
Задача: скопировать некоторый набор данных из документа 1с в буфер обмена Windows.

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

метод №1:
objHTM = CreateObject("htmlfile");
Текст = "Помощь в 1С";
Сообщить("= " + Текст);
objHTM.ParentWindow.ClipboardData.Setdata("Text",Текст);
Текст = objHTM.ParentWindow.ClipboardData.GetData("Text");
Сообщить("= " + Текст);

результат: не работает, присваивает переменной пустую строку


метод №2:
WshExtra = СоздатьОбъект("WshExtra.Clipboard");
WshExtra.Copy("Запись в буфер обмена");
Текст = WshExtra.Paste();
Сообщить("= " + Текст);

результат: работает, но только в буфере самой 1с-ки, вставляет скопированный текст и в окно поиска 1с, и в новый текстовый документ 1с. Но когда пытаешь вставить к примеру в блокнот, то вставка произойдёт только в том случае, если ранее в буфере обмена Windows ничего не было. Если буфер был не пуст, то в блокнот вставится то, что было в буфере до 1с-ки.


метод №3:
wsh=СоздатьОбъект("WScript.Shell");
//Скопировать текст    
wsh.SendKeys("^c");  // или так:  wsh.SendKeys("^(C)");          
//Вставить текст  
wsh.SendKeys("^v");  // или так:  wsh.SendKeys("^(V)");  

результат: непонятно, как применить, т.к. тут надо как-то умудриться заранее выделить копируемый текст, а он состоит из различных реквизитов документа с различными свободными добавками своего текста.

Может у кого-нибудь получалось корректно работать с буфером обмена Windows через 1с ?
1 Масянька
 
18.05.17
16:30
ClipBrd = СоздатьОбъект("HtmlFile");
ClipBrd.ParentWindow.ClipBoardData.SetData("Text", СокрЛП(Номенклатура.АртикулПрайс));

Правда, копируется одно поле.
2 Ёпрст
 
гуру
18.05.17
16:33
3 AL CAPONE
 
18.05.17
17:05
(2)
у нас как раз релиз 2.5.0.5
но БуферОбмена - это его как какой объект создавать нужно ?

Буфер = СоздатьОбъект("БуферОбмена");
не понимает
4 AL CAPONE
 
18.05.17
17:06
(1)
SetData может и работает, но GetData ничего не возвращала у меня
5 Масянька
 
18.05.17
17:08
(4) А ты проверь не в эске, а в ворде, например.
6 Ёпрст
 
гуру
18.05.17
17:08
(3) 3.2.4.3 поставь и не мучайся
7 Масянька
 
18.05.17
17:10
+ (5) Буфер-то зачем?
8 AL CAPONE
 
19.05.17
11:23
(5)
не работает всё равно, в буфере обмена Windows только то, что было там до выполнения метода Setdata. Ни в блокноте, ни в ворде также ничего нового.
9 AL CAPONE
 
19.05.17
11:26
(6)
так всё таки, как правильно создать объект БуферОбмена ?
Буфер = СоздатьОбъект("БуферОбмена") 1c не понимает.
10 AL CAPONE
 
23.05.17
11:08
Вопрос актуален.
11 Ёпрст
 
гуру
23.05.17
11:09
(9) Обновить 1cpp.
Там всё работает
12 AL CAPONE
 
23.05.17
15:42
(11)
По ссылке написано - метод работает на релизе 2.5 и позже.
У нас релиз 2.5.0.5.
В чём смысл обновления ?
Нужно всего-то правильное название создаваемого объекта.
13 Ёпрст
 
гуру
23.05.17
15:44
(12) На заборе еще и не то написано, 2.5 - древнее г.. мамонта.
14 Ёпрст
 
гуру
23.05.17
15:45
Зачем вы её используете, не ясно.
Она вам вообще, зачем ?
15 Mikhail Volkov
 
23.05.17
16:07
А в 8-ке как? Текст извлеченный из HTML-файла нужно сунуть в буфер обмена, и сразу же извлечь из него. Чтобы тексте уже не было всякой хрени форматирования HTML, один текст остался.
16 AL CAPONE
 
26.05.17
14:33
(2)
установил 2.5.0.7 вместо 2.5.0.5.
Буфер обмена отлично создаётся и работает.

(6)
а подскажите, установка 3.2.4.3 содержит в себе прошлые методы из 2.5.0.5 или придётся пересматривать весь код, юзающий 1cpp ?