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

  1. Utwórz formularz na forms.google.com. Dodaj pola odpowiadające danym zlecenia: wydział, opis, ilość, priorytet.
  2. Kliknij ikonę Sheets (Odpowiedzi → Utwórz arkusz kalkulacyjny). Forms automatycznie podepnie arkusz.
  3. W Arkuszu: Rozszerzenia → Apps Script → wklej skrypt triggera (poniżej).
  4. Uruchom funkcję setupTrigger() raz ręcznie – zainstaluje trigger OnFormSubmit.
  5. 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.