Итак, начнем.
Задача:
Суть задачи сводилась к следующему: есть программный продукт, написанный на С#. Нужно написать что-то подобное на 1С. С последующим переводом компании на новые рельсы. Сразу скажу, что фирма занимается логистикой практически по всему миру. Исполнитель один.
Я созвонился с работодателем. Меня заинтересовала эта задача, показалась очень интересной. Я приехал на собеседование, где и совершил свою первую ошибку.
Дело было так: Сижу я в кабинете. Директор рассказывает мне о своих планах, задачах. О структуре программы на С#. Всё это делается в общих фразах и с краткими образными рисунками на бумаге. Это мое первое собеседование на фирме. Директор хочет понять, подхожу ли я ему, и задает вроде бы обычный вопрос о том, за какие сроки я бы справился с этой работой.
К этому моменту я имел слабое представление о том, что предстоит сделать, в общих чертах видел суть реализации, не знал про подводные камни и доп. моменты. Из слов директора задача выглядела не такой уж и сложной: Создать несколько документов, несколько справочников. Несколько отчетов. - Не так уж и сложно. Я сказал ему, что готов выдать продукт с общей структурой готовой в течение 2х месяцев. Имелось ввиду что я опишу структуру. Намечу концепт, опишу основные моменты программы. Я не имел виду полностью готовое решение т.к. это просто нереально было.
Как показала дальнейшая работа в организации, эти мои слова были ошибкой. Дело в том, что нельзя называть никаких сроков, даже примерных, пока ты точно не поймешь, с чем столкнулся. Вышло так что через 2 месяца программа не была готова. И не через 4. И даже через 6. Проект оказался достаточно сложным. Специфика организации состояла в работе с файлами. Их подгрузке и хранении в 1С….в общем не буду описывать всех моментов, добавлю только, что:
1)Директор хотел чтоб было как в старой программе. (а 1с это не С#)
2)Выгрузка данных из старой программы в новую 1С.
3)Синхронизация обмена документами и банком с бухгалтерией.
Конечно, эту работу невозможно было реализовать ни за 2 месяца, ни за 6.
Я честно трудился, а директор косился на меня и злился. Он считал, что я давно должен был сдать ему проект. Иногда сложно объяснить людям все сложности твоей работы.
Из 1й ошибки вытекала и 2я. Мы не писали ТЗ. Все понимают, что обычно сам программист себе и пишет ТЗ. Сам его и выполняет. Решено было обойтись без этой лишней волокиты и сократить сроки работы. Вышло как всегда наоборот. Только большой опыт спас меня от того чтобы не рухнуть в рутине мелких задач которые были описаны даже не для меня а другим программистам, делавшим ещё С#. Часть задач забывалась, часть была не ясна до конца.
3я ошибка заключалась больше в специфике данной фирмы, но и я виновен также. Дело вышло так, что сам директор, лично, проверял у меня мою работу. Т.е. он давал задачу, часто письменно, а я её реализовывал. Потом показывал ему так сказать результат.
Директора занятой народ и не всегда они бывают на месте. По этому вышло так, что задачи стали затягиваться. Одна задача цепляла другую, и т.п. Я попросил его выделить мне человека, который разбирается в программе. Человека, с которым я смогу работать в режиме реального времени и решать вопросы за короткие сроки. Но директор был неумолим. Он сказал, что только он знает всю глубину работы программы. Я махнул рукой и не стал с ним спорить.
Сначала все шло хорошо. Я показывал их директору свою работу, тот внимательно смотрел, корректировал или принимал работу. По факту получалось, директор только смотрел внешние формы, иногда проверяя кнопочки, не тестируя как положено программу. Вылилось все в то, что, полномасштабное тестирование начиналось только ко времени дедлайна. Как правило, выяснилось, что те вещи, которые не смущали его раньше, стали критичны. А времени почти нет! В общем, начиналась жара. Нужно переделывать часть процессов. А эти процессы тянут другие вещи. Часть блоков перестали работать. А время дедлайна на носу… другими словами, мой совет, требовать тестировщика из штата сотрудников. Того, кто будет всегда под рукой.
Еще важное замечание. Никогда не сажайте людей на новую систему без обучения! Особенно если эти люди не знают 1С. Т.е. представьте, люди не только не знакомы с вашей системой, они и саму платформу-то не видели. Т.е. да, многие пользователи 1Са в этом смысле тупят, но эти то ребята так и вовсе! Да да, у нас вышло именно так. И это была 4я моя ошибка.
Получилось всё вот как: Директор сказал «хм, твоя программа почти такая-же, как и та в которой они работали до этого. Им и переучиваться нечему особо.» - Мне сложно было с ним спорить. Но по факту потом обучал я каждого индивидуально. Трудоёмкая работка.
После всего пережитого «создания ИБ» был ее запуск. Как обычно час X откладывался несколько раз. Но вскоре пришло осознание того что больше откладывать нельзя. И мы решили запускаться. Мне дали аж 3х человек на тестирование проекта. Сразу скажу, все они оказались жутко занятыми людьми и очень мало времени посвятили тестам. Тем не менее я не слезал с этой троицы и выжал из них что мог. Часть критичных багов было закрыто. Часть логики переработана.
Один за другим, тестировщики отчитывались директору о том, что их устраивает программа.
Вроде все шло не плохо. И вот день запуска настал. Сразу полезли всевозможные баги.
Начиная от печатных форм заканчивая какими-то логическими нестыковками в правах и донастройке функционала. Первая неделя прошла в попытках исправить и закрутить гайки.
Сказалось то, что тестирования практически не было. Но в целом запуск прошел успешно.
Теперь немного про плюсы внедрения.
1)Первое это синхронизация между С# и 1С. Директор требовал от меня создания функционала, я же с этим не спешил. Спешил я с синхронизацией. Создавая новый справочник или документ, я пытался хотя-бы частично настроить его синхронизацию. Это я делал скрытно от директора, чувствуя подсознательно что эти вещи надо закрыть прежде всего. И вышло так, что неожиданно для меня, за 2-3 недели до НГ директор объявил, что программист по С# уходит.
И что синхронизацию лучше всего закончить к его уходу. Разумеется, если бы я не сделал большую часть работы, я бы оказался в очень неудобном положении. Не говоря уже о том, что сам запуск готового продукта мог бы затянуться на длительный строк, т.к. всех нюансов хранения данных старой системы я не мог знать. Вывод же звучит так: Не нужно слушать руководство всегда. Все же специалисту часто виднее то, что касается его узкого направления работы.
2)Синхронизация с бухгалтерией. Как обычно бывает, после запуска программы практически сразу остро встал вопрос выгрузки данных в бухгалтерию. А там соотв-но конкретные строки закрытия периода и задачи отчетности. И вот к тебе прибегают люди с вопросами и косяками, но у тебя горят сроки по синхронизации. Ад просто. Благо я позаботился о синхронизации заранее. Конечно, не все пошло гладко, но отведенного времени вполне хватило на то чтоб подкрутить ошибки.
3)Печатные формы. Печатные формы всегда делают в самом конце. Когда описан полностью документ. Я же и вовсе не хотел браться за них. Не люблю я это, вот и всё. Муторно.
Тем не менее, я много времени потратил на формы. Делал их так, чтоб люди могли сесть и работать. Я понимал, что времени на правки практически не будет, т.к. фирма перейдет на 1С и менеджеры начнут печатать документы клиентам. Иначе, при критичных ошибках и явных багах работа просто встанет. Я старался сделать так, чтоб в 1й день работы фирмы на 1С, у меня было как можно меньше проблем по всем фронтам.
Вывод: Имеет смысл постараться предусмотреть те моменты, которые могут быть критичными при запуске.
Итак, внедрение завершено. На всё потребовался год работы. С базой работают около 20и человек. Ещё многое нужно сделать и дописать, но главное то, что система работает.
Так-же решил выложить картинки того что вышло.
И рассказать по метаданным, было добавлено:
- 5 новых документов.
-19 справочников.
- с десяток отчетов.
- новые регистры модули и т.п перечислять не буду, скажу только то что система сохранения и просмотра файлов была переработана,
сильно передана система система распределения ролей, и много других фишек связанных со спецификой работы фирмы.
Всем спасибо за внимание.