Имя: Пароль:
1C
1С v8
Нужны идеи по заполнению шаблона word в качестве печатной формы документа
, ,
0 happysan
 
06.11.12
18:08
Выдаёт ошибку при заполнении шаблона word и формировании внешней печ формы документа:
Ошибка при установке значения атрибута контекста (Text)
   Find.Replacement.Text = СокрЛП(ТекстЗамены);
по причине:
Произошла исключительная ситуация (Microsoft Word): Слишком длинный строковый параметр.
Функция замены:
Функция WordFindReplace(ОбъектВорд, ТекстПоиска, ТекстЗамены)
   
ТекстПоиска = "@" + СокрЛП(ТекстПоиска) + "@";
   
   wdReplaceAll = 2;
   wdFindContinue = 1;
   
   Find = ОбъектВорд.Content.Find;
   Find.Text = ТекстПоиска;
   Find.Replacement.Text = СокрЛП(ТекстЗамены);
   Find.Forward = True;
   Find.Wrap = wdFindContinue;
   Find.Format = False;
   Find.MatchCase = False;
   Find.MatchWholeWord = False;
   Find.MatchWildcards = False;
   Find.MatchSoundsLike = False;
   Find.MatchAllWordForms = False;    
               
   Find.Execute(, , , , , , , , , , wdReplaceAll)

КонецФункции

Как обойти проблему?
1 happysan
 
06.11.12
18:10
пробовал делить строку в цикле по 255 символов, но в итоге результат получается последний кусок текста из 255 символов.
2 IamAlexy
 
06.11.12
18:10
не очень понимаю смысла ворда когда табличный документ в формат майкрософтворда может быть успешно сохраненным..
3 happysan
 
06.11.12
18:11
вот замена в цикле:

   ТекстПоиска = "@" + СокрЛП(ТекстПоиска) + "@";
   
   wdReplaceAll = 2;
   wdFindContinue = 1;
   
   Find = ОбъектВорд.Content.Find;
   Find.Text = ТекстПоиска;
   Если  СтрДлина(ТекстЗамены) > 255 Тогда
       
       ОстатокТекстаЗамены = СтрДлина(ТекстЗамены);    
       i = 1;
       Пока ОстатокТекстаЗамены > 255 Цикл
           ПорцияТекстаНаЗамену255 = Сред(ТекстЗамены, i, 255);        
           Find.Replacement.Text = СокрЛП(ПорцияТекстаНаЗамену255);
           i = i + 255;
           ОстатокТекстаЗамены = СтрДлина(ТекстЗамены) - i;
       КонецЦикла;
       
   КонецЕсли;
   //Find.Replacement.Text = СокрЛП(ТекстЗамены);
   Find.Forward = True;
   Find.Wrap = wdFindContinue;
   Find.Format = False;
   Find.MatchCase = False;
   Find.MatchWholeWord = False;
   Find.MatchWildcards = False;
   Find.MatchSoundsLike = False;
   Find.MatchAllWordForms = False;    
               
   Find.Execute(, , , , , , , , , , wdReplaceAll)
4 happysan
 
06.11.12
18:12
(2) каким образом?
5 acsent
 
06.11.12
18:12
(2) сам то пробовал хоть раз?
6 IamAlexy
 
06.11.12
18:12
(5) да.. более чем здорово.
раньше тоже заморачивался всякие трудовые через шаблоны ворда хреначить...
а результат тот же что и табличный документ сохраненный в нужном формате
7 alex-pro
 
06.11.12
18:13
Че-то очень сложно.
Я делал обработку по заполнению договора, с проблемами как в (0) не сталкивался.... могу поискать кусок кода
8 alex-pro
 
06.11.12
18:14
(6)Попробовал.
"Документ Word 2007 не может содержать более 63 колонок и 32767 строк"
9 hhhh
 
06.11.12
18:16
(3) так вы Find.Execute не включили в цикл. Чего издеваетесь?
10 happysan
 
06.11.12
18:16
(2) сохранять в формате html?
11 happysan
 
06.11.12
18:20
(9) если сразу сделать в цикле Find.Execute, то цикл один раз отработает и строка поиска затрётся
12 Живой Ископаемый
 
06.11.12
18:22
2(10) почему?
13 Живой Ископаемый
 
06.11.12
18:23
2(8) а для ворд-документа очень важно содержать 63 колонки и 32767 строк? Чтобы можно было наверное распечатать все это дело?
14 happysan
 
06.11.12
18:24
Может где-то в коде не хватает ПС?
15 happysan
 
06.11.12
18:25
(3)Может где-то в коде не хватает ПС?
16 acsent
 
06.11.12
18:26
Делай. Заменить(СтрокаПоиска, ТекстЗамены+СтрокаПоиска)
17 happysan
 
