Работа с Word из 1С. Работа с таблицами

04.12.13

Учетные задачи - Печатные формы

Одно дело, когда заранее известно количество строк в таблице. И решение, соответственно, тоже простое: создать в шаблоне таблицу и заполнить переменные программно.
Но вот совсем другой подход, когда количество строк или колонок неизвестно.
В этом примере продемонстрировано, как можно создать табличную часть в документе Word.
Выбор, какой из перечисленных далее методов использовать, за Вами.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Небольшой пример
.epf 24,57Kb
741
741 Скачать (1 SM) Купить за 1 850 руб.

Одно дело, когда заранее известно количество строк в таблице. И решение, соответственно, тоже простое: создать в шаблоне таблицу и заполнить переменные программно. Ссылка на данный пример //infostart.ru/public/18940/

Но вот совсем другой подход, когда количество строк или колонок неизвестно.

История "Как я к этому пришел"

Появилась необходимость распечатывать договора по каждому контрагенту, а как известно договор может быть 1 или несколько.

Тогда, еще в 2006 году вопрос решился 5 шаблонами, в табличных частях которых было от 1 до 5 строк (ограничились 5 договорами). Вопрос решился и забылся. Но вот вопрос стал актуален по причине печати нового договора, в котором задействована номенклатура, а количество строк ведь может переваливать добрую сотню наименований. И следовательно  - выход в создании динамической таблицы в шаблоне Word, который и описан двумя самыми простыми способами.

Есть 2 подхода к созданию таблицы.

1) Вам нужна таблица с равной шириной колонок, так сказать созданная автоматически.

2) У вас есть шаблон таблицы (только шапка и 1 строка).

Код создания таблицы с автоформатом.

Процедура СоздатьПример1(Кнопка)
    НовоеНапоминание = ПолучитьМакет("Пример1");

    Массив = Новый Массив(5);//сделаем таблицу из 5 строк + шапка

    MsWord = НовоеНапоминание.Получить();


    //макет является ActiveDocwment с загруженым в него Word-файлом
    Попытка
        //Вставление таблицы с 10 строки
        MsWord.Application.Visible = 0;
        Word = MsWord.Application;
        Док=Word.Documents(1);
        Док.Activate();

        //подготовка таблицы:
        //Вариант №1 Самый простой
        Word.Selection.MoveDown(,10); //10 строка - первая строка таблицы
        //Конец Варианта №1

        //Вариант №2
        Word.Bookmarks("ff").Select(); //Где ff - это набор любых символов, вплоть до непечатаемых;)
        //Конец Варианта №2
 
        Табл= Word.Selection.Range;
        //Формируем заголовок:
        Табл.InsertAfter("Сумма*Валюта*Назначение*Дата долга*Вид документа*Номер документа* *Дата оплаты");
        Табл.InsertParagraphAfter();
        //сама таблица
        Для й = 1 по Массив.Количество() Цикл
            Табл.InsertAfter(массЗнчСтрокиТЧ[0]+"*"+массЗнчСтрокиТЧ[1]+"*"+массЗнчСтрокиТЧ[2]+"*"+массЗнчСтрокиТЧ[3]+"*"+ массЗнчСтрокиТЧ[4]+ "*"+массЗнчСтрокиТЧ[5]+ "*"+массЗнчСтрокиТЧ[6]+ "*"+массЗнчСтрокиТЧ[7]);
            Табл.InsertParagraphAfter();
        КонецЦикла;

        Табл.ConvertToTable("*");

        //Происходит конвертация строки в таблицу

        //не нравятся звездочки - используйте другой символ
        Док.Tables(1).AutoFormat(1);

        ПечатныйНомер = "-"+Формат(ТекущаяДата(),"ДФ=yyyy.MM.dd")+"-"+Формат(ДатаОтчета,"ДФ=yyyy.MM.dd");
        Файл = КаталогВременныхФайлов() + "\" + ПечатныйНомер + ".doc";

        Док.SaveAs(Файл);
        Док.Close(0);

        //МассивДокументов.Добавить(Файл);  //добавлял в массив путь к файлу и после всех манипуляций открывал каждый файл
        ЗапуститьПриложение("""" + Файл + """");

    Исключение
        Сообщить(ОписаниеОшибки());
        Word.Quit();
    КонецПопытки;

КонецПроцедуры



Код создания таблицы с наследуемым форматом.

Процедура СоздатьПример2(Кнопка)
    НовоеНапоминание = ПолучитьМакет("Пример2");

    Массив = Новый Массив(5);//добавим 4 строки

    MsWord = НовоеНапоминание.Получить();
    //макет является ActiveDocwment с загруженым в него Word-файлом
    Попытка

        MsWord.Application.Visible = 0;
        Word = MsWord.Application;
        Док=Word.Documents(1);
        Док.Activate();


        Если Массив.Количество()>1 Тогда
            //Переместиться вниз на 10 строк от начала документа
            Word.Selection.MoveDown(,10); //10 строка - первая строка таблицы
            //назад на 1 символ (окончание строки таблицы)
            Word.Selection.MoveLeft(,1);
            //кво документов которые необходимо забить в табличную часть
            Word.Selection.InsertRows(Массив.Количество()-1);

            Word.Selection.MoveLeft(,1);
            Для й = 11 по Массив.Количество()+9 Цикл
                ЗаполнитьСтрокуТЧ(0,Word);
                Word.Selection.MoveRight(,1);
            КонецЦикла;
        КонецЕсли;

        ПечатныйНомер = "-"+Формат(ТекущаяДата(),"ДФ=yyyy.MM.dd")+"-"+Формат(ДатаОтчета,"ДФ=yyyy.MM.dd");

        //Таблицу заполнять не буду, только шапку

        Замена = Док.Content.Find;
        Замена.Execute("", Ложь, Истина, Ложь, , , Истина, , Ложь, "ООО 'Пупкин inc.'");

        Замена = Док.Content.Find;
        Замена.Execute("", Ложь, Истина, Ложь, , , Истина, , Ложь, Формат(ТекущаяДата(),"Л=uk; ДЛФ=D"));

        Замена = Док.Content.Find;
        Замена.Execute("", Ложь, Истина, Ложь, , , Истина, , Ложь, ПечатныйНомер );

        Файл = КаталогВременныхФайлов() + "\" + ПечатныйНомер + ".doc";

        Док.SaveAs(Файл);
        Док.Close(0);

        //МассивДокументов.Добавить(Файл);  //добавлял в массив путь к файлу и после всех манипуляций открывал каждый файл
        ЗапуститьПриложение("""" + Файл + """");
    Исключение
        Сообщить(ОписаниеОшибки());
        Word.Quit();
    КонецПопытки;

КонецПроцедуры

Процедура ЗаполнитьСтрокуТЧ(знчЭл,Word)

    Если знчЭл массЗнчСтрокиТЧ.Количество()-1 Тогда
        текЭлем = массЗнчСтрокиТЧ[знчЭл];
        Rng = Word.Selection.Range;
        Rng.InsertAfter(текЭлем);
        ДлинаЗнч = СтрДлина(текЭлем)+1;

        Word.Selection.MoveRight(,ДлинаЗнч);

        Если знчЭл < массЗнчСтрокиТЧ.Количество()-1 Тогда
            знчЭл = знчЭл + 1;
            ЗаполнитьСтрокуТЧ(знчЭл,Word);
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры


word таблицы печать создание

См. также

SALE! 15%

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

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

6000 руб.

09.11.2016    242095    1114    908    

1044

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    19071    51    19    

83

Печатные формы Взаиморасчеты Оптовая торговля Производство готовой продукции (работ, услуг) Акт сверки Бухгалтер Пользователь Оперативный учет Управляемые формы 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Задайте для каждой организации свою печать и для каждого физического лица свою подпись. Выберите в документе печатную форму "... с печатью и подписью" - и автоматически сформируется табличный документ с печатью и подписями той организации и ответственных лиц, которые указаны в документе.

14400 руб.

13.03.2018    62791    222    79    

120

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

Программа для автоматизации учета путевых листов в 1С - расширение, добавляющее в конфигурацию "Комплексная автоматизация", документ Путевой лист и печатные формы установленных образцов для легковых и грузовых авто, расчет и списание нормативного количества топлива, отчет "Реестр путевых листов" с отбором по автомобилю и по водителю (через настройки) Позволит контролировать расход топлива, потому что сразу будет виден сверхнормативный расход.

13200 руб.

27.06.2023    4872    16    2    

17

Печатные формы Производство готовой продукции (работ, услуг) Бухгалтер Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Бухгалтерия 3.0 Строительство Россия Бухгалтерский учет Платные (руб)

Откройте для себя заполнение КС-2 и КС-3 в "1С:Бухгалтерия 3.0". Вы получаете удобство, скорость и систему, чтобы заполнить, распечатать и сохранить формы КС-2 и КС-3 из документов "Оказание производственных услуг" или "Реализация товаров услуг". Вы можете заполнить дополнительную информацию о материалах из документов "Требование-накладная" и указать сведения, которые не предусмотрены типовой конфигурацией "1С:Бухгалтерия 3.0". Так же доступно множество настроек для формирования КС-2 и КС-3.

4560 руб.

13.02.2019    102016    461    45    

444

Печатные формы Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Транспорт, автопарки, такси Бухгалтерский учет Платные (руб)

Учет путевых листов выполнен в виде расширения. Предназначен для учета путевых листов в конфигурации БП 3.0., УТ 11.5 и КА 2.5 Печатная форма: Типовая межотраслевая форма № 3. Утверждена постановлением Госкомстата России от 28.11.97 № 78. Типовая межотраслевая форма № 4-П от 18.09.2008 г. N 152 с учетом изменений указанных в Приказе Министерства транспорта Российской Федерации №368 от 11 сентября 2020 г. №368, Типовая межотраслевая форма № ЭСМ-7, и др. ЭСМ-2, 4-С, 3 спец., 6 спец., ПЛ для Автомобильного крана.

3600 руб.

14.10.2019    40276    276    216    

181

Печатные формы Учет рабочего времени Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Бухгалтерия 3.0 Транспорт, автопарки, такси Россия Бухгалтерский учет Платные (руб)

Программа «Путевой лист грузового автомобиля в 1С:Бухгалтерия 3.0» - заполнить, распечатать, сохранить. Вы можете не только внести всю информацию и распечатать путевой лист грузового автомобиля в 1С, но и повторно использовать ранее введенные данные спустя любое время - данные путевого листа водителя сохраняются в "1С:Бухгалтерия 3.0" без каких-либо доработок.

4500 руб.

23.08.2019    58970    185    64    

179

Печатные формы Логистика, склад и ТМЦ Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Обработки для "1С:Бухгалтерия предприятия 3.0", которые формируют акты МХ-1 и МХ-3 для документов "ПоступлениеТоваровУслуг", "Реализация товаров услуг", "Возврат товаров поставщику", "Передача материалов в эксплуатацию" соответственно. Так же можно сформировать акты с факсимиле, которая загружена в 1С:Бухгалтерия предприятия 3.0.

3720 руб.

18.02.2019    65857    222    15    

179
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. JIGIT 24.02.10 12:37 Сейчас в теме
По возможности - пример...
Заранее благодарен
2. endym 215 24.02.10 16:33 Сейчас в теме
Мне не сложно;) будет вечерком.
3. endym 215 24.02.10 19:07 Сейчас в теме
Добавил простенький примерчик. Жду комментов))))
4. Evg-Lylyk 4951 24.02.10 19:48 Сейчас в теме
Покрасьте код http://infostart.ru/public/19856/
еще скриншоты бы не помешали
5. endym 215 25.02.10 10:11 Сейчас в теме
Код подкрашу, а вот скриншоты к чему? это статья.
6. Душелов 4021 25.02.10 10:22 Сейчас в теме
(5) На статью не тянет.
7. endym 215 25.02.10 10:31 Сейчас в теме
Это пример, часть работающего кода. Решил поделиться с теми, кому это может пригодиться. Зачем выпендриваться и придираться к словам? (6)
Prad2002; user925161; user1337521; Eillecho; Teut_Vlad; Alien_job; davdykin; adhocprog; +8 Ответить
8. Evg-Lylyk 4951 25.02.10 15:45 Сейчас в теме
(7) Материал нормальный только пожалуйста оформите нормально
Раскрасте с помощью обработки http://infostart.ru/public/19856/
А скриншоты нужны обязательно т.к. многие и смотреть не будут код и обработку, а плюс поставят за полезный пример (я бы например так и сделал т.к. для меня сейчас материал не актуален, но может потом понадобится). Еще желательно ссылочки на подобные обработки например те, которые работают с вордом.
9. endym 215 25.02.10 16:06 Сейчас в теме
(8) я то и раскрасил вот той обработкой.
а что показывать в скриншотах? листочек word? ;) это же пример.. так сказать заготовка.
Если уж так надо - могу сделать 4 скрина: 2 (по 1 на каждый вариант) "до" и "после".

Причина почему я выложил - нигде толком не было объяснения как же быть в ситуации когда нужна таблица в договоре, а количество строк/столбцов варьируется.

З.Ы. подобные ссылки видны справа.

использовал материал команд VBA для Word.
10. Душелов 4021 25.02.10 16:45 Сейчас в теме
(7) На момент написания комментария кода не было.
А было 5 строк текста и приложенная обработка - это больше к "программе" относилось, чем статье. И последите за словами, перед Вами никто не "выпендривался"
11. endym 215 25.02.10 17:07 Сейчас в теме
(10) Изначально выложил только код.
После попросили (1) пример, для чего прикрепил обработку.
12. Поручик 4667 26.02.10 16:33 Сейчас в теме
Автор, глянь на это
http://infostart.ru/public/18940/
В своё время здорово выручила.
13. endym 215 01.03.10 11:53 Сейчас в теме
(12) видел, и что? это готовый шаблон, который надо заполнять ручками. а если не знать сколько реквизитов, т.е. выбирать через * все поля? как тогда?

в данном примере(если можно так назвать) , повторюсь, описывается возможность создания строк в ЛЮБОМ МЕСТЕ даже не зная сколько строк выйдет всего.

Если есть пожелания - выслушаю. ссылку добавлю в шапку.
57. KostikHvostik 15.05.23 19:17 Сейчас в теме
(13) Здравствуйте такой вопрос, а как можно форматировать конкретные ячейки, строки или столбцы? Добавить жирность или шрифт увеличить.
14. KVS 15.09.11 15:58 Сейчас в теме
Полезный пример. Спасибо
15. Boroda 90 10.10.11 12:04 Сейчас в теме
Спасибо! Пример очень пригодится и в качестве ученого материала. и в качестве его практической реализации в отчётах, которых последнее время треуется всё больше и сложнее.
16. Vovanich 19.10.11 19:12 Сейчас в теме
{ВнешняяОбработка.ПечатьАктаНаСписание.МодульОбъекта(225)}: Ошибка при вызове метода контекста (InsertRows): Произошла исключительная ситуация (Microsoft Word): Метод или свойство недоступны, поскольку некоторые или все объекты не ссылаются на таблицу. Как раз нужно сделать ВПФ Требования накладной в макете Ворд. Вставил твой код и вот такая ошибка.
17. endym 215 20.10.11 16:05 Сейчас в теме
(16) Очень интересно. хотелось бы узнать как появилась такая ошибка. Можно по-подробнее?
18. Vovanich 20.10.11 20:05 Сейчас в теме
Сорри...Вопрос снят таблицу в макете разместил не там где надо вот он и поругался.
19. Vovanich 20.10.11 20:15 Сейчас в теме
Материал очень полезный, но пожалста можно привести пример кода который будет в создаваемую таблицу в макете запихивать данные из моей ТабЗнач.В общем задача такая сделать ВПФ списания материалов из документа Требование накладная. Запросом все данные получил нарисовал стандартный табличный макетик, но заказчик хочет чтоб в Ворде это все выводилось..Если не трудно пособите.
20. endym 215 21.10.11 18:35 Сейчас в теме
(19)
не трудно, надо только ваши исходники;))
21. Vovanich 21.10.11 20:30 Сейчас в теме
куда обработку положить?или прям в сообщение код вставить?
Прикрепленные файлы:
ПечатьАктаНаСписаниеПечФорма_Для 8.2.epf
adhocprog; +1 Ответить
22. endym 215 15.11.11 18:36 Сейчас в теме
(21)весь в работе.
Сегодня посмотрел обработку по печати Акта.
А где Ваш макет word'овский? Ведь ресурс чтобы помогать а не делать за кого-то работу)
23. kuz.mina 106 22.11.11 17:10 Сейчас в теме
Спасибо за материал! но у меня возникла проблема:
В документе 5 листов, таблица на последнем(150 строка), но дальше чем на 44 строке(последняя строка первого листа) программа не видит таблицу:
{ВнешняяОбработка.Договор_поставки.МодульОбъекта(363)}: Ошибка при вызове метода контекста (InsertRows): Произошла исключительная ситуация (Microsoft Word): Метод или свойство недоступны, поскольку некоторые или все объекты не ссылаются на таблицу.
Как добавить таблицу на последний лист?
24. endym 215 23.11.11 11:35 Сейчас в теме
(23)Как добавить таблицу на последний лист?
Можно воспользоваться "шаблоном таблицы" или если используете таблицу с автоформатом - тогда перейти на последнюю страницу командой контрл+ енд
25. kuz.mina 106 23.11.11 20:11 Сейчас в теме
(24) я как раз и делаю через шаблон. если таблица находится не на первой странице, программа ее не находит
26. endym 215 24.11.11 12:27 Сейчас в теме
(25) Значит word не находит текст для замены, хоть на 99 странице будет текст в таблице.
данный механизм успешно работает при заполнении договоров купли-продажи в 15 и более листов)
27. stanru2 25.11.11 12:54 Сейчас в теме
Добрый день!
Спасибо за полезный пример, мне он помог.
По второй части хочу уточнить вот какой момент.
Если документ ворд состоит из некоего текста и шаблона таблицы, и текст динамически генерирует одинэсом, то заранее неизвестно, в каком месте документа будет таблица. Поэтому использовать

Word.Selection.MoveDown(,10); //10 строка - первая строка таблицы

не получится. Предлагаю поставить в первой пустой ячейке таблицы закладку, назвать ее, к примеру, ff и использовать так:

Word.Bookmarks("ff").Select();

ЗЫ и строку в таблице можно добавлять по мере необходимости :) Но это вкусовщина уже, работает и так, и эдак.
freeek; gely; endym; Kamikadze; monkbest; kuz.mina; +6 Ответить
28. endym 215 25.11.11 13:23 Сейчас в теме
(27)Полностью согласен, но! в моем примере таблица на десятой строке;)
можно даже вставить непечатаемый символ и отслеживать его. Мой пример не является аксиомой, а лишь механизмом для дальнейшего развития темы;)

UPD: (27) добавил в шапке в первом примере ;)
29. stanru2 25.11.11 13:44 Сейчас в теме
(28) и этот пример очень полезен! Пожалуй, один из самых наглядных среди n страниц поиска яндекса. Мне ранее не требовалось делать экспорт в вород, благодаря примеру разобрался быстро.
Можно еще в конце статьи добавить ссылок на объектную модель ворда.

А не подскажете, есть ли где пример "пряморукого" импорта из ворда (надо импортировать не тупо текст, текст получается в одном свойстве. Надо анализировать формат текста и в соотв. с ним разносить строки по реквизитам)? Перерыл пол-гугла, не нашел ничего толкового. В результате сделал перебор текста построчно через paragraphs. В каждом параграфе у первого слова проверяется формат, и дальше уже дело техники. Работает прямо скажем небыстро :( А хочется сделать максимально хорошо.

	тд = новый ТекстовыйДокумент;
	текст = док.Content.FormattedText;
	
	ЭлементыФормы.Индикатор1.МаксимальноеЗначение = текст.paragraphs.Count;
	
	
	для с = 1 по ЭлементыФормы.Индикатор1.МаксимальноеЗначение цикл
		
		ЭлементыФормы.Индикатор1.Значение = с;
		текСтр = текст.paragraphs(с).Range.Text;
		если (текст.paragraphs(с).Range.Words(1).Underline = 1) тогда
			текСлово = сокрлп(текст.paragraphs(с).Range.Words(1).Text);
			если (текСлово<>"") и (текСлово<>Символы.ВК) тогда
				текСтр = "$"+текСтр;
			КонецЕсли;
		КонецЕсли;
		тд.ДобавитьСтроку(текСтр);
		
	КонецЦикла;
Показать
adhocprog; +1 Ответить
33. endym 215 30.11.11 16:30 Сейчас в теме
(29) я уже где-то встречал парсер ворда, думаю что он не сложнее парсера mt940 и подобных форматов;)
у Word'a есть команды на VBA, которыми можно позиционироваться на каждом элементе, будь то слово, таблица, рисунок...
34. stanru2 30.11.11 17:46 Сейчас в теме
(33) у меня определенные трудности были не с тем, как обработать данные, а с тем, как их получить :) Объектная модель ворда для меня непривычна и незнакома, вот и сложности возникли :)
52. pyrkin_vanya 497 30.11.16 13:37 Сейчас в теме
(27) не получается определить закладку. У меня пишет, что метод объекта не обнаружен Bookmarks. Попробовал заменить в вашей обработке, тоже самое. Может можно как-то еще определить с какой строки начинается таблица? Или может я просто не правильно пишу?
Word.Bookmarks("ff").Select();
53. endym 215 30.11.16 15:53 Сейчас в теме
(52) "ff" это любой текст.
Можете вставить хоть "Тут должна быть таблица"
и в макете эта фраза должна присутствовать.

А какой офис установлен?
54. pyrkin_vanya 497 30.11.16 20:27 Сейчас в теме
(53) я уж не совсем дурачок :). Я создал закладку на первой строке таблицы с названием ff. Офис 16 года. Не работает. Если честно, то метод слишком запутан. Я реализовал по-другому. Все чудесно работает. Но у меня четкое количество колонок. Хотя, думаю, если поковыряться то можно и произвольное сделать :)
	НомерТаблицы = 1;
	ТаблицаТоваров = Word.ActiveDocument.Tables(НомерТаблицы);
	Сч = 1;
	Для каждого ТекСтрока_Товар Из СсылкаНаДокумент.Товары Цикл
		Сч = Сч + 1;
		СтрокаТаблицы = ТаблицаТоваров.Rows.Add();
		
		// Номенклатура
		Word.Application.ActiveDocument.Tables(НомерТаблицы).Rows(Сч).Cells(1).Range.Text = Строка(ТекСтрока_Товар.Номенклатура);
		// ЕдИзм
		Word.Application.ActiveDocument.Tables(НомерТаблицы).Rows(Сч).Cells(2).Range.Text = Строка(ТекСтрока_Товар.Номенклатура.ЕдиницаИзмерения);
		// КолВо
		Word.Application.ActiveDocument.Tables(НомерТаблицы).Rows(Сч).Cells(3).Range.Text = Строка(Формат(ТекСтрока_Товар.КоличествоУпаковок, "ЧДЦ=; ЧГ=0"));
		// Цена
		Word.Application.ActiveDocument.Tables(НомерТаблицы).Rows(Сч).Cells(4).Range.Text = Строка(Формат(ТекСтрока_Товар.Цена, "ЧЦ=15; ЧДЦ=2"));
		// Сумма
		Word.Application.ActiveDocument.Tables(НомерТаблицы).Rows(Сч).Cells(5).Range.Text = Строка(Формат(ТекСтрока_Товар.Сумма, "ЧЦ=15; ЧДЦ=2"));
		
		// выделяем область яцеек с 1 по 5 для всех строк убираем шрифт "Жирный"
		Word.Application.ActiveDocument.Range(Word.Application.ActiveDocument.Tables(НомерТаблицы).Cell(Сч,1).Range.Start,Word.Application.ActiveDocument.Tables(НомерТаблицы).Cell(Сч,5).Range.End).Font.Bold = Ложь;
		
		// выделяем область яцеек с 1 по 1. Параметр варьируется от 0 до 3. (левый край, центр, правый край, по ширине  соответственно). Номенклатура
		Word.Application.ActiveDocument.Range(Word.Application.ActiveDocument.Tables(НомерТаблицы).Cell(Сч,1).Range.Start,Word.Application.ActiveDocument.Tables(НомерТаблицы).Cell(Сч,1).Range.End).ParagraphFormat.Alignment = 0;
		
		// выделяем область яцеек с 1 по 1. Параметр варьируется от 0 до 3. (левый край, центр, правый край, по ширине  соответственно). Номенклатура
		Word.Application.ActiveDocument.Range(Word.Application.ActiveDocument.Tables(НомерТаблицы).Cell(Сч,4).Range.Start,Word.Application.ActiveDocument.Tables(НомерТаблицы).Cell(Сч,5).Range.End).ParagraphFormat.Alignment = 2;
	КонецЦикла;
Показать
SerafimOd; Dream_kz; independ; agaraev; Team leader; MaxT; +6 Ответить
55. pyrkin_vanya 497 30.11.16 20:40 Сейчас в теме
(54) Все оказалось куда проще. Достаточно прописать это для создания колонки
КолонкаТаблицы = ТаблицаТоваров.Columns.Add();

Я как 1С-ник не могу добавлять строку или колонку как процедуру. Машинально переменную пишу :) Хотя можно и без нее.
56. endym 215 01.12.16 11:08 Сейчас в теме
(55) Возможно за 8 лет офис и обрел новые функции VBA, хотя не исключено что я мог это пропустить;)

30. alecs2004 9 30.11.11 10:10 Сейчас в теме
Полезный пример. Спасибо
31. necropunk 11 30.11.11 10:22 Сейчас в теме
Автору жирный плюс. Опередил ты меня - недавно только закончил обработку, с печатью произвольного числа целой кучи разных таблиц, намучался изрядно.
32. Alex Prikol 30.11.11 16:19 Сейчас в теме
спасибо.
видно, автор копнул глубоко, кое что пригодится
35. SERJ_1CC 50 06.12.11 09:53 Сейчас в теме
То что надо, именно это и искал, примерчик очень хороший... Благодарю плюсом!!!
36. gurovvv 06.12.11 14:54 Сейчас в теме
спасибо!
просто,удобно. для начала обучения работы с вордом - отличный вариант.
37. pavel_pss 290 21.02.13 16:37 Сейчас в теме
Предлагаю так же посмотреть и мой вариант http://infostart.ru/public/95012/
38. endym 215 21.02.13 17:49 Сейчас в теме
(37) apalon_pss, мне кажется или это лишь часть описанного в моей статье?;))
39. lelusha 09.02.14 17:36 Сейчас в теме
спасибо! простой пример и очень понятно. отличный вариант. Автору спасибо, поможет для обучения работы с вордом -
40. Гость 24.02.14 10:26
А как в макете настроить чтобы применить вариант: Word.Bookmarks("ff").Select(); //Где ff - это набор любых символов
41. endym 215 24.02.14 13:03 Сейчас в теме
Нужно просто ввести понравившиеся вам символы в любом месте макета.
Word.Bookmarks("ff").Select() - это команда ищет в макете символы ff
43. monkbest 114 29.07.14 17:00 Сейчас в теме
(41) нет, она не ищет символы ff. она ищет метку с именем ff :)) вставлять метки в документе <> написать имя в текте документа
смотрите http://prosto1s.ru/index.php/24-pechat-v-word-chast-2-metod-zameny-tegov-klonirovanie-abzatsev-stok-tablitsy
там написано как добавлять метки
44. endym 215 29.07.14 19:04 Сейчас в теме
(43) monkbest, именно ищет текст и заменяет его на все что захочет пользователь.
З.Ы. метки это совсем другое;) матчасть рулит
45. monkbest 114 31.07.14 09:14 Сейчас в теме
(44) Word.Bookmarks("ff").Select();
Bookmarks - коллекция меток документа
через скобочки с именем метки, можно получить саму метку
у неё есть метод select, который возвращает выделение области от начала метки до конца метки
это выделение можно скопировать в буфер, вырезать, вставить на его место то что уже лежит в буфере (cut() copy() paste())
42. gull22 105 10.07.14 09:14 Сейчас в теме
Дорога ложка к обеду, спасибо за информацию.
46. script 128 11.12.14 02:14 Сейчас в теме
Вот интересно как сделать две таблицы программно ?

По метке мы заменили одну таблицу, а если нужно вставить еще одну ниже.
Или таблицы нужно создавать в цикле, одна под одной как быть?
Метка уже не сработает, потому что ее перезаписали и на ее месте находится первая таблица.
Получается что метка служит всего навсего начальной областью куда нужно вставить первую таблицу но что дальше?
47. endym 215 11.12.14 11:30 Сейчас в теме
Если Вы заранее знаете что там будет еще одна таблица - тогда добавить еще метку и обработать по уже известному алгоритму)
Метки обрабатываются последовательно.
48. kuza_87 28 18.03.16 07:27 Сейчас в теме
Друзья, кто-нибудь подскажет, можно ли в текст документа вставить специальный символ? Например символ бесконечности, евро или фунта стерлингов.
Прикрепленные файлы:
49. endym 215 18.03.16 11:46 Сейчас в теме
(48) kuza_87,
Можно. Используй комбинацию Аль+
50. DedMoroz1983 2 13.10.16 11:01 Сейчас в теме
Долго формируется таблица.
51. pyrkin_vanya 497 30.11.16 13:12 Сейчас в теме
А как заполнить данные в таблице из табличной части нужного объекта?
58. burza 30.05.23 09:52 Сейчас в теме
прошу прощения ну это что знчЭл ?
59. cargobird 308 04.11.23 10:30 Сейчас в теме
Вот так вывел данные в таблицу из шести колонок с неизвестным количеством строк.
В ворде таблица задана в виде двух строк, первая из которых шапка, вторая - пустая.
НомерТаблицыВВорде = 2; // надо подобрать
Документ.Tables(НомерТаблицыВВорде).Rows(2).Select();
Если ИндексыЗаявлено.Количество() > 1 Тогда  
	MSWord.Application.Selection.InsertRowsBelow(ИндексыЗаявлено.Количество()-1);
КонецЕсли;	
Ном = 1; 
Для Каждого стр Из ИндексыЗаявлено Цикл 
	Документ.Tables(НомерТаблицыВВорде).Cell(Ном+1, 1).Range.Text    = Строка(Ном);
	Документ.Tables(НомерТаблицыВВорде).Cell(Ном+1, 2).Range.Text    = Строка(стр.Номенклатура.Код);
	Документ.Tables(НомерТаблицыВВорде).Cell(Ном+1, 3).Range.Text    = Строка(стр.Номенклатура);
	Документ.Tables(НомерТаблицыВВорде).Cell(Ном+1, 4).Range.Text    = Строка(стр.Комплектов);
	Документ.Tables(НомерТаблицыВВорде).Cell(Ном+1, 5).Range.Text    = Строка(стр.Цена);
	Документ.Tables(НомерТаблицыВВорде).Cell(Ном+1, 6).Range.Text    = Строка(стр.Сумма);
	Ном = Ном + 1;
