1С: Кабинет сотрудника: Как мы чинили то, что называлось «готовым продуктом»
- четверг, 29 мая 2025 г. в 00:00:07
Привет, Хабр (и просто случайные читатели, зашедшие сюда в поисках истины или интересной статейки на пару минут)!
Сегодня я расскажу вам историю о том, как я провёл полгода в тесных объятиях «1С: Кабинет сотрудника» на новой технологии 1С:Элемент — системы, которая обещала сделать кадровый документооборот простым, как бутерброд с колбасой. Но, как выяснилось, бутерброд этот оказался с сюрпризом… то ли огурцом, то ли гвоздём.
Впрочем, не будем забегать вперёд. Пристегните ремни, мы взлетаем!
P.S. В этой статье будет разобрана лишь сторона WEB приложения разработанная на 1С:Элемент: её клиентские процессы и серверные, стороны 1С:Предприятия не будет, ей я не занимался.
Официально:
«1С:Кабинет сотрудника – это решение для организации кадрового электронного документооборота (КЭДО), которое ускоряет обмен документами, сокращает трудозатраты и делает сотрудников чуть счастливее».
Неофициально (Моё объяснение):
Это веб-приложение, где сотрудники могут подавать заявления на отпуск, больничные и прочие радости жизни и подписывать их электронной подписью прямо с мобилки или с ПК, а кадровики — подписывать их электронной подписью, не вставая с кресла (в идеале).
Звучит здорово, правда? Но, как говорится, «дьявол в деталях», а точнее — в коде, дизайне и логике работы.
Мой путь начался с проекта по доработке Личного кабинета сотрудника на новой технологии для разработки 1С:Элемент (об этом можно почитать в этой статье) для крупной компании (3000+ пользователей). Задача — сделать так, чтобы всё работало не только в вебе, но и в мобильном приложении, которое уже вовсю использовалось у заказчика.
Вклейка продукта из коробки прошла гладко (спасибо iframe), но дальше началось самое интересное.
Что было «из коробки»:
Главное — типа «новостная лента», но без мемов.
Зарплата — цифры, от которых либо радуешься, либо плачешь.
Документы — тут кадровики шлют вам бумажки.
Отпуск — можно запросить отпуск и помечтать о море.
Отсутствия — можно посмотреть, кто сегодня «заболел» (спойлер: не все болеют).
Справки — заказываем, ждём, получаем.
Визуально — ничего так, но функционально… Есть свои приколы.
Реализовано за полгода многое, я бы сказал, что от изначального продукта осталось совсем немного. Цели ставились такие:
Реализовать новые процессы (Кадровый перевод, Целевой отпуск, Справка об окладе, Командировки, Продление/перенос отпуска в связи с больничным, Перенос отпуска (график отпусков), Отсутствие с сохранением оплаты: диспансеризация, донору крови, гос.обязанности, единовременная выплата по отпуску)
Доработка интерфейса
Исправление ошибок, подаренных продуктом, и недодуманных решений
А теперь переходим к самому интересному — к страданиям…
При необходимости создания новых процессов в системе мне, можно сказать, повезло, что можно клонировать существующий процесс и затем адаптировать его под новые задачи. Однако на этом пути встретилось несколько серьезных проблем.
Проблема №1:
В моей версии системы глобальный поиск работал так же эффективно, как попытка найти смысл в "Игре престолов" после 6 сезона. Приходилось вручную открывать все файлы, которые хоть как-то могли относиться к процессу, и искать нужное, как археолог с кисточкой.
Результат? Мой компьютер начал взлетать, как ракета Илона Маска, а оперативка в браузере спокойно съедала 12 ГБ. Для сравнения:
Chrome с одной вкладкой — 500 МБ.
Chrome с моей системой — достаточно, чтобы запустить виртуальную машину с Windows 98.
Проблема №2:
Интеграция с 1С:ЗУП, согласования заявлений и ещё многое-многое другое сделана по принципу:
"Давайте напишем одинаковую логику пять раз, но чуть-чуть по-разному, чтобы потом никто не смог это поддерживать!"
Хочешь добавить новый тип заявления? Поздравляю, ты только что получил десять часов копипаста с риском что-то случайно сломать. Видимо, разработчикам платили за количество строк кода, и они решили, что DRY (Don’t Repeat Yourself - Не Повторяйся) — это просто совет, а не правило. Вот скажите мне, может я чего-то не понимаю, переиспользование функций стало не модным?
Конечно, я понимаю, что дизайнеры старались. Рисовали, вклеивали логотип 1С:Кабинет сотрудника с душой. Но вот вопрос: а какое отношение этот логотип имеет к продукту, который используется внутри других предприятий, где пользователи в лучшем случае думают: «1С — это та штука, из-за которой бухгалтерия ругается»?
Представьте:
Слесарь Толян заходит в приложение, чтобы прикрепить заявление на отпуск (мечтает о Геленджике, море и шашлыках). А вместо понятного интерфейса его встречает загадочный логотип, который не вызывает у него никаких ассоциаций, кроме: «Туда ли я вошёл? Может, это вирус?»
Круто, конечно, что место под логотип есть. Но вот, как его вклеить в коробочный продукт без помощи разработчика, который постиг весь дзен разработки на 1С:Элементе? Ответ прост: никак.
И в этом весь прикол 1С: купить и использовать "из коробки" без допиливания — невозможно. Да, это даёт нам, разработчикам, работу и востребованность. Но если вдуматься… за что вы так с пользователями?
Шаг влево, шаг вправо — расстрел.
Как я уже писал в прошлой статье про 1С:Элемент, здесь отклонение от дизайна, как прогулка по минному полю. Но заказчик хочет, чтобы его Кабинет сотрудника был в фирменных цветах, по брендбуку, с золотыми нитями и вышиванкой.
Что делать? Костылить!
Написал JS-код (спасибо 1С:Элемент, что подарил мне такую возможность), который в реальном времени перекрашивает интерфейс, нарисовал свои кнопки, прикрутил стили… и вуаля — красота (ну, или хотя бы что-то, что не вызывает у Толяна желания бежать к айтишникам с криком «У меня всё сломалось!»).
Кейс 1: "Быстро — не значит грамотно"
Кабинет сотрудника, судя по всему, разрабатывался с девизом "Главное — выпустить, а там разберёмся". Орфографические ошибки плодились как грибы после дождя — и в админке, и в интерфейсе. Видимо, проверка орфографии считалась "премиум-функцией". У меня и у самого проблемы с орфографией проскакивают, но, когда ты делаешь такой продукт, ну проверь, пожалуйста.
Кейс 2: "Большой брат следит за тобой (и шлёт SMS)"
«Вася в отпуске из-за утраты близкого? О, грустно… А Петя в Таиланде? Вот везунчик!»
Вот мы столкнулись с такой проблемой, о каждом заявлении на отпуск или на отсутствие коллеги узнают по SMS.
Мы подумали: "А может, не стоит светить личные данные перед всеми?" И оставили просмотр отпусков и отсутствий только руководителям. Хотя, конечно, лишили коллектив поводов для сплетен — простите.
Кейс 3: "Квест: получи ЭЦП или потеряй рассудок"
Новый сотрудник заходит в систему. Может ли он сразу подать заявление? Конечно, нет! Сначала нужно:
Найти раздел "Документы".
Распечатать бумажку о переходе на ЭДО.
Отнести её в кадры (желательно бегом).
Вернуться, пролистать профиль до упора.
Нажать кнопку создания ЭЦП.
И вуаля — через пару часов можно работать!
Мы решили: "А давайте просто попросим пользователя придумать ЭЦП при первом входе?" Остальное сделается само. Гениально? Да. Почему так не сделали сразу? Видимо, хотели добавить сотрудникам экшена.
Кейс 4: "Согласование заявлений: игра в рулетку"
Разработчики 1С:Кабинета сотрудника постарались на славу хочу отдать им должное: механика согласований получилась сложной и интересной, как квест в Dark Souls. Но не без проблем…
Проблема 1: Если ваш руководитель не захотел переходить на КЭДО (а у нас в стране это дело добровольное), то и вы не сможете ничего согласовать, так как всё привязано к нему, конечно, есть свои варианты в админке поиграться, но на гигантскую организацию невозможно настраивать и следить за кадровыми перестановками постоянно.
Проблема 2: Руководитель уехал в отпуск, заместителя не назначил, а ваша срочная командировка зависла в цифровом чистилище.
Решение после суммарного месяца доработок получилось таким: Теперь сотрудник сам выбирает, кто будет согласовывать его заявление. Риски — на нём. Спорно? Возможно. Зато теперь не нужно молиться, чтобы начальник внезапно не улетел на Бали без интернета.
На самом деле в согласования было супер много всего переделано, здесь не было настройки по видам отсутствий и по видам отпусков, то есть таким согласующим заявление уходит при Отпуске вне графика, а таким согласующим уходит при Целевом, из коробки эта технология позволяла разделять лишь на отпуск, отсутствия и документы.
Так же добавлен новый тип для ситуаций непредсказуемого согласующего это Позиция – то есть мы выбираем позицию и тот, кто указан в ней тот и согласует заявление.
Кейс 5: "Майские праздники: серверы тоже хотят отдыхать"
На майских заявления стали отправляться по 40 секунд, а то и по две минуты. Смотрим в код — а там... массив ссылок на сервисы проверки ЭЦП, причём первый в списке лежит, а система терпеливо ждёт ответа, как преданный пёс. Интересная задумка у разработчиков. Ооо… ТЕХНОЛОДЖИЯ!
Кстати с данной проблемой столкнулись не только мы, но и вообще все компании которые купили себе ЛК.
Мы добавили тайминг: теперь система ищет самый быстрый сервис. А ещё сделали фоновую обработку заявлений, чтобы пользователи не пялились в экран, гадая, "Это оно грузится или я опять нажал не туда?"
В очередной раз задумываюсь… для людей ли разрабатывался данный продукт…
Кейс 6: "Логин: когда ФИО — это не уникально"
Логин в системе — это фамилия и инициалы (например, ИвановИИ), он генерируется автоматически после заведения пользователя в 1С:ЗУП на стороне 1С:Элемент. Должен ли он быть уникальным? Ну, в теории — да.
Но в организации на 3000+ человек нашлись два полных тёзки. Кто бы мог подумать?
Вроде такая вещь, которая должна продумываться в самом начале, но что-то все на неё забили.
В итоге был переделан алгоритм формирования логина и теперь логин - это СНИЛС. Теперь уникально и безопасно.
Несмотря на все костыли, результат того стоил:
Упростили процессы для сотрудников.
Сделали интерфейс удобнее.
Исправили критические косяки.
1С: Кабинет сотрудника — как IKEA-мебель: вроде всё есть, но без отвертки и мата не собрать.
Но если допилить, то получается реально удобный инструмент. Главное — не бояться костылей и помнить, что идеальных систем не бывает.
Отдельное спасибо Компании 1С за то, что она не побоялась всё-таки зайти на новое поприще приложений для обычных смертных пользователей.
Подробнее почитать про 1С:Элемент можно по ссылке - https://habr.com/ru/articles/906942/
А если у вас тоже был опыт «дружбы» с 1С и вообще в целом, что вы думаете о 1С — делитесь в комментариях! Будет весело. 😉