06.11.12
18:31
(16) применительно к моему коду в (3), можно продемонстрировать?
18 sttt
 
06.11.12
18:40
делать людям нечего...
19 happysan
 
06.11.12
18:43
(16)у объекта word нет такого метода
20 Живой Ископаемый
 
06.11.12
18:45
2(19) поэтому его и не использууют.
а используют только те кто знает как пользоваться find и replace
21 happysan
 
06.11.12
18:47
(20) ну подсказывайте, коль есть способ решить проблему
22 acsent
 
06.11.12
18:48
(17) ну ты совсем обнаглел.
-Вы что и есть за меня будете?
-Ага!
23 Живой Ископаемый
 
06.11.12
18:49
в 2 и 5 подсказали
24 happysan
 
06.11.12
18:53
(22) не думаю, просто, этот кусок кода какая-то абстракция в данном случае.
25 Живой Ископаемый
 
06.11.12
18:58
надо думать.. если не думать, то ничего не получится.
26 happysan
 
06.11.12
19:02
вообщем, решений, не меняя принцип формирования печатной формы, нет?
27 zladenuw
 
06.11.12
19:18
c.Find.Execute
   While c.Find.Found
       Debug.Print c.Text
       '~~> I am assuming that the start word and the end word will only
       '~~> be in the start and end respectively and not in the middle
       Debug.Print Replace(Replace(c.Text, StartWord, ""), EndWord, "")
       c.Find.Execute
   Wend
28 KAO111
 
06.11.12
20:13
может тут пригодится

http://infostart.ru/public/18940/
29 happysan
 
07.11.12
10:44
вообщем сделал так:


   ТекстПоиска = "@" + СокрЛП(ТекстПоиска) + "@";
   
   wdReplaceAll = 2;
   wdFindContinue = 1;
   
   Find = ОбъектВорд.Content.Find;
   Если  СтрДлина(ТекстЗамены) > 231 Тогда
       
       ОстатокТекстаЗамены = СтрДлина(ТекстЗамены);    
       i = 1;
       
       Пока ОстатокТекстаЗамены > 231 Цикл
           ПорцияТекстаНаЗамену255 = Сред(ТекстЗамены, i, 231);        
           Find.Forward = True;
           Find.Wrap = wdFindContinue;
           Find.Format = False;
           Find.MatchCase = False;
           Find.MatchWholeWord = False;
           Find.MatchWildcards = False;
           Find.MatchSoundsLike = False;
           Find.MatchAllWordForms = False;    
           
           Find.Execute(ТекстПоиска, , , , , , , , ,СокрЛП(ПорцияТекстаНаЗамену255) + ТекстПоиска, wdReplaceAll);
           i = i + 231;
           ОстатокТекстаЗамены = СтрДлина(ТекстЗамены) - i;
       КонецЦикла;
       
   КонецЕсли;
осталось перенести в word перевод строки как изначально в строке замены, как это можно организовать?
30 happysan
 
07.11.12
10:54
Как из 1с скомандовать word, чтобы он перенёс строку?
31 happysan
 
07.11.12
11:04
получилось:

   ТекстПоиска = "@" + СокрЛП(ТекстПоиска) + "@";
   
   wdReplaceAll = 2;
   wdFindContinue = 1;
   
   Find = ОбъектВорд.Content.Find;
   
   ОстатокТекстаЗамены = СтрДлина(ТекстЗамены);    
   i = 1;
   
   Для Счетчик = 1 По СтрЧислоСтрок(ТекстЗамены) Цикл
       
       ТекСтрока = СтрПолучитьСтроку(ТекстЗамены, Счетчик);
       Find.Forward = True;
       Find.Wrap = wdFindContinue;
       Find.Format = False;
       Find.MatchCase = False;
       Find.MatchWholeWord = False;
       Find.MatchWildcards = False;
       Find.MatchSoundsLike = False;
       Find.MatchAllWordForms = False;    
       
       Если Счетчик = СтрЧислоСтрок(ТекстЗамены) Тогда
           Find.Execute(ТекстПоиска, , , , , , , , ,"" + СокрЛП(ТекСтрока), wdReplaceAll);
       Иначе
           Find.Execute(ТекстПоиска, , , , , , , , ,СокрЛП(ТекСтрока) + Символ(13)+Символ(10) + ТекстПоиска, wdReplaceAll);
       КонецЕсли;
   
   КонецЦикла;
теперь осталось организовать отступы абзацев, если кто в курсе подсказывайте, буду признателен.
32 mikecool
 
07.11.12
11:09
(31) поиск в гугле "Объектная модель Word" спасет отца русской демократии
33 happysan
 
07.11.12
12:18
тема закрыта, всем благодарен за участие.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.