Написать
← AI и инфраструктура
Парусная база «Сила ветра»

Парусная база на Google Sheets

Расписание, которое сортирует себя само, зарплаты из часов на воде и P&L для владельца. Без единого сервера.

Парусная база на Google Sheets
0 калькуляторов

зарплата инструкторов считается из расписания сама

Здесь будет подробный разбор со скриншотами и материалами. Пока коротко.

Ситуация

Вечер у костра на базе. Все отдыхают, кроме администратора: она с калькулятором и расписанием считает зарплату инструкторов за день, сумму часов «на воде». Каждый день. Потому что кто-то когда-то так придумал.

«Пара формул, и всё» оказалось не так просто:

  • таблица сделана для глаз, а не для формул: пустые строки между днями, цветные ячейки вместо данных
  • данные каждое утро перепечатывают руками из кабинета управляющей компании, у которой нет API
  • расписание живое: сдвигаются выходы, меняются инструкторы, отменяются гонки
  • у таблицы много пользователей и ни одного правила, поэтому доступ только у администраторов, а шкиперы узнают расписание устно

Главная проблема была не в таблицах, а в том, что людям никто не показывал, как вообще можно.

Что сделал

Провёл встречи с управляющим и администраторами, разобрал источники и поставил диагноз. Вылечить расписание, это позвоночник базы. Собрать расходы и выплаты. Протянуть доходы и построить P&L для владельца.

Строка ввода, которая никуда не убегает. Новые записи падали в «подвал» таблицы, и люди целыми днями скроллили. Я закрепил строку ввода первой, сразу под заголовками. Макрос на кнопке проверяет типы, подсвечивает ошибки, отправляет запись в таблицу и очищает поле.

Таблица, которая сортирует себя сама. Ключ сортировки собирает одна ARRAYFORMULA из даты и времени выхода: сегодняшние выходы наверху, будущие следом, прошедшие уезжают вниз.

=ARRAYFORMULA(LAMBDA(dt, tm, IFERROR(
  IF(DATEVALUE(TODAY()) < DATEVALUE(dt), DATEVALUE(dt) + TIMEVALUE(tm) + DATEDIF(TODAY(), dt, "d"),
  IF(DATEVALUE(TODAY()) = DATEVALUE(dt), DATEVALUE(dt) + TIMEVALUE(tm),
     (DATEVALUE(dt) + TIMEVALUE(tm)) + 10 * DATEDIF(dt, TODAY(), "d"))), NA()))(B2:B, C2:C))

Сначала сортировка висела на кнопке. Потом нашёлся триггер onEdit: таблица пересортировывается после каждой правки даты или времени, а ночью контрольный прогон наводит порядок к утру.

function onEdit(e) {
  const r = e.range;
  if (r.getRow() >= 4 && r.getColumn() >= 2 && r.getColumn() <= 3) {
    r.getSheet().getRange('A4:G').sort({ column: 1, ascending: true });
  }
}

Справочники и цвет. Лодки, сотрудники и продукты вынесены в каталог, ввод везде через выпадающие списки, данные стали чистыми. Условное форматирование по динамическим диапазонам красит прошедшие, текущие и будущие выходы. Единый стиль: шрифт Roboto, пунктирные контуры, жирные ключевые поля. Это ежедневный инструмент десятка людей, пусть им будет приятно.

Зарплаты одним кликом. Часы на воде за период собираются из расписания, администратор подтверждает их галочками, и скрипт переносит выплаты в отдельную таблицу. Там формулы сами добавляют доплату за корпоративы и пересчитывают сумму с учётом налога по типу оформления: самозанятый, ИП или наличные. Кнопки в таблице сделаны чекбоксами, которые ловит onEdit, поэтому работают и с телефона.

Вокруг расписания. Прошедшие выходы скрипт уносит в архив, чтобы рабочий лист оставался коротким. Расходы сотрудники вносят через Google Forms. Доходы по типам продуктов. Всё сходится по дате в P&L владельца с агрегатами и дашбордом. Отдельные листы «Сегодня», «Завтра и послезавтра» и «Посмотреть своё расписание» дают шкиперам доступ к своему графику без риска сломать рабочую таблицу. Сотрудники прошли обучение работе с системой.

Результат

  • зарплата считается из расписания с налогами и доплатами, калькулятор больше не нужен
  • шкиперы видят своё расписание сами, без звонков администратору
  • расписание на сегодня, завтра и послезавтра видно с первого взгляда, без скролла
  • данные без пропусков и разнописи, потому что ввод стал частью работы, а не отдельной обязанностью
  • учёт расходов и автоматический P&L для управляющего всей базой
  • администраторы освоились быстро и сами начали предлагать улучшения

Как это выглядит

Дальше