Все началось с того, что мне поставили задачу: «У менеджеров есть большой телевизор. Сделай так чтобы у них там крутились красивые циферки и графики с результатами продаж».

Условия задачи:
-
Данные берем из 1С
-
Стандартные дашборды 1С «некрасивые»
-
Не применяем дополнительные обработки 1С (во‑первых в программировании 1С я не очень силен, во вторых идет переход на 1С ERP и не все еще доделано и отлажено). Постараться обойтись штатными средствами.
Красивым дашбордом был признан Apache Superset.
Чтобы Superset начал показывать красивые картинки надо записать данные для отображения в БД желательно PostgreSQL. Подробностей о подготовке окружения рассказывать не буду, на Хабре уже есть статьи о разворачивании PostgreSQL и Superset.
В итоге 1С просто выгружает в определенное время нужные отчеты в формате .xlsx и складывает их в сетевую папку. После этого скрипты, написанные на питоне и выполняемые через планировщик Windows в нужное время после выгрузки отчетов, переносят excel’эвские таблицы в Postgres. Менеджеры и руководители смотрят на дашборд и радуются (не всегда) достигнутым результатам. Нагрузка на серверы 1с существенно снижается и упорядочивается.
Понятно, что способ так себе и многие профессионалы будут смеяться надо мной, но тут главное было «быстро и недорого». К слову есть уже изобретенный велосипед для этих задач — Экстрактор 1С от Денвик, но его стоимость около 30–60 тыр. в год. А если баз 1С будет много, то сильно дороже.
Ранее в компании был назначен специальный человек, который отвечал за презентации для руководства и рисование красивых картинок. Когда он увидел Superset, он понял, что это круто и он тоже хочет делать автоматические динамические дашборды. Человек спросил меня, как он сам может сделать датасет для дашборда. В этот момент я понял, что будет проще написать для него какое‑то небольшое приложение, чем проводить курс молодого питониста‑любителя.
Основная сложность перекачивания этих данных заключается в том, что 1С выгружает свои отчеты в крайне странных таблицах. Строки с непонятной дополнительной информацией, пустые колонки и так далее и т.п.
В результате усердных трудов Гемини, Курсора и немного меня, на свет родился Экселятор Вер.0.1! Это приложение по сути повторяет действия моих скриптов по загрузке экселек в PostgreSQL.

Что он делает:
1. Удаляет все строки до ключевого слова. При выгрузке отчета из 1С вы можете назвать первую колонку более уникально чтобы не было повторов (например: Номер-ключ)
2. Находит и удаляет все пустые колонки.
3. Убирает мягкие знаки из слов в первой строке(чтобы не было знаков ' при переводе)
4. Переводит транслитом первую строку и делает ее названием колонок.
5. Подключается к БД, сносит старую таблицу и записывает новые данные. Пока так.
Если нажать «Подготовить данные», то будут выполнены пункты с 1 по 4, а в диалоговом окне вы увидите процесс работы и head готового датафрейма (первые 5 строк).
После ввода данных в окне «Подключение к БД» можно нажать «Проверить соединение» и проверить правильность введенных данных.
Большая часть полей ввода всегда будет одинаковой, поэтому добавил возможность сохранить настройки. В файл json будут сохранены все данные из полей ввода. При загрузке — все сразу подставится в нужные поля. Таким образом, чтобы загрузить свежий отчет из 1С в базу данных вам нужно будет запустить приложение и сделать 2 клика: «Загрузить настройки» и «Запустить загрузку». Получается, что в заголовке не обманул)
При разработке использованы в основном библиотеки customtkinter, pandas и psycopg2. SQLAlchemy стараюсь избегать, потому что по моему мнению конструкции в нем получаются более сложно читаемыми. А учитывая что большинство запросов пишет ИИ, то мне проще ограничить его только psycopg, чтобы потом понять что он натворил.
Из интересного — в customtkinter копирование и вставка работают только на английской раскладке клавиатуры. Чат ЖПТ и Гемини не смогли быстро справиться с этой проблемой. Пришлось поискать информацию самому и написать правильный запрос через Курсор. Если кому будет интересно, то можете посмотреть в коде как это вылечено.
Зачем я тут все это написал?
1. Получить обратную связь — слишком ли мой способ плохой. В чем его слабые стороны? Как бы вы решили данную задачу?
2. Вдруг кому‑то, как и моему коллеге, окажется полезным такое приложение.
3. Если моя выдумка окажется полезной (посмотрим по реакциям), то я продолжу развитие Экселятора. Можно было бы добавить возможность сохранения нескольких файлов настроек и автоматический запуск по расписанию.
Спасибо дочитавшим!
ссылка на оригинал статьи https://habr.com/ru/articles/1028016/