Пример создания динамической таблицы в шаблоне MS Office Word 2010 и вставка в него картинки

22.06.13

Интеграция - Загрузка и выгрузка в Excel

Обработка с открытым кодом, для формирования в шаблоне MS Office Word 2010  динамической таблицы по результату запроса и вставке в него картинки. Картинка и шаблон - также в макете обработки.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Обработка
.epf 101,78Kb
77 2 500 руб. Купить
Пример (все файлы в архиве)
.rar 181,84Kb
58 2 500 руб. Купить
шаблон ворд
.doc 35,50Kb
27 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Обработка с открытым кодом. В обработке имеется шаблон (в виде макета) MS Office Word 2010 с  таблицей, эта таблица в макете имеет одну строку данных и итоговую строку, при обходе результата запроса в эту таблицу добавляются новые строки данных перед итогами. Так же - пример вставки картинки в конец документа.

В шаблоне MS Office Word 2010 использованы ключевые параметры типа #Период#, которые ищутся и заменяются.

 

Вариант 2:

Здесь представлю вариант передачи заменяемых параметров через макрос.

Внимание:

  • при использовании данного варианта необходимо зайти в word включить работу vba (word 2010) см. картинку //infostart.ru/upload/iblock/560/dddd.png.
  • а также у переменной в коде "ТекстДляЗамены" длина не может превышать 255 знаков
Word = Новый COMОбъект("Word.Application");
Doc=Word.Documents.Add(ИмяФайла,0, 0);
Fnd = Word.ActiveDocument.Range().Find;

// Вставляем комментарий в котором укажем номер сделки и печатной формы

Попытка
    ФормаПроцесса.НадписьСостоянияПрогрессора = "Вывод примечания в шаблоне MS Word с информацией по печатной форме";
    ФормаПроцесса.Обновить();
    Документ_актив = Word.ActiveDocument();

    м_Selection = Word.Selection.Range;
    мКоммент = Документ_актив.Comments.Add(м_Selection);
    //мКоммент.ShowTip = Истина;
    мКоммент.Author = "Сысоев Павел";// строка (назначает автора примечанию, чтобы можно было делать отбор примечаний по автору. Автор всегда будет выводится, а здесь задается его представление)
    //мКоммент.Date = ТекущаяДата(); // дата
    мКоммент.Initial = "Сысоев ПС"; // строка (выводит текст в шапке примечания, ограничение 9 знаков)
    мКоммент.Range.Text = НазваниеПечатнойФормы + ДопИнформация;
Исключение

КонецПопытки;

ПримерМакроса = "Sub UPN_FormSdelki()";

 

СтруктураПечатнойФормы = Новый Структура;

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| КурсыВалют.Период КАК Период,
| КурсыВалют.Курс КАК Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта В(&Валюта)
| И КурсыВалют.Период МЕЖДУ &НачПериод И &КонПериод
|
|УПОРЯДОЧИТЬ ПО
| Период";

МВалюта = Новый Массив;
МВалюта.Добавить(Справочники.Валюты.НайтиПоКоду("840"));
Запрос.УстановитьПараметр("Валюта", МВалюта);
Запрос.УстановитьПараметр("НачПериод", НачалоДня(НачПериода));
Запрос.УстановитьПараметр("КонПериод", КонецДня(КонПериода));

Результат = Запрос.Выполнить().Выбрать();
СумммаИтог = 0;
сч=1;
Пока Результат.Следующий() Цикл
СтруктураПечатнойФормы.Вставить("Период"+сч);
СтруктураПечатнойФормы.Вставить("Курс"+сч);
СтруктураПечатнойФормы.Вставить("КурсПрописью"+сч);
СтруктураПечатнойФормы.Вставить("ИтогКурс");
СтруктураПечатнойФормы.Вставить("ИтогКурсПрописью");


СтруктураПечатнойФормы["Период"+сч] = Формат(Результат.Период,"ДФ=dd.MM.yyyy");
СтруктураПечатнойФормы["Курс"+сч] = Результат.Курс;
СтруктураПечатнойФормы["КурсПрописью"+сч] = ЧислоПрописью(Результат.Курс,?(Результат.Курс=Окр(Результат.Курс),"Л = ru_RU; НД=Ложь ДП=Ложь","Л = ru_RU; ДП=Истина"),"рубль ,рубля,рублей,м,копейка,копейки,копеек,м,2");

КонецЦикла;

 

ПримерМакроса = ПримерМакроса + Символы.ПС +
"
| ' выводим примечание с информацией по сделке и печатной форме
| '
| '
| ActiveWindow.ActivePane.VerticalPercentScrolled = 0
| Selection.Comments.Add Range:=Selection.Range
| Selection.TypeText Text:= """ + "Номер сделки: Сделка " + """

