Имя: Пароль:
1C
 
1C ---> WORD не переносится форматирование
0 dGU
 
17.02.16
15:56
Добрый день!

Заполняю шаблон word из 1С.

Нужно перенести кусок в таком формате (с сохранением переноса строк):

1. Федеральный закон «Об оценочной деятельности в Российской федерации» от 29.07.1998 №135-ФЗ (в актуальной редакции).
2. Федеральные Стандарты оценки:
2.1. «Общие понятия оценки, подходы и требования к проведению оценки (ФСО №1)», утвержденные приказом Минэкономразвития России от 20 мая 2015 г. №297.
2.2. «Цель оценки и виды стоимости (ФСО №2)», утвержденный приказом Минэкономразвития России от 20 мая 2015 г. №298.

Выполняю:

Замена.Execute(Строка(ЭлементСтруктуры.Ключ), Ложь, Истина, Ложь, , , Истина, , Ложь, Строка(ЭлементСтруктуры.Значение), 2);

В документе получается вот так:

1. Федеральный закон «Об оценочной деятельности в Российской федерации» от 29.07.1998 №135-ФЗ (в актуальной редакции). 2. Федеральные Стандарты оценки: 2.1. «Общие понятия оценки, подходы и требования к проведению оценки (ФСО №1)», утвержденные приказом Минэкономразвития России от 20 мая 2015 г. №297.2.2. «Цель оценки и виды стоимости (ФСО №2)», утвержденный приказом Минэкономразвития России от 20 мая 2015 г. №298.

Как сохранить форматирование при переносе, возможно какие-то настройки в ворде сделать? Кто знает?
1 dGU
 
17.02.16
16:26
Как оказалось тут две проблемы:

1. Что нельзя заменять строки значениями больше 250 больше 250 символов (исключительная ситуация word).
2. Почему-то при переносе затирается символ стандартный символ абзаца (код символа - 10).

Было принято решение менять символ 10 на символ 13 - перенос строки.

Чудом все получилось. Убил часа 3 на это.

Код:

Процедура Команда1(Команда)
    
    СтрокаСЗамененнымиАбзацами = СтрЗаменить(ЗначениеЗаполнения, Символ(10), Символ(13));
    
    MsWord = Новый COMОбъект("Word.Application");
    
    MsWord.Documents.Open("d:\DOC1.DOCX", Истина);
    MsWord.Application.Visible = 1;    
    
    Документ = MsWord.Documents(1);
    Документ.Activate();
    
    Параметр = Новый Структура;
    Параметр.Вставить("МеняНадоЗаменить" , СтрокаСЗамененнымиАбзацами);
    
    ПроверитьПараметрыНаДлиннуБольше250Символов(Параметр);
    
    Для Каждого ЭлементСтруктуры Из Параметр Цикл
            
        Замена = Документ.Content.Find;
        Замена.Execute(Строка(ЭлементСтруктуры.Ключ), Ложь, Истина, Ложь, , , Истина, , Ложь, Строка(ЭлементСтруктуры.Значение), 2);    
            
    КонецЦикла;
        
    MsWord.Application.Visible = 1;
    MsWord.Documents.Open("d:\DOC1.DOCX", Истина);
    
    
КонецПроцедуры

Процедура ПроверитьПараметрыНаДлиннуБольше250Символов(Параметры) Экспорт
    
    Для Каждого ЭлементСтруктуры Из Параметры Цикл    
        
        КорректируемаяСтрока     = Строка(ЭлементСтруктуры.Значение);
        Ключ                    = Строка(ЭлементСтруктуры.Ключ);
        
        Если СтрДлина(КорректируемаяСтрока) > 250 Тогда
            
            КлючПродолжения = "_Продолжение"+Ключ;
            Сч = 0;
            
            КоличествоСимволов = 180;
            
            Пока СтрДлина(КорректируемаяСтрока) > 250 Цикл    
                
                КорректируемаяДлинна = СтрДлина(КлючПродолжения+Сч);
                
                Параметры.Вставить(Ключ, Лев(КорректируемаяСтрока, КоличествоСимволов)+КлючПродолжения+Сч);
                КорректируемаяСтрока = Сред(КорректируемаяСтрока, КоличествоСимволов + 1, СтрДлина(КорректируемаяСтрока));
                
                Ключ = КлючПродолжения+Сч;
                
                Сч = Сч + 1;
                
            КонецЦикла;
            
            Параметры.Вставить(Ключ, КорректируемаяСтрока);    
            
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры // ПроверитьПараметрыНаДлиннуБольше250Символов()