Dział HR wysyła formularz .doc mailem z prośbą o podpisanie i odesłanie. Produkcja zbiera zamówienia na karteczkach. IT rejestruje zgłoszenia serwisowe przez e-mail. Efekt: 30 plików PDF tygodniowo, których nikt nie agreguje. Google Forms + Sheets + Apps Script zastępuje to jednym systemem – za $0, bez kodowania backendu.
Jak działa: Forms → Sheets → trigger
Google Forms to darmowy kreator formularzy działający w przeglądarce i na telefonie. Każde wysłane zgłoszenie trafia automatycznie jako nowy wiersz do podpiętego Arkusza Google – z dokładnym timestampem, bez żadnej konfiguracji. Kolumny w arkuszu odpowiadają pytaniom w formularzu.
Struktura danych wygląda następująco:
| Timestamp | Wydział | Opis zlecenia | Ilość | Zgłaszający |
|---|---|---|---|---|
| 2026-05-09 08:14 | Produkcja | Wymiana filtra CNC-4 | 3 | jan.kowalski@firma.pl |
Ta baza tabelaryczna zastępuje 30 PDF-ów miesięcznie i jest gotowa do analizy w Data Studio jednym kliknięciem.
Konfiguracja krok po kroku
- Utwórz formularz na forms.google.com. Dodaj pola odpowiadające danym zlecenia: wydział, opis, ilość, priorytet.
- Kliknij ikonę Sheets (Odpowiedzi → Utwórz arkusz kalkulacyjny). Forms automatycznie podepnie arkusz.
- W Arkuszu: Rozszerzenia → Apps Script → wklej skrypt triggera (poniżej).
- Uruchom funkcję
setupTrigger()raz ręcznie – zainstaluje trigger OnFormSubmit. - Testuj: wyślij próbne zgłoszenie przez formularz i sprawdź czy e-mail dotarł.
Kod: automatyczne powiadomienie po zgłoszeniu
// Uruchom raz ręcznie żeby zainstalować trigger
function setupTrigger() {
ScriptApp.newTrigger('onFormSubmit')
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
.onFormSubmit()
.create();
}
function onFormSubmit(e) {
const responses = e.namedValues;
const dzial = responses['Wydział']?.[0] || '–';
const opis = responses['Opis zlecenia']?.[0] || '–';
const ilosc = responses['Ilość']?.[0] || '–';
const zglaszaj = responses['Email zgłaszającego']?.[0] || '';
// Numer zlecenia = numer wiersza
const sheet = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('Odpowiedzi formularza 1');
const lastRow = sheet.getLastRow();
const ticketId = 'ZL-' + String(lastRow).padStart(4, '0');
// Zapisz ID zlecenia w arkuszu
sheet.getRange(lastRow, 6).setValue(ticketId);
// Potwierdzenie do zgłaszającego
if (zglaszaj) {
MailApp.sendEmail({
to: zglaszaj,
subject: `Zlecenie ${ticketId} przyjęte`,
body: `Dział: ${dzial}\nOpis: ${opis}\nIlość: ${ilosc}\n\nZlecenie zostanie zrealizowane w ciągu 48h.`
});
}
// Powiadomienie do kierownika działu
MailApp.sendEmail({
to: 'kierownik@firma.pl',
subject: `[Nowe zlecenie] ${ticketId} – ${dzial}`,
body: `Nowe zgłoszenie serwisowe:\n${opis}\nIlość: ${ilosc}\nZgłosił: ${zglaszaj}`
});
}
Zastosowania w różnych działach
| Dział | Co zastępuje | Co zyskuje |
|---|---|---|
| HR | PDF wniosków urlopowych mailem | Baza urlopów w Sheets, powiadomienie managera, raport w Data Studio |
| IT / Serwis | Zgłoszenia przez e-mail/telefon | Ticket system z ID, SLA tracking, raport czasu realizacji |
| Produkcja / Magazyn | Karteczki z zamówieniami materiałowymi | Centralny rejestr zamówień, powiadomienie dostawcy, historia |
| Sprzedaż | Ręczne wprowadzanie danych z wizyt | Raport z terenu w czasie rzeczywistym, CRM feed |
Workflow wyższego poziomu i potęga Apps Script
Posiadanie wierszy w Sheets to dopiero start. Prawdziwa automatyzacja pojawia się gdy dołożysz:
- Integracja ze Slackiem: Skrypt wysyła webhook do kanału #serwis z danymi nowego zlecenia – team widzi zgłoszenie bez otwierania Sheets.
- Ticket system z unikalnym ID: Jak w kodzie wyżej – każde zgłoszenie dostaje numer (ZL-0042), który handlowiec podaje przy follow-upie.
- Raport w Data Studio: Arkusz z Odpowiedziami podpinasz bezpośrednio do Data Studio i masz live dashboard: ile zleceń tygodniowo, które działy zgłaszają najwięcej, średni czas realizacji.