|   |   | 
| 
 | Как при выводе в шаблон ворд сделать цикл? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Мисти 27.02.13✎ 23:07 | 
        Колонтитулы нашла, весь вывод параметров тоже, осталась одна засада - пункт 2.7 должен быть выведен (3 строчки в нем) последовательно - от 0 до 10 раз (по разным договорам)
  Как бы это изобразить? В ексел - понятно (в смысле, в табличный документ) - строчка в цикле заполняется и выводится, а тут как быть? | |||
| 1
    
        Classic 27.02.13✎ 23:22 | 
        Копируй строку     | |||
| 2
    
        sanja26 27.02.13✎ 23:36 | 
        Док.Paragraphs.Add();
  //Word.Selection.MoveRight(,); Табл= Word.Selection.Range; //Формируем заголовок: Табл.InsertAfter("П/П*Наименование статьи расходов Агента*Стоимость (руб.)"); Табл.InsertParagraphAfter(); //сама таблица й = 1; Для Каждого строка из Услуги Цикл Табл.InsertAfter(Строка(й) + "*" + строка.Услуга+"*"+Строка.СуммаOUTСНДС); Табл.InsertParagraphAfter(); й = й + 1; КонецЦикла; | |||
| 3
    
        sanja26 27.02.13✎ 23:37 | 
        вот так делал таблицу, полный код. можешь урезать
  Word.selection.MoveDown(,12); Док.Paragraphs.Add(); //Word.Selection.MoveRight(,); Табл= Word.Selection.Range; //Формируем заголовок: Табл.InsertAfter("П/П*Наименование статьи расходов Агента*Стоимость (руб.)"); Табл.InsertParagraphAfter(); //сама таблица й = 1; Для Каждого строка из Услуги Цикл Табл.InsertAfter(Строка(й) + "*" + строка.Услуга+"*"+Строка.СуммаOUTСНДС); Табл.InsertParagraphAfter(); й = й + 1; КонецЦикла; Табл.InsertAfter("" + "*" + "ИТОГО общая сумма расходов Агента без НДС:"+"*"+"5"); Табл.InsertParagraphAfter(); Табл.InsertAfter("" + "*" + "НДС 18%:"+"*"+"5"); Табл.InsertParagraphAfter(); Табл.InsertAfter("" + "*" + "ИТОГО общая сумма расходов Агента, включая НДС 18%:"+"*"+"5"); Табл.InsertParagraphAfter(); Табл.ConvertToTable("*"); //Происходит конвертация строки в таблицу //не нравятся звездочки - используйте другой символ Док.Tables(1).AutoFormat(1); Док.Tables(1).Borders(wdBorderBottom).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderLeft).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderRight).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderTop).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderVertical).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderHorizontal).LineStyle = wdLineStyleNone; | |||
| 4
    
        sanja26 27.02.13✎ 23:38 | 
        й = й + 1 :))     | |||
| 5
    
        Мисти 28.02.13✎ 22:20 | 
        Спасибо большое!
  А я и не верила, что это возможно! | |||
| 6
    
        mikecool 28.02.13✎ 22:25 | 
        (5) загугли "Объектная модель Ворд" - кажется первая ссылка дает шикарное описание по свойствам-методам     | |||
| 7
    
        Мисти 28.02.13✎ 22:33 | 
        Спасибо!     | |||
