Никаких праздников

Неделька выдалась тяжёлой. Очень тяжёлой. У меня на полке стоят две тетради, которые вёл в армии в середине 90-х. Они свидетели, что бывало и хуже. Намного. Так что… тогда Бог помог, уверен, поможет и теперь. Тем более, что в целом всё просто отлично. Нужно лишь взять и сделать за выходные столько дел, сколько обычно делается за 2-3 месяца.

План нереальный, но другого нет. Выйти из кризиса необходимо. Жизненно.

Самое время начинать новый цикл постов из серии «Побег из зада», но… что-то подсказывает, что как раз времени на это не будет.

А теперь о хорошем. Сегодня суббота. За бортом светит солнышко. Скоро полдень. Я почти выспался.

Итак, вилы в руки и вперёд, разгребать субстанцию, что накопилась и мешает жить.

Первым пунктом идёт учёт ночного прогона автотестов. Нужно их наконец инвентаризировать и поставить диагнозы.

Там всё плохо. Лучше чем ожидалось, но это разница из разряда «опоздал на поезд на 1 час, а не на 3».

С этим справился за два часа, но нужно ещё докопаться до причин, по которым они упали. Скука-рутина.

Затем, сшил из красного фетра (другого не нашёл) новый амбушюр. Старый распался на части, а без него правый наушник давит на ухо. С этим справился быстро, выглядит он странно, однако носить приятно.

Нашёл причину падения трёх автотестов. Два поправил, на третьем уткнулся во что-то из серии «всё ж должно работать, а не работает». Так бывает из за общей корявости тестового стенда.

Ну в самом деле, чего стоит, например, сделать, чтобы данные в полях ввода хранились в параметре value? Так нет! Иногда в value, иногда в title, иногда, чтобы данные там появились, нужно убрать фокус с поля. Т.е. кликнуть где-нибудь вне него. Про внятные (или хоть какие-нибудь постоянные) id для элементов уже и не мечтаю даже. Их не завезут. Я узнавал.

Минус ещё час.

Тем временем, солнце, убедившись что я сегодня не выйду, двинулось в сторону заката. Это где-то на западе.

Третий поправил. На часах 18:00. Темнеет. Надоело сидеть вечерами в потёмках. Белые ночи прошли, настольная лампа, повышенная в должности (и по высоте) до небольшой люстры, не справляется от слова «никак».

Бахнул на потолок офисную светодиодную панель.

Этих панелей мне однажды отдали сразу 4 штуки. Тогда как раз меняли на новые. Из четырёх неработающих у меня получилось две работающие. Вот одну из них только что приляпал на потолок над столом.

Светит ядерно. Будто у меня тут яркий день. Правда свет в глаза попадает, хоть кепку носи. Зато не кажется, что уже глубокая ночь.

Нужно потом перевесить выше. И выключатель какой-нибудь соорудить. Но это не сегодня.

Вторым пунктом — задача с Р2. Там нужно сделать зубодробительную проверку элемента инфоблока до и после сохранения.

Можно долго рассказывать сколько нервов я на него потратил и как мне не хочется делать это снова, но к чему лишние слова? На старт! Внимание! Марш!

Есть инфоблок. В нём 5 полей:

  1. Номер учебной группы.
  2. Номер приказа об открытии учебной группы.
  3. Чекбокс «Группа закрыта».
  4. Номер приказа о закрытии учебной группы.
  5. ID расписания, к которому привязана эта группа.

Тут ничего сложного. Пошёл, да и создал инфоблок с нужным набором свойств. И можно бы выдохнуть, но тут начинаются нюансы.

Нюанс 1: Это Битрикс.

Просто к сведению.

Нюанс 2: Название группы должно строиться из номера группы и даты начала обучения.

Тут тоже относительно просто. Лезу в ивенты и на событие после сохранения инфоблока вешаю скрипт, который выгружает из расписания дату начала занятий (по ID из поля), добавляет к дате номер группы, формирует  название, сравнивает его с тем, что сохранено. Если не совпадает, то меняет на это сгенерированное.

Нюанс 3: Номер учебной группы должен быть уникальным.

Этот «номер» является строкой примерно в таком формате ХХХХХ-ХХХХХХ-ХХХХ. Формат в будущем может измениться, но раз заполнять будут вручную, то задача упрощается.

Повесил на событие перед сохранением элемента проверять номер на уникальность (пытаясь найти по нему элемент с другим ID).

А вот дальше начинается дичь.

Нюанс 4: Номер приказа об открытии группы должен создаваться при сохранении группы.

  • Этот номер нельзя изменять.
  • Формат NNNN-YYYY, где YYYY — текущий год, а NNNN — номер последнего приказа об открыти + 1.
  • Если элемент удаляется, то если его приказ об открытии имеет максимальный номер, то он удаляется тоже. Если не максимальный, то номер приказа не удаляется.

Я под эти приказы создал отдельный HL-блок, чтобы хранить номера приказов. Пока писал эти строки, подумал, что вообще-то можно обойтись без этого.

Достаточно:

  • Запретить изменять номер приказа при обновлении элемента.
  • При генерации номера приказа — искать последний приказ за текущий год с максимальным  номером, а затем генерировать новый номер на единицу больше.

Если будет браться максимальный номер, то не важно какие не максимальные удалялись.

У программистов есть такой приём — «желтый резиновый утёнок». Если не понимаешь задачу, нужно спросить совет у утёнка. Пока формулируешь вопрос и объясняешь задачу и проблему, очень часто находишь решение. А потому, что правильно заданный вопрос — это половина ответа как минимум. Как максимум — готовый ответ.

Спасибо, что читаешь. Видишь, пока тебе объяснял, сам всё и понял. Спасибо.

А теперь скажи «кря»))

5 утра. Нужно признать, что этот скрипт не работает, не смотря на все старания, и я знать не знаю почему. Возможно, у битрикса какие-то свои рандомные понятия про сохраняемые данные. Они то приходят в массив, то нет. В результате срабатывают триггеры и привет.

Нужно будет задать полям значение по умолчанию и проверять чтобы приходило либо оно, либо нормальное. Если пришло пустое, значит бирикс снова протупил и отдал пустое значение.

Не знаю. Нужно попробовать дойти до кровати. I’m OFF.

 

Напишите комментарий

Введите имя

Введите адрес электронной почты

Введите адрес вашего сайта

Нажмите эту кнопку, чтобы отправить комментарий.

Введите текст комментария