Случалось ли вам видеть автоматизацию производственного предприятия, выполненную за 2 месяца? Или, может быть, доводилось делать такую автоматизацию? Я уверен, таких примеров много. У меня тоже есть – кидаю в копилку.
Сразу скажу, чтобы у вас не было предвзятости при прочтении (моя статья, да без предвзятости при прочтении – ха-ха-ха) – столь короткий срок обусловлен не тем, что автоматизацию делали мы со Стасом. И не в платформе дело (да, это 1С – на чем еще автоматизировать производство в нашей стране?). Дело в другом. Возможно, кому-то этот опыт пригодится, если получится создать аналогичные условия и сделать проект-рекорд.
Мне этот опыт, честно говоря, не пригодился. Я больше никогда в жизни не делал автоматизацию так быстро. Стас – тоже не делал. Ну всё, погнали.
Предприятие
Предприятие – птицефабрика полного цикла. Собственное производство кормов, свои курицы, высиживающие яйца (родовое стадо называются), свои инкубаторы, где из яиц появляются цыплята, свои птичники, где цыплята растут около 40 дней и становятся бройлерами, свой убойник, где бройлеров лишают жизни, свое производство продукции, где из лишенных жизни куриц делают колбасу, сосиски, рулеты и т.д., свой большой морозильник, где куриц замораживают, чтобы у вас в магазине был выбор – взять свежую или прошлогоднюю.
В нагрузку шел недавно отстроенный свинокомплекс, уже производивший продукцию. Там были свиноматки, производившие на свет поросят, были хряки, без которых поросята не могут появиться на свет, было выращивание тех самых поросят до размера здоровенных свиней, был цех по лишению свиней жизни, а мясо свозилось на производство продукции – туда же, куда перемещал куриц.
К чему я так подробно рассказал? Чтобы убедить вас, то с точки зрения автоматизации это – самое настоящее производство. Причем, многопередельное. А то ведь производством у нас считается что-нибудь связанное с железяками, даже если выполняется просто сборка изделия из десяти комплектующих. Здесь комплектующих – намного больше. Одних только специй – десятки.
Численность работников, к сожалению, помню плохо. В голове две цифры – то ли 3, то ли 6 тысяч человек. Нормальный такой завод, в общем.
Исходная ситуация
Я пришел на это предприятие 4 октября, начальником ИТ-отдела. В подчинении – Стас, программист 1С, и два админа. Задачи две: рутинная – руководить ИТ-отделом, главная – перевести завод с января на 1С 8 Управление производственным предприятием (УПП).
В то время информационной системой была 1С 7.7. Я никогда в ней ничего не понимал, поэтому до сих пор не помню, как она точно называлась – то ли «Производство + Услуги + Бухгалтерия», то ли «Комплексная». Если есть те, кто понимает – напишите в комментах разницу.
Рабочих мест предполагалось до сотни. Нормальный ценник для завода.
Свинарник на тот момент никак не был автоматизирован. Все делали на бумаге и в экселе, сдавали в курятник, там вводили данные.
Да, чуть не забыл – была еще Самая Главная Задача. Ради нее все и затевалось.
Самая Главная Задача
Если работали с автоматизацией затрат, то знаете, что такое структура затрат. Если вы из мира 1С, то знаете такой отчет, как «Структура затрат».
Если не знаете, я поясню. Вот есть, к примеру, колбаса, которую вы покупаете в магазине. Из чего сделана колбаса? Допустим, свинина, курятина, и куча специй и всяких добавок, включая воду. На первом, а точнее – последнем переделе структура затрат представляет собой плоскую таблицу, с перечисленными выше ингридиентами. Это – прямые материальные затраты.
До кучи туда добавляются затраты на, собственно, производство колбасы. Электричество, тепло, газ, зарплата рабочих, амортизация оборудования, зарплата программистов и т.д. Таблица становится пострашнее.
А свинина из чего сделана? Ну, из свиньи, наверное. А курятина – из курицы. Появляется второй уровень, и плоская таблица становится деревом, с вложениями. Но, как мы знаем, колбасу делают из лишенной жизни свиньи. Сделать свинину из свиньи – тоже передел. Ее ведь нарезать надо, как минимум. Еще докидываются затраты на выполнение этого передела.
Лишенную жизни свинью, как и курицу, создают из вполне себе живого животного. Это – тоже передел. Причем, весьма впечатляющий – большие линии, иностранного производства, все автоматизировано. Сколько в нашей таблице уже уровней?
А пока курица и свинья росли, их кормили, поили, лечили от болячек, обогревали, обслуживали курятники и свинарники и т.д. За время жизни список затрат накопился весьма впечатляющим.
Ну и т.д., до самого родового стада, «выпустившего» яйцо. Дерево затрат получается очень внушительным – несколько уровней, куча строк с затратами. Можно детально узнать, из чего же сделана наша колбаса.
Но структуру затрат в виде дерева способен смотреть только программист. И то, не для решения какой-то практической задачи, а потому, что он сам это дерево построил. Что-то в нем нормально понять невозможно.
Например, хочется узнать – сколько рублей электроэнергии в килограмме колбасы. Чтобы собрать цифру по дереву, придется бежать по всему дереву, т.к. электричество тратилось на всех переделах – и на обогрев наседки, потом на инкубатор, на птичник, на все производственные переделы.
Поэтому, для нормальных людей нужна была плоская структура, собирающая конечные затраты на готовую продукцию. Всю электроэнергию одной строкой, все тепло, газ, зарплату рабочих, зарплату офиса, амортизацию и т.д. Красивый, маленький отчетик, размером с А4.
Неприятность была в том, что этот отчет был нужен директору. Он знать не знал ничего не про какую 1С, но отчет хотел видеть стабильно раз в месяц. Он сам смотрел все цифры, сравнивал с предыдущими месяцами, докапывался, если в структуре затрат начинались брожения.
Этот отчет был в старой системе, но жил на последнем издыхании. Сделал его не Стас, а какой-то толковый чувак, уволившийся уже год или два назад. Там это как-то через выгрузку в файлы делалось, потом эти файлы стали на куски делить, ибо не вмещались уже объемы информации.
Вот и решили перейти на 1С 8. Забавно, как принимали решение. Позвали одного из интеграторов, рассказали Самую Главную Задачу. Тот уехал, потом вернулся, и показал им выгруженную в эксель структуру затрат, сформированную моим отчетом, давно валявшимся в интернете. Когда я пришел устраиваться, мне этот эксель тоже показали. Вместе посмеялись.
Подготовка к проекту
С октября по январь я сделал по проекту только одно – купил ПО и лицензии. Это была сама УПП, Зарплата и управление персоналом (ЗУП), и отраслевое решение Управление сельскохозяйственным предприятием (УСХП). Тот еще зоопарк.
Остальное время я занимался своим любимым делом – валандался.
Первый месяц была «послеродовая депрессия» — ну, я ж работу сменил, надо попереживать. Тем более, что сюда надо было ездить 40 км по трассе. Хотя, платили больше.
Потом пытался как-то организовать работу сисадминов, потому что бесило, если до меня долетали их косяки. Сделал свой первый сервис-деск, которым так никто и не воспользовался.
Стас мне говорил, что надо что-то начинать делать, но я его не слушал. Сам он тогда мало знал 1С 8, больше по 7.7 специализировался, поэтому просто грустно вздыхал и продолжал заниматься своими делами.
А я будто чего-то ждал. Ну и дождался. Наступил январь.
Каникулы
В начале января, как и положено, были каникулы. Рано утром, в первый день нового года, мне позвонили с завода и сказали, что сломалось видеонаблюдение. Я позвонил админу, тот уже чинил. Никогда, ни до, ни после, мне не звонили с работы 1 января.
Несколько дней я просто отдыхал. Мысль о том, что надо что-то делать по проекту, меня почти не покидала, но я гнал ее прочь. Не хочу, и все.
Потом, в районе 7 января, позвонила начальница – финансовый директор. Говорит – приезжай на завод, чего-нибудь посовещаемся. Приехали со Стасом, обсудили схему позаказного учета. Спросила – как там, нормально все? Говорю – да, конечно. Выйдем, и сразу всё заколосится.
Больше ничего по проекту не делал, до самого выхода на работу. То есть, почти до середины января.
Январь
Ну а тут, как говорится, понеслась. Есть такой подход – экстремальное программирование. У нас было экстремальное внедрение.
Естественно, с первого часа нам начали названивать и спрашивать, куда и как вносить данные. А у нас даже сервер не развернут. Слава богам, хоть SQL был готовый.
Ладно, быстро развернули 1С. Быстро добавили пользователей – тех, кто уже позвонил. А кто не звонил – значит, не сильно надо. Главное, бухгалтерия пока не доставала – они в январе обычно отчетностью заняты, а ее сдавать из старой системы.
Зашли пользователи в программу, а там – пустота. Ни номенклатуры, ни складов, ни остатков. Полчаса посовещались, с чего начать – решили, что номенклатура важнее. Без нее вообще ничего не сделаешь.
Кинулись искать какую-нибудь обработку для переноса справочников. Нашли быстро, скачали, попробовали – работает! Номенклатура появилась. Подразделения, контрагенты, склады – тоже перенеслись. Маленько отлегло, можно хотя бы отгрузки оформлять.
Так же поступили с остатками. Нашли обработку, скачали, перенесли. Твою ж через коромысло… Она только по бух.учету остатки перенесла. Пришлось срочно писать обработку, которая создала аналогичные остатки по управленческому учету.
Дальше я с хронологией могу путать, т.к. всё происходило, как во сне. Но всё было в январе.
Тут вызвала начальница. Думал, мне – звиздец. Нет, всё прозаичнее – она решила поменять названия номенклатуры, раз такое дело – внедрение новой системы. Только вот беда – таблицу соответствия очень уж кривую составили.
Ну ладно, быстренько соорудили обработку по переименованию номенклатуры. Выполнили – с виду всё хорошо. Но скоро начались звонки от склада отгрузки – говорят, мы им все документы испортили. Смотрим – блин, и правда. Из-за нечеткого соответствия произошли реально недопустимые подмены.
История с номенклатурой продолжалась в вялотекущем режиме пару дней. Найдут ошибку, мы вручную поправим таблицу соответствия, запустим, забудем. В итоге, вроде, победили.
Тут пришли из бухгалтерии и сказали, что мы мудаки. Потому что не сделали ключевую доработку – учет в двух единицах. Вообще, в 1С учет ведется в одной единице. Если у тебя штуки, то считай в штуках, если килограммы – то в них и считай. Есть пересчет из одной единицы в другие, но он линейный, по коэффициенту.
А куриц принято считать в головах и килограммах. Никакой линейной зависимости нет. В одном птичнике 10 куриц могут весить больше, чем 15 куриц в другом. Нужно реально два поля в каждом документе – количество в килограммах и головах.
Я пытался поспорить, но Стас сказал, что надо делать. Сели, сделали. Где-то полдня ушло – спасло то, что во второй единице нужен был только учет, без расчета себестоимости и т.п.
Тут бухгалтерия пристала с каким-то АРМ. Я сначала отбивался – без АРМа обойдетесь, руками вводите первичку. Но они настояли, показали свою работу (самое время, ага), и я решил сделать этот несчастный АРМ.
Суть его проста. Куриц в птичниках периодически пересчитывают и взвешивают. Результаты пишут на бумажках и сдают в бухгалтерию. Тут и нужен АРМ – надо вбить пару цифр, текущее количество и вес куриц, а система должна найти последние результаты такого же взвешивания, вычислить разницу и оформить документ выпуска. Выпуском являются килограммы, на них и списываются затраты.
Тут же выяснилось, что курицы – животные капризные, и иногда перестают нормально есть. Как результат – потеря веса. Вроде и пофиг, но с точки зрения учета это – отрицательный выпуск, а 1С так не умеет. Пришлось срочно дорабатывать.
Проснулись снабженцы – у них, оказывается, есть внутренние заказы, когда разные подразделения просят чего-то себе купить. Есть какая-то простая процедура согласования. Сами снабженцы, естественно, в новой программе ни в зуб ногой. Пришлось быстро доработать стандартный внутренний заказ, и провести обучение.
Пришла проблема, откуда не ждали – зачет аванса. Если вы не из мира 1С, кратко поясню. Если мы заплатили поставщику предоплату, это аванс. Когда он привез товар, возникает кредиторка – мы ему денег должны. Но мы уже платили аванс. Сведение аванса и кредиторки, чтобы программа вычла одно из другого – это и есть зачет аванса.
Проблема заключалась в том, что на этом участке сидела тётенька, решительно не понимающая, что такое зачет аванса. В 1С есть нормальные инструменты, позволяющие эту операцию проводить – но только в том случае, если человек понимает, чем вообще занят. А она не понимала. И от нее каждое утро попахивало бухлецом. Пришлось срочно изобретать средство автоматического зачета аванса – еще более автоматического, чем тот, который и так есть в системе.
По ходу нарисовали несколько печатных форм, но это так, семечки.
Где-то тут закончился январь. Это был простой месяц – нам достаточно было организовать оперативный учет и ввод первичных документов. В следующем месяце из первички должны были родиться зарплата, себестоимость и Самая Главная Задача.
Февраль
Тут моя судьба решила, что я слишком хорошо устроился, и подкинула мне серьезную проблему – заболела полугодовалая дочь. Съела цветную капусту из покупной баночки, а там, в нагрузку, оказалась бактерия, название которой я запомнил на всю жизнь — Klebsiella oxytoca (Клебсиелла окситока).
Поест – и тут же понос. Несколько раз в день. Обезвоживание, угроза жизни. Жена бегала с ней по больницам, я – с ними через раз. На внедрение уже было насрать. Всё легло на плечи Стаса. В итоге положили в инфекционку, через пару дней они оттуда сбежали. Чем только не лечили, ничего не помогало. В итоге обратились к местному знаменитому профессору, и как-то так совпало, что к дню приема уже стало полегче. Он выписал какие-то дешевые таблетки, но главное – успокоил. Дочь пошла на поправку.
Я изложил сжато, но история эта продолжалась в течение всего февраля, создавая не самый приятный эмоциональный фон.
Главное мое опасение – расчет зарплаты на то ли 3, то ли 6 тысяч человек, как ни странно, решилось легко. Может, девушки толковые попались. Может, программа 1Сная настолько хороша – не знаю. Но проблем не возникло. Нашли обработку, которая перенесла историю начислений. Написали обработку, которая выгружала данные из УПП в ЗУП – вроде, выпуск в разрезе птичников, заказы, что-то еще. Алгоритм расчета зарплаты рабочих был очень сложным, и не был автоматизирован ни до нас, ни с нами. Как считали черт знает где, так и продолжили. В 1С попадали итоговые данные начислений.
Пришлось повозиться с расчетом себестоимости. Во-первых, в те времена алгоритм расчета через СЛАУ, известный как Расширенная Аналитика Учета Затрат (РАУЗ), был относительно новым, и содержал в себе ошибки. Это сейчас он – верх совершенства, а тогда приходилось сомневаться в каждой цифре.
Во-вторых, был нужен расчет еще и в налоговом учете, чего мне раньше делать не приходилось. Повозились, нашли пару ошибок в коде, исправили, вроде чего-то посчиталось.
В-третьих, впервые в жизни столкнулся с выпуском через 40 счет. Ничего особо интересного в том нет, кроме одного – он работал с ошибками.
Много пришлось повозиться с настройкой распределения затрат, т.к. широко использовались внутренние услуги. Например, есть какой-нибудь ремонтный цех – ходят и чинят птичники, если что сломалось. По итогам месяца сдают бумажки – кого чинили. Их затраты (зарплата, материалы) должны лечь ровно на те птичники, которые они починили. Не сказать, что прям космического масштаба задача, но повозиться пришлось.
Помню финал этого расчета. Начальница как раз укатила в ОАЭ, но держала включенной аську. И периодически, раз в полчаса, спрашивала меня – ну че, посчитал себестоимость? А я ей – нет, чот ни хера не считается. И так весь день – до тех пор, пока не получилось.
А когда получилось, приступил к Самой Главной Задаче.
Вообще, посчитать структуру затрат – не сложно. Обычный итерационный алгоритм, который копает всё глубже и глубже, надо лишь контролировать зацикленность и правильно пересчитывать цифры. Реальные проблемы начинаются, когда ты не просто считаешь структуру, а должен ее хранить.
Например, в этом месяце структура затрат – одна, в следующем она уже другая. Хранить надо обе, и не только сами структуры, но и остатки. Живет себе курица, и не знает, что за ней уже тянется большой хвост из сотен строк структуры затрат. А когда курицу лишат жизни, и она ляжет, например, на склад в виде заморозки, то рядом на полке окажется другая курица, «созданная» в прошлом месяце, со своей структурой затрат.
Вариантов за месяц перебрал штук шесть. То расчет слишком медленно идет, то объем хранимых данных превышает все мыслимые пределы. Но, в итоге, чего-то получилось – алгоритм уложился в критерии и, кстати, просуществовал долго – до самой продажи этой птицефабрики другому агрохолдингу. Тогда всю нашу УППу дружно снесли.
Параллельно пытался запустить отраслевое решение Управление сельскохозяйственным предприятием (УСХП). Далеко не всё получалось. Не всё работало – программа была рассчитана на человека, который понимает, что делает. А я, естественно, понимал плохо. Но как-то запустил.
Узнал много нового тогда. Например, что хряков покупают за рубежом, потому что в России – негде. Вроде, порода называлась F1. А процесс… М-м-м… Изготовления поросят – асинхронный. Сначала хряк делает свою работу, потом – свиноматка. Друг с другом они не пересекаются.
А еще свиноматка – это основное средство, как станок или сервер. Ее надо амортизировать. А хряк регулярно выпускает готовую продукцию. Она таким словом неприятным называется, что я не буду его приводить. Именно из этого слова потом появляются поросята.
Короче, февраль закончился успешно. И внедрение наше на этом закончилось. Мы закрыли месяц, бухгалтерия сдала свою отчетность, в том числе – специфическую для сельского хозяйства. Директор получил свой маленький отчетик с плоской структурой затрат.
Я на этом заводе проработал еще 3 месяца, и уволился. Последние три месяца стали зеркальным отражением первых – я ни черта не делал. Главная задача была решена, поддержку системы осуществлял Стас, никаких серьезных доработок мы уже не делали.
На первое место вышла задача, ранее считавшаяся второстепенной – собственно, управление ИТ-отделом, особенно админами. Те еще перцы были. Собственно, из-за их безалаберности и моей неспособности ими управлять так, как этого хотело руководство, я в итоге и ушел.
Причины
Теперь главное – почему получилось запустить систему так быстро? Ведь, с учетом каникул, это было 1.5 месяца. А если выкинуть задачу расчета структуры затрат, которая отняла почти весь февраль, то останется 1 месяц (выкинуть ее можно потому, что никто ее обычно не решает, особенно в рамках внедрения).
Ответы на вопрос «почему получилось?» уже были в тексте. И прямые, и косвенные.
Первая причина – прозаическая, экстремальный режим. Пока было время на подготовку, я пинал куриные какашки, пил кофе, курил и думал о высоком. Как только время исчезло, мы сели и стали пахать – вариантов уже не было. Вы, конечно, не любите, когда я говорю о том, что чем меньше выбора, тем лучше, но в данном случае именно так и получилось.
Что интересно – мы почти не работали сверхурочно. На заводе я за два месяца не задержался ни разу дольше положенного. В феврале, когда надо было закрыть месяц, я пару вечеров поработал удаленно – семья все равно в инфекционке лежала, и заняться особо нечем было.
Экстремальный режим хорош тем, что отметает все лишнее. Никаких совещаний, раздумий, рассмотрения множества вариантов решения. Только прямой путь, только к цели, только то, что надо. Поэтому в системе не было ни одной лишней доработки, сделанной «про запас».
Но экстремальный режим – не главная причина. Вы, когда читали статью, обратили внимание, как я рассказывал о совещаниях, обсуждениях, ругани с пользователями, встреч с директорами, разбора полетов, саботаже и т.д. – короче, обо всем, что обычно сопутствует проекту внедрения на заводах? Не обратили внимания?
Не обратили, потому что ничего этого не было. Среда была великолепной. Не в смысле, что там был зеленый луг, пахло розами и пели птички, нет. Атмосфера-то была очень гнетущей. Но люди, пользователи, их руководители – все были, как из сказки.
Почти никто не просил всякую ерунду, как это часто бывает. Вообще, мало что просили. Только то, без чего не получается работать прямо сейчас.
Когда я что-то делал и показывал пользователям, никто не капризничал по поводу интерфейса, неудобства и т.д. Работает – и отлично. Не совсем хорошо работает – ладно, руками добьем. Хотя, положа руку на сердце, скажу, что именно таким людям хочется помочь, доделать, чтобы работало хорошо.
Никто, ни одного раза, никому не нажаловался. Если есть проблема, звонили нам, в ИТ-отдел. Если мы посылали, то на этом всё заканчивалось. Если сильно надо, еще раз перезвонят, и еще, и еще. Я всё ждал, когда ко мне ворвётся злобный начальник, как это бывает на других заводах и скажет «нами не занимаются!», но такая ситуация ни разу не возникла.
Теперь вопрос – почему? Что, на этой птицефабрике какой-то особенный персонал набирают? Или кормят чем-нибудь эдаким, как в Эквилибриуме, чтобы подавить эмоции?
Нет, всё прозаичнее. Дело было в начальнице.
Так получилось, что большая часть офиса подчинялась финансовому директору. Бухгалтерия, экономисты, финансисты и, как ни странно, ИТ-отдел. То есть, почти все пользователи системы подчинялись одному начальнику.
А начальница была… Строгая, короче. Очень умная (реально), и очень строгая. Жесткая. Придешь жаловаться и распускать сопли – она не станет применять soft skills, чтобы оправдать свое неумение решать реальные проблемы, как это любят некоторые эффективные менеджеры. Так отхватишь, что быстро побежишь и договоришься с тем, на кого ходил жаловаться. Ну, так рассказывали, по крайней мере.
Как в реальности – не знаю, потому что я ни на кого не жаловался, и никто не жаловался на меня. Ни разу. Любой вопрос решали между собой. Бывало, что не получалось договориться с конкретным бухгалтером или экономистом, и они звали начальника – тут всё и случалось. Потому что вариантов нет, выше некуда, а договориться надо.
Начальница, понимая важность проекта, в первую очередь, для себя самой, решила дать мне привилегии. Позвала и говорит – жалуйся, тебе можно! Кто мешает? Кто не помогает? Кому башку оторвать? Я говорю – не надо, всё нормально.
Этот разговор повторялся несколько раз. Видя, что я непреклонен, она стала ругать меня самого. Говорит – ты не используешь ресурс. Наверняка есть пробуксовки из-за кого-нибудь, а ты от меня скрываешь. Давай, говори, не пытайся все разрулить сам. Но я, почему-то, и на этот раз отказал.
Вот так это было. Экстремальный режим и полное взаимопонимание, основанное на страхе. И шикарный результат – простая, рабочая система без понтов.
Как я уже упомянул во вступлении, такого опыта у меня больше не было. Конечно, приходилось работать экстремально, но не в таком масштабе и не с такой ответственностью – это ж целый завод. Подобной атмосферы больше не было нигде. Среды, готовой просто достигать результата, тоже.