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

Неделька выдалась тяжёлой. Очень тяжёлой. У меня на полке стоят две тетради, которые вёл в армии в середине 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.

 

=== Заметки ===

Как превратить работу в увлекательную игру? Кто-нибудь пробовал? Как успехи?

Сегодня канун Старого Нового Года. Душа просит праздника.

Пойти что-ли к шахтёрам, пожаловаться на то, какая у меня тяжёлая и нервная работа?
Хоть поржут, всё польза.

Ещё...

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

Введите имя

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

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

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

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