Имя: Пароль:
1C
1С v8
Работа с Word
, ,
0 FunnyDevil
 
20.01.14
09:56
Доброе утро, не подскажите у меня есть шаблон Word, формируется все хорошо, вот только в документе есть несколько записей по которым нужно формировать новый документ Word, поэтому открывается сразу много сформированных док-ов  Word, как сделать, чтобы они были все в одном документе друг под другом?
1 dk
 
20.01.14
10:14
походу word 2010 не имеет такой возможности - нет там MDI, либо запрятано где-то
2 FunnyDevil
 
20.01.14
10:15
Печаль
3 Масянька
 
20.01.14
10:16
(0) Имеется ввиду: 1 документ Word или несколько документов Word?
4 le_
 
20.01.14
10:18
(0) На разных листах что ли? Если так, то выводи программно на разные листы в одном документе.
5 FunnyDevil
 
20.01.14
10:19
Есть Док в 1с Увольнение из организации, там может быть как несколько записей, так и одна : когда одна, формируется 1 док word с заполненными данными, когда несколько, формируются несколько доков Word с заполненными данными, хочется сделать так чтобы они формировались друг за другом в одном доке Word
6 FunnyDevil
 
20.01.14
10:19
да, на разных листах
7 Масянька
 
20.01.14
10:20
(6) Слава Богу! Выяснили.
Анализировать - разрыв страницы - новое заполнение.
8 FunnyDevil
 
20.01.14
10:24
(4) а как можно так организовать?
9 le_
 
20.01.14
10:39
Процедура КнопкаВыполнитьНажатие(Кнопка)
    W = Новый COMОбъект("Word.Application");
    Док = W.Documents.Add("C:\Program Files\Microsoft Office\Templates\1049\Office Word 2003 Look.dotx");
    W.Selection.TypeText("Текст");
    W.Selection.InsertBreak();
    W.Selection.TypeText("Текст на другой странице");
    W.Visible = Истина;
КонецПроцедуры
10 FunnyDevil
 
20.01.14
10:42
(9) буду пробывать
11 FunnyDevil
 
20.01.14
10:42
спасибо
12 RomaH
 
naïve
20.01.14
10:51
Попытка
        АктивныйДокумент = ПолучитьМакет("МакетПриемник");    
    Исключение
        Сообщить(ОписаниеОшибки());
        Сообщить("Не удалось создать объект ворда");
        Возврат Неопределено;
    КонецПопытки;
    
    КомОбъект     = АктивныйДокумент.Получить();
    
    ДокументПриемник = КомОбъект;
    
    ЭтоПервыйдокумент = Истина;
    
    НовыйПараграф = Неопределено;
    КоличествоСтраниц = Неопределено;
    
    Для каждого СтрокаТЧ Из СсылкаНаОбъект.РаботникиОрганизации Цикл
        
        Если Не ЭтоПервыйдокумент И КомОбъект <> Неопределено Тогда
            //Добавим разрывы страниц
            НовыйПараграф.Range.InsertBreak(2);  //Добавляем раздел с нечетной страницы
            Если КоличествоСтраниц%2 <> 0 Тогда
                НовыйПараграф.Range.InsertBreak(2);  //Добавляем раздел с нечетной страницы
            КонецЕсли;
        КонецЕсли;
        
        Состояние("Формируем соглашение " + СтрокаТЧ.Сотрудник);
        
        КомОбъект = ПечатьСоглашения(СтрокаТЧ.Сотрудник);
        
        Если КомОбъект <> Неопределено Тогда
            
            ДокументИсточник = КомОбъект;
            
            ДокументИсточник.Paragraphs(1).PageBreakBefore = Истина;
            
            УдалитьПустыеТаблицы(ДокументИсточник);
            
            ДокументИсточник.Repaginate();
            
            КоличествоСтраниц = ДокументИсточник.BuiltInDocumentProperties(14).Value;
            
            Если ЭтоПервыйдокумент Тогда
                НовыйПараграф = ДокументПриемник.Paragraphs(1);
            Иначе
                НовыйПараграф = ДокументПриемник.Paragraphs.Add();
                //НовыйПараграф.Range.InsertBreak(5);  //Добавляем раздел с нечетной страницы
            КонецЕсли;
            
            НовыйПараграф.Range().FormattedText = ДокументИсточник.Range().FormattedText;
            
            ЭтоПервыйдокумент = Ложь;
            
            ДокументИсточник.Close(0);

        КонецЕсли;
        
    КонецЦикла;
    
    Для Каждого Секция Из ДокументПриемник.Sections Цикл
        Секция.Headers(1).PageNumbers.RestartNumberingAtSection = Истина;
        Секция.Headers(1).PageNumbers.StartingNumber = 1;
    КонецЦикла;
    
    
    Возврат ДокументПриемник;
