Обновление программы учёта на заводе металлических комплектующих: цеховая программа для заказов и партий, написанная в 2006 году, снова ставится на новые компьютеры и работает на современной версии .NET. Выполнил работу Евгений Росляков. Программы для бизнеса и сайты он пишет с 2016 года, числится самозанятым, заключает договор, а для юрлиц готовит закрывающие документы. Встретиться можно в Москве, остальное делается удалённо.
Завод выпускает крепёж и кронштейны. Заказы идут партиями, каждая проходит несколько операций, и мастер в цехе должен видеть, что сейчас в работе, что готово и что задерживается.
Всё это держала настольная программа на .NET Framework 2.0. Почти двадцать лет она ежедневно обслуживала цех, и всё было хорошо, пока не начали менять компьютеры. На новых машинах программа не устанавливалась. Часть модулей была написана на J#, он же JSharp. Это язык, похожий на Java, который Microsoft выпустила вместе с ранними версиями платформы, а потом перестала поддерживать и убрала из новых сред разработки. Исходники остались, компилировать их нечем.
Прежний программист давно ушёл, документации почти нет. На заводе боялись, что в один день программа просто не запустится, а учёт партий заменить нечем.
Экраны и порядок работы клиент менять не хотел: мастера знают их наизусть. Менять требовалось фундамент, а не внешний вид.
Сначала разобрал программу по модулям. Выписал все, выделил написанные на JSharp и отметил, откуда их вызывает остальной код. Оказалось, что J#-кода немного, зато в нём важные расчёты: нормы расхода металла, размеры партий, сроки.
Эти модули переписал на C# аккуратно, по одному. До переписывания для каждого расчёта собрал проверки на реальных старых примерах: входные данные из архива и результаты, которые программа выдавала годами. Новый код обязан давать те же цифры. Редкий случай, когда .NET программирование ценно не новым кодом, а сохранёнными результатами. J# опирался на собственную библиотеку классов в духе старой Java, поэтому часть вызовов пришлось заменять на аналоги из .NET вручную.
Весь проект перенёс с .NET Framework 2.0 на актуальную версию .NET с долгой поддержкой. В заводской IT-службе платформу называют коротко, DotNet, и администраторы говорят просто «поставили DotNet нужной версии». Теперь ничего особенного ставить не надо, хватает одного установщика.
Слой данных на ADO.NET оставил: он был написан разумно, и переписывать его не было смысла. Но почистил. Запросы, собранные склейкой строк, заменил параметрами. Операции, которые меняют сразу несколько таблиц, обернул в транзакции, чтобы при сбое не оставалось полупроведённых партий. Строку подключения к базе вынес в настройки.
Собираться проект стал в современной среде разработки. Добавил два отчёта, о которых просили мастера: сводку по партиям в работе и список просроченных операций. Написал установщик, который ставит программу и нужные компоненты за один запуск.
Внедрял параллельно: неделю старая и новая версии работали с одной базой, а мастера сравнивали экраны и цифры.
Программа снова ставится на любой новый компьютер завода. Экраны остались привычными, мастера и учётчики не переучивались. Цифры совпали с теми, что выдавала старая версия: это проверено на архивных партиях и за неделю параллельной работы.
Для завода главное другое: исчез код на языке, у которого нет будущего. Вся программа теперь на C#, и любой разработчик на .NET прочтёт её без раскопок. Появилась документация: как собрать, как поставить, как устроена база.
Новые отчёты избавили мастеров от ручного поиска отстающих партий. Вечерняя сводка собирается сама.
Программа осталась настольной. Работать с ней можно только с компьютера внутри заводской сети, удалённого доступа и мобильной версии нет. Интерфейс по современным меркам выглядит старым, но его никто и не просил менять.
Дальше можно подумать о веб-версии для мастеров с планшетов или об обмене данными с бухгалтерской системой.
На предприятии давно работает программа, к которой страшно прикасаться? Отправьте через freelance.ru название платформы, год выпуска и то, что именно перестало работать. Отвечу, стоит ли её спасать.