| 8
    
        ВалераОшкин 28.02.13✎ 23:06 | 
        Как вариант работы с таблицами в Ворде.        
  // Табличная часть ВсегоТЧ = УПН_ОбщиеПроцедуры.ПолучитьКоличествоТЧ(СсылкаНаОбъект); Для WordDocTableNuber = 1 По WordDoc.Tables.Count() Цикл TC = WordDoc.Tables(WordDocTableNuber); // Обходим все строки таблицы в документе Ворд НомерСтрокиДок = 1; Попытка СтрокаТаблицы = TC.Rows(НомерСтрокиДок); Исключение // Есть строки объединеные по вертикали Продолжить; КонецПопытки; //Для Каждого СтрокаТаблицы Из TC.Rows Цикл Пока НомерСтрокиДок <= TC.Rows.Count() Цикл СтрокаТаблицы = TC.Rows(НомерСтрокиДок); // Ищем реквизит ТЧ НашлиРеквизитТЧ = Ложь; КоличествоПолей = СтрокаТаблицы.Range.Fields.Count; Если КоличествоПолей > 0 Тогда Для Инд = 1 По КоличествоПолей Цикл Ном = КоличествоПолей - Инд + 1; СтрокаТаблицы.Range.Fields(Ном).Select(); ИмяРеквизита = WD.Selection.Text; Если ПустаяСтрока(ИмяРеквизита) Тогда Продолжить; КонецЕсли; // Получим имя ТЧ ПозицияТочки = Найти(ИмяРеквизита, "."); Если ПозицияТочки > 0 Тогда ИмяТЧ = Лев(ИмяРеквизита, ПозицияТочки - 1); Иначе Продолжить; КонецЕсли; Если Не УПН_ОбщиеПроцедуры.ОбъектСодержитТЧ(СсылкаНаОбъект, ИмяТЧ) Тогда Продолжить; Иначе НашлиРеквизитТЧ = Истина; КонецЕсли; //ТабличнаяЧасть = УПН_ОбщиеПроцедуры.ПолучитьТаблицуЗначенийИЗТЧ(СсылкаНаОбъект, ИмяТЧ); Прервать; КонецЦикла; КонецЕсли; Если Не НашлиРеквизитТЧ Тогда НомерСтрокиДок = НомерСтрокиДок + 1; Продолжить; КонецЕсли; // Добавляем пустые строки по количеству строк в ТЧ документа ПерваяСтрока = Истина; КоличествоСтрокТЧ = УПН_ОбщиеПроцедуры.ПолучитьКоличествоСтрокТЧ(СсылкаНаОбъект, ИмяТЧ); Если КоличествоСтрокТЧ = 0 Тогда Если TC.Rows.Count() = 1 Тогда Иначе СтрокаТаблицы.Range.Cut(); КонецЕсли; Иначе Для Сч = 1 По КоличествоСтрокТЧ Цикл Если ПерваяСтрока Тогда ПерваяСтрока = Ложь; СтрокаТаблицы.Range.Copy(); Иначе СтрокаТаблицы.Range.Paste(); КонецЕсли; КонецЦикла; КонецЕсли; // Обход таблицы документа по столбцам и заполняем строки Для Сч = 1 По КоличествоСтрокТЧ Цикл НомерСтрокиТЧ = НомерСтрокиДок + Сч - 1; СтрокаТаблицы = TC.Rows(НомерСтрокиТЧ); КоличествоПолей = СтрокаТаблицы.Range.Fields.Count; Если КоличествоПолей > 0 Тогда Для Инд = 1 По КоличествоПолей Цикл Ном = КоличествоПолей - Инд + 1; СтрокаТаблицы.Range.Fields(Ном).Select(); ИмяРеквизита = WD.Selection.Text; Если ПустаяСтрока(ИмяРеквизита) Тогда Продолжить; КонецЕсли; Если ИмяТЧ = Лев(ИмяРеквизита, СтрДлина(ИмяТЧ)) Тогда // Это реквзит ТЧ ИмяРеквизита = Сред(ИмяРеквизита, СтрДлина(ИмяТЧ) + 2); Значение = УПН_ОбщиеПроцедуры.ПолучитьЗначениеРеквизитаТЧДляWord(СсылкаНаОбъект, ИмяТЧ, Сч, ИмяРеквизита, ПолучитьСсылкуНаЗащищеннуюОбработку()); Если Значение <> Неопределено И ЗначениеЗаполнено(Значение) Тогда // ??? изменил 10.12.2012 16:14:25 Wd.ActiveWindow.View.ShowFieldCodes = -1; Wd.Selection.Text = Строка(Значение); Wd.ActiveWindow.View.ShowFieldCodes = 0; Иначе Wd.Selection.Font.Color = 255; КонецЕсли; Иначе // Это реквизит документа Значение = УПН_ОбщиеПроцедуры.ПолучитьЗначениеРеквизитаДляWord(СсылкаНаОбъект, ИмяРеквизита, ПолучитьСсылкуНаЗащищеннуюОбработку()); Если Значение <> Неопределено И ЗначениеЗаполнено(Значение) Тогда // ??? изменил 10.12.2012 16:14:25 Wd.ActiveWindow.View.ShowFieldCodes = -1; Wd.Selection.Text = Строка(Значение); Wd.ActiveWindow.View.ShowFieldCodes = 0; Иначе Wd.Selection.Font.Color = 255; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; НомерСтрокиДок = НомерСтрокиДок + ?(КоличествоСтрокТЧ = 0, 1, КоличествоСтрокТЧ); КонецЦикла; КонецЦикла; | |||
| 9
    
        Мисти 04.03.13✎ 19:40 | 
        А сохранить как потом получившееся?     | |||
| 10
    
        Mikeware 04.03.13✎ 19:42 | 
        (6) Это же франч.     | |||
| 11
    
        Мисти 04.03.13✎ 19:47 | 
        (10) А ты знаешь ответ?
  Я там почитала - что нашла. Всего очень много, "сохранить" - не видать. | |||
| 12
    
        Мисти 04.03.13✎ 20:05 | 
        SaveAs( - и сразу путь, что ли?     | |||
| 13
    
        Мисти 04.03.13✎ 20:10 | 
        Про цикл:
  Что должно быть в шаблоне ворда, чтобы моя таблица встала в нужное место? | |||
| 14
    
        KAO111 04.03.13✎ 20:10 | ||||
| 15
    
        Мисти 04.03.13✎ 20:11 | 
        Word.selection.MoveDown(,12); - вот это, что ли? 12 - от чего? От верха?
  Я пляшу от общеизвестного (уже 10 штук нашла таких в сети) - MSWord = Шаблон.Получить(); //Попытка Документ = MSWord.Application.Documents(1); Документ.Activate(); // колонтитулы MSWord.Sections(1).Headers(1).Range.Text = "Договор лизинга №"+НомерДоговора+ " от " +Формат(ДатаДоговора,"ДФ='дд ММММ гггг'") + " между "+СокрЛП(Лизингодатель.НаименованиеСокращенное)+" и "+СокрЛП(НаименованиеЛизингополучателя.НаименованиеПолное); Замена = Документ.Content.Find; Для каждого СтрокаПараметров Из ТаблицаПараметров Цикл // Заменить заранее определенные ключевые конструкции на требуемый текст. Замена.Execute("[" + СтрокаПараметров.Имя + "]",,,,,,,,, СтрокаПараметров.Значение, 2); Сообщить( СтрокаПараметров.Имя); КонецЦикла; | |||
| 16
    
        Мисти 04.03.13✎ 20:18 | 
        Сохранилось!!
  Уря. Осталось с циклом разобраться! Предположим, мне нужно вывести все-то Покупатель1 Покупатель2 Покупатель3 | |||
| 17
    
        Мисти 04.03.13✎ 21:20 | 
        Очень надо!!     | |||
| 18
    
        Мисти 04.03.13✎ 21:22 | 
        Просто параметр - это [пер]
  А как сказать, что у меня это таблица! | |||
| 19
    
        Мисти 04.03.13✎ 21:49 | 
        Выборка = Ворд.Selection;
  Выборка.GoTo(-1,,,ИмяЗакладки) - это я нашла. Как задать ИмяЗакладки? Это ж не параметр? | |||
| 20
    
        Мисти 04.03.13✎ 22:27 | 
        Закладку тоже нашла.
  Выборка = Ворд.Selection; - как это привязать к моим переменным? | |||
| 21
    
        Мисти 04.03.13✎ 22:29 | 
        http://www.abelov.com/kuban/169919.html - вот там, кстати, всё прям у человека получилось!     | |||
| 22
    
        Мисти 04.03.13✎ 22:43 | 
        Табл= Word.Selection.Range; - кто такой тут Word?
  Я так понимаю, что у меня и в нужных мне примерах файл открывается разными способами. У меня - Шаблон = ПолучитьМакет("ШаблонWord"); MSWord = Шаблон.Получить(); Документ = MSWord.Application.Documents(1); Документ.Activate(); | |||
| 23
    
        Мисти 04.03.13✎ 22:45 | 
        А в примере - 
  MSWord=CreateObject("Word.Application"); Документ=MSWord.Documents.Open("c:\aaa.doc"); MSWord.Selection.TypeText("BEGIN"); А как скрестить ужа с ежом? | |||
| 24
    
        Мисти 05.03.13✎ 00:34 | 
        Это самое важное!     | |||
| 25
    
        sanja26 05.03.13✎ 01:09 | 
        (24)а в чем проблема-то?     | |||
| 26
    
        sanja26 05.03.13✎ 01:12 | 
        Word.selection.MoveDown(,12);
  Док.Paragraphs.Add(); //Word.Selection.MoveRight(,); Табл= Word.Selection.Range; //Формируем заголовок: Табл.InsertAfter("П/П*Наименование статьи расходов Агента*Стоимость (руб.)"); Табл.InsertParagraphAfter(); //сама таблица й = 1; Для Каждого строка из Услуги Цикл Табл.InsertAfter(Строка(й) + "*" + строка.Услуга+"*"+Строка.СуммаOUTСНДС); Табл.InsertParagraphAfter(); й = й + 1; КонецЦикла; Табл.InsertAfter("" + "*" + "ИТОГО общая сумма расходов Агента без НДС:"+"*"+"5"); Табл.InsertParagraphAfter(); Табл.InsertAfter("" + "*" + "НДС 18%:"+"*"+"5"); Табл.InsertParagraphAfter(); Табл.InsertAfter("" + "*" + "ИТОГО общая сумма расходов Агента, включая НДС 18%:"+"*"+"5"); Табл.InsertParagraphAfter(); Табл.ConvertToTable("*"); //Происходит конвертация строки в таблицу //не нравятся звездочки - используйте другой символ Док.Tables(1).AutoFormat(1); Док.Tables(1).Borders(wdBorderBottom).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderLeft).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderRight).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderTop).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderVertical).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderHorizontal).LineStyle = wdLineStyleNone; | |||
| 27
    
        sanja26 05.03.13✎ 01:13 | 
        Word.selection.MoveDown(,12);
  Док.Paragraphs.Add(); //Word.Selection.MoveRight(,); Табл= Word.Selection.Range; //Формируем заголовок: Табл.InsertAfter("П/П*Наименование статьи расходов Агента*Стоимость (руб.)"); Табл.InsertParagraphAfter(); //сама таблица й = 1; Для Каждого строка из Услуги Цикл Табл.InsertAfter(Строка(й) + "*" + строка.Услуга+"*"+Строка.СуммаOUTСНДС); Табл.InsertParagraphAfter(); й = й + 1; КонецЦикла; Табл.ConvertToTable("*"); //Происходит конвертация строки в таблицу //не нравятся звездочки - используйте другой символ Док.Tables(1).AutoFormat(1); Док.Tables(1).Borders(wdBorderBottom).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderLeft).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderRight).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderTop).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderVertical).LineStyle = wdLineStyleNone; Док.Tables(1).Borders(wdBorderHorizontal).LineStyle = wdLineStyleNone; | |||
| 28
    
        Мисти 05.03.13✎ 07:53 | 
        (27) Спасибо! Этот код вселяет оптимизм!
  Если у меня ворд определен как Шаблон = ПолучитьМакет("ШаблонWord"); MSWord = Шаблон.Получить(); Документ = MSWord.Application.Documents(1); Документ.Activate(); То к чему можно привязать Word.selection.MoveDown(,12); ? Мне говорят - нет такого метода! | |||
| 29
    
        Wobland 05.03.13✎ 07:56 | 
        (28) вас там двое? v8: Помогите с Word шаблоном     | |||
| 30
    
        Мисти 05.03.13✎ 08:28 | 
        Видела я эту тему!
  Если б я нашла описание - к какому объекту какой метод применяется, или как в 1С - точку ставишь, а тебе - подсказку, а так я не могу понять, как соединить мое с примером. У меня готовый шаблон (макет), туда вставляются параметры и, в частности, надо вставить несколько табличных частей. | |||
| 31
    
        sanja26 05.03.13✎ 12:25 | ||||
| 32
    
        sanja26 05.03.13✎ 12:27 | 
        Word = MSWord.Application;
  Документ = Word.Documents(1); Word.selection.MoveDown(,12); | |||
| 33
    
        Мисти 17.03.13✎ 16:05 | 
        В 32 - это то, чего мне не хватало.
  Теперь цикл выводится. Как сделать, чтобы в табличку попадало? Шапка есть, как сделать, чтобы строка соответствовала шапке? | |||
| 34
    
        Мисти 17.03.13✎ 17:38 | 
        Табл.ConvertToTable("*");
  Почему этот фокус мог не отработать? | |||
| 35
    
        Мисти 17.03.13✎ 17:43 | 
        wdLineStyleNone - ругается.     | |||
| 36
    
        Мисти 17.03.13✎ 18:02 | 
        wdBorderBottom = -3;// Нижняя грань таблицы
  wdBorderLeft = -2; // Левая грань таблицы wdBorderRight = -4; //Правая wdBorderTop = -1; // нижняя wdBorderVertical = -6; //Вертикальная (видимо смежная) О!! Что нашла! | |||
| 37
    
        acsent 17.03.13✎ 18:11 | 
        почему бы не взять методологию из бсп?     | |||
| 38
    
        Мисти 17.03.13✎ 18:12 | 
        Сделать хотел грозу, а получил....
  Почему-то границы зеленые!! | |||
| 39
    
        Мисти 17.03.13✎ 18:12 | 
        бсп - это что?     | |||
| 40
    
        Мисти 17.03.13✎ 18:28 | 
        Осталась мелочь!
  Промежуточной горизонтальной линии нет. Поможите люди-добрые!! | |||
| 41
    
        sanja26 17.03.13✎ 20:28 | 
        insertparagrafafter в цикле забыла     | |||
| 42
    
        Мисти 18.03.13✎ 14:50 | 
        ТабДокумент = Новый ТабличныйДокумент;
  Шаблон = ПолучитьМакет("АктВводВагон"); // Получить объект из макета. MSWord = Шаблон.Получить(); //Попытка Документ = MSWord.Application.Documents(1); Документ.Activate(); // колонтитулы MSWord.Sections(1).Headers(1).Range.Text = "Договор лизинга №"+НомерДоговора+ " от " +Формат(ДатаДоговора,"ДФ='дд ММММ гггг'") + " между "+СокрЛП(Лизингодатель.НаименованиеСокращенное)+" и "+СокрЛП(НаименованиеЛизингополучателя.НаименованиеПолное); Замена = Документ.Content.Find; Для каждого СтрокаПараметров Из ТаблицаПараметров Цикл // Заменить заранее определенные ключевые конструкции на требуемый текст. Замена.Execute("[" + СтрокаПараметров.Имя + "]",,,,,,,,, СтрокаПараметров.Значение, 2); Сообщить( СтрокаПараметров.Имя); КонецЦикла; MSWord.Application.Selection.GoTo(-1,,,"Строка1"); Табл= MSWord.Application.Selection.Range; //Формируем заголовок: й=1; Табл.InsertAfter("№ п/п "+ "*" + "Производитель"+"*" +"Наименование"+"*"+ "Идентификационный номер (заводской номер)"+"*"+"Сетевой номер"+"*"+ "Год постройки"); Табл.InsertParagraphAfter(); Для Каждого СтрНом из СписокНоменклатуры Цикл Если СтрНом.Исп Тогда Табл.InsertAfter(Строка(й) + "*" + СтрНом.Номенклатура.ПТС.Производитель+"*" +СтрНом.Номенклатура.ПТС.Наименование+"*"+СтрНом.Номенклатура.ПТС.ИД+"*"+ СтрНом.Номенклатура.ПТС.СетевойНомер+"*"+ СтрНом.Номенклатура.ПТС.ГодИзготовления); Табл.InsertParagraphAfter(); // MSWord.Application.Selection.InsertBreak(7); // MSWord.Application.Selection.Paste(); // MSWord.Application.Selection.TypeParagraph(); // MSWord.Application.Selection.TypeText(СтрокаТекста); //MSWord.Application.Selection.TypeParagraph(); й=й+1; КонецЕсли; КонецЦикла; Табл.ConvertToTable("*"); wdBorderBottom = -3;// Нижняя грань таблицы wdBorderLeft = -2; // Левая грань таблицы wdBorderRight = -4; //Правая wdBorderTop = -1; // нижняя wdBorderVertical = -6; //Вертикальная (видимо смежная) Документ.Tables(1).AutoFormat(1); Документ.Tables(1).Borders(wdBorderBottom).LineStyle = 1; Документ.Tables(1).Borders(wdBorderLeft).LineStyle = 1; //wdLineStyleNone Документ.Tables(1).Borders(wdBorderRight).LineStyle = 1; //wdLineStyleNone Документ.Tables(1).Borders(wdBorderTop).LineStyle = 1; //wdLineStyleNone Документ.Tables(1).Borders(wdBorderVertical).LineStyle = 1; //wdLineStyleNone Ничего не забыла! У меня 3 дефекта - нет промежуточных линий, основные линии почему-то зеленые, а во втором месте, куда я вставляю всё точно так же (дубль, по сути!) - линий нет вообще. Почему? | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |