Никаких праздников
Неделька выдалась тяжёлой. Очень тяжёлой. У меня на полке стоят две тетради, которые вёл в армии в середине 90-х. Они свидетели, что бывало и хуже. Намного. Так что… тогда Бог помог, уверен, поможет и теперь. Тем более, что в целом всё просто отлично. Нужно лишь взять и сделать за выходные столько дел, сколько обычно делается за 2-3 месяца.
План нереальный, но другого нет. Выйти из кризиса необходимо. Жизненно.
Самое время начинать новый цикл постов из серии «Побег из зада», но… что-то подсказывает, что как раз времени на это не будет.
А теперь о хорошем. Сегодня суббота. За бортом светит солнышко. Скоро полдень. Я почти выспался.
Итак, вилы в руки и вперёд, разгребать субстанцию, что накопилась и мешает жить.
Первым пунктом идёт учёт ночного прогона автотестов. Нужно их наконец инвентаризировать и поставить диагнозы.
Там всё плохо. Лучше чем ожидалось, но это разница из разряда «опоздал на поезд на 1 час, а не на 3».
С этим справился за два часа, но нужно ещё докопаться до причин, по которым они упали. Скука-рутина.
Затем, сшил из красного фетра (другого не нашёл) новый амбушюр. Старый распался на части, а без него правый наушник давит на ухо. С этим справился быстро, выглядит он странно, однако носить приятно.
Нашёл причину падения трёх автотестов. Два поправил, на третьем уткнулся во что-то из серии «всё ж должно работать, а не работает». Так бывает из за общей корявости тестового стенда.
Ну в самом деле, чего стоит, например, сделать, чтобы данные в полях ввода хранились в параметре value? Так нет! Иногда в value, иногда в title, иногда, чтобы данные там появились, нужно убрать фокус с поля. Т.е. кликнуть где-нибудь вне него. Про внятные (или хоть какие-нибудь постоянные) id для элементов уже и не мечтаю даже. Их не завезут. Я узнавал.
Минус ещё час.
Тем временем, солнце, убедившись что я сегодня не выйду, двинулось в сторону заката. Это где-то на западе.
Третий поправил. На часах 18:00. Темнеет. Надоело сидеть вечерами в потёмках. Белые ночи прошли, настольная лампа, повышенная в должности (и по высоте) до небольшой люстры, не справляется от слова «никак».
Бахнул на потолок офисную светодиодную панель.
Этих панелей мне однажды отдали сразу 4 штуки. Тогда как раз меняли на новые. Из четырёх неработающих у меня получилось две работающие. Вот одну из них только что приляпал на потолок над столом.
Светит ядерно. Будто у меня тут яркий день. Правда свет в глаза попадает, хоть кепку носи. Зато не кажется, что уже глубокая ночь.
Нужно потом перевесить выше. И выключатель какой-нибудь соорудить. Но это не сегодня.
Вторым пунктом — задача с Р2. Там нужно сделать зубодробительную проверку элемента инфоблока до и после сохранения.
Можно долго рассказывать сколько нервов я на него потратил и как мне не хочется делать это снова, но к чему лишние слова? На старт! Внимание! Марш!
Есть инфоблок. В нём 5 полей:
- Номер учебной группы.
- Номер приказа об открытии учебной группы.
- Чекбокс «Группа закрыта».
- Номер приказа о закрытии учебной группы.
- ID расписания, к которому привязана эта группа.
Тут ничего сложного. Пошёл, да и создал инфоблок с нужным набором свойств. И можно бы выдохнуть, но тут начинаются нюансы.
Нюанс 1: Это Битрикс.
Просто к сведению.
Нюанс 2: Название группы должно строиться из номера группы и даты начала обучения.
Тут тоже относительно просто. Лезу в ивенты и на событие после сохранения инфоблока вешаю скрипт, который выгружает из расписания дату начала занятий (по ID из поля), добавляет к дате номер группы, формирует название, сравнивает его с тем, что сохранено. Если не совпадает, то меняет на это сгенерированное.
Нюанс 3: Номер учебной группы должен быть уникальным.
Этот «номер» является строкой примерно в таком формате ХХХХХ-ХХХХХХ-ХХХХ. Формат в будущем может измениться, но раз заполнять будут вручную, то задача упрощается.
Повесил на событие перед сохранением элемента проверять номер на уникальность (пытаясь найти по нему элемент с другим ID).
А вот дальше начинается дичь.
Нюанс 4: Номер приказа об открытии группы должен создаваться при сохранении группы.
- Этот номер нельзя изменять.
- Формат NNNN-YYYY, где YYYY — текущий год, а NNNN — номер последнего приказа об открыти + 1.
- Если элемент удаляется, то если его приказ об открытии имеет максимальный номер, то он удаляется тоже. Если не максимальный, то номер приказа не удаляется.
Я под эти приказы создал отдельный HL-блок, чтобы хранить номера приказов. Пока писал эти строки, подумал, что вообще-то можно обойтись без этого.
Достаточно:
- Запретить изменять номер приказа при обновлении элемента.
- При генерации номера приказа — искать последний приказ за текущий год с максимальным номером, а затем генерировать новый номер на единицу больше.
Если будет браться максимальный номер, то не важно какие не максимальные удалялись.
У программистов есть такой приём — «желтый резиновый утёнок». Если не понимаешь задачу, нужно спросить совет у утёнка. Пока формулируешь вопрос и объясняешь задачу и проблему, очень часто находишь решение. А потому, что правильно заданный вопрос — это половина ответа как минимум. Как максимум — готовый ответ.
Спасибо, что читаешь. Видишь, пока тебе объяснял, сам всё и понял. Спасибо.
А теперь скажи «кря»))
5 утра. Нужно признать, что этот скрипт не работает, не смотря на все старания, и я знать не знаю почему. Возможно, у битрикса какие-то свои рандомные понятия про сохраняемые данные. Они то приходят в массив, то нет. В результате срабатывают триггеры и привет.
Нужно будет задать полям значение по умолчанию и проверять чтобы приходило либо оно, либо нормальное. Если пришло пустое, значит бирикс снова протупил и отдал пустое значение.
Не знаю. Нужно попробовать дойти до кровати. I’m OFF.
Напишите комментарий