точек в одной системе
Сеть растёт — добавление точки занимает 10 минут: одна строка в справочнике + раздача доступа.
Сеть ресторанов в 15+ точек жила в тетрадях, Excel-файлах и групповых чатах. Собрали единую учётную систему на AppSheet + Google Sheets + Apps Script: каждая точка ведёт смену с телефона, все данные стекаются в одну таблицу, отчёты сами уходят собственнику в Telegram. Без штатного backend-разработчика — поддерживает один data-инженер.

На точке сотрудник заходит в приложение AppSheet с обычного смартфона и попадает на экран открытой смены. Оттуда — крупные иконки на каждое действие: статистика, оплаченные расходы, сотрудники на смене, начисление и выдача ЗП, списание, перемещение между точками, загрузка накладных, прикрепление Z-отчёта. То, что надо делать сегодня, лежит на одном экране. И самое важное: AppSheet — кроссплатформенный. Одно и то же приложение запускается на iOS, Android и в браузере из одной схемы. Никакой отдельной разработки под iPhone и Android, никакой публикации в App Store / Google Play.



Те же данные, что вводит точка, собственник смотрит из любой точки мира через AppSheet-веб. Слева — карточка по конкретной смене (день, точка, время открытия, статус). В центре — расширенный экран с операционными действиями и таблицами расходов и прихода. Справа — таблица «Сегодня» с активными сменами по всей сети: одна строка на каждую открытую точку.
Сеть растёт — добавление точки занимает 10 минут: одна строка в справочнике + раздача доступа.
В конце дня Apps Script сам считает сводку и шлёт её собственнику в Telegram.
Собственник, директор, управляющий, кассир, бухгалтер — каждый видит только своё.
Без штатного backend-разработчика: поддержка и развитие — несколько часов в неделю.
Открытие, закрытие, статус, привязка к точке и сотрудникам, прикрепление Z-отчёта (фото).
Оплаченные расходы со справочниками продуктов и поставщиков, единицами (шт/кг/л), фото чека.
Касса, терминал, наличные — по каждой смене, автоматически в дневную статистику.
Часы × ставка по сменам → ведомость; выдачи фиксируются отдельной операцией с привязкой к сотруднику.
Отдельный модуль с причиной (порча, бой, недостача) и сотрудником, ответственным за смену.
Парные строки: одна точка отдаёт, вторая принимает. Баланс сети сходится без ручного ввода.
Прикрепление фото накладной к строке прихода — поиск потом по поставщику и дате.
Продукты, поставщики, категории расходов, точки, должности и ставки — всё правится в Google Sheets без релиза.
5 ролей, фильтры строк в AppSheet по USEREMAIL() и точке — каждый видит только своё.
Утренний отчёт: какие смены открыты по сети. Вечерний: приход, расходы, остаток по каждой точке.
Дашборды в Sheets через QUERY() и SUMIFS() — выручка, расходы, ФОТ по точкам и периодам.
Каждое изменение пишется в отдельный лист с автором, временем и старым значением — спорные кейсы разбираются за минуту.



Сотрудник на точке открывает «Оплаченные расходы», выбирает продукт из справочника (сахар, перец, яйца, молоко, шампиньоны…), указывает количество и единицу (шт / кг / л), выбирает поставщика (овощи, лаваш, магазин, доставка, реклама…) и сохраняет. Привязка к открытой смене и точке — автоматически, без ручного ввода. Тот же сценарий — для прихода, накладных, списаний и перемещений между точками.
Соберём учётную систему сети на AppSheet + Google Sheets + Apps Script: мобильное приложение для точек, отчёты в Telegram, разные уровни доступа. Расскажите задачу — вернёмся с архитектурой и сметой за пару дней.
Учётная система сети ресторанов, собранная без штатного разработчика — только дата-инженер. Front — AppSheet (мобильный + браузер), data — одна Google Sheets с 20+ листами как реляционная база, логика — Google Apps Script (валидация, агрегаты, cron-триггеры). Дневные и вечерние отчёты уходят собственнику в Telegram напрямую из Apps Script через UrlFetchApp. 5 ролей доступа реализованы через security filters в AppSheet поверх USEREMAIL().

На точке сотрудник заходит в приложение AppSheet с обычного смартфона и попадает на экран открытой смены. Оттуда — крупные иконки на каждое действие: статистика, оплаченные расходы, сотрудники на смене, начисление и выдача ЗП, списание, перемещение между точками, загрузка накладных, прикрепление Z-отчёта. То, что надо делать сегодня, лежит на одном экране. И самое важное: AppSheet — кроссплатформенный. Одно и то же приложение запускается на iOS, Android и в браузере из одной схемы. Никакой отдельной разработки под iPhone и Android, никакой публикации в App Store / Google Play.



Те же данные, что вводит точка, собственник смотрит из любой точки мира через AppSheet-веб. Слева — карточка по конкретной смене (день, точка, время открытия, статус). В центре — расширенный экран с операционными действиями и таблицами расходов и прихода. Справа — таблица «Сегодня» с активными сменами по всей сети: одна строка на каждую открытую точку.
AppSheet компилирует приложение под iOS, Android и веб-браузер из одной декларативной схемы поверх Google Sheets. Никакого React Native, никакого Flutter, никакой отдельной кодовой базы — поведение одинаковое на всех платформах. Сотрудник на смене работает с телефона, собственник из любой точки мира смотрит то же приложение в браузере.
Для сети до 30 точек объёмы — десятки тысяч строк в год. Sheets легко это держит, AppSheet кэширует, агрегаты считаются QUERY()/SUMIFS(). Платить за managed PostgreSQL и писать админку с нуля — экономически невыгодно на этом масштабе.
Security filter — формула, которая решает, какие строки таблицы доедут до конкретного пользователя. Реализация: AND(USEREMAIL() = [email], OR([role] = 'admin', [point_id] = LOOKUP(USEREMAIL(), employees, email, point_id))). Линейный сотрудник физически не получает чужих строк на устройство.
ScriptApp.newTrigger('sendMorningReport').timeBased().atHour(9).everyDays(1).create() — Google сам поднимает функцию по расписанию. Никакого выделенного сервера / k8s / докера — скрипт живёт внутри документа.
Apps Script сам стучится в Bot API: UrlFetchApp.fetch('https://api.telegram.org/bot.../sendMessage', { method: 'post', payload: {...} }). Без отдельного бот-сервера, без webhook'ов, без хостинга.
В AppSheet столбец типа Image сохраняет файл в указанную Drive-папку и оставляет в ячейке URL. Привязка к смене — через ref на shifts.id. Никаких отдельных object-storage, никакого S3.
Перемещение между точками = одна запись с from_point и to_point. Action в AppSheet атомарно создаёт парные строки: -X на отдающей точке, +X на принимающей. Баланс сети сходится без сводок руками.
В операционных таблицах (shifts, paid_expenses) храним name точки и фамилию сотрудника напрямую, а не только id — чтобы AppSheet-карточка отрисовалась без LOOKUP-цепочки. Записи правятся редко, чтение происходит десятки раз в день.
onEdit-триггер пишет в лист log: timestamp, USEREMAIL(), таблица, колонка, старое и новое значение. Спорные ситуации с сотрудниками разбираются за минуту.
Продукты, поставщики, точки, ставки лежат в отдельных листах. Операционные таблицы ссылаются на них через ref. Добавить новый продукт = добавить строку в справочник, никаких релизов приложения.
Поддержка — несколько часов в неделю: смотрим логи Apps Script, чиним формулы, докатываем новые модули. Сеть получает полноценную учётную систему по цене консультанта.
Открытие/закрытие, фото Z-отчёта прикрепляется прямо в строку смены через AppSheet Image-столбец.
Action добавляет строку в shift_employees(shift_id, employee_id, hours). Часы тянутся в начисление ЗП по сменам.
ref на справочники items и suppliers, тип Image для чека, автоматическая привязка к открытой смене точки.
Раздельные суммы по способу оплаты, общий приход считается формулой [cash] + [terminal].
Отдельный модуль с причиной (порча, бой, недостача), ответственный сотрудник берётся из shift_employees.
Action создаёт парные строки -X / +X — баланс сети сходится без сводок руками.
Начисление по часам × ставке из справочника employees, выдача — отдельная операция с подписью получателя.
Image-столбец хранит скан в Drive, фильтр по поставщику и периоду — поиск занимает секунды.
Утренний и вечерний отчёт по сети через Apps Script + UrlFetchApp, формат сводки правится в коде скрипта.
5 ролей через USEREMAIL() + lookup на employees.email → role / point_id. Линейный сотрудник не получает чужих строк физически.
onEdit пишет в лог: автор, время, старое и новое значение. Спорные смены разбираются за минуту.
QUERY() + SUMIFS() в дашборд-листе: выручка, расходы, ФОТ по точкам и периодам — без BI-системы.



Сотрудник на точке открывает «Оплаченные расходы», выбирает продукт из справочника (сахар, перец, яйца, молоко, шампиньоны…), указывает количество и единицу (шт / кг / л), выбирает поставщика (овощи, лаваш, магазин, доставка, реклама…) и сохраняет. Привязка к открытой смене и точке — автоматически, без ручного ввода. Тот же сценарий — для прихода, накладных, списаний и перемещений между точками.
Соберём учётную систему сети на AppSheet + Google Sheets + Apps Script: мобильное приложение для точек, отчёты в Telegram, разные уровни доступа. Расскажите задачу — вернёмся с архитектурой и сметой за пару дней.