Финал WorldSkills, разработка IT-решений для бизнеса — что это, как это было и почему там победили 1С-программисты
WorldSkills — это международное движение, занимающееся проведением профессиональных соревнований для молодых людей в возрасте до 22 лет.
Международный финал проводится раз в два года. В этом году местом проведения финала стала Казань (прошлый финал был в 2017 году в Абу-Даби, следующий будет в 2021 году в Шанхае).
Чемпионаты WorldSkills — это самые большие мировые чемпионаты профессионального мастерства. Начались они с рабочих профессий, а в последние годы все больше внимания уделяется “профессиям будущего”, включая IT-дисциплины, под которые на чемпионате в Казани был выделен отдельный огромный кластер.
В IT-блоке есть компетенция (конкретный «вид спорта») под названием «Программные решения для бизнеса» (IT Software Solutions for Business).
В каждом из соревнований ограничивается разрешенный список используемых инструментов. И если, например, для «ландшафтного дизайна» ограничивается именно список возможных инструментов (конечно, без указания явного производителя или цвета), то в компетенции «Программные решения для бизнеса» список допущенных технологий, которые могут использовать участники, жестко ограничен с указанием конкретных технологий и конкретных платформ (.NET и Java с определенным набором фреймворков).
Позиция фирмы 1С по этому вопросу следующая: информационные технологии – это очень динамичная область, в мире постоянно появляются новые технологии и средства разработки. С нашей точки зрения правильно позволить специалистам использовать те инструменты, с которыми они хотят и привыкли работать.
Осенью 2018 г дирекция WorldSkills услышала нас. Теперь предстояло обкатать методику включения новых технологий в соревнования. Это непросто.
В инфраструктурный лист чемпионата в Казани включили платформу 1С:Предприятие (1С:Enterprise) и организовали экспериментальную площадку IT Software Solutions for Business Sandbox.
Отметим, что официальный язык чемпионата – английский. Все материалы с результатами решения заданий (исходные коды, сопроводительная документация, интерфейсы ПО) должны были передаваться тоже на этом языке. Несмотря на сомнения некоторых людей (до сих пор!), на 1С можно писать на английском.
В соревнованиях на этой площадке приняли участие 9 молодых ребят из 8 стран мира (Филиппины, Тайвань, Корея, Финляндия, Марокко, Россия, Казахстан, Малайзия).
Жюри — команду экспертов — возглавил эксперт из Филиппин Джоуи Манансала.
Были представлены эксперты из Финляндии, ОАЭ, Коста-Рики, Кореи, России и Тайваня.
Отдельно отметим, что участники из России (Павкин Кирилл, Султанова Айгуль) и Казахстана (Витовский Людвиг) приняли решение использовать платформу 1С:Предприятие в рамках соревнований. Остальные участники использовали .NET для десктопной и Android Studio для мобильной разработки. Интересно то, что участники, выбравшие 1С — совсем молодые (Кирилл — ученик школы в Ставрополе, в этом году перешел в 11 класс, Айгуль — студентка колледжа, Казань, Татарстан), тогда как их соперники были гораздо более опытные (например, участник из Кореи — призер чемпионата WorldSkills 2013 года в Лейпциге; все имеют опыт участия в WorldSkills и несколько лет профессионального опыта работы в индустрии).
Учитывая, что в рамках соревнований участники использовали различные современные технологии, нам представился шанс проверить платформу 1С:Предприятие в действительно боевых условиях, сравнить как качество получаемых с ее помощью решений, так и скорость разработки, достигаемую с ее использованием.
Отдельно отметим, что в рамках специальной площадки IT Software Solutions for Business Sandbox участники выполняли те же задания, что и участники основной площадки IT Software Solutions for Business.
Само задание представляет собой комплексную задачу на автоматизацию определенного бизнеса, в этом году примером бизнеса стала условная компания «КазаньНефть».
Легенда
«Казань Нефть» — это одно из крупнейших нефтяных предприятий Республики Татарстан, действующее как национальный игрок рынка и международно признанный бренд в данной области. Головной офис компании, специализирующейся на исследовании месторождений, добыче, производстве, очистке, транспортировке, и продаже и дистрибуции нефти, нефтепродуктов и природного газа, находится в Казани (Россия).
Так как компания реализует стратегию быстрого расширения и создания новых офисов по территории всей России, руководство предприятия приняло решение внедрить новое программное обеспечение автоматизации бизнеса, направленное на поддержание и управление некоторыми операциями.
Условия Чемпионата
Задачи выдавались участникам в виде модулей (сессий) с требованием реализовать их за ограниченное время. Всего было 7 модулей. Три сессии для решения на десктопе – по 2.5 часа. Три сессии – клиент-серверная разработка, где клиентом выступало мобильное приложение, а общение между клиентом и сервером осуществлялось посредством WEB-API. На это отводилось по 3.5 часа. Последняя сессия – задачи на реверс-инжиниринг существующего программного обеспечения, 2.5 часа. В рамках реверс-инжиниринга участники должны были, основываясь на предоставленной им информации, спроектировать структуру базы данных приложения (построив ER-диаграмму), проанализировать сценарии использования системы (построив диаграмму вариантов использования), а также разработать и спроектировать интерфейс программного решения по предоставленным функциональным требованиям.
В качестве платформ для разработки использовались на основной площадке .NET (C#) и Java (включая Android Studio для мобильной разработки). В экспериментальном SandBox использовались .NET, Java и 1C:Enterprise версии 8.3.13.
Экспертами по итогам каждой сессии оценивался результат – готовый работоспособный проект, реализующий поставленные в начале сессии задачи.
Особенностью заданий является их «жизненность» — множество требований и ограниченное время. Большинство задач не специальные олимпиадные, а очень близкие к реальным промышленным задачам — с ними специалисты сталкиваются каждый день. Но задач много, а время ограничено. Участник должен решить максимальное количество задач, которые будут иметь наибольшую пользу для бизнеса. Совсем не факт, что сложная с точки зрения алгоритмики задача будет иметь больший вес, чем элементарная. Например, создание функционирующей учетной системы из трех таблиц для бизнеса важнее, чем красивая отчетная форма, со сложными алгоритмами, которая без этих таблиц совершенно не нужна.
Мы попросили победителя соревнований, участника от России, Кирилла Павкина, рассказать подробнее о том, какие были задачи и как он подошел к их решению.
Ниже – описание задания, рассказ самого Кирилла о том, как он решал задание. Мы также попросили Виталия Рыбалку, сотрудника 1С, одного из экспертов IT Solutions for Business Sandbox, прокомментировать решения Кирилла.
В рамках задания требовалось автоматизировать деятельность нескольких видов пользователей:
- Ответственных за учет активов компании
- Ответственных за внеплановые ремонты и плановое ТО активов компании
- Менеджеров по закупкам комплектующих и расходных материалов
- Нефтеразведочных и нефтедобывающих подразделений
- Топ-менеджементу требовались аналитические отчеты
Сессия 1
С точки зрения активов (например, автомобильного парка) нужно было реализовать их учет (заведение нового, правка текущих), быстрый поиск и различного рода фильтры для отображения информации, перемещение активов между подразделениями Компании, и группами самих активов. Вести историю таких перемещений и предоставлять аналитику по ним в дальнейшем. Учет активов в основном реализовывался для мобильных групп пользователей.
Кирилл: Интересной подзадачей была реализация кнопок в списке активов. Для решения использовался динамический список: пишем произвольный запрос, а при получении данных на сервере присваиваем нужным полям навигационные ссылки на изображения из библиотеки картинок.
По условию, фотографии к активу можно прикрепить двумя способами: сделать фотографию (средства мультимедиа) и выбрать из галереи (диалог выбора файла).
Некоторые формы нужно было перерисовывать при повороте экрана:
При изменении параметров экрана меняем видимость групп кнопок.
К занимательным, но простым задачам можно отнести фильтры в динамическом списке, поиск по двум полям (номер и наименование), генерацию серийного номера актива.
Комментарий эксперта: с точки зрения решения на платформе 1С:Предприятия задача довольно понятна. Кроме собственно создания мобильного приложения нужно было озаботиться передачей данных из СУБД «сервера» (MS SQL на десктопе) в мобильное приложение и обратно. Для этого использовались механизмы внешних источников данных и http-сервисов в десктопном «прокси-приложении». Для самой мобильной платформы повышенную сложность представлял вывод картинок в динамический список.
Сессия 2
Нужно было наладить менеджмент ремонтов по активам Компании. В рамках этой задачи нужно было вести список запросов на ремонты (по подразделениям и группам), учитывать приоритеты срочности ремонтов, планирование графика ремонтов в соответствие с приоритетами, заказ нужных комплектующих и учет уже имеющихся. Интересной подзадачей являлось то, что некоторые комплектующие имели срок годности; если для данного актива уже заказывали деталь и ее срок не истек, то для этого актива не нужно закупать эту же деталь еще раз. Интерфейс по ремонтам разрабатывался для десктопной составляющей ПО компании.
Требовалось также создать нетривиальную форму авторизации для двух ролей: ответственное лицо и менеджер по обслуживанию. Особенность заключается в том, что после авторизации надо автоматически выбрать одну из ролей.
Форма списка, доступная ответственному лицу представлена ниже:
Кирилл: Здесь можно выделить только подсветку незавершенных запросов на обслуживание. Решается условным оформлением в динамическом списке.
При нажатии на кнопку внизу экрана пользователь может перейти к следующей форме:
Ничего сложного с точки зрения 1C в этой форме нет.
Форма, доступная менеджеру по обслуживанию далее:
В этой форме есть сортировка по приоритету и дате запроса. Нажимая на кнопку снизу пользователь может перейти в форму выбранного запроса:
Помимо защиты от дурака, в этой форме предлагалось реализовать список запчастей для ремонта. Подзадача интересная, поскольку детали имеют срок годности. Это значит, что если с данным активом уже происходили чрезвычайные ситуации и для него была заказана деталь, срок действия которой не истек, то ее можно использовать повторно. Это следует показать пользователю.
Комментарий эксперта: тут Кирилл сам верно расставил акценты. С точки зрения реализации на платформе 1С:Предприятия ничего архисложного нет. Требовался внимательный анализ условий учета и использования запчастей и грамотная реализация задачи в целом. Кроме этого, нужно было правильно наладить учет запросов на обслуживание. Основную сложность представлял лишь цейтнот в 2.5 часа.
Кроме этого, как в мобильной разработке, участнику следовало грамотно получать данные из внешней СУБД (MS SQL).
Сессия 3
Для ТО (технического обслуживания) предлагалось реализовать сервис долгосрочного планирования. Интересной особенностью здесь являлось требование формирования графика ТО по активам как по срокам – например, каждый второй месяц 3-го числа. Так и по какому-то количественному показателю – например, по одометру автомобиля (замена масла каждые 5000км, замена покрышек каждые 20000км). Менеджер по ТО должен был получить удобное мобильное приложение, которое динамически выводит список просроченных, актуальных и выполненных ТО за указанный период. Кроме этого, каждый вид ТО должен был раскрашен цветом по специально оговоренным правилам. Мобильное приложение должно было обеспечить заведение новых графиков ТО и отметку уже выполненных прямо в мастерских с оперативной актуализацией этой информации на сервере.
Кирилл: Существует два типа ремонтов: по времени (time-based) и по пробегу (run-based). Внутри каждого допускается вариативность. Например, по плану ремонт должен происходить каждую пятницу 13-го числа месяца или через каждые 20,000 километров пробега. Задача считается завершенной, если справа от нее стоит галочка.
Было предоставлено условие сортировки задач в списке. Также, каждая строка должна выделяться цветом в зависимости от условий.
При нажатии на кнопку снизу можно создать новый план на обслуживание:
Необходимые поля отображаются в зависимости от выбранного типа графика. Если мы выбрали недельный временной график, то нам будут показаны два поля: номер недели и день недели. Например, по вторникам каждые 3 недели.
Комментарий эксперта: как и в предыдущей мобильной разработке на платформе 1С:Предприятие здесь задача глобально разделилась на 2 составляющие – общение с «сервером» через web-api и грамотное отображение динамического списка с условным оформлением и фильтрации (отбор) данных. Кроме этого интересным для реализации было требование учета ремонтов как по периодам, так и по количественному показателю.
Сессия 4
По комплектующим и расходным материалам требовалось учитывать запасы, планировать расходы и будущие закупки. Кроме этого, здесь появлялся партионный учет, но не для всех товаров. Все это необходимо было вести в рамках множества складов, включая поступление, расходование и перемещение. По условиям задачи требовалось обеспечить контроль остатков и не допускать конфликтов при работе с актуальными запасами. Менеджеры по закупкам работают в десктопной версии ПО.
Главная форма представлена ниже:
Кирилл: Помимо сортировки из условия, предлагалось дать пользователю возможность произвольной сортировки. На 1C об этом можно даже не задумываться. Поле с количеством деталей должно быть подсвечено зеленым для приходных накладных.
В этой сессии просили контролировать остатки товаров на складах. Так, должно выводиться соответствующие сообщение при попытке удалить приходную накладную. Здесь и вспоминаем экзамен на специалиста по платформе. Форма приходной накладной далее:
У каждой детали есть признак, по которому определяется, должна ли она привязываться к определенной партии. Для таких запчастей обязательно нужно указывать номер партии во всех документах. Это является дополнительным измерением при контроле остатков деталей. Их также можно перемещать между складами:
Форма отличается от предыдущей лишь тем, что вместо заказчика нужно указывать склад, из которого будет осуществляться поставка. Список выбора для партии автоматически составляется после подбора детали. Пользователь может сформировать отчет по остаткам запчастей:
Здесь мы можем посмотреть остатки товара на выбранном складе. Флажки справа от склада позволяют настроить фильтрацию и сортировку. В списке нет явного разделения по партиям для тех деталей, по которым оно обязательно. Остатки по каждому номеру партии выбранной запчасти можно посмотреть с помощью навигационной ссылки справа.
Комментарий эксперта: в этой сессии (модуле) впервые появился партионный учет. Участникам требовалось учитывать расходные материалы и товары не только сами по себе, но и по партиям. В целом, задача отлично подходящая для платформы 1С:Предприятие – вот только разработать это всё нужно было с нуля и успеть за 2.5 часа.
Сессия 5
В пятой сессии нам был поручена функциональность по управлению скважинами. Для разведывательных групп необходимо было создать мобильное приложение, осуществляющее учет скважин по добыче нефти или газа. Здесь нужно было получать с сервера список актуальных скважин и отображать графически выбранную скважину по слоям (грунт, песок, камень, нефть) с учетом глубин каждого слоя. Кроме этого, приложение должно было позволять обновлять информацию о скважине и добавлять новые скважины. Для этого приложения заказчиком выставлялись специальные условия работы в оффлайн и онлайн режимах (контроль связи с сервером) – проверка связи с сервером каждые 5 секунд и изменение функциональности приложения в зависимости от доступности сервера.
Кирилл: При выборе скважины высвечивается столбчатая диаграмма, на которой выделены слои до залежей нефти или газа. Для каждого слоя хранится его наименование, цвет и диапазон залегания. Из-за особенностей оформления, встроенные в платформу диаграммы не спасают, зато табличный документ отлично справляется с поставленной задачей. Скважины можно создавать и изменять:
Кроме множественной защиты от дурака, ничего интересного в этой форме не было.
Далее предлагалось контролировать подключение к серверу. Каждые 5 секунд пытаемся подключиться. Если не получилось, то ограничиваем функциональность приложения и выводим сообщение.
Комментарий эксперта: задача этой сессии интересна в первую очередь графическими возможностями. Участники, использующие платформу 1С:Предприятие решали её двумя разными способами – кто-то механизмом диаграмм, кто-то табличным документом. У каждого из способов есть свои плюсы и минусы. В рамках решения на чемпионате WorldSkills ключевым являлось время (снова вспоминаем про ограничение времени). Отдельная интересная задача – пинг сервера каждые 5 секунд и изменение поведения мобильного приложения в зависимости от доступности либо недоступности сервера.
Сессия 6
Для топ-менеджмента предлагалось создать рабочее пространство – Dashboard. На одном экране нужно было выводить общие показатели деятельности компании за указанный период в графическом и табличном виде. Главной формой является отчет по затратам:
Кроме Dashboard нужно было реализовать распределение запчастей для ремонтов активов, используя методы списания FIFO/LIFO/«Самый дешевый уходит первым».
При распределении учитывался партионный учет, использовался контроль остатков и защита от несанкционированных действий пользователя («защита от дурака»).
Кирилл: Для решения использовались таблицы значений с программной генерацией колонок, поскольку их может быть произвольное количество:
- Первая таблица отвечает за общие затраты подразделений по месяцам. Красным и зеленым цветом выделяются самое убыточное и прибыльное подразделение соответственно.
- Во второй таблице представлены самые дорогостоящие и наиболее часто используемые запчасти за каждый месяц. Если есть несколько деталей, которые соответствуют критериям, то они должны выводиться в одной ячейке через запятую.
- Самые дорогостоящие (по затратам на запчасти) активы отображаются в первой строчке третьей таблицы. Во второй же строчке выводится подразделение, к которому относится актив сверху. Если есть два самых дорогостоящих актива с одинаковыми затратами, то они должны выводиться в одной ячейке через запятую.
Диаграммы выводил с помощью встроенных механизмов платформы, а заполнял программно с помощью запросов.
Здесь же предлагалось реализовать поддержку многоязычности. Программа загружает XML-файлы с локализацией элементов интерфейса, а форма должна перерисовываться при выборе языка в выпадающем списке.
При нажатии на кнопку в левом нижнем углу экрана открывается форма по управлению запасами:
В этой форме мы наконец-то начинаем тратить запчасти на ремонт. Здесь мы сначала находим детали, которые нам понадобятся для починки актива. По выбранным полям и методу распределения (FIFO, LIFO или минимальная цена) выводятся найденные совпадения или сообщение, если таковых нет. После этого можно пометить детали как предназначенные для починки данного актива. Контроль остатков актуален для текущей сессии. Если мы уже назначили детали, то они больше не могут попасть в найденные.
Комментарий эксперта: очень интересная сессия. Она по максимуму использует возможности платформы 1С:Предприятия – тут и грамотная работа с виртуальными таблицами регистров накоплений, и программная работа с элементами формы (в первую очередь – таблицами, во вторую — заголовками), и диаграммы. И даже LIFO/FIFO при анализе запасов, анализ прибыли/убытков и т.п.
Сессия 7
В финале задания (7 сессия) заказчик предоставил ПО (exe-файл) по проектной деятельности и небольшое видео по работе с ним. Требовалось провести реверс-инжиниринг и на основании этого создать 2 диаграммы: диаграмму вариантов использования и диаграмму сущность-связь. Кроме этого, были выдвинуты некоторые требования по созданию ПО в будущем – необходимо было сформировать макет интерфейса по этим требованиям.
По условиям соревнований для создания диаграмм требовались использовать исключительно MS Visio.
Комментарий эксперта: в этой сессии возможности платформы 1С:Предприятия практически не использовались. Диаграммы по условиям соревнований создавались в MS Visio. А вот прототип интерфейса можно было создать в пустой информационной базе 1С.
Общие замечания
В начале каждой сессии предлагалось выполнить импорт данных посредством SQL-скрипта. В этом заключался главный недостаток в использовании 1C по сравнению с C#, поскольку мы тратили не менее получаса на перегонку данных во внешние источники данных, создание собственных таблиц и перемещение строк из внешних источников в наши таблицы. Остальным требовалось всего-лишь нажать кнопку Execute в Microsoft SQL Studio.
По очевидным причинам хранить данные на мобильном устройстве не стоит. Поэтому на мобильных сессиях мы создавали серверную базу. Там хранили данные и предоставляли доступ к ним по http-сервисам.
Комментарий эксперта: здесь интересен баланс 1С/не1С – в то время как программисты на 1С:Предприятие тратили ощутимое время на подключение к внешней СУБД (Кирилл отдельно упомянул это выше), разработчики на C#/Java (Android Studio для мобильной разработки) тратили время на другие направления – интерфейсы, написание большего количества кода. Поэтому итоги каждой сессии были для всех экспертов непредсказуемы и крайне интересны. И интрига эта сохранялась до конца – достаточно посмотреть финальную таблицу победителей с распределением баллов.
Кирилл рассказ закончил :)
В заключение нужно напомнить, что исполнителю требовалось не «просто запрограммировать задачу по ТЗ» – нужно было проанализировать задание, выделить блоки для реализации подзадач, спроектировать их и определиться, что именно он успеет реализовать из этого за крайне малое отведенное время. Все 4 дня приходилось действовать в условиях жесткого цейтнота, зачастую начиная каждую следующую сессию с нуля. Даже взрослый специалист, с многолетним опытом в отрасли с большим трудом успеет выполнить выданное задание на сессию на 100% в отведенное время.
Отдельного упоминания заслуживает принятая система оценивания.
Для каждой сессии авторами задания разрабатывается сложная система критериев, включающих как проверку функциональных возможностей, корректности работы, так и требования к интерфейсу приложения, и даже следование специально предоставленному участникам стайлгайду компании, для которой они разрабатывают свои решения.
Критерии оценивания очень мелко гранулированы — при общей стоимости задания сессии в десятки баллов, выполнение какого-то критерия может добавить участнику десятые доли балла. Тем самым достигается крайне высокий и объективный уровень оценивания результатов каждого участника соревнований.
Результаты
Финальные результаты оказались впечатляющими.
В упорной борьбе победу одержал Кирилл Павкин из России, использовавший платформу 1С:Предприятие. Кириллу 17 лет, он из Ставрополя.
Буквально десятые доли балла отделили победителя от преследователей. Второе место занял участник из Тайваня. Общая таблица лучших шести результатов выглядит так:
Безусловно, Кирилл одержал победу благодаря своему таланту, знаниям и умениям.
Однако отметим, что все три участника, использовавшие в качестве инструмента платформу 1С:Предприятие, вошли в первую пятерку — что является безусловным подтверждением мирового уровня технологии 1С:Предприятие.
По итогам соревнования в медиацентре КазаньЭкспо прошло награждение победителей, ребята получили медали из чистого золота (в соответствии с занятым местом) и денежные призы. Также ребята получили сертификаты, позволяющие им пройти стажировку в компании 1С.