Макрос 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, а для защиты от дурака раз в день сохранялась актуальная версия. Пару раз пригодилось.
После того, как я доделал эти макросы, стало спокойнее. Я уже не менял раз в день-два по одной ячейке для каждого сервиса: телефоны, адреса, разрешения на ремонт конкретных видов техники. Но были и косвенные эффекты: вздохнул спокойнее и колл-центр с сервисными менеджерами, и пара соседних департаментов, потому что данные стали проводиться в порядок и ошибок о назначении ремонта не на те сервисы спустя месяц стало меньше.
Как вам? Какие у вас были странные способы решать проблемы автоматизации для коллег?
· вчера
Ежедневно в своей работе использую VBA Excel. Но я работаю только с сами таблицами excel + файлы с разными форматами, которые можно использовать через excel. Есть коллега, которая гораздо дольше меня работает и казалось бы, что она опытнее. НО...человек не развивается и застрял где-то на начальных этапах. И каждый раз, когда мои вот такие макросы попадают к ней, фуухх..., алгоритма хана..., потом когда ко мне обратно, то приходится исправлять на нормальное
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· вчера
Согласен, сколько видел макросов VBA, их стараются использовать для таблиц, форматирования, расчётов на конкретном компе под Excel. А алгоритмы да, и сам подумай, и за другого человека... хотя не все такие, видел я бухгалтеров и закупщиков, которые учат ML и Python, но это один-два из сотен людей
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён