Имя: Пароль:
1C
1С v8
Вывести таблицу в документе Word
0 pele
 
18.03.13
16:16
Помогите пожалуйста вывести таблицу в документе ворд!!!!
   спрШаблонДоговора = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭтаФорма.мсТиповоеСоглашение, "мсШаблонДоговора");
   
   Если ЗначениеЗаполнено(спрШаблонДоговора) тогда
       ПолучитьДанные = ПрисоединенныеФайлы.ПолучитьДанныеФайла(спрШаблонДоговора);
       ДвоичныеДанные = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(спрШаблонДоговора);
   Иначе
       Предупреждение("Шаблон Договора не загружен в информационную базу!");
       Возврат;
   КонецЕсли;
   
   Handler = УправлениеПечатьюMSWordКлиент.ПолучитьМакетMSWord(ДвоичныеДанные, ПолучитьДанные.ИмяФайла);

   масРезультат = ПолучитьТабличнуюЧастьТоваров();
   Количество = масРезультат.Количество();
   
   ActiveDocument = Handler.COMСоединение.ActiveDocument;
   Range = ActiveDocument.Content;
   Поиск = Range.Find;
   Поиск.ClearFormatting();
   Поиск.execute("{НачалоТаблицыОбязательныйПрефикс}");
   

   //Если НЕ Поиск.Found Тогда
   //    Прервать;
   //КонецЕсли;
   //Range.Text = Строка("");
   Таблица = Поиск.Application.ActiveDocument.Tables(1);
   Поиск.Application.Selection.MoveDown();
   Поиск.Application.Selection.SelectRow();
   Поиск.Application.Selection.Cut(); //вырезаем строку  тегов строк
   Попытка  //строки итогов может не быть
       Поиск.Application.Selection.SelectRow();
   Исключение
   КонецПопытки;              
   
   
   //таблица
   Для каждого стрТовар из масРезультат Цикл    
       
       сткТовары = Новый Структура("Номенклатура,Единица,Количество,ДатаПродажи,Цена,Сумма");
       сткТовары.Вставить("Номенклатура",стрТовар.Номенклатура);
       сткТовары.Вставить("Единица",стрТовар.ЕдиницаИзмерения);
       сткТовары.Вставить("Количество",стрТовар.Количество);
       сткТовары.Вставить("ДатаПродажи",стрТовар.ДатаПродажи);
       сткТовары.Вставить("Цена",стрТовар.Цена);
       сткТовары.Вставить("Сумма",стрТовар.Сумма);
       //сткТовары.Вставить("НачалоТаблицыОбязательныйПрефикс","");
       
       Для каждого  Текст из сткТовары Цикл
           
           ТекстДляПоиска = Текст.Ключ;
           ТекстЗамены    = Текст.Значение;
           Range = ActiveDocument.Content;
           Поиск = Range.Find;
           Поиск.ClearFormatting();
           Поиск.execute("{НачалоТаблицыОбязательныйПрефикс}");
           Handler.COMСоединение.Selection.MoveDown();
           Handler.COMСоединение.Selection.Paste();
           
           Пока Истина Цикл
               
               Range = ActiveDocument.Content;
               Поиск = Range.Find;
               Поиск.ClearFormatting();
               Поиск.execute("{"+ТекстДляПоиска+"}");
               
               Если НЕ Поиск.Found Тогда
                   Прервать;
               КонецЕсли;
               
               Range.Text = Строка(ТекстЗамены);
               
           КонецЦикла;
           
       КонецЦикла;
1 pele
 
18.03.13
16:17
Не работает SelectRow()
2 pele
 
18.03.13
16:18
так как Com объект не ссылается на таблицу
3 pele
 
18.03.13
17:05
Как сделать?
4 kimba
 
18.03.13
17:18
попробуй макрос запиши по созданию таблицы, и посмотри его код в бэйсике, станет понятно
5 Новиков
 
18.03.13
17:19
разделители.
6 Масянька
 
18.03.13
17:20
мWord = СоздатьОбъект("Word.Application");
   мWord.Visible = 0;
   мNewDoc = мWord.Documents;
   мШаблон = СокрЛП(Строка(КаталогШаблонов + мШаблон));
   мДок = мNewDoc.Add(мШаблон, 0, 0, 1);  
   
   // верхний колонтитул
   мКолонтитул = мДок.Sections.Item(1).Headers.Item(1).Range;
   мКолонтитул.Find.Execute("[ПечНомерДоговора]",0,0,,,,,,,мНомерДоговора,2);
   мКолонтитул.Find.Execute("[ПечДатаДоговора]",0,0,,,,,,,Нрег(СокрЛП(мДатаДоговора)),2);
       
   мОбъект = мДок.Content;
   // подставляем значения по тексту договора - признак замены []
   мОбъект.Find.Execute("[ПечНомерДоговора]",0,0,,,,,,,мНомерДоговора,2);
   мОбъект.Find.Execute("[ПечДатаДоговора]",0,0,,,,,,,Нрег(СокрЛП(мДатаДоговора)),2);
   мОбъект.Find.Execute("[ПечПокупатель]",0,0,,,,,,,СокрЛП(мПокупатель),2);

......
       // заполнение таблицы номенклатуры        
       
       Для СчетчикЦикла = 1 По Счет.КоличествоСтрок() Цикл
           
           мОбъект.Tables(1).Rows.Add();        // добавляем строку в конец таблицы
           
           Счет.ПолучитьСтрокуПоНомеру(СчетчикЦикла);
           
           мОбъект.Tables(1).Cell(СчетчикЦикла + 2,1).Range.Text = Счет.НомерСтроки;
           мОбъект.Tables(1).Cell(СчетчикЦикла + 2,2).Range.Text = СокрЛП(Счет.Номенклатура.ПолнНаименование);
           мОбъект.Tables(1).Cell(СчетчикЦикла + 2,3).Range.Text = СокрЛП(Формат(Счет.Количество, "Ч010.2"));
           мОбъект.Tables(1).Cell(СчетчикЦикла + 2,4).Range.Text = Строка(Счет.Единица);
           мОбъект.Tables(1).Cell(СчетчикЦикла + 2,5).Range.Text = глФрм(Счет.Цена);
           мОбъект.Tables(1).Cell(СчетчикЦикла + 2,6).Range.Text = глФрм(Счет.СуммаНДС);
           мОбъект.Tables(1).Cell(СчетчикЦикла + 2,7).Range.Text = глФрм(Счет.Сумма);
       КонецЦикла;
       
       // итоги
       мОбъект.Tables(2).Cell(1,2).Range.Text = СокрЛП(Формат(Счет.Итог("Количество"), "Ч010.2"));
       мОбъект.Tables(2).Cell(1,5).Range.Text = глФрм(Счет.Итог("СуммаНДС"));
       мОбъект.Tables(2).Cell(1,6).Range.Text = глФрм(Счет.Итог("Сумма"));


Код для 7.7.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.