Имя: Пароль:
1C
1С v8
Как собрать два документа ворд в один?
0 RomaH
 
naïve
20.12.13
08:40
АктивныйДокумент = ПолучитьМакет("ТрудовойДоговор2009");    
    КомОбъект     = АктивныйДокумент.Получить();
        КомОбъект.Application.Visible = Истина;
        КомОбъект.Activate();


заменой этот шаблон изменяется и показывается

настала необходимость пакетной печати
как собрать все получившиеся документы ворда в один?
1 dk
 
20.12.13
08:59
copy - paste - разрыв страницы - copy - paste - разрыв страницы - ...
2 RomaH
 
naïve
20.12.13
09:02
(1) а количество страниц как узнать?
3 MiniMuk
 
20.12.13
09:05
(2) зачем? ctrl+A ctrl+c ctrl+v
4 RomaH
 
naïve
20.12.13
09:42
а как вставить разрыв страницы именно в конец документа?
и как указать место куда вставлять то что скопировал?
5 RomaH
 
naïve
20.12.13
09:49
вот вставить разрыв страницы:
Selection.InsertBreak
но до Selection добраться?
6 тролль-провокатор
 
20.12.13
09:50
7 RomaH
 
naïve
20.12.13
12:10
в общем почти работает
но ...
в документе есть таблицы
как корректно перенести и таблицы?

    КомОбъектПриемник     = АктивныйДокумент.Получить();
    КомОбъектПриемник.Activate();
    КомОбъектПриемник.Application.Visible = Истина;
    
    ДокументПриемник = КомОбъектПриемник.Application.Documents(1);
    
    //КомОбъектПриемник.Application.Documents(1).Name = "Сборная";
    ИндексДокумента    = 1;
    
    Для каждого СтрокаТЧ Из СсылкаНаОбъект.РаботникиОрганизации Цикл
        
        ИндексДокумента = ИндексДокумента + 1;
        
        Сообщить(СтрокаТЧ.Сотрудник);
        КомОбъект = ПечатьТрудовогоДоговора(СтрокаТЧ.Сотрудник);
        
        Если КомОбъект <> Неопределено Тогда
            
            ДокументИсточник = КомОбъектПриемник.Application.Documents(1);
            
            КоличествоСтраниц = ДокументИсточник.ComputeStatistics(2);
            
            КомОбъект.Activate();
            
            КомОбъект.Application.Visible = Истина;
            Для каждого Параграф Из ДокументИсточник.Paragraphs Цикл
                
                ДокументПриемник.Paragraphs.Add().Range.FormattedText = Параграф.Range;
                
            КонецЦикла;
            КомОбъект = Неопределено;
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат КомОбъектПриемник;
8 RomaH
 
naïve
20.12.13
12:14
9 RomaH
 
naïve
20.12.13
13:29
блин
в басике работает, а в 1С - нет

            
ДокументПриемник.Range.FormattedText = ДокументИсточник.Range.FormattedText;

в 1С говорит, что Range отсутсвует
            ДокументИсточник = КомОбъектПриемник.Application.Documents(1);
10 RomaH
 
naïve
23.12.13
10:24
например макрос копирующий текущий документ в новый пять раз

Sub Copy2()
Dim NewDoc As Document
Dim SrcDoc As Document
Dim p As Paragraph

Set SrcDoc = ActiveDocument
Set NewDoc = Documents.Add
For i = 1 To 5
    Set p = NewDoc.Paragraphs.Add
    p.Range.FormattedText = SrcDoc.Range.FormattedText
    If i < 5 Then
        p.Range.InsertBreak Type:=wdPageBreak
        If NewDoc.BuiltInDocumentProperties(wdPropertyPages) Mod 2 = 0 Then
            p.Range.InsertBreak Type:=wdPageBreak
        End If
    End If
Next
End Sub

но в 1С для SrcDoc свойство Range  отсутсвует
11 RomaH
 
naïve
23.12.13
12:54
теперь другая проблема:
надо делить документ для двусторонней печати - т.е. если в документе не четное количество страниц - добавить одну

пытаюсь посчитать количество страниц:
            ДокументИсточник = КомОбъект.Application.Documents(1);
            
            //КомОбъект.Activate();
            
            //КомОбъект.Application.Visible = Истина;
            
            ДокументИсточник.Paragraphs(1).PageBreakBefore = Истина;
            
            КоличествоСтраниц = ДокументИсточник.BuiltInDocumentProperties(14).Value;
            КоличествоСтраниц1 = ДокументИсточник.ComputeStatistics(2);


при нормальном выполнении кода - последние две строки выдают 3
а при прохождении через отладку на точке останова - 4

добавление паузы перед вычислением не помогает
12 RomaH
 
naïve
23.12.13
12:56
а нет - пауза помогает
3 секунды
13 RomaH
 
naïve
23.12.13
12:59
теперь вопрос
а как удалить/закрыть документы источники?
ДокументИсточник = КомОбъект.Application.Documents(1);
ДокументИсточник.Close(0);

грубо говоря - не помогает
14 RomaH
 
naïve
23.12.13
14:16
итог:
Функция ПечатьТрудовогоДоговораИзПриказа()

    Попытка
        АктивныйДокумент = ПолучитьМакет("МакетПриемник");    
    Исключение
        Сообщить(ОписаниеОшибки());
        Сообщить("Не удалось создать объект ворда");
        Возврат Неопределено;
    КонецПопытки;
    
    КомОбъект     = АктивныйДокумент.Получить();
    
    ДокументПриемник = КомОбъект;
    
    ЭтоПервыйдокумент = Истина;
    
    Для каждого СтрокаТЧ Из СсылкаНаОбъект.РаботникиОрганизации Цикл
        
        Состояние("Формируем трудовой договор " + СтрокаТЧ.Сотрудник);
        
        КомОбъект = ПечатьТрудовогоДоговора(СтрокаТЧ.Сотрудник);
        
        Если КомОбъект <> Неопределено Тогда
            
            ДокументИсточник = КомОбъект;
            
            ДокументИсточник.Paragraphs(1).PageBreakBefore = Истина;
            
            ДокументИсточник.Repaginate();
            
            КоличествоСтраниц = ДокументИсточник.BuiltInDocumentProperties(14).Value;
            
            Если КоличествоСтраниц%2 = 0 Then

            Иначе
                ДокументИсточник.Range().Collapse(0);
                НовыйПараграфИст = ДокументИсточник.Paragraphs.Add();
                НовыйПараграфИст.Range.InsertBreak(7);
            КонецЕсли;
            
            Если ЭтоПервыйдокумент Тогда
                НовыйПараграф = ДокументПриемник.Paragraphs(1);
            Иначе
                НовыйПараграф = ДокументПриемник.Paragraphs.Add();
            КонецЕсли;
            
            НовыйПараграф.Range().FormattedText = ДокументИсточник.Range().FormattedText;
            
            ЭтоПервыйдокумент = Ложь;
            
            ДокументИсточник.Close(0);

        КонецЕсли;
        
    КонецЦикла;
    
    Возврат ДокументПриемник;
    
КонецФункции
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший