Имя: Пароль:
IT
Админ
Заполнение таблиц в OO writer из 1с
0 Карась
 
30.07.12
14:39
Добрый день!
У меня стоит задача заполнения документа в open office из формы документа 1с.В документе заполняются закладки из реквизитов формы, собственно закладки не находящиеся в таблице у меня уже заполняются, а вот закладки которые находятся в таблице нет. Помогите пожалуйста разобраться в чем ошибка( возможно она совсем детская,но я пока только начинаю) Вот код:

ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
             
Desktop =ServiceManager.createInstance("com.sun.star.frame.Desktop");
 
 
НастройкиОткрытия = Новый COMSafeArray("VT_VARIANT", 1);
PropertyValue=ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
PropertyValue.Name = "Hidden";
PropertyValue.Value = Истина;
НастройкиОткрытия.SetValue(0, PropertyValue);
FilePath="C:/dvstmp/ договор №48.odt";
 
 
URL = ConvertToURL(FilePath);
         

Document=Desktop.LoadComponentFromURL(URL,"_blank",0,НастройкиОткрытия);
 
 
 
Закладки=Document.getBookmarks();
Закладки2=Document.getBookmarks();    
Закладки3=Document.getBookmarks();
Закладки4=Document.getBookmarks();
Закладки5=Document.getBookmarks();
Закладки6=Document.getBookmarks();



Текст=Document.getText();
Контроллер=Document.CurrentController;Курсор=Контроллер.getViewCursor();
Курсор2=Контроллер.getViewCursor();
Курсор3=Контроллер.getViewCursor();
Курсор4=Контроллер.getViewCursor();
Курсор5=Контроллер.getViewCursor();
Курсор6=Контроллер.getViewCursor();

Попытка  
             
 
      Закладка=Закладки.getByName("Tip");
  Закладка2=Закладки2.getByName("Number");
  Закладка3=Закладки.getByName("Partner");
  Закладка4=Закладки.getByName("Partner1");
      Закладка5=Закладки.getByName("Partner2");
      Закладка6=Закладки.getByName("Partner3");

Таблица = Document.createInstance("com.sun.star.text.TextTable");
      Document.Text.insertTextContent(Курсор5, Таблица, True);
  Document.Text.insertTextContent(Курсор6, Таблица, True);

Исключение
      Сообщить("Закладка не найдена """+"Закладка"+"""!!!");
      Возврат;
     
  КонецПопытки;
      Якорь=Закладка.getAnchor();
  Якорь2=Закладка2.getAnchor();
  Якорь3=Закладка3.getAnchor();
  Якорь4=Закладка4.getAnchor();
  Якорь5=Закладка5.getAnchor();
  Якорь6=Закладка6.getAnchor();
   Document.getCurrentController().getFrame().getContainerWindow().setVisible(Истина);
     
      Закладки=Объект.ХозяйственнаяОперация;
  Закладки2=Объект.Номер;
  Закладки3=Объект.Партнер;
  Закладки4=Объект.Контрагент;
  Закладки5=Объект.Контрагент;
  Закладки6=Объект.Контрагент;
     

Курсор.gotoRange(Якорь, 0);
Текст.insertString(Курсор, ""+Закладки+"", 0 );    /

Курсор2.gotoRange(Якорь2, 0);
Текст.insertString(Курсор2, ""+Закладки2+"", 1 );
 

Курсор3.gotoRange(Якорь3, 0);
Текст.insertString(Курсор3, ""+Закладки3+"", 2 );
     
     
Курсор4.gotoRange(Якорь4, 0);
Текст.insertString(Курсор4, ""+Закладки4+"", 3 );
     
Курсор5.gotoRange(Якорь5, 0);
Текст.insertTextContent(Курсор5, ""+Закладки5+"", 4 );
     
Курсор6.gotoRange(Якорь6, 0);
Текст.insertString(Курсор6, ""+Закладки6+"", 5 );

И вот на этом месте, где закладка находится в таблице,
Курсор5.gotoRange(Якорь5, 0);
Текст.insertTextContent(Курсор5, ""+Закладки5+"", 4 );
Он выдает ошибку, что метод объекта не обнаружен
1 Карась
 
30.07.12
14:45
А еще он жалуется на строку
Закладка5=Закладки5.getByName("Partner2"); пишет здесь, что метод объекта не обнаружен
2 Карась
 
30.07.12
15:28
Все строку закладка5 я прошла, но никак не могу разобраться со строкой

Курсор5.gotoRange(Якорь5, 0);
        Текст.insertString(Курсор5, ""+Закладки5+"", 4 );

Может это дело не в том, что закладка в таблице находится?
3 Карась
 
30.07.12
15:31
Вот такую ошибку он выдает

Ошибка при вызове метода контекста (insertString)Текст.insertString(Курсор6, ""+Закладки6+"", 5 );
4 smaharbA
 
30.07.12
15:39
получай диапазон за закладкой и у него текст
5 Карась
 
30.07.12
15:40
То есть так?
Текст.insertString(Курсор5, ""+Закладки5+"", 4 );  
          Курсор5.gotoRange(Якорь5, 0);
6 Карась
 
30.07.12
15:42
Так уже что то получилось, сейчас проверю правильно ли заполняет
7 Карась
 
30.07.12
15:47
На закладки5 перестал давать ошибку, так же сделала в закладки 6, там тоже таблица, но там выдает ту же ошибку и закладки 5 заполнять перестал
8 smaharbA
 
30.07.12
15:48
[ИмяЗакладки]="Закладка"
[Контроллер]=[Док].CurrentController
[Курсор]=[Контроллер].getViewCursor()
[Закладки]=[Док].getBookmarks()
[Закладка]=[Закладки].getByName([ИмяЗакладки])
[Якорь]=[Закладка].getAnchor()
[Курсор].gotoRange([Якорь], 0)
[Текст]=[Курсор].getText() //это
[Курсор].CharFontName="Times New Roman"
[Курсор].CharHeight=48
[Текст].insertString([Курсор], "Тут была закладка """+[ИмяЗакладки]+"""", 0 )
9 Карась
 
30.07.12
15:50
я по этой схеме и делала, на каждую закладку получается надо отдельную метку получать
10 Карась
 
30.07.12
15:50
но пока не работает
11 Карась
 
30.07.12
15:50
а текст получать тоже
12 smaharbA
 
30.07.12
15:51
(9) Вы это о чем ?
13 Карась
 
30.07.12
15:53
Я заполняю закладки так

Курсор.gotoRange(Якорь, 0);
Текст.insertString(Курсор, ""+Закладки+"", 0 );  

Курсор2.gotoRange(Якорь2, 0);
Текст.insertString(Курсор2, ""+Закладки2+"", 1 );  
   
   
Курсор3.gotoRange(Якорь3, 0);
Текст.insertString(Курсор3, ""+Закладки3+"", 2);
       
       
Курсор4.gotoRange(Якорь4, 0);
Текст.insertString(Курсор4, ""+Закладки4+"", 3 );  
       
       
       
Курсор5.gotoRange(Якорь5, 0);

         
Текст.insertString(Курсор6, ""+Закладки6+"", 5 );  
Курсор6.gotoRange(Якорь6, 0);


закладки5 и закладки6 у меня лежат в таблице, на них текст отдельно получать надо?
14 smaharbA
 
30.07.12
15:54
на все надо получать отдельно, ибо будут и разделы и поля и врезки и прочие надписи
15 Карась
 
30.07.12
15:56
Текст.Курсор5.GetText();
         
Текст.insertString(Курсор5, ""+Закладки5+"", 4 );  
Курсор5.gotoRange(Якорь5, 0);

         
Текст.Курсор6.GetText();
Текст.insertString(Курсор6, ""+Закладки6+"", 5 );  
Курсор6.gotoRange(Якорь6, 0);
То есть вот так?
16 Карась
 
30.07.12
15:59
Просто так он пока тоже ошибку выдает
17 Карась
 
30.07.12
16:03
Причем предыдущие закладки он у меня спокойно заполняет, без получения текста на них, что наверное странно
18 smaharbA
 
30.07.12
16:08
либо

Якорь.setString(3232323)
19 smaharbA
 
30.07.12
16:09
(15)(16)(17) смотрите внимательно (8) это не тоже самое
либо просто (18) (но (18) может работать не во всех версиях ооо, хотя счас наверное уже во всех текущих будет ок)
20 Карась
 
30.07.12
16:15
Попробую помудрить, просто я в принципе с такой темой впервые в жихни сталкиваюся и для меня это все темный лес
21 Карась
 
30.07.12
16:18
Вот Вы написали, что можно сделать  Якорь.setString(3232323), если я в нее вставляю   Якорь5.setString(Курсор5, ""+Закладки5+"", 4 );, то она не работает, честно, я уэе совсем запуталась, что сейчас необходимо сделать
22 smaharbA
 
30.07.12
16:19
Якорь5.setString("Тут нужный текст");
23 Карась
 
30.07.12
16:23
Возможно я сейчас задам самый глупый вопрос, как туда текст из закладки5 передать?
24 Карась
 
30.07.12
16:23
Или можно сразу из реквизита документа взять
25 Карась
 
30.07.12
16:24
Якорь5.setString(Закладки5);
         
Курсор5.gotoRange(Якорь5, 0);

вот так я пыталась, не работает, но я не думаю, что это правильно
26 smaharbA
 
30.07.12
16:31
(25)
Нужно вставить таблицы в определенные закладки ?
27 Карась
 
30.07.12
16:33
Не надо вставлять таблицы, в таблице уже есть закладка в нее нужно передать текст из Закладки5
28 Карась
 
30.07.12
16:33
Ну из этой переменной
29 smaharbA
 
30.07.12
16:34
или нужно заполнить закладки в имеющихся уже таблицах ?
30 Карась
 
30.07.12
16:34
да, именно
31 Карась
 
30.07.12
16:40
Я просто сегодня уже столько вариантов перелопатила, думала запрашивать отдельный доступ к таблице, но дело в том, что в режиме отладки он ее находит и выделяет, но записывать туда текст не хочет, выдает ошибку на метод
32 Карась
 
30.07.12
16:43
Только сейчас поняла, что абстрактно ответила на вопрос, прошу прощения
нужно заполнить закладки в имеющихся уже таблицах
33 Карась
 
30.07.12
16:49
ААаааааа я разобралась вот так надо сделать

Якорь5.setString(""+Закладки5+"");
            Курсор5.gotoRange(Якорь5, 0);

Тогда все передается!!!!!!!!!!!!!!!
СПАСИИИИИИБО!!!!!
34 smaharbA
 
30.07.12
17:01

[Закладки]=[Док].getBookmarks()

[Контроллер]=[Док].CurrentController
[Курсор]=[Контроллер].getViewCursor()

[Закладка1]=[Закладки].getByName("Tip")
[Закладка2]=[Закладки].getByName("Number")
[Закладка3]=[Закладки].getByName("Partner")
[Закладка4]=[Закладки].getByName("Partner1")
[Закладка5]=[Закладки].getByName("Partner2")
[Закладка6]=[Закладки].getByName("Partner3")

[Якорь1]=[Закладка1].getAnchor()
[Якорь2]=[Закладка2].getAnchor()
[Якорь3]=[Закладка3].getAnchor()
[Якорь4]=[Закладка4].getAnchor()
[Якорь5]=[Закладка5].getAnchor()
[Якорь6]=[Закладка6].getAnchor()

[Закладки1]=[Объект].[ХозяйственнаяОперация].[Наименование]
[Закладки2]=[Объект].[Номер]
[Закладки3]=[Объект].[Партнер].[Наименование]
[Закладки4]=[Объект].[Контрагент].[Наименование]
[Закладки5]=[Объект].[Контрагент].[Наименование]
[Закладки6]=[Объект].[Контрагент].[Наименование]

[Якорь1].setString([Закладки1])
[Якорь2].setString([Закладки2])
[Якорь3].setString([Закладки3])
[Якорь4].setString([Закладки4])
[Якорь5].setString([Закладки5])
[Якорь6].setString([Закладки6])
35 Карась
 
30.07.12
17:15
Спасибо Вам огромное!!!!
36 Карась
 
30.07.12
17:20
Кстати а вот эта строка у нас задает размер шрифта, а как мне сделать всю строку заглавными буквами?
37 Карась
 
30.07.12
17:22
Курсор.CharHeight=16;
38 Карась
 
30.07.12
17:29
Я знаю что в SQL  есть такая функция UPPER, но не уверена, что она есть в 1с.
39 smaharbA
 
30.07.12
17:29
есть
40 Карась
 
30.07.12
17:32
а как это можно сделать в 1с?
41 Карась
 
30.07.12
17:33
я описала код, где задаю шрифт,но как задать преобразование всех букв в верхний регистр

Курсор.gotoRange(Якорь, 0);  
Курсор.CharFontName="Times New Roman";


Курсор.CharHeight=16;
42 Карась
 
30.07.12
17:55
я смотрела здесь, вы же и писали v8: 1с и OpenOffice Writer
но там как я поняла ничего функции преобразования в верхний регистр нет
43 smaharbA
 
30.07.12
18:09
...=ВРЕГ("переведем в вверх")
44 Карась
 
30.07.12
23:04
Спасибо большое, уже вставила, работает)
Вы меня прямо выручаете!!!
Программист всегда исправляет последнюю ошибку.