Имя: Пароль:
1C
1С v8
Работа с таблицей Word из 1С
0 al_zzz
 
08.04.15
11:18
100500-тая тема на данную тему.
1. Не могу сообразить, как заполнить таблицу такого вида в шаблоне Word программно:
  http://snap.ashampoo.com/1EVkuilx
Код использую такой:
  Таблица = MSWord.ActiveDocument.Range().Tables.Item(1);
    НСтр = 2;
    Пока ВыборкаТовары.Следующий() Цикл
        Если НСтр > 2 Тогда
            //MSWord.ActiveDocument.ActiveWindow.Selection.InsertRowsBelow(1);
            //Таблица.InsertRowsBelow(1);
            Таблица.Rows.Add();
        КонецЕсли;
        Таблица.Cell(НСтр,1).Range().InsertAfter(СокрЛП(НСтр-1)); //НомСтр
        Таблица.Cell(НСтр,2).Range().InsertAfter(СокрЛП(ВыборкаТовары.Наименование));
        Таблица.Cell(НСтр,3).Range().InsertAfter(СокрЛП(ВыборкаТовары.Количество));
        Таблица.Cell(НСтр,4).Range().InsertAfter(СокрЛП(ВыборкаТовары.Цена));
        Таблица.Cell(НСтр,5).Range().InsertAfter(СокрЛП(Формат(ВыборкаТовары.Сумма-ВыборкаТовары.Сумма*ВыборкаТовары.ПроцентСкидкиНаценки/100,"ЧЦ=15; ЧДЦ=2")));//СуммаБезСкидки
        Таблица.Cell(НСтр,6).Range().InsertAfter(СокрЛП(ВыборкаТовары.ПроцентСкидкиНаценки));
        Таблица.Cell(НСтр,7).Range().InsertAfter(СокрЛП(ВыборкаТовары.Сумма));
        СуммаСкидки = СуммаСкидки + ВыборкаТовары.Сумма*ВыборкаТовары.ПроцентСкидкиНаценки/100;
        Итого = Итого + ВыборкаТовары.Сумма;
        НСтр = НСтр + 1;
    КонецЦикла;
  
  Но, как только доходит до 3-ей строки - происходит ошибка. Очевидно, что запись происходит в существующие строки таблицы, а мне надо вставлять строки с нужным форматированием. Как это сделать?

1.  И не могу найти пример, как вывести картинку в таблицу Word: http://snap.ashampoo.com/N9vXzhKf
Подскажите, как сделать сие?
Спасибо!
1 al_zzz
 
08.04.15
11:32
1. Сделал так пока - разделил таблицу на две. Но при выводе строка между ними. Некрасиво получается.
2 anatoly
 
08.04.15
11:48
на ИС есть как минимум 2 обработки для печати по шаблонам ворд с таблицами - обе проверял, все работает.
правда без вставки картинок...
3 DrShad
 
08.04.15
11:53
(1) сделай шрифт в промежуточной строке 1
4 DrShad
 
08.04.15
11:53
а вообще я таблицу заполнял через шаблоны текста
5 al_zzz
 
08.04.15
12:09
(3) Вот это уже получше. Теперь бы ещё с вставкой картинок разобраться...
6 DrShad
 
08.04.15
12:14
(5) ну картинки не вставлял, соррь
с удовольствием узнаю как это сделать
7 al_zzz
 
08.04.15
13:22
Нашел вот здесь: http://www.itland.ru/forum/index.php?showtopic=19216
такую процедуру:
Документ.Tables.Add(
        Selection.Range(),
        КоличествоСтрок+1, 3, 1, 1);
        Selection.Tables(1).Rows.AllowBreakAcrossPages = False;
        Selection.Tables(1).Rows.AllowBreakAcrossPages = False;
        
        //заполняем шапку
        Selection.Font.Bold = 1;
        Selection.ParagraphFormat.Alignment = 1;
        Selection.TypeText("Изображение");
        Selection.MoveRight ();
        Selection.Font.Bold = 1;
        Selection.ParagraphFormat.Alignment = 1;
        Selection.TypeText("Артикул");
        Selection.MoveRight ();
        Selection.Font.Bold = 1;
        Selection.ParagraphFormat.Alignment = 1;
        Selection.TypeText("Номенклатура");

        Selection.MoveRight (1,2);
        
        Таблица = Документ.Tables.Item(1);
        ИндексСтроки = 0;
        Пока Выборка.Следующий() Цикл
            Попытка
                ИндексСтроки=ИндексСтроки+1;
                Состояние ("Обрабатывает элемент "+ИндексСтроки+" из "+КоличествоСтрок);
                Если НЕ Выборка.ОсновноеИзображениеХранилище=Null Тогда
                    СоздатьВременнуюКартинку(Выборка.ОсновноеИзображениеХранилище);
                    Selection.InlineShapes.AddPicture(
                    "C:\TempImg.Jpeg",
                    False,//LinkToFile
                    True//SaveWithDocument
                    );
                КонецЕсли;
                Selection.MoveRight ();
                Selection.Range.Cells.VerticalAlignment=1;
                Если Выборка.Артикул=Null Тогда
                
                    Арт = "";
                
                Иначе
                
                    Арт = Строка(Выборка.Артикул);
                
                КонецЕсли;
                Selection.TypeText(Арт);
                Selection.MoveRight ();
                Selection.Range.Cells.VerticalAlignment=1;
                Selection.TypeText(Выборка.Ссылка.Наименование);
                Selection.MoveRight (1,2);
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;                
            
        КонецЦикла;
Не знаю, будет ли она работать у меня.
Переписал для своего случая вот так:
Процедура ДобавитьОписаниеОборудования(Документ, Selection)
    тз = Новый ТаблицаЗначений;
    тз.Колонки.Добавить("Номенклатура");
    тз.Колонки.Добавить("ПутьКФайлу");
    тз.Колонки.Добавить("Описание");
    Для Каждого стр из СсылкаНаОбъект.Товары Цикл
        Описание = стр.Номенклатура.ДополнительноеОписаниеНоменклатуры;
        Картинка = стр.Номенклатура.ОсновноеИзображение.Хранилище.Получить();
        Если Картинка <> Неопределено Тогда
            Картинка.Записать(КаталогВременныхФайлов()+стр.Номенклатура.Код+".jpg");
        КонецЕсли;
        Если ЗначениеЗаполнено(Описание) и ЗначениеЗаполнено(Картинка) Тогда
            ст = тз.Добавить();
            ст.Номенклатура = стр.Номенклатура;
            ст.ПутьКФаййлу  = ?(ЗначениеЗаполнено(Картинка),КаталогВременныхФайлов()+стр.Номенклатура.Код+".jpg","");
            ст.Описание     = Описание;
        КонецЕсли;    
    КонецЦикла;    
    Если тз.Количество()> 0 Тогда
        Документ.Tables.Add(
        Selection.Range(),
        КоличествоСтрок+1, 3, 1, 1);
        Selection.Tables(3).Rows.AllowBreakAcrossPages = False;
        Selection.Tables(3).Rows.AllowBreakAcrossPages = False;
        
        //заполняем шапку
        Selection.Font.Bold = 1;
        Selection.ParagraphFormat.Alignment = 1;
        Selection.TypeText("Изображение");
        Selection.MoveRight ();
        Selection.Font.Bold = 1;
        Selection.ParagraphFormat.Alignment = 1;
        Selection.TypeText("Артикул");
        Selection.MoveRight ();
        Selection.Font.Bold = 1;
        Selection.ParagraphFormat.Alignment = 1;
        Selection.TypeText("Номенклатура");

        Selection.MoveRight (1,2);
        
        Таблица = Документ.Tables.Item(1);
        ИндексСтроки = 0;
        Для Каждого Выборка из тз Цикл
            Попытка
                ИндексСтроки=ИндексСтроки+1;
                Состояние ("Обрабатывает элемент "+ИндексСтроки+" из "+КоличествоСтрок);
                Если ЗначениеЗаполнено(Выборка.ПутьКФайлу) Тогда
                    СоздатьВременнуюКартинку(Выборка.ОсновноеИзображениеХранилище);
                    Selection.InlineShapes.AddPicture(
                    Выборка.ПутьКФайлу,
                    False,//LinkToFile
                    True//SaveWithDocument
                    );
                КонецЕсли;
                Selection.MoveRight ();
                Selection.Range.Cells.VerticalAlignment=1;
                Если Не ЗначениеЗаполнено(Выборка.Описание) Тогда
                
                    Арт = "";
                
                Иначе
                
                    Арт = Строка(Выборка.Описание);
                
                КонецЕсли;
                Selection.TypeText(Арт);
                Selection.MoveRight ();
                Selection.Range.Cells.VerticalAlignment=1;
                Selection.TypeText(Выборка.Номенклатура.Наименование);
                Selection.MoveRight (1,2);
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;                
            
        КонецЦикла;    
    КонецЕсли;    
КонецПроцедуры    
Непонятно, что передавать в качестве  Selection...
8 al_zzz
 
08.04.15
13:25
В качестве переменной "Документ" передаю MSWord.ActiveDocument.Range()
9 al_zzz
 
08.04.15
14:35
Разобрался с этим моментом - в качестве selection необходимо использовать MSWord.ActiveDocument.Range().Application.Selection.
Вывести в таблицу получилось, только в самом начале. А мне надо в конце, после строки "Описание оборудования". Как мне туда спозиционироваться?
10 al_zzz
 
09.04.15
06:41
Нашел, в общем, как спозиционироваться на последнюю строку текущей страницы.
Вопрос: как спозиционироваться на последнюю строку последней заполненной страницы?
И ещё один важный вопрос: как изменить размеры выводимой картинки(сейчас она выводится как есть в базе)?
11 al_zzz
 
09.04.15
07:32
Всё. С позиционированием разобрался.
Осталось изменить размеры картинок.
Могу сжать картинки на этапе сохранения, но этот вариант не очень меня устраивает, так как там используются скрипты, а на их исполнение не всегда у пользователя хватает прав.
Как это сделать при помощи функций MS Word?
12 al_zzz
 
09.04.15
09:02
Вобщем, сделал через скрипты пока.
13 al_zzz
 
09.04.15
09:02
Всем спасибо за активную помощь и обсуждение!
AdBlock убивает бесплатный контент. 1Сергей