Вернет ли он мне мой файл?
Ваш файл .fet — это рабочий документ, и прежде чем передавать его в любую программу, стоит задать один вопрос и провести двухминутный тест, который даст на него ответ.

Файл .fet выглядит не очень примечательно. Несколько сотен килобайт XML, лежащих в папке рядом с файлом прошлого года.
Но вы знаете, что в него вложено. Две недели в августе, потраченные на то, чтобы научный блок не мог принять два практических занятия одновременно. Компромисс с заведующим кафедрой иностранных языков, потребовавший трех разговоров. Одиннадцать ограничений, которые вы добавляли по одному, каждый раз после того, как что-то шло не так, и вы больше не хотели с этим сталкиваться.
Ничего из этого больше нигде не записано. Это существует в виде ограничений в том самом файле, и если он будет потерян, вы потеряете не просто документ — вы потеряете логику построения, и обнаружите это в сентябре, когда расписание перестанет иметь смысл.
Поэтому, когда веб-инструмент предлагает открыть его, вопрос не в том, полезен ли этот инструмент. Вопрос в другом: вернет ли он мне мой файл обратно?
Почему ответ обычно звучит как «не совсем»
Большинство инструментов, которые читают .fet, делают это очевидным способом. Кто-то изучает формат, пишет код для нужных частей — преподавателей, дисциплин, аудиторий, занятий, общих ограничений — и выпускает продукт.
Это работает, но дает сбои незаметно. У FET большой набор ограничений, и он растет с каждым выпуском. Все, что автор инструмента не реализовал, просто не считывается, и когда файл сохраняется обратно, то, что не было считано, не записывается. Файл по-прежнему открывается. Он по-прежнему корректен. Просто в нем отсутствуют три ограничения, которые были для вас важнее всего, и нигде об этом не сказано.
Это именно та ошибка, против которой стоит проектировать, потому что она невидима ровно в тот момент, когда вы хотели бы её заметить.
Что мы делаем вместо этого
FET Explorer не пытается понять каждое ограничение. Он старается, чтобы ему это не требовалось.
Когда файл считывается, каждое ограничение в нем сохраняется под своим именем, а его содержимое остается как есть — независимо от того, понимает ли это приложение, что означает данное ограничение. Когда вы скачиваете файл, каждое из них записывается обратно под тем же именем, с тем же содержимым и в том же порядке.
Здесь нет списка поддерживаемых типов ограничений, потому что нечего поддерживать. Тип ограничения, появившийся в версии FET, о которой мы никогда не слышали, проходит через систему нетронутым, по той же причине, по которой слово, которое вы не знаете, сохраняется при переписывании текста от руки.
В расписаниях, которые сегодня находятся в нашем собственном корпусе данных, это 2 987 ограничений 20 различных типов, которые проходят полный цикл без того, чтобы хоть одно из них стало особым случаем в коде экспорта.
Веса возвращаются как веса. Ограничение, установленное на 80%, остается 80% — оно не округляется, не пересчитывается и не переводится в статус «включено». Неактивное ограничение возвращается неактивным. Ваши комментарии возвращаются.
Файл проверяется перед тем, как вы его получите
Есть одна вещь, ради которой мы прервем процесс.
Файл .fet, который FET отказывается открывать, хуже, чем отсутствие файла: вы узнаете об этом в самом конце, не имея ни малейшего представления, какая из нескольких тысяч записей является ошибочной. Поэтому файл формируется и проверяется перед тем, как будет передан вам.

Если отсутствует что-то действительно необходимое — занятие без дисциплины, урок, указывающий на преподавателя, которого нет в списке преподавателей — вы получите уведомление с указанием конкретных записей. Вещи, которые можно безопасно задать по умолчанию, будут заданы, и вы никогда не столкнетесь с этой проблемой.
Если файл корректен, но выглядит неполным, вы получите предупреждение и кнопку Скачать в любом случае. Это совет, а не запрет.
А если сама проверка не может быть выполнена, скачивание просто продолжается. Проверка, которая не дала результата, не является поводом вставать между вами и вашим файлом.
Не верьте нам на слово — потратьте две минуты
Это та часть, которую стоит выполнить, потому что она почти ничего не стоит и решает вопрос окончательно.
- Загрузите ваш файл
.fet. - Скачайте его обратно сразу же, ничего не меняя.
- Сравните два файла.

Они должны различаться только форматированием — отступами, пробелами в атрибутах, порядком нескольких необязательных полей — и ничем больше. Те же занятия, те же ограничения, те же веса, те же комментарии.
Если два файла различаются по существу, это ошибка, и мы хотим о ней знать. Это не то, что нужно обходить, и не то, что вы должны обнаружить в сентябре.
Одно честное исключение
Если ваше расписание было создано на основе электронных таблиц, а не из файла .fet, есть нюанс, о котором стоит знать. Строки CSV не содержат идентификаторов занятий FET, а ограничения размещения требуют стабильных идентификаторов, чтобы указывать на отдельные уроки.
Вместо того чтобы отказывать, мы присваиваем эти идентификаторы при создании файла и сохраняем их, чтобы они не менялись. Второе скачивание совпадает с первым. Вы можете создать расписание из электронных таблиц и все равно получить корректный файл .fet на выходе.
Чем это не является
FET Explorer не генерирует расписания. Он не оптимизирует, не пересчитывает и не улучшает то, что создал FET. FET выполняет сложную часть работы; это приложение считывает, представляет, позволяет делиться и редактировать результат.
И именно поэтому важен полный цикл. Инструмент, который только показывает вам расписание, может позволить себе понимать лишь половину файла. Инструмент, в котором вы можете вносить правки, обязан вернуть всё в исходном виде.