Цель:
создать интерактивный учебный симулятор, в котором студенты анализируют кейс, обсуждают его в команде, принимают управленческое решение и получают автоматическую оценку.
Задачи:
собрать симулятор кейса с данными и альтернативными проектами; организовать командный SWOT-анализ; настроить сбор ответов через форму; реализовать автоматическую оценку результатов.
Инструменты:
Google Apps Script — разработка симулятора; Canva — обсуждение и SWOT-анализ; Google Forms — сбор ответов; Google Sheets — хранение и автооценка; ChatGPT — помощь в разработке и формализации логики.
Результат:
создана работающая цифровая система курса, в которой студент проходит полный цикл (анализ → обсуждение → выбор → оценка), а преподаватель получает автоматически обработанные результаты и основу для дальнейшей аналитики и дашборда.
Симулятор в обучении — это программные или аппаратные средства, которые создают впечатление реальности, имитируют её и отображают свойства реальных явлений в виртуальной среде. Основная цель таких инструментов — формирование практических навыков, умений и компетенций в безопасной, искусственно смоделированной обстановке.
Симуляторы отличаются от обычных обучающих программ рядом признаков:
Имитация реальности: Они правдоподобно воспроизводят фрагмент производственной или жизненной реальности (например, кабину самолета, экономическую систему или химическую лабораторию).
Интерактивность: Участник может активно взаимодействовать с моделью, принимать решения и видеть их последствия в режиме реального времени.
Обратная связь: Системы обеспечивают постоянный контроль действий обучаемого, позволяют проводить анализ ошибок и изменять параметры учебных ситуаций.
Безопасность: Создается так называемая «безрисковая зона», где ошибки не приводят к реальным катастрофам, финансовым потерям или вреду для здоровья.
Создайте веб-приложение на Google Apps Script.
Разместите в нём:
описание кейса
данные (графики: солёность и улов)
три альтернативных проекта (A, B, C)
факторы для SWOT-анализа
Создайте доску в Canva.
Разместите:
3 блока (Проект A, B, C)
в каждом блоке матрицу SWOT (S/W/O/T)
факторы в виде стикеров
Добавьте ссылку на доску в симулятор (кнопка «Обсуждение»).
Создайте Google Form для фиксации решений:
выбор команды
SWOT-анализ (таблица) по каждому проекту
оценка проектов
выбор финального решения (A/B/C)
текстовое обоснование
Добавьте ссылку на форму в симулятор (кнопка «Ответ»).
Подключите Google Sheets к форме.
Через Apps Script:
реализуйте триггер onFormSubmit
задайте правильные ответы для SWOT
настройте начисление баллов
добавьте столбцы: Баллы, Тип решения, Комментарий
Пройдите весь путь как студент:
откройте симулятор
выполните SWOT в Canva
заполните форму
проверьте появление баллов в таблице
У вас должна получиться работающая система:
анализ → обсуждение → выбор → автоматическая оценка
Создай веб-приложение (Google Apps Script Web App) для учебного симулятора MBA уровня.
Требования к интерфейсу:
1. Стиль:
- тёмный (graphite / neon)
- аккуратная подсветка блоков
- минимализм без перегрузки
- компактные графики
---
2. Блок 1 — Название:
Aral Sea Decision Simulator
Подзаголовок:
Экологическая миссия или инвестиционный проект
---
3. Блок 2 — Описание кейса:
Текст:
Аральское море сократилось более чем на 90% из-за отвода воды из рек Сырдарья и Амударья.
Это привело к разрушению экономики, росту безработицы, ухудшению здоровья и экологическому кризису.
В 2005 году проект Кокаральской дамбы частично восстановил Северное Аральское море.
Сейчас рассматривается вторая фаза проекта.
---
4. Блок 3 — Данные (2 графика):
График 1:
Соленость:
До: 30
После: 10
График 2:
Улов рыбы:
До: 1
После: 8
Использовать Chart.js
Графики небольшого размера
---
5. Блок 4 — Альтернативные проекты:
Проект A — Комплексное восстановление с использованием ИИ
Инвестиции: 120 млн USD
Эффект: высокий
ESG: высокий
Риски: средние
Факторы:
- Восстановление биоразнообразия
- Высокие инвестиции
- Рост занятости
- Зависимость от политики
- Международное финансирование
- Долгосрочный рост
---
Проект B — Частичное развитие с использованием ИИ
Инвестиции: 70 млн USD
Эффект: средний
ESG: средний
Риски: низкие
Факторы:
- Умеренные инвестиции
- Ограниченный эффект
- Низкие риски
- Сохранение политики
- Рост рыболовства
- Ограниченное масштабирование
---
Проект C — Минимальные вложения с использованием ИИ
Инвестиции: 30 млн USD
Эффект: низкий
ESG: низкий
Риски: высокие
Факторы:
- Низкие затраты
- Нет роста
- Экологические проблемы
- Риск деградации
- Нет инвесторов
- Минимальная нагрузка
---
6. Блок 5 — Задание:
Шаг 1:
Провести SWOT-анализ в команде
Шаг 2:
Выбрать проект и отправить решение
---
7. Кнопки (внизу, по шагам):
Кнопка 1:
Открыть Canva (вставить ссылку вручную)
Кнопка 2:
Открыть Google Form (вставить ссылку вручную)
---
8. Технические требования:
- HTML + CSS + JS в одном файле (index.html)
- doGet() в Code.gs
- использовать Chart.js
- чистая структура без лишнего кода
- готово к публикации как Web App
---
Результат:
Полный код:
- Code.gs
- index.html
function doGet() {
return HtmlService.createHtmlOutputFromFile('index')
.setTitle('Aral Sea Simulator');
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
:root{
--bg1:#0b1220;
--bg2:#0f172a;
--card:#0f1b2e;
--neon:#22d3ee;
--neon2:#a78bfa;
--text:#e5e7eb;
--muted:#9ca3af;
}
*{box-sizing:border-box}
body{
margin:0;
color:var(--text);
font-family:'Segoe UI',Arial;
background:
radial-gradient(1200px 600px at 20% -10%, rgba(34,211,238,.15), transparent 60%),
radial-gradient(900px 500px at 90% 10%, rgba(167,139,250,.12), transparent 60%),
linear-gradient(135deg,var(--bg1),var(--bg2));
}
.container{
max-width:1100px;
margin:auto;
padding:20px;
}
.card{
background:rgba(15,27,46,.9);
border-radius:14px;
padding:18px;
margin-bottom:16px;
border:1px solid rgba(34,211,238,.25);
box-shadow:0 0 20px rgba(34,211,238,.15);
}
h1{color:var(--neon); margin:0 0 6px}
h2{color:var(--neon); font-size:18px; margin:0 0 10px}
.small{color:var(--muted); font-size:13px}
.grid{
display:grid;
grid-template-columns:1fr 1fr;
gap:14px;
}
.project{
border:1px solid rgba(167,139,250,.35);
border-radius:12px;
padding:12px;
box-shadow:0 0 14px rgba(167,139,250,.2);
}
.chart-wrap{
max-width:320px;
margin:10px auto;
}
.btn{
padding:12px 16px;
border-radius:10px;
border:none;
background:linear-gradient(135deg,#22d3ee,#a78bfa);
color:#020617;
font-weight:600;
cursor:pointer;
}
.steps{
display:grid;
gap:12px;
}
.step{
display:flex;
justify-content:space-between;
align-items:center;
border:1px dashed rgba(34,211,238,.35);
border-radius:10px;
padding:12px;
}
ul{margin:8px 0 0 18px}
</style>
</head>
<body>
<div class="container">
<!-- 1. TITLE -->
<div class="card">
<h1>🌍 Aral Sea Decision Simulator</h1>
<div class="small">Экологическая миссия или инвестиционный проект</div>
</div>
<!-- 2. CASE -->
<div class="card">
<h2>📊 Ситуация</h2>
<p>
Аральское море, ранее одно из крупнейших озёр мира, начало стремительно сокращаться с 1960-х годов
в результате отвода воды из рек Сырдарья и Амударья для сельского хозяйства.
</p>
<p>
К началу 2000-х годов море потеряло более 90% площади, что привело к разрушению экономики региона,
росту безработицы, ухудшению здоровья населения и усилению соляных бурь.
</p>
<p>
В 2005 году проект Кокаральской дамбы позволил частично восстановить Северное Аральское море.
Сейчас рассматривается вторая фаза проекта.
</p>
<div class="grid">
<div class="chart-wrap">
<canvas id="salinityChart"></canvas>
</div>
<div class="chart-wrap">
<canvas id="fishChart"></canvas>
</div>
</div>
</div>
<script>
// соленость
new Chart(document.getElementById("salinityChart"), {
type: 'bar',
data: {
labels: ['До','После'],
datasets: [{label:'Соленость (г/л)', data:[30,10]}]
}
});
// улов
new Chart(document.getElementById("fishChart"), {
type: 'bar',
data: {
labels: ['До','После'],
datasets: [{label:'Улов (тыс т)', data:[1,8]}]
}
});
</script>
<!-- 3. PROJECTS + SWOT FACTORS -->
<div class="card">
<h2>📌 Альтернативные проекты</h2>
<div class="grid">
<div class="project">
<b>🟢 A — Комплексное восстановление с использованием ИИ</b><br>
Инвестиции: 120 млн USD<br>
Эффект: высокий<br>
ESG: высокий<br>
Риски: средние<br>
<ul>
<li>Восстановление биоразнообразия</li>
<li>Высокие инвестиции</li>
<li>Рост занятости</li>
<li>Зависимость от политики</li>
<li>Международное финансирование</li>
<li>Долгосрочный рост</li>
</ul>
</div>
<div class="project">
<b>🟡 B — Частичное развитие с использованием ИИ</b><br>
Инвестиции: 70 млн USD<br>
Эффект: средний<br>
ESG: средний<br>
Риски: низкие<br>
<ul>
<li>Умеренные инвестиции</li>
<li>Ограниченный эффект</li>
<li>Низкие риски</li>
<li>Сохранение политики</li>
<li>Рост рыболовства</li>
<li>Ограниченное масштабирование</li>
</ul>
</div>
<div class="project">
<b>🔴 C — Минимальные вложения с использованием ИИ</b><br>
Инвестиции: 30 млн USD<br>
Эффект: низкий<br>
ESG: низкий<br>
Риски: высокие<br>
<ul>
<li>Низкие затраты</li>
<li>Нет роста</li>
<li>Экологические проблемы</li>
<li>Риск деградации</li>
<li>Нет инвесторов</li>
<li>Минимальная нагрузка</li>
</ul>
</div>
</div>
</div>
<!-- 4. TASK STEPS -->
<div class="card">
<h2>🎯 Задание</h2>
<div class="steps">
<div class="step">
<span>Шаг 1: SWOT-анализ (команда)</span>
<button class="btn" onclick="openCanva()">Canva</button>
</div>
<div class="step">
<span>Шаг 2: Выбор проекта</span>
<button class="btn" onclick="openForm()">Форма</button>
</div>
</div>
</div>
</div>
<script>
function openCanva(){
window.open("PASTE_YOUR_CANVA_LINK");
}
function openForm(){
window.open("PASTE_YOUR_GOOGLE_FORM_LINK");
}
</script>
</body>
</html>
Открой Canva → Whiteboard
Собери SWOT-доску (как мы делали).
В правом верхнем углу нажми Share (Поделиться)
В разделе доступа выбери:
👉 Anyone with the link (Любой по ссылке)
👉 доступ: Can edit (или Can view, если не нужно редактирование)
Нажми Copy link
Открой index.html и найди:
function openCanva(){
window.open("PASTE_YOUR_CANVA_LINK");
}
👉 Замени на:
function openCanva(){
window.open("https://www.canva.com/design/XXXXXXX/view");
}
обнови Web App
нажми кнопку Canva
должна открыться доска
✔ доступ открыт (Anyone with link)
✔ ссылка скопирована
✔ вставлена в index.html
✔ кнопка работает
Открой Google Forms
Нажми Пустая форма
Выберите команду
Тип: один вариант
Команда 1
Команда 2
Команда 3
Создай 3 раздела:
Добавь:
SWOT (тип: сетка / grid)
строки: 6 факторов проекта
колонки: S / W / O / T
Оценка проекта:
Высокая
Средняя
Низкая
(аналогично)
(аналогично)
Вопрос:
Какой проект вы выбираете?
A / B / C
Вопрос:
Обоснование (абзац)
Нажми Отправить (вверху справа)
Выбери значок 🔗 (ссылка)
Нажми Сократить URL (Shorten)
Нажми Копировать
Открой index.html и найди:
function openForm(){
window.open("PASTE_YOUR_GOOGLE_FORM_LINK");
}
👉 Замени на свою ссылку:
function openForm(){
window.open("https://forms.gle/XXXXXXX");
}
открой Web App
нажми кнопку Форма
форма должна открыться
✔ форма создана
✔ разделы есть
✔ ссылка скопирована
✔ вставлена в код
✔ кнопка работает
Создай структуру Google Form для учебного кейса MBA уровня: "Восстановление Северного Аральского моря".
1. Вопрос:
Выберите команду
Варианты:
- Команда 1
- Команда 2
- Команда 3
---
2. Раздел: Проект A — Комплексное восстановление с использованием ИИ
Описание:
Инвестиции: 120 млн USD
Эффект: высокий
ESG: высокий
Риски: средние
SWOT (таблица):
Строки:
- Восстановление биоразнообразия
- Высокие инвестиции
- Рост занятости
- Зависимость от политики
- Международное финансирование
- Долгосрочный рост
Колонки:
- S (сильные стороны)
- W (слабые стороны)
- O (возможности)
- T (угрозы)
Тип: Multiple choice grid (один выбор в строке)
Дополнительно:
Оценка проекта A:
- Высокая
- Средняя
- Низкая
---
3. Раздел: Проект B — Частичное развитие с использованием ИИ
Описание:
Инвестиции: 70 млн USD
Эффект: средний
ESG: средний
Риски: низкие
SWOT (таблица):
Строки:
- Умеренные инвестиции
- Ограниченный эффект
- Низкие риски
- Сохранение политики
- Рост рыболовства
- Ограниченное масштабирование
Колонки:
- S
- W
- O
- T
Тип: Multiple choice grid
Дополнительно:
Оценка проекта B:
- Высокая
- Средняя
- Низкая
---
4. Раздел: Проект C — Минимальные вложения с использованием ИИ
Описание:
Инвестиции: 30 млн USD
Эффект: низкий
ESG: низкий
Риски: высокие
SWOT (таблица):
Строки:
- Низкие затраты
- Нет роста
- Экологические проблемы
- Риск деградации
- Нет инвесторов
- Минимальная нагрузка
Колонки:
- S
- W
- O
- T
Тип: Multiple choice grid
Дополнительно:
Оценка проекта C:
- Высокая
- Средняя
- Низкая
---
5. Финальный раздел
Вопрос:
Какой проект вы выбираете?
- A
- B
- C
Вопрос:
Обоснование решения (Paragraph)
---
Цель формы:
Собрать SWOT-анализ и управленческое решение студентов для дальнейшей оценки.
function createAralForm() {
var form = FormApp.create('Aral Sea Decision — SWOT Analysis');
form.setDescription('Проведите SWOT-анализ проектов и выберите оптимальный вариант');
// --- КОМАНДА ---
var team = form.addMultipleChoiceItem();
team.setTitle('Выберите команду')
.setChoices([
team.createChoice('Команда 1'),
team.createChoice('Команда 2'),
team.createChoice('Команда 3')
])
.setRequired(true);
// ========= ПРОЕКТ A =========
form.addPageBreakItem().setTitle('Проект A — Комплексное восстановление');
var gridA = form.addGridItem();
gridA.setTitle('SWOT-анализ проекта A')
.setRows([
'Восстановление биоразнообразия',
'Высокие инвестиции',
'Рост занятости',
'Зависимость от политики',
'Международное финансирование',
'Долгосрочный рост'
])
.setColumns(['S (сильные)', 'W (слабые)', 'O (возможности)', 'T (угрозы)'])
.setRequired(true);
var evalA = form.addMultipleChoiceItem();
evalA.setTitle('Оценка проекта A')
.setChoices([
evalA.createChoice('Высокая'),
evalA.createChoice('Средняя'),
evalA.createChoice('Низкая')
]);
// ========= ПРОЕКТ B =========
form.addPageBreakItem().setTitle('Проект B — Частичное развитие');
var gridB = form.addGridItem();
gridB.setTitle('SWOT-анализ проекта B')
.setRows([
'Умеренные инвестиции',
'Ограниченный эффект',
'Низкие риски',
'Сохранение политики',
'Рост рыболовства',
'Ограниченное масштабирование'
])
.setColumns(['S', 'W', 'O', 'T'])
.setRequired(true);
var evalB = form.addMultipleChoiceItem();
evalB.setTitle('Оценка проекта B')
.setChoices([
evalB.createChoice('Высокая'),
evalB.createChoice('Средняя'),
evalB.createChoice('Низкая')
]);
// ========= ПРОЕКТ C =========
form.addPageBreakItem().setTitle('Проект C — Минимальные вложения');
var gridC = form.addGridItem();
gridC.setTitle('SWOT-анализ проекта C')
.setRows([
'Низкие затраты',
'Нет роста',
'Экологические проблемы',
'Риск деградации',
'Нет инвесторов',
'Минимальная нагрузка'
])
.setColumns(['S', 'W', 'O', 'T'])
.setRequired(true);
var evalC = form.addMultipleChoiceItem();
evalC.setTitle('Оценка проекта C')
.setChoices([
evalC.createChoice('Высокая'),
evalC.createChoice('Средняя'),
evalC.createChoice('Низкая')
]);
// ========= ФИНАЛ =========
form.addPageBreakItem().setTitle('Финальное решение');
var final = form.addMultipleChoiceItem();
final.setTitle('Какой проект вы выбираете?')
.setChoices([
final.createChoice('A'),
final.createChoice('B'),
final.createChoice('C')
])
.setRequired(true);
var justification = form.addParagraphTextItem();
justification.setTitle('Обоснование решения')
.setHelpText('Кратко объясните ваш выбор с учетом SWOT и ESG');
Logger.log("Форма создана: " + form.getEditUrl());
}
Зайди в Google Forms
Перейди во вкладку Ответы
Нажми значок Google Sheets (зелёный)
👉 откроется таблица с ответами
В таблице:
👉 Расширения → Apps Script
Ты увидишь файл:
function myFunction() {
}
УДАЛИ всё
ВСТАВЬ код автооценки (который я дал)
👉 Нажми Сохранить (Ctrl + S)
👉 Назови проект: AutoScore
Слева нажми ⏰ Triggers (Триггеры)
Нажми Добавить триггер
Выбери:
Функция: onFormSubmit
Тип события: При отправке формы
👉 Сохрани
При первом запуске:
появится окно
нажми Разрешить
выбери аккаунт
👉 Это ключевой момент
Открой форму
Заполни как студент
Нажми Отправить
Открой таблицу:
👉 появятся новые столбцы:
Баллы | Тип решения | Комментарий
❌ Нажимают Run → не работает
✔ Нужно отправить форму
❌ Вставили код не в ту таблицу
✔ Только таблица ответов
❌ Нет триггера
✔ Обязательно добавить
✔ Таблица открыта
✔ Код вставлен
✔ Сохранено
✔ Триггер создан
✔ Форма отправлена
✔ Баллы появились
Создай Google Apps Script для автоматической оценки ответов из Google Form.
Контекст:
Форма используется в MBA-симуляторе по кейсу Аральского моря.
Ответы сохраняются в Google Sheets.
Требования:
1. Триггер:
Функция onFormSubmit(e), срабатывает при отправке формы.
2. Логика оценки:
A) SWOT-анализ:
В форме есть 3 проекта (A, B, C).
Каждый проект содержит grid (матрицу SWOT):
- строки = факторы (6)
- колонки = S, W, O, T
Нужно:
- задать правильные ответы (эталон) для каждого проекта
- сравнить ответы студента с эталоном
- начислить баллы за каждое совпадение
Правильные ответы:
Проект A:
- Восстановление биоразнообразия → S
- Высокие инвестиции → W
- Рост занятости → S
- Зависимость от политики → T
- Международное финансирование → O
- Долгосрочный рост → O
Проект B:
- Умеренные инвестиции → S
- Ограниченный эффект → W
- Низкие риски → S
- Сохранение политики → W
- Рост рыболовства → O
- Ограниченное масштабирование → T
Проект C:
- Низкие затраты → S
- Нет роста → W
- Экологические проблемы → W
- Риск деградации → T
- Нет инвесторов → T
- Минимальная нагрузка → S
---
B) Выбор проекта:
Если студент выбрал:
- A → +3 балла (оптимальное решение)
- B → +2 (компромисс)
- C → +1 (слабое)
---
C) Обоснование:
Если текст:
- >120 символов → +3 балла
- >50 → +2
- иначе → +1
---
3. Итог:
Посчитать:
- баллы за SWOT
- баллы за выбор
- баллы за текст
Суммировать итоговый score
---
4. Вывод в таблицу:
Добавить новые столбцы:
- Баллы
- Тип решения
- Комментарий
Тип решения:
- A → Оптимальное
- B → Компромисс
- C → Слабое
Комментарий:
- высокий балл → "Сильная аналитика"
- средний → "Хорошо, но можно усилить"
- низкий → "Слабая проработка"
---
5. Технические требования:
- работать через e.values
- не использовать getLastRow (использовать данные события)
- аккуратно находить нужные столбцы
- код должен быть устойчив к изменениям структуры формы
---
Результат:
Готовый код Apps Script для вставки в Google Sheets.
function onFormSubmit(e) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const row = sheet.getLastRow();
const data = sheet.getRange(row,1,1,sheet.getLastColumn()).getValues()[0];
// --- НАЗВАНИЯ СТОЛБЦОВ ---
const headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];
let score = 0;
let comment = "";
let decisionType = "";
// --- ПРАВИЛЬНЫЙ SWOT (эталон) ---
const correctA = {
"Восстановление биоразнообразия":"S",
"Высокие инвестиции":"W",
"Рост занятости":"S",
"Зависимость от политики":"T",
"Международное финансирование":"O",
"Долгосрочный рост":"O"
};
const correctB = {
"Умеренные инвестиции":"S",
"Ограниченный эффект":"W",
"Низкие риски":"S",
"Сохранение политики":"W",
"Рост рыболовства":"O",
"Ограниченное масштабирование":"T"
};
const correctC = {
"Низкие затраты":"S",
"Нет роста":"W",
"Экологические проблемы":"W",
"Риск деградации":"T",
"Нет инвесторов":"T",
"Минимальная нагрузка":"S"
};
// --- ФУНКЦИЯ ПРОВЕРКИ SWOT ---
function checkSWOT(correctMap, answers) {
let s = 0;
answers.forEach(a => {
const parts = a.split(" → ");
if(parts.length === 2){
const factor = parts[0];
const chosen = parts[1][0]; // S/W/O/T
if(correctMap[factor] === chosen){
s++;
}
}
});
return s;
}
// --- НАЙТИ СТОЛБЦЫ ---
function findColumns(keyword){
return headers
.map((h,i)=> h.includes(keyword) ? i : -1)
.filter(i=>i>=0);
}
// --- ПРОЕКТЫ ---
const colsA = findColumns("A");
const colsB = findColumns("B");
const colsC = findColumns("C");
const answersA = colsA.map(i=>data[i]);
const answersB = colsB.map(i=>data[i]);
const answersC = colsC.map(i=>data[i]);
const scoreA = checkSWOT(correctA, answersA);
const scoreB = checkSWOT(correctB, answersB);
const scoreC = checkSWOT(correctC, answersC);
score += scoreA + scoreB + scoreC;
// --- ВЫБОР ПРОЕКТА ---
const decision = data[data.length - 2];
if(decision === "A"){
score += 3;
decisionType = "Оптимальное";
} else if(decision === "B"){
score += 2;
decisionType = "Компромисс";
} else {
score += 1;
decisionType = "Слабое";
}
// --- ТЕКСТ ---
const text = data[data.length - 1];
if(text && text.length > 120){
score += 3;
comment = "Сильная аргументация";
} else if(text){
score += 2;
comment = "Средняя аргументация";
} else {
comment = "Нет обоснования";
}
// --- ЗАПИСЬ ---
const lastCol = sheet.getLastColumn();
sheet.getRange(1,lastCol+1).setValue("Баллы");
sheet.getRange(1,lastCol+2).setValue("Тип решения");
sheet.getRange(1,lastCol+3).setValue("Комментарий");
sheet.getRange(row,lastCol+1).setValue(score);
sheet.getRange(row,lastCol+2).setValue(decisionType);
sheet.getRange(row,lastCol+3).setValue(comment);
}
После завершения командной работы каждый участник обязан заполнить форму оценки индивидуального вклада. Оценка закрывается преподавателем после урока.