|
ActiveDocument MS Word сквозная нумерация при вставке фрагмента со списком | ☑ | ||
---|---|---|---|---|
0
beholder13
27.11.14
✎
13:40
|
В-общем, в макете есть нумерованный список, с каждой итерацией фрагмент макета с нумерованным списком вставляется из буфера обмена и нумерация в новом фрагменте продолжается, чего не хочется.
Процедура ВывестиДанныеПоДокументуВШаблонMSWord(ДокументСсылка) // Итак, получаем макет, инициализируем ворд: Идентификатор = ИдентификаторМакетаВХранилищеЗначений(); Макет = ПолучитьИзВременногоХранилища(Идентификатор); Попытка MSWord = Макет.Получить(); Исключение Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не найден MS Word."; Сообщение.Сообщить(); Возврат; КонецПопытки; // получение данных из базы (в переменную ДокументСсылка может прийти ссылка на документ, // массив ссылок на документ или список значений, функция ПолучитьДанныеДляПечати() // собирает данные из регистров в структуру со статичным набором ключей для каждого // документа, на который придет ссылка): ТекстОшибки = ""; МассивПараметров = Новый Массив; Если ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.АктОбОказанииПроизводственныхУслуг") Тогда СтруктураПараметров = ПолучитьДанныеДляПечати(ДокументСсылка,ТекстОшибки); МассивПараметров.Добавить(СтруктураПараметров); Иначе Для каждого ДокСсылка Из ДокументСсылка Цикл Если ТипЗнч(ДокСсылка) = Тип("ЭлементСпискаЗначений") Тогда СтруктураПараметров = ПолучитьДанныеДляПечати(ДокСсылка.Значение,ТекстОшибки); Иначе СтруктураПараметров = ПолучитьДанныеДляПечати(ДокСсылка,ТекстОшибки); КонецЕсли; МассивПараметров.Добавить(СтруктураПараметров); КонецЦикла; КонецЕсли; // Вывод в макет Попытка Документ = MSWord.Application.Documents(1); MSWord.Application.Options.CheckSpellingAsYouType = False; MSWord.Application.Options.CheckGrammarAsYouType = False; // Если пришло несколько наборов параметров, кладем шаблон в буфер обмена Если МассивПараметров.Количество() > 1 Тогда Документ.Activate(); // MSWord.Lists(1).ApplyListTemplate(MSWord.ListTemplates(1),False); // не прокатывает, все равно при вставке нумерация продолжается (второй параметр - ContinuePreviousList) // в Lists всегда 1 список, ниже, после цикла, тоже MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); КонецЕсли; Для каждого СтруктураПараметров Из МассивПараметров Цикл Замена = Документ.Content.Find; РезультатСклонения = ""; Замена.Wrap = 1; // Здесь подставляются значения для замены, свернул в одну строку для читабельности Замена.Execute("ТекстЗамены",,,,,,,,,СтруктураПараметров.ТекстЗамены,2); // Здесь подставляются значения переменных, тоже свернул MSWord.Variables("ИмяПеременной").Value = СтруктураПараметров.ИмяПеременной; MSWord.Fields.Update(); MSWord.Fields.Unlink(); // Если несколько наборов, рисуем еще одну страницу Если МассивПараметров.Количество() > 1 И НЕ(МассивПараметров.ВГраница() = МассивПараметров.Найти(СтруктураПараметров)) Тогда MSWord.Application.Selection.EndKey(6); MSWord.Application.Selection.InsertBreak(7); MSWord.Application.Selection.Paste(); КонецЕсли; КонецЦикла; MSWord.Application.Visible = True; MsWord.Application.Activate(); wdWindowStateMaximize=1; wdWindowStateMinimize=2; MsWord.Application.WindowState = wdWindowStateMinimize; MsWord.Application.WindowState = wdWindowStateMaximize; Исключение Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ОписаниеОшибки(); Сообщение.Сообщить(); MSWord.Application.Quit(); КонецПопытки; КонецПроцедуры Вопрос: как программно зафорсить список (или фрагмент списка) нумероваться с 1? |
|||
1
beholder13
27.11.14
✎
15:52
|
Ап
|
|||
2
beholder13
27.11.14
✎
21:06
|
up
|
|||
3
beholder13
28.11.14
✎
17:46
|
Короч проблема решена, но так-то костылем. Суть в том, что перед копированием фрагмента список преобразовываем в текст, т.е. отрубается стандартный механизм нумерации ворда. Форматирование, в том числе отступы, остается как в шаблоне.
Документ.Lists(1).ConvertNumbersToText(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |