Макрос VBA в связке с SQL: помоги коллеге и себе

В одном из прошлых постов рассказывал про хранимую процедуру на SQL и зачем её было писать, хотя не умел. Кто не читал - вот сюда: https://set.ki/post/C7QMX6Z

Добавим контекста. А что, если данные по сервисным центрам нужны тебе для всех дашбордов, актов выполненных работ, расчетов и прочего, нужны целой сервисной сети с колл-центром, менеджерами и т.д., но заполнять и контролировать мастер-дату должен другой коллега? И это человек, который старше в полтора раза, чем ты, он максимум нажимает кнопки в Excel и ты точно не можешь дать ему доступ к таблице SQL, ибо он сломает все к чертям? А спрашивать постоянно тоже не хочется, ничего ли не забыли?

Именно с таким я столкнулся. Хороший человек, но просто не потянет обучить его, максимум заполнить таблицу. Нет, не увольняют там таких, там обычно фразы про то, что он 10, 15, 20 лет тут работает и как же так. Подумайте, что бы сделали вы. Как будете готовы, читайте дальше мой вариант.

Понятное дело, что таблица и витрина для дашборда в Superset находились на сервере SQL. Человек умел пользоваться Excel, максимум Access. Окей, раз это умеет, то будем связывать данные из двух сущностей, т.е. техническая задача - получить текущие данные из таблицы SQL и загрузить обратно после редакции, используя Excel. В Excel есть возможность связываться с сервером и подключать данные для тех же сводных через PowerQuery. Также в интернете есть описания, как обновляется такая сводная через макросы. Также есть отдельные фишки для SQL. Поэтому было решено использовать макросы VBA. Получилось 2 макроса: один загружал в Excel, второй брал таблицу из него после редактирования, загружал таблицу, потом запускал хранимую процедуру для витрины и обновлял её. Как раз фрагмент второго в редакторе VBA на скриншоте. В Excel это выглядит, как обычный файл, отличается только форматом xlsm с допуском работы макросов и двумя кнопками на панели Excel сверху, чтобы коллега не лазил в редактор VBA. А в самом Superset уже обновлялись данные раз в час от текущей витрины. Разумеется, в лоб работать не будет. Пара хитростей: - нужен драйвер ODBC для соединения и работы Excel с SQL - при работе макроса нужно подключение к серверу, т.е. для разделения доступов человеку надо написать отдельную учётную запись и доступы к таблицам, операциям на SQL, чтобы другое точно не было тронуто - таблица была небольшая, поэтому работало быстро, но если вдруг там будет дубликат в ключевом поле из-за ручного ввода, то работать перестанет. Поэтому в таблице не удастся сделать primary_key, а для защиты от дурака раз в день сохранялась актуальная версия. Пару раз пригодилось.

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

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

#аналитикаданных #bi #vba #excel #sql #макросы

Макрос VBA в связке с SQL: помоги коллеге и себе | Сетка — социальная сеть от hh.ru