Есть некий двухэтажный документ, для которого нужно создать печатную форму, в верхней части которой указаны некоторые реквизиты шапки документа, а в нижней части — содержимое подчинённого уровня (например, список номенклатуры).
1) Из Конфигуратора запускаем FabiusClient «в режиме отладки».
Открываем (как для обычного ввода документов) нужный тип документа и тут же — на уровне «шапок» — нажимаем иконку Печать:
2) В окне открывшегося списка печатных форм нажимаем на «Расширенный режим»:
Кнопки в голубых рамках относятся к уже созданным ранее формам, а кнопки в зелёных рамках — это создание новых форм.
С помощью «Мастера» можно построить «стандартный отчёт«.
Нажимаем на «Мастер» (Создать форму с помощью мастера) и заполняем «Имя» (группа Прочие) в нижней части карточки и, при необходимости, другие свойства новой печатной формы, в частности «Отдельный отчёт по отмеченным», «Признак отпечатанности», «Редактирование предпросмотра», шрифты, … .
Кнопка «Дальше» внизу.
Дальнейшие действия — на примере документа Списание Номенклатуры.
Наша задача — создать печатную форму, в которой
- в шапке будет наименование организации
а данные цена, количество, сумма, дата и номер документа
будут сгруппированы по получателям, а внутри них — по датам.
В следующем окне нам нужно пометить реквизиты, которые собираемся распечатывать:
- в СписаниеТМЦ (это шапки документов списания) нам нужны «получатель» ТМЦ, «дата» и «номер» документа — помечены красным на рисунке ниже;
- на уровне номенклатуры (это НоменклатураДокументаКоллекция) тоже помечаем нужные реквизиты — помечены зелёным:
Следующее окно «Формирование групп элементов отчёта» пропускаем кнопкой Дальше внизу.
В следующем окне — Шаблоны представления отчётов — помечаем единственный возможный вариант Табличное представление и кнопкой Дальше переходим на последнее окно, где нажимаем кнопку Финиш внизу.
Сформировать отчёт Да.
3) Открывается заготовка печатной формы, в которой в детальную полосу помещено наше «любое поле», выбранное выше.
Переходим на закладку Макет:
Кликаем мышкой на голубую метку детальной полосы Detail, становится активной кнопка Сброс. Ею удаляем автоматически созданную детальную полосу.
(Детальную полосу мы встроим позднее в свой шаблон.)
Выделяем цветом все автоматические созданные строки печатной формы и удаляем их. Получаем пустую Excel-таблицу.
4) Загружаем свой шаблон — самая первая кнопка закладки Макет на предыдущем рисунке.
Выделяем все значащие ячейки шаблона и на закладке Разметка страницы фиксируем область печати:
5) Привязываем реквизиты первичного документа (_ОсновнойИсточник), перетаскивая их из окна Список полей на шаблон.
В том числе — при необходимости — привязываем к шаблону и реквизиты будущей детальной полосы, заполняя её реквизитами подчинённого уровня (например, списка номенклатуры):
В любом порядке
— перетаскиваем реквизиты списка номенклатуры на шаблон в строку детальной полосы
— обозначаем местоположение детальной полосы (в нашем примере она есть):
выделяем ячейки, образующие детальную полосу, и на закладке макет нажимаем на кнопку Детальная полоса.
Если ошиблись в указании детальной полосы, кликаем на голубую метку Detail текущей детальной полосы и удаляем её, как на рисунке в пункте 3).
Обратите внимание — справа внизу на этом рисунке: в окне Уровни привязки нужно указать, что Детальная полоса «привязана» к подчинённому уровню нашего документа.
6) Выходим с сохранением своей печатной формы:
Если нажать на «Сохранить в Entity» (красный прямоугольник), изменения печатной формы будут отражены в общей конфигурации (которую потом сравниваем с эталонной):
- …FabiusNetExeOutServerSYSTEMPrintTemplateимяПечатнойФормы.repx и в reps.xlm на одну папку выше.
- В этом случае позже в Конфигураторе обязательно нужно выполнить сохранение (закладка Дерево — Сохранить).
Если нажать на «Сохранить» (розовый прямоугольник), изменения печатной формы будут отражены как частные (не попадут в эталон):
- …FabiusNetExeOutServerPRIVATEPrintTemplateимяПечатнойФормы.repx и в reps.xlm на одну папку выше.
Если выйти из шаблона обычным крестиком завершения работы справа вверху, изменения будут сохранены как частные (в каталоге PRIVATE).
Если выполнить сохранение в списке печатных форм:
изменения будут сохранены «в Entity» (SYSTEM).
Если удалить печатную форму из этого списка (красный крестик рядом с дискетой сохранения), удаление произойдёт «из Entity» (из каталога SYSTEM).
7) Для продолжения работы по созданию печатной формы снова нажимаем иконку Печать — см. пункт 1) этого описания.
Выбираем в левой части нужную печатную форму (пока она всего одна) и нажимаем кнопку Редактировать.
А далее см. пункт 5).
При необходимости можно править С#-текст, который автоматически генерируется для описания печатной формы:
на закладке Главная нажимаем кнопку Генерируемый источник:
Выбираем (если будет предложен выбор) Visual Studio и справа в окне Solution Explorer встаём на GenericPrintFormSource.cs.
Если умеете, можете править текст слева.
Смотрите также
Инструкция по разработке Печатных форм
Автор Белкет, 11 сен 2020, 16:04
0 Пользователей и 1 гость просматривают эту тему.
Здравствуйте.
Подскажите, можно ли создать макет печатной формы на основе MS Excel? Есть ли такой функционал, чтобы 1С брал макет из Excel. Выгрузка в Excel мне не нужна, мне нужно чтобы это работало в рамках 1С.
Или вручную делать макет как в Excel?
Цитата: Рестарт от 11 сен 2020, 21:10
Можно узнать решение?
Файл — Открыть — Тип файла: 1С файлы — Выбрать документ MS Excel — Открыть. Все оказалось намного проще, чем предполагалось.
Только есть несколько НО:
1. Посмотрите есть ли в Тип файла: 1С файлы формат *.xls или *.xlsx (просто на рабочем компьютере у меня отсутствуют эти форматы, а на домашнем есть. Хотя и там и там 1С: Предприятие 8.3) Если удалось открыть файл, то открывается табличный документ где показывается шаблон. И дальше Ctrl+C и Ctrl+V(в тот макет, который нужно вставить шаблон). Я выделял только столбцы, нажимал Ctrl+C, переходил в макет который нужно вставить, выделял такое же количество столбцов и нажимал Ctrl+V и все прекрасно перенеслось.
2. Если в MS Excel уже были настроены границы печати, то в 1С они слетают. Пришлось вручную настраивать высоту строк, чтобы все влезло. Но весь вбитый текст и его расположение сохранилось на макете, слетела именно высота каждой строки.
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Макет печатной формы на основе MS Excel
Похожие темы (5)
Поиск
Теперь для конкретно нашего примера нужно записать в поле следующий код:
Sub DataEntryForm()
Dim nextRow As Long
nextRow = Producty.Cells(Producty.Rows.Count, 2).End(xlUp).Offset(1, 0).Row
With Producty
If .Range("A2").Value = "" And .Range("B2").Value = "" Then
nextRow = nextRow - 1
End If
Producty.Range("Name").Copy
.Cells(nextRow, 2).PasteSpecial Paste:=xlPasteValues
.Cells(nextRow, 3).Value = Producty.Range("Volum").Value
.Cells(nextRow, 4).Value = Producty.Range("Price").Value
.Cells(nextRow, 5).Value = Producty.Range("Volum").Value * Producty.Range("Price").Value
.Range("A2").Formula = "=IF(ISBLANK(B2), """", COUNTA($B$2:B2))"
If nextRow > 2 Then
Range("A2").Select
Selection.AutoFill Destination:=Range("A2:A" & nextRow)
Range("A2:A" & nextRow).Select
End If
.Range("Diapason").ClearContents
End With
End Sub
Но этот код не универсальный, то есть, он в неизменном виде подходит только для нашего случая. Если вы хотите его приспособить под свои потребности, то его следует соответственно модифицировать. Чтобы вы смогли сделать это самостоятельно, давайте разберем, из чего данный код состоит, что в нем следует заменить, а что менять не нужно.
Итак, первая строка:
Sub DataEntryForm()
«DataEntryForm» — это название самого макроса. Вы можете оставить его как есть, а можете заменить на любое другое, которое соответствует общим правилам создания наименований макросов (отсутствие пробелов, использование только букв латинского алфавита и т.д.). Изменение наименования ни на что не повлияет.
Везде, где встречается в коде слово «Producty» вы должны его заменить на то наименование, которое ранее присвоили для своего листа в поле «(Name)» области «Properties» редактора макросов. Естественно, это нужно делать только в том случае, если вы назвали лист по-другому.
Теперь рассмотрим такую строку:
nextRow = Producty.Cells(Producty.Rows.Count, 2).End(xlUp).Offset(1, 0).Row
Цифра «2» в данной строчке означает второй столбец листа. Именно в этом столбце находится колонка «Наименование товара». По ней мы будем считать количество рядов. Поэтому, если в вашем случае аналогичный столбец имеет другой порядок по счету, то нужно ввести соответствующее число. Значение «End(xlUp).Offset(1, 0).Row» в любом случае оставляем без изменений.
Далее рассмотрим строку
If .Range("A2").Value = "" And .Range("B2").Value = "" Then
«A2» — это координаты первой ячейки, в которой будет выводиться нумерация строк. «B2» — это координаты первой ячейки, по которой будет производиться вывод данных («Наименование товара»). Если они у вас отличаются, то введите вместо этих координат свои данные.
Переходим к строке
Producty.Range("Name").Copy
В ней параметр «Name» означат имя, которое мы присвоили полю «Наименование товара» в форме ввода.
В строках
.Cells(nextRow, 2).PasteSpecial Paste:=xlPasteValues
.Cells(nextRow, 3).Value = Producty.Range("Volum").Value
.Cells(nextRow, 4).Value = Producty.Range("Price").Value
.Cells(nextRow, 5).Value = Producty.Range("Volum").Value * Producty.Range("Price").Value
наименования «Volum» и «Price» означают названия, которые мы присвоили полям «Количество» и «Цена» в той же форме ввода.
В этих же строках, которые мы указали выше, цифры «2», «3», «4», «5» означают номера столбцов на листе Excel, соответствующих колонкам «Наименование товара», «Количество», «Цена» и «Сумма». Поэтому, если в вашем случае таблица сдвинута, то нужно указать соответствующие номера столбцов. Если столбцов больше, то по аналогии нужно добавить её строки в код, если меньше – то убрать лишние.
В строке производится умножение количества товара на его цену:
.Cells(nextRow, 5).Value = Producty.Range("Volum").Value * Producty.Range("Price").Value
Результат, как видим из синтаксиса записи, будет выводиться в пятый столбец листа Excel.
В этом выражении выполняется автоматическая нумерация строк:
If nextRow > 2 Then
Range("A2").Select
Selection.AutoFill Destination:=Range("A2:A" & nextRow)
Range("A2:A" & nextRow).Select
End If
Все значения «A2» означают адрес первой ячейки, где будет производиться нумерация, а координаты «A» — адрес всего столбца с нумерацией. Проверьте, где именно будет выводиться нумерация в вашей таблице и измените данные координаты в коде, если это необходимо.
В строке производится очистка диапазона формы ввода данных после того, как информация из неё была перенесена в таблицу:
.Range("Diapason").ClearContents
Не трудно догадаться, что («Diapason») означает наименование того диапазона, который мы ранее присвоили полям для ввода данных. Если вы дали им другое наименование, то в этой строке должно быть вставлено именно оно.
Дальнейшая часть кода универсальна и во всех случаях будет вноситься без изменений.
После того, как вы записали код макроса в окно редактора, следует нажать на значок сохранения в виде дискеты в левой части окна. Затем можно его закрывать, щелкнув по стандартной кнопке закрытия окон в правом верхнем углу.
Ведение реестра документов в электронном виде в Excel позволит их систематизировать, обеспечит к ним быстрый доступ и исключит необходимость хранить каждый документ в отдельности. В любое время документ из реестра можно вывести на печатную форму, созданную на листе Excel. Ссылка для скачивания файла с примером внизу.
- Ведение реестра документов
- Создание печатной формы
- Заполнение печатной формы
Ведение реестра документов
Реестр документов удобно заполнять в «Умной таблице» Excel, если не предполагается использование объединенных ячеек.
Далее мы рассмотрим реестр с данными сотрудников, который может использоваться для хранения этих данных и распечатки различных документов. На практике это был реестр Трудовых договоров, из которого распечатывались: Трудовой договор, Приложение к трудовому договору, Договор о материальной ответственности, Приказ о приеме на работу, Изменения к трудовому договору, Соглашение о расторжении трудового договора.
В примере реестр значительно уменьшен, из печатных форм оставлен только Договор о материальной ответственности, чтобы показать сам принцип ведения реестра и заполнения данными печатной формы.
Пример реестра документов в «Умной таблице» Excel
Для заполнения реестра данными можно использовать автоформу, подробнее о которой можно прочитать в разделе Работа с «Умной таблицей».
Создание печатной формы
Чтобы заполнить печатную форму с помощью формул, она должна быть создана в Excel. Если не удалось найти нужный файл в Excel, его текст можно перенести из файла другой программы на рабочий лист, учитывая максимальное количество знаков, умещающееся в ячейке, иначе текст будет обрезан.
В нашем примере используется печатная форма Договора о материальной ответственности, текст которого скопирован на рабочий лист Excel из документа Word:
Договор о материальной ответственности
Если печатная форма на рабочем листе Excel готова, остается переместить (или скопировать) ее в книгу с реестром. Если реестр еще не создан, можно просто добавить новый лист в книгу с печатной формой и назвать его «Реестр…».
Заполнение печатной формы
Для заполнения печатной формы данными из реестра будем использовать встроенную функцию Excel — «ВПР». Ориентиром поиска по таблице будет номер записи в реестре по порядку, поэтому ячейку с номером договора укажем в формулах «ВПР» печатной формы как «Искомое_значение».
Аргументы функции «ВПР»
В мастере функций набраны аргументы для формулы в ячейке «L4», которая после ввода примет следующий вид: =ВПР('Печать ДМО'!G1;'Реестр ДМО'!A2:J102;2;ЛОЖЬ)
Во все остальные ячейки с переменными значениями копируется эта формула, и в ней заменяется только «Номер_столбца».
Теперь при записи в ячейку «G1» номера нужной строки реестра, печатная форма Договора о материальной ответственности заполнится данными соответствующего работника.
Вы можете скачать файл с примером ведения реестра в Excel и автоматического заполнения печатной формы Договора о материальной ответственности данными выбранного сотрудника.
Если вам приходилось работать с таблицами из множества колонок, да еще к концу рабочего дня и в условиях дефицита времени, то, наверняка, вы случайно вводили данные в ячейку не той строки, в лучшем случае спохватывались и исправляли ошибку сразу, в худшем — ошибка выплывала позже в самый неподходящий момент. Как защитить себя от подобных ситуаций? Есть очень удобное средство — формы. Их созданию и работе с ними посвящена эта статья.
Начнем с того, что не во всех версиях Excel сразу доступна волшебная кнопка Форма. В этом случае предварительно настройте Параметры (перейти к ним можно на вкладке Файл). Здесь вы также можете сразу не найти то, что нужно добавить на ленту. Поэтому сначала измените вариант в поле Выбрать команды (в данном случае нужен вариант Все команды). Чтобы добавить найденную в списке команду Форма, нужно выбрать имя вкладки, где разместится кнопка и создать новую группу. Теперь щелкните по кнопке Добавить и проверьте, появилась ли новая команда в новой группе.
После этих манипуляций на вкладке Данные появится группа Работа с формами (это название задаете вы, когда создаете группу при настройке параметров Excel), а в ней нужная вам кнопка.
Форму нельзя создать, если шапка таблицы занимает несколько строк — это минус.
Но здесь можно «схитрить»: вставьте после настоящей шапки пустую строку, оформите заголовки строк в одну строку, для этой строки после создания формы установите нулевую высоту (Формат — Размер ячеек —Высота строки —).
Осталось только щелкнуть на любой ячейке таблицы и на кнопке Форма. Готово, можно работать. Вы видите строку, относящуюся только к одному человеку, причем все названия граф в одной форме. Названия кнопок — настоящие подсказки для пользователя. Нужна новая строка — Добавить, не нужна существующая — Удалить, нужно перейти к какой-либо впереди — Далее, позади — Назад.
Единственной «неочевидной» является кнопка Критерии. Она позволяет включать фильтр, чтобы быстрее находить нужные строки, если их очень много. При задании критерия можно использовать такие знаки, как «*» и «?», критериев может быть несколько (но задать их нужно в пределах одного окна). Для отключения фильтра используйте кнопку Правка.
Выбор поля формы можно делать щелчком мыши или клавишей ТАВ. Добавлять новую строку в таблицу можно с помощью соответствующей кнопки или нажатием ENTER, когда заполнено последнее поле.
Конечно, использовать ли форму или работать с таблицей напрямую, решать вам. Но чтобы выбрать оптимальный способ работы, нужно попробовать разные варианты. Сведения о форме в Excel из этой статьи помогут вам это сделать.
Печатные шаблоны
Облачный Pyrus
Безоблачный Pyrus
Договоры, счета, акты и другие типовые документы часто нужны в печатном виде. Их можно легко распечатывать из форм Pyrus с помощью печатных шаблонов. Все данные, которые вы вводите в форму, — реквизиты клиента, перечень услуг, даты — автоматически попадают в печатную версию документа. Это удобно: вы не переносите данные вручную и не тратите время на поиск нужного шаблона счёта или договора. Например:
- посетитель заполняет на вашем сайте внешнюю форму — заявку на кредит. Менеджер получает заявку в виде задачи Pyrus и распечатывает заполненную анкету для подписания прямо из задачи;
- менеджер общается с потенциальным клиентом и вносит его реквизиты в форму личной карточки. Когда пора заключать договор, менеджер распечатывает документ в один клик: данные клиента уже в нужных полях договора;
- клиент делает заказ, менеджер заполняет форму заказа в Pyrus и отсюда же распечатывает готовый счет на оплату.
Добавление печатного шаблона документа
Настройка печатного шаблона в Pyrus делается один раз и занимает несколько минут. Вам понадобятся шаблон документа — файл .docx или .xlsx — и соответствующая форма в Pyrus.
Для примера мы создали шаблон договора на оказание услуг и форму Договор на оказание услуг. Цель — получать прямо из заполненной формы готовый договор — с датами, суммами и реквизитами клиента. Чтобы добавить шаблон:
-
Укажите в соответствующих частях документа переменные вида ${Название поля}. На рисунке ниже подсвечены такие переменные. Если в форме есть поле типа Справочник и нужно, чтобы его значение тоже выгрузилось в печатный шаблон, переменная будет иметь вид ${Название поля:1}, где 1 — номер колонки справочника, в которой располагается выбранный элемент. Например, в форме учёта рабочего времени есть поле типа Справочник, где работники указывают объект, на котором работали. Они выбирают его из многоколоночного справочника объектов. Чтобы на печати отобразился нужный объект, добавим в печатный шаблон переменную ${Название поля:2}. Теперь в бумажном документе всегда будет отображаться указанный в форме адрес из второй колонки справочника, например «Дубовая, 1».
Также в печатный шаблон документа можно добавлять идентификатор задачи ${taskid}, чтобы оперативно находить необходимую информацию по номеру задачи. Это удобно, когда нужно регулярно формировать и печатать с помощью Pyrus множество документов одного типа (например, доверенности), причем нередко несколько документов, выданных на одно имя. В таком случае важно быстро идентифицировать участников документа, не вчитываясь в его текст.
Кроме того, шаблон можно дополнить информацией о должности, отделе, электронной почте и рабочем телефоне сотрудника, выбранного в поле Контакт. Например, при оформлении отпуска будет достаточно ввести в форму имя сотрудника, а его должность и рабочее подразделение загрузятся в печатный шаблон заявления автоматически.
Для этого внесите в шаблон для поля Контакт переменные ${Контакт:position} — должность и ${Контакт:department} — отдел.
Также для этого поля можно настроить параметры:
- ${Контакт:email} — электронная почта;
- ${Контакт:workphone} — рабочий телефон;
- ${Контакт:mobile} — мобильный телефон;
- ${Контакт:skype} — Skype.
Важно: информация о должности, отделе, рабочем и мобильном телефонах, Skype в печатном шаблоне доступна только пользователям из организации владельца формы.
Чтобы поле Итог не съезжало и всегда находилось в заданном шаблоном месте, используйте для него переменную ${Имя_поля:Total}.
-
Зайдите в настройку формы. В разделе Печатные шаблоны нажмите Загрузить шаблон и выберите документ, в который вы добавили переменные. Нажмите Сохранить. Важно: заблокированный лист в Excel-файле не получится использовать как шаблон. Если вы увидите сообщение об ошибке загрузки, разблокируйте лист, на основе которого вы хотите получать печатный документ.
-
Откройте редактор формы — для этого нажмите Изменить шаблон — и убедитесь, что все поля, которые вы указали в виде переменных, есть в шаблоне формы, и что их названия совпадают с названиями ваших переменных. Если это не так, отредактируйте либо шаблон договора, либо шаблон формы. Подробнее о редакторе шаблона. Важно: названия полей внутри одного шаблона не должны повторяться.
-
Сохраните шаблон формы. Печатная форма договора готова.
Важно: для печатного шаблона в виде MS Excel-файла убедитесь, что формат ячеек совпадает с типом полей в шаблоне формы. Для дат указывайте формат ячейки Дата, для денег — формат Денежный. Это нужно для того, чтобы данные из формы передавались в печатный шаблон корректно и чтобы формулы MS Excel работали правильно.
Использование печатного шаблона
Теперь вы можете сохранять в PDF-формате каждую форму, созданную по этому шаблону. Для этого на странице заполненной формы нажмите значок принтера в правом верхнем углу.
Вы получите правильно оформленный договор, который можно распечатать или переслать. Если вы хотите внести изменения в документ перед печатью, сохраните его в исходном формате — .docx или .xlsx.
Подсказка: вы можете добавить в одну форму несколько печатных шаблонов — анкету, договор, счет — и пользоваться ими по ситуации.
Если печатный шаблон устарел и его нужно обновить, скачайте текущую версию шаблона из Pyrus и отредактируйте её.
Рядом с названием шаблона нажмите значок корзины, чтобы удалить предыдущую версию, и загрузите отредактированный шаблон.
Подсказка: вы можете также распечатать для любой формы Лист согласования: в нем видно, кто и когда принимал решения в процессе работы над задачей. Для этого нажмите на значок принтера в верхнем правом углу экрана и выберите Лист согласования в выпадающем списке.
Как применить формулы и условия MS Excel в печатном шаблоне
Используйте формулы MS Excel в шаблоне документа, чтобы делать вычисления в его печатной версии. Так можно автоматически получать, например, количество отпускных дней.
Чтобы получить количество отпускных дней, мы вычли из даты окончания отпуска дату его начала. В печатном документе результат этого вычитания отображается автоматически.
Чтобы получить такой результат на печати, мы разместили переменные ${Дата начала} и ${Дата окончания} в пустых ячейках J23 и AW23, а в ячейке AW22 указали формулу вычитания, которая рассчитывает дни отпуска:
= AW23-J23
Нам нужно, чтобы на печати дата начала и дата окончания отпуска появились после слов «с» и «по», поэтому мы указали в соответствующих ячейках функции Excel: =ДЕНЬ(J23), =МЕСЯЦ(J23), =ГОД(J23) и =ДЕНЬ(AW23), =МЕСЯЦ(AW23), =ГОД(AW23).
Текст переменных ${Дата начала} и ${Дата окончания} мы сделали таким же, как цвет фона, чтобы они не отображались в печатном документе. В тех же целях мы уменьшили ширину строки.
Важно: в шаблонах на основе таблиц Excel каждая переменная должна занимать отдельную ячейку, без пробелов и других символов до и после названия переменной. Это необходимо для правильной подстановки данных из формы. На рисунке выше ** ${Дата начала}** и ${Дата окончания} занимают отдельные ячейки J23 и AW23.
Если документ построен так, что несколько полей все-таки должны располагаться в одной ячейке, сначала занесите эти поля в разные ячейки, а затем объедините их в той строке, в которой они должны отображаться на печати. В примере ниже мы объединили исходные ячейки с помощью формулы:
= "Счет на оплату № "&B5&" от "&D5
Нам нужно, чтобы в печатном документе отобразилась только верхняя строчка, в которой содержатся объединённые поля: именно в неё попадут данные из формы. Чтобы текст из строки 5 не попал в финальный документ, сделайте его таким же по цвету, как фон таблицы. В тех же целях можно уменьшить высоту строки.
Введённые в форму данные можно использовать в шаблоне Excel при постановке условий. Например, пользователь заполняет анкету онлайн и ставит галочку «Зарплатный клиент». Чтобы галка появилась в печатной версии анкеты, добавляем формулу с условием:
=ЕСЛИ(C2="Да";V)
После этого цвет текста в ячейке C2 можно сделать белым, чтобы она не отображалась при печати.
Как передать изображение из формы
В печатную версию документа можно передать изображение из формы: логотип, QR-код, скан документа. Для этого добавьте в шаблон документа переменную ${Название поля:PreviewFirst} — в нашем примере это ${Файлы:PreviewFirst}.
Важно: ячейка не увеличивается автоматически. Заранее увеличьте ее размер в шаблоне документа, чтобы картинка поместилась.
Вместо переменной в версии документа для печати вы увидите изображение первого приложенного к форме файла.
Как перенести табличные данные в печатный шаблон MS Excel
Если в форме есть таблица, можно перенести данные из неё в печатный шаблон Excel, например, когда нужно провести дальнейшие расчёты или построить диаграмму. Для этого вставьте в названия столбцов печатного шаблона параметры из формы. Допустим, в форме есть таблица с отчетом по продажам в филиалах, а в ней столбцы «Филиал», «2018», «2019» и «2020».
В нужные ячейки печатного шаблона вставляем переменные с названиями столбцов: ${Филиал}, ${2018} и так далее.
Загружаем обновленный печатный шаблон в форму. Теперь данные из таблицы формы будут попадать в Excel-файл.
Если в вашем документе есть данные под таблицей, они автоматически опустятся ниже на нужное количество строк после заполнения таблицы в форме.
Генерация документов и отчетов из реестра или базы данных Excel с помощью кода VBA для просмотра, анализа и вывода на печать. Создание, заполнение, удаление.
Нет смысла хранить множество документов и отчетов в отдельных файлах, если существуют реестры и базы данных Excel, в которых уже есть вся необходимая информация. Каждый документ или отчет можно сгенерировать с помощью кода VBA в виде временного файла, просмотреть его, проанализировать, распечатать. Затем удалить его, а при необходимости сформировать снова.
Создание документа или отчета из шаблона
Допустим, у нас есть реестр документов или база данных Excel с какой-либо информацией. Чтобы создать документ или отчет и заполнить его данными, необходим его шаблон (печатная форма).
Шаблон создаем вручную на отдельном рабочем листе или с помощью кода VBA при заполнении документа. Способы создания шаблона определяют место его хранения:
- В коде VBA. Такой способ возможен для несложных печатных форм.
- В рабочей книге Excel с реестром или базой данных на скрытом листе.
- В отдельном файле, который не обязательно сохранять как шаблон Excel (*.xlt*).
Я предпочитаю создавать шаблон вручную и хранить его на скрытом листе в книге с реестром или базой данных. Такой способ подходит для подавляющего большинства случаев.
Из редких исключений можно назвать печать ценников на основании товарной накладной, сохраненной в Excel. Шаблон ценника и программный код VBA приходится хранить в отдельном файле, по команде из которого открывается и обрабатывается товарная накладная.
Назовем лист с шаблоном документа или отчета — «Shablon». Для создания новой печатной формы скрытый лист с шаблоном необходимо скопировать:
With Worksheets(«Shablon») .Visible = True .Copy After:=Worksheets(Worksheets.Count) .Visible = False End With |
Данный код вставит новый лист с шаблоном в ту же книгу после всех имеющихся листов. Чтобы шаблон скопировать в новую книгу, заменяем строку .Copy After:=Worksheets(Worksheets.Count)
на .Copy
. Печатная форма откроется в новом файле.
Сразу после создания, обращаться к новому листу можно как к активному (ActiveSheet), даже в том случае, если он скопирован в новую книгу. Чтобы воспользоваться этой возможностью, порядок действий в программе должен быть следующим:
- Копирование информации в переменную массива из реестра или базы данных.
- Создание нового документа или отчета из шаблона.
- Заполнение документа или отчета, обращаясь к нему как к ActiveSheet.
Копирование информации и заполнение формы
Копирование информации
Информация о документе обычно хранится в реестре или базе данных Excel в одной строке. Информация для отчета может располагаться как в одной, так и в нескольких или во многих строках.
Если информация нужна из одной строки, перед запуском кода VBA следует выделить любую ячейку в строке с данными. Тогда в ходе выполнения программы можно будет определить номер строки по активной ячейке и извлечь из нее информацию.
Допустим, что лист называется «Reestr», а необходимая информация расположена в десяти первых ячейках каждой строки:
Dim nomer As Long, massiv() As Variant nomer = ActiveCell.Row massiv = Range(Cells(nomer, 1), Cells(nomer, 10)) |
Если для отчета требуется информация из нескольких строк, можно выделить их вертикально по любому столбцу и использовать следующий код:
Dim nomer1 As Long, nomer2 As Long, massiv() As Variant nomer1 = Selection.Cells(1).Row nomer2 = Selection.Cells(Selection.Cells.Count).Row massiv = Range(Cells(nomer1, 1), Cells(nomer2, 10)) |
В иных случаях, когда для отчета требуется большое количество строк, можно организовать автоматическое выделение диапазона, например, по интервалу дат.
Если требуется обработка данных для отчета, проводим ее в массиве. Для результатов обработки можно объявить еще одну переменную массива.
Создание и заполнение формы
После того как информация скопирована и обработана, создаем из шаблона печатную форму документа или отчета, лист которой после создания будет активным.
Заполняем ячейки печатной формы информацией из массива, обращаясь к листу с формой как к ActiveSheet. Если новый документ или отчет создан в той же книге, ее можно автоматически сохранить:
Чтобы не наблюдать за мерцаниями экрана во время выполнения процедуры VBA Excel, можно временно отключить его обновления:
Sub GeneratsiyaDokumenta() Application.ScreenUpdating = False ———— операторы ———— Application.ScreenUpdating = True End Sub |
Удаление печатной формы
Если лист документа или отчета временно сохраняется в книгу с реестром или базой данных, можно предусмотреть его простое удаление без выведения дополнительного диалогового окна.
Для этого необходимо на лист шаблона правее печатной формы вставить кнопку из коллекции «Элементы управления ActiveX». Дважды кликнуть по ней и в открывшемся модуле листа внутрь автоматически сгенерированного объявления процедуры вставить строку Call UdaleniyeLista
:
Sub CommandButton1_Click() Call UdaleniyeLista End Sub |
Затем в модуль текущей книги добавляем процедуру:
Sub UdaleniyeLista() Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True End Sub |
Кнопка вместе с шаблоном будет копироваться в новую печатную форму. При нажатии кнопки активный лист будет удаляться кодом VBA без предупреждения от Excel.