КонецЦикла;
Показать
additive; +1 Ответить
60. jollyk 23.12.24 16:54 Сейчас в теме
Мне не нравится добавлять таблицы через закладки т.к. пользователи про них забывают и сам механизм добавления и просмотра в Word крайне неудобен поэтому у меня добавлены строки поиска в примере *таблицапомещения*
Ищем, заменяем на шапку таблицы, добавляем строки и по диапазону конвертируем в таблицу.
В документе word добавить строку *таблицапомещения* и *Арендатор*
	ОбъектПриложение = ПолучитьCOMОбъект("d:\test\test.docx");
	
	ОбъектПриложение.Application.Visible = 1;
	WordApp = ОбъектПриложение.Application;
	
	Doc = ОбъектПриложение.Application.Documents(1);
	Doc.Activate();  
	
         // Тут можно в цикле искать переменные на замену
	Doc.Content.Find.Execute("*Арендатор*",,,,,,,,,"Рога и копыта",2);	
	
	// Таблица  
	Text = WordApp.Application.Selection;    
	
       //Text.Find.Text="*таблицапомещения*";
	Text.Find.Execute("*таблицапомещения*",,,,,,,,,"Помещение*Корпус*Этаж*Характеристика");   
	
	НачалоДиапазонаТаблицы = Text.Range.Start;    
	
	//Табл= Word.Selection.Range;
	ТаблицаВставка = Text.Range;         
	ТаблицаВставка.InsertParagraphAfter();
	ТаблицаВставка.InsertAfter("2341*1*2*Врагу не пожелаешь");  
	ТаблицаВставка.InsertParagraphAfter();
	ТаблицаВставка.InsertAfter("1253*1*3*Чистилище");  
	ТаблицаВставка.InsertParagraphAfter();  
	ТаблицаВставка.Start = НачалоДиапазонаТаблицы;
	ТаблицаВставка.ConvertToTable("*"); 
	
	
	//Рамки таблицы
	Doc.Tables(1).Borders(1).LineStyle 	= 	WordApp.Options.DefaultBorderLineStyle;
	Doc.Tables(1).Borders(1).LineWidth 	= 	WordApp.Options.DefaultBorderLineWidth;
	Doc.Tables(1).Borders(1).Color 		=	WordApp.Options.DefaultBorderColor;   
	
	Doc.Tables(1).Borders(2).LineStyle 	= 	WordApp.Options.DefaultBorderLineStyle;
	Doc.Tables(1).Borders(2).LineWidth 	= 	WordApp.Options.DefaultBorderLineWidth;
	Doc.Tables(1).Borders(2).Color 		=	WordApp.Options.DefaultBorderColor;       
	
	Doc.Tables(1).Borders(3).LineStyle 	= 	WordApp.Options.DefaultBorderLineStyle;
	Doc.Tables(1).Borders(3).LineWidth 	= 	WordApp.Options.DefaultBorderLineWidth;
	Doc.Tables(1).Borders(3).Color 		=	WordApp.Options.DefaultBorderColor;       
	
	Doc.Tables(1).Borders(4).LineStyle 	= 	WordApp.Options.DefaultBorderLineStyle;
	Doc.Tables(1).Borders(4).LineWidth 	= 	WordApp.Options.DefaultBorderLineWidth;
	Doc.Tables(1).Borders(4).Color 		=	WordApp.Options.DefaultBorderColor;       
	
	Doc.Tables(1).Borders(5).LineStyle 	= 	WordApp.Options.DefaultBorderLineStyle;
	Doc.Tables(1).Borders(5).LineWidth 	= 	WordApp.Options.DefaultBorderLineWidth;
	Doc.Tables(1).Borders(5).Color 		=	WordApp.Options.DefaultBorderColor;       
	
	Doc.Tables(1).Borders(6).LineStyle 	= 	WordApp.Options.DefaultBorderLineStyle;
	Doc.Tables(1).Borders(6).LineWidth 	= 	WordApp.Options.DefaultBorderLineWidth;
	Doc.Tables(1).Borders(6).Color 		=	WordApp.Options.DefaultBorderColor; 
	
	//Таблица по ширине листа
	ТаблицаВставка.Tables(1).AutoFitBehavior (2);
	
	//Обновить документ
	Doc.Fields.Update();	
Показать
Оставьте свое сообщение