Как создать программу для заполнения бланков

Создание формы заполнения документов в Excel

Нам потребуется обычный файл Excel. Вы можете взять за основу имеющийся или начать с чистого листа.

Составляем список данных, которыми нам требуется заполнять договор: номер, дата, предмет договора, сумма, срок, данные заказчика и так далее. Для каждого элемента нам потребуется создать в Excel свою ячейку для заполнения. У меня получилась примерно такая форма:

Пример оформления формы

Оформление может быть любым, на ваш вкус и цвет. При формировании формы я использовал стили, расположенные на вкладке Главная. Это быстро и удобно, а также позволяет в один клик изменить цветовую гамму на вкладке меню "Разметка страницы" — "Тема"

Стили Excel

Автоматизация формы

Часть данных (номер договора, сумма, срок), необходимо заполнять всегда тут ничего не сделаешь. Но как мы видим есть часть данных, которые хорошо бы заполнить автоматически. Это — сумма прописью, срок прописью, данные заказчика в родительном падеже и так далее. Давайте их автоматизируем.

Дата договора

В Excel существует множество функций по работе с датами. Если дата договора всегда текущая, то можно использовать функцию =СЕГОДНЯ(). При необходимости можно настроить, чтобы дата рассчитывалась как следующий рабочий день =РАБДЕНЬ(СЕГОДНЯ();1).

Для вставки даты вы можете использовать календарь из программы:

Вызов формы календаря

Вставка даты из календаря

Сумма договора

Тут можно автоматизировать заполнение значения суммы договора прописью, для этого в программе есть специальная кнопка Деньги прописью, которая поможет сформировать формулу для автоматического расчета. Программа умеет склонять по всем падежам и поддерживает формирование суммы в нескольких форматах.

Вставка деньги прописью

Вставка денег прописью

Срок прописью

Срок прописью аналогично, хочется вводить только цифры, чтобы в документ вставлялось прописью полностью. Кстати, это касается не только срока, это может быть количество чего угодно: услуги, штуки, килограммы, яблоки, помидоры и так далее. В программе Doc.filler все это можно автоматизировать. Откройте функции и выберите Вещи прописью.

Выбор формулы Вещи прописью

В диалоговом окне сформируйте нужную вам формулу.

Диалоговое окно функции Вещи прописью

Заполнение заказчика

Данные заказчика идеально подгружать из внутренней системы заказчика 1С или другой CRM. Если такой возможности нет, то для начала можно упростить жизнь путем создания справочника правовых форм (ООО, ОАО и т.д.) Тогда нам потребуется просто выбрать из списка нужную форму и указать наименование. Остальное мы сделаем на формулах.

Итак создадим отдельный лист и разместим там таблицу со списком правовых форм.

Таблица правовых форм

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

Теперь на форме создадим динамичный выпадающий список с данными правовых форм.

Осталось создать формулы для заполнения заказчика сокращенно в моем случае это формула = Правовая_форма &" "& Заказчик_наименование . Замените на соответствующие ячейки.

Формула для полного наименования заказчика следующая =ВПР( Правовая_форма ; ПравовыеФормы ;2;0)&" "& Заказчик_наименование . ПравовыеФормы — название таблицы со справочником форм.

Результат выглядит следующим образом:

Заполнение заказчика

Склонение ФИО подписанта

Сейчас посмотрим как автоматически склонять ФИО подписанта. Для этого в программе есть соответствующая функция, которую можно вставить из меню:

Вставка функции Склонение ФИО

Функция ДФ_СклонениеФИО

Программа умеет склонять 90% русских ФИО по всем падежам.

Склонение должности и других фраз

Аналогичным образом склоняются должности и другие короткие фразы договора, например Устав. Вставьте функцию Склонение фраз через ленту меню:

Вставка функции Склонение фраз

Функция Склонение фраз

Итоговая форма

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

Заполненная форма

Следующим нашим шагом будет создание шаблона договора и последующее его автоматическое заполнение данными из формы.

Автоматическое заполнение бланков документов данными из Excel

Как известно, табличный редактор Excel используется для работы с табличными данными, а текстовый редактор Word для работы с текстами. И одно и другое приложение широко используются пользователями для подготовки различного рода документов, таких как договоры, сметы, акты выполненных работ, квитанции, путевые листы, доверенности и так далее. Кроме того, зачастую различные реестры и базы данных с информацией по клиентам, продавцам, покупателям, поставщикам и подрядным организациям создаются в приложении Excel, а сами данные из этих реестров используются для составления документов и заполнения шаблонов в текстовом редакторе Word. Далее рассматриваются варианты автоматизации при заполнении документов данными из рабочих книг Excel.

Заполнение бланков Excel данными активного рабочего листа

Большое количество документов создается пользователями в табличном редакторе Excel, это всевозможные приказы, ведомости, графики, журналы, ордера, акты, чеки, счета и счет-фактуры. Все это изобилие документов требует своего заполнения. Какие-то бланки заполняются специальными программами по учету финансово-хозяйственной деятельности, такими как 1С или SAP, какие-то просто распечатываются для дальнейшего заполнения их вручную, а какие-то требуют своего заполняются на компьютере с последующей печатью. Достаточно часто возникает необходимость сформировать сразу несколько документов, в которых используются одни и те же данные, например счет, счет-фактура и акт выполненных работ.

Процесс заполнения бланков документов в Excel можно автоматизировать. Одним из способов автоматизации является использование надстройки для заполнения подготовленных бланков документов.

Надстройка для Excel позволяет выбрать как один, так и несколько бланков документов и быстро заполнить их данными активного рабочего листа, предварительно подготовленными для этого.

kak zapolnit rabochie knigi dannymi aktivnogo lista

Заполнение бланков Excel исходными данными по списку

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

Надстройка также позволяет выбирать сразу несколько шаблонов для заполнения.

«Заполнение бланков и документов»

В данной категории представлены программы для заполнения электронных и бумажных документов и бланков. Данные утилиты позволяют сэкономить время и автоматизировать текущие процессы документооборота в компании или организации. Многие из приложений предусматривают функционал для сканирования форм и создания нужных полей в окне предварительной подготовки документа. При отсутствии возможности подключения сканера программа предложит загрузить и отредактировать уже готовый файл. Также некоторые утилиты предоставляют базу шаблонов для быстрого формирования трудового договора, оферты, сертификата, справок и расходных накладных, дипломов, форм бухгалтерской отчетности, платежных поручений и других документов. При этом пользователь получает возможности форматирования текста, добавления подписи или печати в соответствующей графе, удаления лишних элементов и вставки картинок, графиков, формул и диаграмм.

Кроме того, некоторые приложения поддерживают популярные форматы офисных файлов, а также включают редактор для подготовки документа к печати. Последний поможет исключить случаи смещения элементов на странице и брака в процессе печати.

Как я запускал шаблонизатор офисных документов как сервис

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

Постановка проблемы

Однажды ко мне обратился друг со следующим вопросом: есть накопленная экспертиза в виде базы юридических документов, хотелось бы эту экспертизу монетезировать в виде сервиса. На что было предложено встретиться через некоторое время и обсудить техническое задание.

Анализ спроса

На сервисе подбора слов от Яндекса были найдены обнадеживающие цифры. Люди постояно ищут образцы документов.

Анализ конкурентов

В качестве конкурентов виделся только Freshdoc. Он позволяет после заполнения анкеты за небольшую сумму скачивать документы. Как преимущество можно было предоставить возможность редактировать текст, т.к основными пользователями сервиса должны были стать опытные юристы. Они отвечали бы за дальнейшее наполнение и актуализацию базы документов. А также убрать необходимость вводить однотипные параметры несколько раз: фио, адреса. Второй категорией пользователей должны были стать обычные пользователи и менее опытные юристы, которые бы скачивали готовые документы, созданные по готовым шаблонам.

Техническое задание

Необходимо разработать сервис, в котором пользователь без предварительного обучения сможет подготовить под себя шаблоны юридических документов (.doc/.docx файлы) а также вести свои дела. В деле необходимо предусмотреть возможность заводить параметры. Примерами параметров могут служить: телефоны, адрес и наименования судов, ФИО, реквизиты и т.д.

Организовывать шаблоны документов по разделам/папкам в виде дерева. Дополнительно необходимо автоматически предзаполнять поля документов из шаблонов, используя значения параметров в карточках дела.

Минимально значимый продукт

На коленке была быстро написана первая версия приложения. Технически это был монолит на .net core версии 2.1. На фронтенде выбор пал на VueJs с Vuetify как более простого, если сравнивать с React, и популярного на тот момент решения. Для импорта и конвертации документов использовался сервис docsbox от dveselov. Docsbox написан на питоне и имеет удобное HTTP API и при необходимости мог масштабироваться, т.к в нем есть очередь на Redis и воркер процессы для вызова API LibreOffice (pyuno). На фронтенде использовался rich text editor: tinymce с плагином templates. В качестве хостинга выбор пал на Digital Ocean с dokku. Был поднят CI на Gitlab и Nexus репозиторий для хранения пакетов и библиотек.

внешний вид первой версии

внешний вид первой версии

Впечатления и недостатки первой версии

Заказчику прототип понравился, было решено продолжить работу. Но возникли технические трудности на более чем тривиальных документах: в редакторе HTML после импорта .doc и генерации PDF постоянно съезжала верстка документов. Были попытки заменить SDK LibreOffice на библиотеки, которые могли дать прирост в качестве документа HTML для редактирования, максимальная ставка делалась на Open XMl SDK, но даже она давала артефакты в HTML редакторе.

Была даже выпущена отдельная версия с редактором .tex на библиотеке pandoc по аналогии с сервисом Overleaf. Но использовать .tex человеку далекому от программирования не представлялась возможным.

пример генерации превью документа .tex

пример генерации превью документа .tex

Ненужные улучшения

Монолит был преобразован в микросервисы. От MVC части отделился API проект, добавлен отдельный процесс Worker для обработки событий из API. Здеь очень помогла библиотека Marten и ее поддержка стримов событий.

Очень много времени было потрачено на настройку SSR и webpack. Изначально использовалилсь штатные node services для пререндерера от Microsoft, но их вскоре задепрекейтили. Для чего был написан свой велосипед на ViewComponent и KoaJs

и тогда из Index.cshtml вызывается следующий код

Также ушло время на прикручивание и настройку OAuth 2 с OpenID Connect. Был взят стандартный IdentityServer 4 с хорошим дополнением в виде админки Skoruba Identity Server.

В IdentityServer были добавлены тенанты на уровне единой базы. Далее идентификатор тенанта использовался для запросов данных в ORM Marten.

Также был применен подход backend for frontend. Это позволило уйти от CORS запросов для API с одной стороны, с другой стороны реализовать автоматическое продление токена.

С помощью велосипеда на SSR можно было бы добавлять новые frontend фреймворки, разделяя их на уровне ViewComponent. Хоть эта идея и казалась очень интересной, но такой необходимости так и не возникло.

Принципиально другое решение. Версия 2

Как-то вечером я наткнулся на статью про LibreOffice Online. В нем для рендеринга использовался canvas, что решало мою проблему с отображением документов, но весь код для подстановки параметров в tinymce пришлось выкинуть, а вместо них писать макросы на питоне

внешний вид второй версии

внешний вид второй версии

Недостатки версии 2

Почти сразу я столкнулся с ограничением LibreOffice Online на 10 документов и пришлось собирать его из исходников. Также была исправлена проблема с терминированием TLS. Сервис просто не запускался. После того, как были изменены конфиги и поправлен код проверки инициализации TLS сервис наконец ожил. Для WOPI сервера было решено использовать открытый проект на .net. Для хранения файлов s3-совместимый продукт — Minio. Так как сервис предполагал хранение персональных данных, то у заказчика всегда должна была быть возможность развертывания локально. Было понятно к этому времени, что любовь LibreOffice Online к потреблению памяти на открытый документ

убивает идею хостинга сервиса на одном сервере. Нужно было переходить на более отказоустойчивую архитектуру. Как стандарт выбор пал на Kubernetes, а так как денег у меня было мало, то его дистрибутив k3s от Rancher.

Kubernetes на Hetzner

Целью было создать демо-кластер для разработки стоимостью до 50 euro в месяц.

Был найден удобный terraform скрипт и написаны helm-чарты.

Для мониторинга сначала прикрутил New Relic c pixie, но из-за высокой стоимости New Relic (на конец месяца из-за одних только метрик насчиталось 400 usd) и повышенных требований на агентов pixie (2 GB RAM на агент) пришлось заменить на cilium.

Для cilium в скриптах понадобилось лишь выключить flannel.

архитектура приняла свой финальный вид

архитектура приняла свой финальный вид

Лендинг и уроки

Чтобы не наполнять базу пользователей ботами регистрацию в IdentityServer закрыл. Для запроса доступов в систему поднял простейший статический сайт на eleventy с шаблоном от google. До добавления аналитики сайт выдавал 100 по оценкам page speed test.

После добавления сервисов аналитики сайт деградировал до приемлимых 80.

Вместо документации записал на youtube обучащие ролики с субтитрами.

Запуск и аналитика в Яндекс.Бизнесе

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

Забавно. На сколько мне известно, люди обычно ищут шаблоны, а не программы для их составления.

результаты работы рекламы за неделю

результаты работы рекламы за неделю

Выводы

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

Как ни печально, все технические решения и архитектура не будут играть никакой роли если проект никому не нужен.

Добавить комментарий

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