Имя: Пароль:
1C
1С v8
v8: Как вставить содержимое буфера обмена в Word файл средствами 1с8?
,
0 evg61
 
24.01.13
10:00
Здравствуйте!
Нужно вставить содержимое буфера обмена в Word файл средствами 1с8. Способ через найти и заменить, описанный на этом форуме, не подходит из за ограниченного размера строки вставляемой в Word. Буду рад любой ссылке на теорию, как это делается или на фрагмент кода.
Спасибо!
1 Wobland
 
24.01.13
10:04
а покажи найденный способ
2 Wobland
 
24.01.13
10:05
paste, я так понимаю, не подходит?
3 samozvanec
 
24.01.13
10:06
(1) данный способ настолько популярен, что не нуждается в представлении. Замена.Екзекютэ
4 samozvanec
 
24.01.13
10:07
(0) бей его на подстроки нужной длины
5 evg61
 
24.01.13
10:07
Вот способ через найти и заменить описанный тут:

Как сформировать новый договор на основании файла MicrosoftWord?
// Получить объект из макета.
MSWord = Договор.Получить();
НаименованиеКонтрагента = "ООО Торгуем всем";
Попытка
Документ = MSWord.Application.Documents(1);
Документ.Activate();
// Получить объект, который будем использовать для поиска и замены.
Замена = Документ.Content.Find;
// Заменить заранее определенные ключевые конструкции на требуемый текст.
Замена.Execute("<НазваниеКомпании>", Ложь, Истина, Ложь, , , Истина, , Ложь, НаименованиеКонтрагента);
// Далее аналогично для остальных ключевых конструкций.
// Делаем видимым приложение и активизируем его.
MSWord.Application.Visible = Истина;
MSWord.Activate();
Исключение // Если произойдет ошибка выводятся данные об ошибке и объект закрывается.
Сообщить(ОписаниеОшибки());
MSWord.Application.Quit();
КонецПопытки;
6 evg61
 
24.01.13
10:13
Всем спасибо, кто откликнулся....

Проблема в том, что размер текстовой строки "НаименованиеКонтрагента" ограничен...

Ограничение хотелось бы обойти, так как надо вставить фрагмент текста. Полагаю, это можно сделать используя буфер обмена... Вопрос как, что почитать.

Дробить текст на несколько строк не совсем удобно, фрагмент может быть достаточно большим...
7 evg61
 
24.01.13
10:14
paste - не нашёл подробного описания метода....
может быть поделитесь толковой ссылкой?
8 samozvanec
 
24.01.13
10:17
(6) ну почему не удобно... заменяй свой $%Параметр в ворде на "кусок строки" + "$%Параметр", и так пока строка не будет помещена полностью
9 Wobland
 
24.01.13
10:17
10 evg61
 
24.01.13
10:18
Вот ещё более подробно описан способ найти и заменить... тут расшифрованы параметры которые используются в методе Execute



Текст договора оформлен как макет ActiveDocument - просто вставим туда скопированное из файла Word содержимое. В текст включены переменные вида "{НомерДоговора}" которые будут заменены значениями. Замена производится простой операцией найти и заменить по тексту типа найти "{НомерДоговора}" -> заменить на "N777".

<span class="comment_1c">// Выводим договор как ActiveDocument</span>
<span class="comment_1c">// Параметры договора обозначены в тексте переменными вида "[%НомерДоговора%]"</span>
<span class="keyword_1c">;Функция </span>ПечатьДокумента()<span class="keyword_1c"> Экспорт</span>
   
   Договор = ПолучитьМакет("ActiveDocument_ДоговорПоставки"); <span class="comment_1c">// получим макет-ActiveDocument </span>
   MSWord = Договор.Получить();  
   Попытка
   Doc = MSWord.Application.Documents(1);
       Doc.Activate();        
       Replace = Doc.Content.Find;    
       
       FindText = "{НомерДоговора}";     <span class="comment_1c">// что искать - имя_шаблона</span>
       MatchCase =<span class="keyword_1c"> Ложь</span>;                 <span class="comment_1c">// использовать регулярные выражения        </span>
       MatchWholeWord =<span class="keyword_1c"> Истина</span>;          <span class="comment_1c">// искать слово целиком</span>
       MatchWildcards =<span class="keyword_1c"> Ложь</span>;            <span class="comment_1c">// испоьзовать регулярные выражения </span>
       MatchSoundsLike =<span class="keyword_1c"> Неопределено</span>;   <span class="comment_1c">// искать созвучные </span>
       MatchAllWordForms =<span class="keyword_1c"> Неопределено</span>; <span class="comment_1c">// искать все формы слова</span>
       Forward =<span class="keyword_1c"> Истина</span>;                 <span class="comment_1c">// искать вперед</span>
       Wrap =<span class="keyword_1c"> Неопределено</span>;              <span class="comment_1c">// что должен вернуть Find-объект </span>
       Format_ =<span class="keyword_1c"> Ложь</span>;                   <span class="comment_1c">// использовать форматирование</span>
       ReplaceWith = "N777";             <span class="comment_1c">// текст, на который надо заменить имя_шаблона</span>
       
       <span class="comment_1c">// кратко:        </span>
       <span class="comment_1c">//Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,НомерДоговора);        </span>
       
       Replace.Execute(
           FindText,
           MatchCase,
           MatchWholeWord,
           MatchWildcards,
           MatchSoundsLike,
           MatchAllWordForms,
           Forward,
           Wrap,
           Format_,
           НомерДоговора);
           
       MSWord.Application.Visible =<span class="keyword_1c"> Истина</span>;
       MSWord.Activate();
   Исключение
       Сообщить<span class="keyword_1c">(ОписаниеОшибки</span>());
       MSWord.Application.Quit();    
   КонецПопытки;    

  <span class="keyword_1c"> возврат </span>0;

<span class="keyword_1c">;КонецФункции</span>
11 evg61
 
24.01.13
10:22
> ну почему не удобно... заменяй свой $%Параметр в ворде на "кусок строки" + "$%Параметр", и так пока строка не будет помещена полностью

согласен, как вариант, но, думается, через буфер обмена проще :-)
12 evg61
 
24.01.13
10:24
Ещё раз спасибо тем кто отозвался! :-)