Имя: Пароль:
1C
1С v8
Печать из двух макетов в одном word-файле
0 fdv_83
 
16.03.23
13:51
Здравствуйте. Имеется команда печати документа "Кадровые изменения". Для каждой строки документа при печати открывается свой файл Word, причём в зависимости от условия используются 2 двоичных макета. Подскажите, пожалуйста, как сделать так, чтобы печать происходила в один документ word. Код прилагаю:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    СтруктураДокумента = ПолучитьСтруктуруДокументаНаСервере(ПараметрКоманды);
    Для ц = 0 По СтруктураДокумента.Количество() - 1 Цикл
        Попытка
            ПараметрыДокумента = СтруктураДокумента.Получить(ц);
            Word = Новый COMОбъект("Word.Application" );
            //Получение макета и каталога временных файлов
            Макет = МакетПолучить(?(ПараметрыДокумента.ДолжностьНовая <> ПараметрыДокумента.Должность, "Изменение должности", ""));
            //Создаем документ MS Word
            Если ЗначениеЗаполнено(Макет) Тогда    
                newDoc = Word.Documents.ADD(Макет);    
                //Замена опорных фраз данными из реквизитов документа
                Для Каждого Параметр Из ПараметрыДокумента Цикл
                    Замена = newDoc.Content.Find;
                    Если СтрДлина(СокрЛП(Строка(Параметр.Значение))) > 255 Тогда
                        ВыполнитьЗаменуСОграничениемДлиныСтроки(newDoc, "["+Параметр.Ключ+"]", СокрЛП(Строка(Параметр.Значение)));
                    Иначе
                        Замена.Execute("["+Параметр.Ключ+"]", , , , , , , , , СокрЛП(Строка(Параметр.Значение)), 2);
                    КонецЕсли;
                КонецЦикла;
                //Отображение документа
                Word.Visible = Истина;
                //Удаление временных файлов    
                УдалитьФайлы(Макет);
            КонецЕсли;
        Исключение
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Ошибка при запуске приложения: " + ОписаниеОшибки();
            Сообщение.Сообщить();
        КонецПопытки;
    КонецЦикла;
КонецПроцедуры


&НаКлиенте
Функция МакетПолучить(НаименованиеМакета = "")
    ИмяФайла = "";
    Файл = ПолучитьМакетНаСервере(НаименованиеМакета);
    ИмяФайла = ПолучитьИмяВременногоФайла(".doc");
    Файл.Записать(ИмяФайла);
    Возврат ИмяФайла;
КонецФункции

&НаСервере
Функция ПолучитьМакетНаСервере(НаименованиеМакета)
    Если НаименованиеМакета = "Изменение должности" Тогда
        Возврат Документы.КадровыеИзменения.ПолучитьМакет("ДополненияКТрудовымДоговорамWordДвоичныеДанныеИзмененияДолжностей");
    Иначе
        Возврат Документы.КадровыеИзменения.ПолучитьМакет("ДополненияКТрудовымДоговорамWordДвоичныеДанныеИзмененияОкладов");
    КонецЕсли;
КонецФункции
1 mikecool
 
16.03.23
14:11
newDoc = Word.Documents.ADD(Макет);     вынести за цикл
в цикле добавлять разрыв, если надо
2 fdv_83
 
16.03.23
14:14
(1) Но тут проблема в том, что мне нужно использовать 1 из 2-х макетов, по условию. Это я не понимаю, как сделать.
3 mikecool
 
16.03.23
14:16
тогда выводи во временный, потом программный копи-паст в результат
4 fdv_83
 
16.03.23
14:38
(3) Можете подсказать команды копи-паст?
5 Aleksey
 
16.03.23
14:52
(4) включи запись макроса скопируй, вставь и посмотри команды
6 Aleksey
 
16.03.23
14:54
7 Aleksey
 
16.03.23
14:55
ну или - всё уэе украдено до нас https://forum.infostart.ru/forum9/topic172178/
Закон Брукера: Даже маленькая практика стоит большой теории.