13 FunnyDevil
 
20.01.14
11:19
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Макет = ПолучитьМакет("ОбходнойЛист").Получить();
        Документ = Макет.Application.Documents(1);
        Документ.Activate();
        Месяц = Прав(Лев(ВыборкаДетальныеЗаписи.Дата, 5), 1) - 1;
        День = Лев(ВыборкаДетальныеЗаписи.Дата, 2);
        Год = Прав(Лев(ВыборкаДетальныеЗаписи.Дата, 10), 2);
        Месяц = ПолучитьМесяц(Месяц);
        Замена = Документ.Content.Find;
        ФИО = Замена.Execute("<ФИО>", Ложь, Истина, Ложь, , , Истина, , Ложь, ВыборкаДетальныеЗаписи.ФИО,2);
        Номер =Замена.Execute("<Номер>", Ложь, Истина, Ложь, , , Истина, , Ложь, ВыборкаДетальныеЗаписи.Номер,2);
     Число = Замена.Execute("<Ч>", Ложь, Истина, Ложь, , , Истина, , Ложь, День,2);
        НазваниеМесяца = Замена.Execute("<Месяц>", Ложь, Истина, Ложь, , , Истина, , Ложь, Месяц,2);
        ЧислоГода = Замена.Execute("%", Ложь, Истина, Ложь, , , Истина, , Ложь, Год,2);
        Макет.Application.Visible = Истина;
        Макет.Activate();
    КонецЦикла;

блин, что-то непонятно все равно, можно на примере моем, а то туговато идет понимание....
14 WildSery
 
20.01.14
11:25
ОФФ.
(10) ПоубЫвав бы за "пробЫвал".
15 le_
 
20.01.14
12:11
(13)
Процедура КнопкаВыполнитьНажатие(Кнопка)
    Запрос = Новый Запрос("ВЫБРАТЬ
                          |    ДАТАВРЕМЯ(2014, 1, 20) КАК Дата,
                          |    ""Иванов Иван Иванович"" КАК ФИО,
                          |    ""Раз"" КАК Номер
                          |
                          |ОБЪЕДИНИТЬ ВСЕ
                          |
                          |ВЫБРАТЬ
                          |    ДАТАВРЕМЯ(2014, 1, 21),
                          |    ""Петров Петр Петрович"",
                          |    ""Два""
                          |
                          |ОБЪЕДИНИТЬ ВСЕ
                          |
                          |ВЫБРАТЬ
                          |    ДАТАВРЕМЯ(2014, 1, 22),
                          |    ""Сидоров Сидор Сидорович"",
                          |    ""Три""");
    ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
    Макет = ПолучитьМакет("Макет").Получить();
    Документ = Макет.Application.Documents(1);
    Документ.Activate();
    Макет.Application.Selection.WholeStory();
    Макет.Application.Selection.Copy();
    Последний = ВыборкаДетальныеЗаписи.Количество();
    Тек = 0;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Тек = Тек + 1;
        Макет.Application.Selection.PasteAndFormat(16);
        Замена = Документ.Content.Find;
        ФИО = Замена.Execute("<ФИО>", Ложь, Истина, Ложь, , , Истина, , Ложь, ВыборкаДетальныеЗаписи.ФИО, 2);
        Номер =Замена.Execute("<Номер>", Ложь, Истина, Ложь, , , Истина, , Ложь, ВыборкаДетальныеЗаписи.Номер, 2);
        Если Тек < Последний Тогда
            Макет.Application.Selection.InsertBreak();
        КонецЕсли;
    КонецЦикла;
    Макет.Application.Visible = Истина;
КонецПроцедуры

С тебя 200 р.
16 FunnyDevil
 
20.01.14
12:36
номер телефона в студию
17 FunnyDevil
 
20.01.14
12:38
или лучше на почту [email protected]
18 FunnyDevil
 
20.01.14
12:39
Помогло очень, спасибо!
19 RomaH
 
naïve
20.01.14
14:40
Макет.Application.Selection.Copy();
вообще-то не хорошо пользоваться буфером обмена
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn