3 в 1: отчеты 1С в Word: динамические таблицы, разная ориентация страниц, объединение тысячи отчетов в один файл word

28.12.12

Разработка - Работа с интерфейсом

Рассмотрим 3 вещи, по которым очень часто возникают вопросы: 1. как выводить динамически формируемые таблицы с разным количеством строк (программно добавлять строки в файл word); 2. как в одном отчете в Word сделать одну страницу в книжной ориентации, а другие - в альбомных; 3. как в одном файле Word получить сразу 1000 отчетов с разной ориентацией страниц, с разными динамически сформированными таблицами.

Скачать файл

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

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

Нужно было актуализировать базу CRM, а так как планировалась рассылка печатной продукции, решили одновременно с этим в каждый конверт контактным лицам вкладывать письмо на трех листах:
- сопроводительное лист;
- данные самого предприятия для проверки;
- данные всех контактных лиц контрагентов для проверки.

Отчет решено было сделать через Word, т.к. печатные формы не поддерживают режим одновременного вывода страниц и в альбомной и в книжной ориентацией.

Как это работает

В обработке содержится два макета Word:
- частично заполненный для формирования отчета по каждому предприятию
- пустой итоговый файл (но с настройкой границ страницы), в который будут интегрироваться другие заполненные отчеты

Так вот, в частично заполненный как раз и будет заполняться программно:
- в поля DOCVARIABLE - определенный текст
- в верхние таблицы "Реквизиты предприятия" и "Контактные лица" - будет добавляться нужное количество строк в которые будет попадать текст

Как только отчет будет сформирован - он будет сохранен в системной временной папке, затем встроен в Итоговый файл Word.
Так будет происходить с каждым отчетом, пока все отчеты не будут встроены в итоговый файл Word.
В итоге получится 1 файл Word с вложенными в него сотнями других файлов Word, но когда пользователь его откроет - он не заметит разницы между единым файлом и файлом с встроенными файлами.

Форма для обработки была создана исключительно чтобы Вы могли протестировать производительность формирования таких писем.

На компьютере Pentium Dual-Core E5400 2.7Ghz с 4GB RAM и Windows 7 x86 скорость формирования 10 писем около 29 секунд.
Значит, чтобы сгенерировать 100 писем, понадобится 5 минут.

По нажатию кнопки Выполнена - прогресс стартует и из одного шаблона создаются десятки файлов, которые интегрируются в один единый, который можно в пару кликов пустить на печать:

Чтобы понять как работает система, ниже представлен весь код обработки. Он намеренно был упрощен, чтобы Вы поняли сам принцип формирования отчета через встраивание.


Процедура ПриОткрытии()
    ЭлементыФормы.Прогонов.Значение = 3;

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

Процедура КнопкаВыполнитьНажатие(Кнопка)

    ЭлементыФормы.Прогресс.Значение = 0;
    ЭлементыФормы.Прогресс.МаксимальноеЗначение = Прогонов;

    ЭлементыФормы.Старт.Заголовок = "Старт в " + ТекущаяДата();

    // Открываем итоговый документ
    ДокументИтоговый = ПолучитьМакет("ИтоговыйWord").Получить();

    ДокументИтоговый.Application.Visible = 1;
    Selection = ДокументИтоговый.Application.Selection;


    Для Номер = 1 По Прогонов Цикл
        // Открываем шаблон
        ДокументШаблон = ПолучитьМакет("ШаблонWord").Получить();

        ДокументШаблон.Application.Visible = 0;

        // Заполняем его

        ДокументШаблон.Variables.Item("НомерПисьма").Value = "1025";
        ДокументШаблон.Variables.Item("ДатаПисьма").Value = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");

        ДокументШаблон.Variables.Item("КомуДолжность").Value = "Генеральному директору " + Номер;
        ДокументШаблон.Variables.Item("Предприятие").Value = "ОАО «Наименование» " + Номер;

        ДокументШаблон.Variables.Item("КомуФИО").Value = "И.И. Иванову " + Номер;
        ДокументШаблон.Variables.Item("Город").Value = "г. Москва " + Номер;

        ДокументШаблон.Variables.Item("Телефон").Value = "(495) 123-45-67 " + Номер;
        ДокументШаблон.Variables.Item("Обращение").Value = "Уважаемый Иван Иванович!";


        ДокументШаблон.Fields.UpDate();

        // Заполняем таблицу на втором листе
        Table1 = ДокументШаблон.Tables(2);
        Для Строка = 3 По 5 Цикл

            Если Строка > 3 Тогда
                NewRow = Table1.Rows.Add();

            КонецЕсли;
            Table1.Cell(Строка,1).Range.Text = "ТипИнфы" + Строка;

            Table1.Cell(Строка,2).Range.Text = "ЗначениеИнфы" + Строка;
        КонецЦикла;

        Table2 = ДокументШаблон.Tables(4);

        Для Строка = 3 По 5 Цикл
            Если Строка > 3 Тогда

                NewRow = Table2.Rows.Add();
            КонецЕсли;
            Table2.Cell(Строка, 1).Range.Text = "ДолжностьКЛ" + Строка;

            Table2.Cell(Строка, 2).Range.Text = "ФИОКЛ" + Строка;
            Table2.Cell(Строка, 3).Range.Text = "ТелефоныКЛ" + Строка;

            Table2.Cell(Строка, 4).Range.Text = "EmailКЛ" + Строка;
        КонецЦикла;

        // Сохраняем его во временный каталог

        ИмяФайла = КаталогВременныхФайлов() + "actual" + Номер + ".doc";
        ДокументШаблон.SaveAs(ИмяФайла);

        ДокументШаблон.Close(False);

        // Вставляем заполненный шаблон в конец итогового документа

        Selection.InsertFile(ИмяФайла, "", False, False, False);
        ЭлементыФормы.Прогресс.Значение = Номер;

    КонецЦикла;

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

    ДокументИтоговый.SaveAs(ИтоговыйФайл);
    ДокументИтоговый.Close(False);


    Объект = ПолучитьCOMОбъект(ИтоговыйФайл);
    // Покажем документ
    Объект.Application.Visible = 1;


    ЭлементыФормы.Финиш.Заголовок = "Финиш в " + ТекущаяДата();