| Selection.TypeParagraph
| Selection.TypeText Text:= """ + "Код печатной формы: 1" + """
| Selection.TypeParagraph
| Selection.TypeText Text:= """ + "Название печатной формы: сделка"  + """
| Selection.TypeParagraph
| Selection.TypeParagraph
| Selection.TypeParagraph
| Selection.TypeText Text:= ""Для того чтобы не печатать это примечание:""
| Selection.TypeParagraph
| Selection.TypeText Text:= ""Просто удалите его (щелкнув на нем правой клавишей мышки и выбрать """"удалить примечание"""")""
| Selection.TypeParagraph
|
| ' перейдем с примечания к тексту
| '
| Selection.EscapeKey
|
|";

 

КолвоПараметров = СтруктураПечатнойФормы.Количество();
ТекНомерПараметра = 0;

 


Для Каждого Реквизит из СтруктураПечатнойФормы Цикл

    ТекНомерПараметра = ТекНомерПараметра + 1;

    Если НЕ ТипЗнч(Реквизит.Значение) = Тип("Картинка") Тогда


        ТекстДляЗамены = СокрЛП(Реквизит.Значение);
        КолВоВхожденийПереносаСтроки = СтрЧислоВхождений(СокрЛП(Реквизит.Значение), Символы.ПС); // обрабатываем текст как (ОАО "СБЕРБАНК РОССИИ")
        Если КолВоВхожденийПереносаСтроки > 0 Тогда
            ТекстДляЗамены = СтрЗаменить(ТексДляЗамены, Символы.ПС, "^p"); //"^l"
        КонецЕсли;

        КолВоВхожденийКавычек = СтрЧислоВхождений(СокрЛП(Реквизит.Значение),""""); // обрабатываем текст как (ОАО "СБЕРБАНК РОССИИ")
        Если КолВоВхожденийКавычек > 0 Тогда
            ТекстДляЗамены = СтрЗаменить(ТекстДляЗамены, """", """""");
        КонецЕсли;


        ПримерМакроса = ПримерМакроса + Символы.ПС +
        "
        |Selection.Find.ClearFormatting
        | Selection.Find.Replacement.ClearFormatting
        | With Selection.Find
        | .Text = """ + "#"+Реквизит.Ключ+"#" + """
        | .Replacement.Text = """ + ТекстДляЗамены + """
        | .Forward = True
        | .Wrap = wdFindContinue
        | .Format = False
        | .MatchCase = False
        | .MatchWholeWord = False
        | .MatchWildcards = False
        | .MatchSoundsLike = False
        | .MatchAllWordForms = False
        | End With
        | Selection.Find.Execute Replace:=wdReplaceAll
        | ";

////КонецЕсли;

    Иначе


        ИмяФайлаКартинки = ПолучитьИмяВременногоФайла();
        Картинка =Реквизит.Значение;
        Картинка.Записать(ИмяФайлаКартинки);
        ПримерМакроса = ПримерМакроса + Символы.ПС +
        "
        |'
        |' Вставяем картинку объекта
        |'
        |'
        |Selection.Find.ClearFormatting
        |With Selection.Find
        | .Text = ""#КартинкаПланОбъекта#""
        | .Replacement.Text = ""
        | .Forward = True
        | .Wrap = wdFindContinue
        | .Format = False
        | .MatchCase = False
        | .MatchWholeWord = False
        | .MatchWildcards = False
        | .MatchSoundsLike = False
        | .MatchAllWordForms = False
        |End With
        |Selection.Find.Execute
        |Selection.InlineShapes.AddPicture FileName:= _
        |""" + ИмяФайлаКартинки + """, LinkToFile:=False, _
        | SaveWithDocument:=True
        |ActiveWindow.ActivePane.HorizontalPercentScrolled = 6
        |
        |";
    КонецЕсли;
КонецЦикла;

 

ТекстМакроса = ПримерМакроса + Символы.ПС + "End Sub";

 

VBComponents = Word.ActiveDocument.VBProject.VBComponents;
Count = VBComponents.Count();
VBComponents.Add(1);
VBComponents.Item(Count + 1).CodeModule.InsertLines(1, ТекстМакроса);
Word.Application.Run("UPN_FormSdelki");

 

Word.Caption = " " + Строка(Сделка) + " - (" + УправлениеСделками.УдалениеЛидирующихНулейВНомере(Сделка.ОбъектСтроительства.МакетыПечатныхФорм.Найти(GUID,"GUID").МодульПечатнойФормы.Код) + ") " + Сделка.ОбъектСтроительства.МакетыПечатныхФорм.Найти(GUID,"GUID").МодульПечатнойФормы.Наименование; //ActiveDocument.FullName

//Word.PrintOut(); // распечатать док

Word.Visible = 1;
Word.Activate();
Word.WindowState = 2; // wdWindowStateMinimize (с) статья _http://forum.foxclub.ru/read.php?32,177182,258927
Word.WindowState = 1; // wdWindowStateMaximize

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь 1С:Предприятие 8 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    30514    42    49    

46

SALE! 30%

Загрузка и выгрузка в Excel Оптовая торговля Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 2.0 1С:Бухгалтерия 3.0 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 1.х 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 10 1С:Управление торговлей 11 1С:Розница 2 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С. Забудьте о ручном вводе: загружайте документы из Excel в 1С за секунды! Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл эксель, документ 1С и нажимаете кнопку "Загрузить"

8000 7200 руб.

09.11.2016    272338    1202    957    

1113

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка номенклатуры из файлов Excel (xls, xlsx, ods, csv, mxl) в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

12444 руб.

29.10.2014    231175    743    532    

495

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 8 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

122000 руб.

19.08.2020    29199    27    3    

28

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (Базовая, ПРОФ, КОРП, ФРЕШ (тонкий клиент)).

17080 руб.

19.12.2016    53529    121    107    

83

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

84000 руб.

05.10.2022    13106    14    8    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. trunix 19.10.11 03:58 Сейчас в теме
Надо попробовать.
2. jko 19.10.11 06:14 Сейчас в теме
Прикольно. Скоро будем делать, что то подобное на 2007 офисе. Спасибо.
3. ARL 317 19.10.11 09:50 Сейчас в теме
Полезный пример. Всегда может пригодиться.
4. koka 87 19.10.11 10:01 Сейчас в теме
Спасибо. Познавательно для создания документов из 1С.
5. galyausik1 4 19.10.11 10:21 Сейчас в теме
С удовольствием пользуюсь вашим примером. Спасибо, познавательно.
6. ph_1984 21 19.10.11 16:11 Сейчас в теме
А чем ваша разработка отличается от подсистемы печати в библиотеке стандартных подсистем? В ней так же есть функция формирования документа в Word по шаблону.
7. pavel_pss 291 19.10.11 17:38 Сейчас в теме
Guran пишет:
А чем ваша разработка отличается от подсистемы печати в библиотеке стандартных подсистем? В ней так же есть функция формирования документа в Word по шаблону.


Я не знаю, что там за функция, поэтому не знаю их разницу, но у меня была задача формировать word и я ее решил на 1с8,1 так как это сделано в этой обработке. В ней так же было решение именно добавления строки для word 2010, может в 2007 она тоже будет работать (не помню проверял или нет)
8. gr0ck 20.10.11 08:45 Сейчас в теме
Надо будет посмотреть
9. orsprog 20.10.11 09:33 Сейчас в теме
спасибо...обязательно воспользуюсь этим примером...позновательно и полезно...в ближайшем будущем пригодится
10. Ihty 226 21.10.11 13:05 Сейчас в теме
Супер. Мне понравилось.
11. zag2art 23.10.11 19:25 Сейчас в теме
(10) +100 присоединяюсь
12. igor_1c 18 25.10.11 23:26 Сейчас в теме
я сейчас разрабатываю аналогичную универсальную систему систему печати MSWord из шаблонов. Для этого пришлось сделать справочник шаблонов, и обработку "Печать шаблонов" только у меня вместо # угловые скобки < >. Работает два варианта: переменные в <> и закладки. Как нить выложу свою систему, когда пройдет полный контроль на УПП. С помощью её печатают договора, доп. соглашения с таб. частью, сейчас пошли печатать кадровые документы (очень много заморочек с ними)
13. ann_ver 26.10.11 15:24 Сейчас в теме
14. Zya 21.02.12 22:43 Сейчас в теме
Спасибо большое за обработку

Интересует только еще один момент, в каждой ячейке таблицы после вывода #Переменных#
автоматически к тексту добавляется символ возврат каретки.
Может кто-нибудь знает, как этого избежать? А-то сильно увеличивается размер таблицы и получается неоптимальный расход бумаги..
15. pavel_pss 291 22.02.12 00:12 Сейчас в теме
(14) Zya,
по идее такого быть не должно, если ты сама не передаешь вместе со строкой возврат каретки. Попробуй либо сокрЛП(твойТекст) попробуй отформатировать свой шаблон ворда, тоесть проверить чтобы там небыло возврата каретки. Точнее не скажу как то не обращал внимание и пользователи о подобном не говорили. Завтра при случае просмотрю у себя.
16. Abadonna 3977 23.07.12 06:54 Сейчас в теме
(0) Автор, спасибо, конечно, но: попросил меня один нищеброд скачать, пришлось аж три файла качать :(
Мог бы и в один архив все засунуть.
17. пользователь 27.11.12 12:44
Сообщение было скрыто модератором.
...
18. pavel_pss 291 21.02.13 16:38 Сейчас в теме
не забываем ставить плюсы
Для отправки сообщения требуется регистрация/авторизация