Рассмотрены инструменты для автоматизации работы по заполнения документов, необходимых при подаче заявки на регистрацию программ для ЭВМ и баз данных. Описаны возможности языка программирования Python для решения поставленной задачи, обозначены перспективы для дальнейшей работы.
Ключевые слова: Python, PyQt5, python-docx, программа для ЭВМ, база данных
Введение. Переход отечественной экономики от сырьевой к высокотехнологичной невозможен без развития рынка интеллектуальной собственности. Исследования показывают, что показатели изобретательской активности, практического использования патентов в России растут, хотя и остаются на довольно низком уровне [1]. Получение патента позволяет защитить разработку, ограничить её неправомерное использование. Для получения патентов на изобретение и полезную модель необходимо заполнение заявления о выдаче патента Российской Федерации, согласия на обработку персональных данных.
Необходимость в регистрации объектов авторского права, к которым относятся программы для ЭВМ и базы данных, возникает для подтверждения авторства разработки и её последующей коммерциализации. Свидетельства о регистрации часто используются сотрудниками и обучающимися высших учебных заведений для отчетности по грантам, при написании квалификационных работ и диссертационных исследований.
Для регистрации в Федеральном институте промышленной собственности необходимо заполнить ряд документов: заявление о государственной регистрации программы для ЭВМ или базы данных, дополнение к заявлению, согласие на обработку персональных данных, согласие на указание сведений об авторе и т.д. [2] В вузе, возможно, потребуется заполнить ряд других документов. При этом они являются юридически значимыми и требуют внимательного заполнения. Даже незначительные отличия в одних и тех же полях документов может привести к отзыву заявок. По данным годового отчета ФИПС за 2016 год, за последние 5 лет подано 66756 заявок на регистрацию программ для ЭВМ и 8914 заявок на регистрацию баз данных, из них зарегистрировано 64417 и 8186 заявок соответственно. Отсюда следует, что 3-8% заявок не проходят регистрацию, что является нежелательным ввиду частой срочной необходимости в данной регистрации и потери уплаченной пошлины.
В случае коммерциализации результатов интеллектуальной деятельности также необходим ряд документов, автоматизация заполнения которых упростила бы трудовую деятельность патентоведа.
В организациях, таких как вуз, количество регистрируемых результатов интеллектуальной деятельности может достигать десятков и даже сотен в год, поэтому встает вопрос автоматизации заполнения утвержденных форм документов, чтобы избежать ошибок заполнения. Средством для автоматизации был выбран язык программирования Python 3.5, а именно 32-битная версия, поскольку подключаемые в дальнейшем библиотеки требуют именно эту разрядность.
Графический интерфейс. По умолчанию работа в Python ведётся в интерпретаторе, что по существу является консольным приложением. Однако для большинства пользователей использование консоли является неприемлемым, и встает вопрос о разработке графического интерфейса. Для 32-битного Python 3.5 существует библиотека PyQt5, являющаяся расширением фреймворка Qt на язык Python, необходимая для создания графического интерфейса. Интерфейс программы представлен на рисунке 1.
Рис. 1. Интерфейс программы
Интерфейс был создан посредством подключения ряда модулей. Для создания элементов классических пользовательских интерфейсов был подключен модуль QtWidgets, в котором выбирались следующие классы: QApplication, QWidget, QGroupBox, QRadioButton, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QLineEdit, QSpinBox, QScrollArea, QDateEdit, QTextEdit, QComboBox, QMessageBox, QFileDialog, QProgressBar. Рассмотрим их применение. Класс QApplication использовался для создания объекта приложения и для взаимодействия с операционной системой, а именно для получения размеров рабочего стола. Класс QWidget является родителем разработанного класса, а также используется отдельно как контейнер для вложенных элементов. Класс QGroupBox позволяет объединить в группу элементы, например, переключатели QRadioButton, используемые в данной программе для выбора регистрируемого объекта.
Поскольку в программе с динамически изменяемым содержимым абсолютное позиционирование было бы неэффективным, для горизонтального и вертикального выравнивания элементов на форме были использованы соответственно классы QHBoxLayout и QVBoxLayout. Добавление в контейнеры виджетов и других контейнеров происходит с помощью методов addWidget() и addLayout(). Помимо стандартных меток QLabel, кнопок QPushButton, и однострочных надписей QLineEdit в программе использовалось поле ввода целых чисел QSpinBox, которое указывало количество авторов результата интеллектуальной деятельности. При изменении значения в экземпляре QSpinBox происходит вызов функции, которая перерисовывает блок ввода информации об авторах, помещенный в контейнер QScrollArea, предусматривающий возможность прокрутки. В зависимости от переданного значения количества авторов программа уменьшает или увеличивает количество полей ввода.
При вводе сведений об авторах следует упомянуть класс QDateEdit, позволяющий вызывать методом setCalendarPopup(True) календарь для получения даты и тип QDate из модуля QtCore. Объекты класса QDate позволяют получить как сегодняшнюю дату, так и хранить в удобной форме дату, полученную от элемента QDateEdit [3].
Поскольку ряд полей для ввода подразумевает выбор из ограниченного списка значений, то здесь необходимо использовать класс QComboBox. При заполнении документов от лица организации, такой тип значений применяется, например, при выборе структурного подразделения. Полезной особенностью языка python при работе с такими списками будет использование словарей, которые аналогичны массивам в других языках программирования, с тем отличием, что индекс может быть любого типа. В данном случае применялись словари, где и ключи, и значения были строкового типа.
В целом разработка графического интерфейса с помощью инструмента PyQt5 довольно трудоемкий процесс. И хотя есть средство Qt Designer автоматизирующее разработку дизайна, но выходной файл имеет своё расширение, и файл необходимо целиком подгружать в свой проект, без возможности точной подстройки в коде. Данный файл можно конвертировать в код на языке python, но тогда все дальнейшие изменения придется вносить вручную уже в этом коде.
Экспорт документов. Описанная выше форма способна получить все необходимые данные, однако образцы документов для отправки в ФИПС имеют строгую и довольно сложную форму, которую трудно воссоздать программно, например, в Latex, поэтому возникла задача редактирования именно шаблонов документов ФИПС. Изначально данные шаблоны были представлены в устаревшем формате doc и для редактирования современными средствами были преобразованы в формат docx.
Для работы с документами в формате docx на python существует библиотека python-docx, способная создавать новые и редактировать существующие документы [4]. Функциональность данной библиотеки ограничена, в основном она способна добавлять абзацы, слова, таблицы, строки и столбцы таблиц, но не способна удалять их. Также существуют сложности с редактированием сложных объектов, таких как гиперссылки и флажки, которые присутствуют в формах на регистрацию результата интеллектуальной деятельности. За счет этого пришлось создать ряд шаблонов с уже отмеченными флажками.
Для открытия документов в данной библиотеке предусмотрен класс Document(). Если в скобках атрибуты не указаны, то создается новый документ, если указаны путь и имя в виде строки, то открывается существующий файл, например, "filename.docx".
Документ, с которым ведется работа, имеет несколько упрощенную структуру, а именно состоит из параграфов (paragraphs) и таблиц (tables), доступ к которым осуществляется по индексу. Параграфы состоят из элементов runs, содержащих отдельные слова и элементы. Если параграф задает общий стиль текста, такой как выравнивание, то для элементов runs доступны стилевые свойства, применяемые непосредственно к тексту, а именно различные виды начертания, курсив, подчеркивание и т.д. Каждая таблица имеет массив строк (rows), состоящих из ячеек (cells), таким образом для доступа к первой ячейке первой строки первой таблицы необходимо ввести NameDocx.tables[0].rows[0].cells[0].text. Текст в каждой ячейке состоит из параграфов, взаимодействие с которыми аналогично взаимодействию с параграфами вне таблиц.
Доступ к элементам текста возможет при использовании циклов, например, чтобы вывести содержимое всех параграфов документа NameDocx, необходимо написать следующий цикл:
for paragraph in NameDocx.paragraphs:
for cell in paragraph.cells:
print(cell.text)
Сохранение отредактированного документа возможно с помощью метода save():
NameDocx.save(“New_doc.docx”)
Заключение: Таким образом, применение python и подключенных модулей позволило автоматизировать заполнение документов заявки на регистрацию программы для ЭВМ или базы данных. Однако для использования данной программы на компьютере пользователя должен быть установлен сам Python и модули PyQt5 и python-docx. Существуют модули, например, cx_Freeze, способные создать из кода на языке python исполняемый exe файл, однако данный модуль некорректно работает с модулем python-docx и решить проблему переноса программы на другие компьютеры на данном этапе работы пока не удалось. Однако достигнутые результаты позволяют на 80% сократить время заполнения документов и избежать формальных ошибок.
На данном этапе полностью автоматизирована работа с объектами авторского права и дальнейшем направлением работы будет автоматизация работы с объектами промышленного права, а также заполнение лицензионных договоров.
Литература:
1. Кузнецова Л. А. Рынок интеллектуальной собственности и его развитие в России: автореф. дис. на соиск. учен. степ. канд. эконом. наук: – Воронеж.–2013.–23 с.
2. Кучуков В.А. Особенности оформления документов для государственной регистрации программ для ЭВМ и баз данных // Молодой ученый. — 2016. — №16. — С. 254-256.
3. Python 3 и PyQt 5. Разработка приложений / Н. А. Прохоренок, В. А. Дронов. — СПб.: БХВ-Петербург, 2016. — 832 с
4. Sweigart A. Automate the Boring Stuff with Python: Practical Programming for Total Beginners. – No Starch Press, 2015.