КонецПроцедуры

См. также

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    18428    26    6    

40

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    13984    mrXoxot    43    

114

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

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

27.05.2024    6395    smielka    37    

98

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    13810    831    elcoan    47    

114

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    11385    161    acces969    31    

122

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    5161    kalyaka    6    

33

Работа с интерфейсом Программист Пользователь Платформа 1С v8.3 8.3.14 Конфигурации 1cv8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Ещё с времен платформы 8.3.13 можно изменять цвет стилей интерфейса главного окна. Данное расширение позволит вам выбрать из подготовленных десятка стилей на свой вкус.

1 стартмани

01.07.2022    23454    380    rpgshnik    67    

94
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Lyns_owner 356 30.12.12 11:39 Сейчас в теме
ДокументШаблон.Variables.Item("Предприятие").Value = "ОАО «Катконефть» " + Номер;
ДокументШаблон.Variables.Item("КомуФИО").Value = "И.И. Иванову " + Номер;
ДокументШаблон.Variables.Item("Город").Value = "г. Октябрьский " + Номер;
ДокументШаблон.Variables.Item("Телефон").Value = "(34767) 3-33-33 " + Номер;
ДокументШаблон.Variables.Item("Обращение").Value = "Уважаемый Иван Иванович!";


Что это за хурма?!
2. Flashill 1006 30.12.12 12:34 Сейчас в теме
(1) Lyns_owner, ))) это тестовые данные, чтобы проверить что информация выводится. Чтобы выводились данные, которые нужны Вам - можно вместо цикла "Для Номер = 1 По Прогонов Цикл" написать свой цикл (например по выборке из запроса) и в поля эти подставлять свою информацию примерно так:
ДокументШаблон.Variables.Item("Предприятие").Value = Выборка.Предприятие;
ДокументШаблон.Variables.Item("КомуФИО").Value = Выборка.КомуФИО;
ДокументШаблон.Variables.Item("Город").Value = Выборка.Город;
ДокументШаблон.Variables.Item("Телефон").Value = Выборка.Город;

Если все понятно объяснил - прошу снять минус :)
9. Поручик 4691 09.01.13 03:02 Сейчас в теме
Неплохой материал, надо бы запомнить.

(2) зы этот fuxic опять ни за что минус поставил. Твари.
3. higs 05.01.13 13:25 Сейчас в теме
Очень даже неплохой вариант, вполне применимо.
Я, правда, копировал и вставлял на следующий лист в общем файле содержимое предварительно заполненного листа по конкретному предприятию, чтобы в итоге получилось примерно то же самое, но обычной вставкой, а не импорта файла. Но вариант с DOCVARIABLES лично мне понравился
4. Новенький_2209 06.01.13 19:54 Сейчас в теме
Что-нибудь про формирование печатной формы на основе макетов офисных документов (кстати, не только Word) из БСП, автор слышал?
5. Flashill 1006 06.01.13 20:02 Сейчас в теме
(4) Новенький_2209, нет, где можно почитать?
6. TMV 14 06.01.13 20:16 Сейчас в теме
(5) Андрей Буравов,
где можно почитать?
видимо там, где вам сказали (и даже посмотреть)
из БСП
7. RomanUzmov 40 07.01.13 11:24 Сейчас в теме
8. RomanUzmov 40 07.01.13 11:26 Сейчас в теме
Публикация, в принципе, полезная - не все же на управляемых формах работают и БСП юзают... Автору - плюс.
10. Sasha255n 25.01.13 15:49 Сейчас в теме
Интересно как это работает обязательно скачаю посмотрю
11. Sasha255n 25.01.13 15:50 Сейчас в теме
Да и конечно большое спасибо автору я думаю очень пригодится
12. Sasha255n 25.01.13 16:31 Сейчас в теме
"На УПП не проверял, однако работать должна, т.к. работает с метаданными.
Или Вы (a31) про запрос на поиск дублей, если в УПП сотрудники хранятся в справочнике "СотрудникиОрганизаций", то работать будет:), кстати можно этим запросом искать не только задвоенных по коду но и по другому полю, достаточно заменить поле "код" на другое поле. Правда, если нужно искать по нескольким полям, тогда еще в итогах дорисовать нужно поля. С другой стороны, как минимум, из запроса можно использовать идею выбора "одного элемента из нескольких" внутри запроса (другой пример, когда нужно выбрать контрагента и любой 1 договор этого контрагента).
Не будет работать только на управляемых формах. "
13. Sasha255n 25.01.13 16:32 Сейчас в теме
Проситите предыдушие это не сюда
Оставьте свое сообщение