Василий Петрович, изучив вопрос, понял, что в одиночку ему не справиться. И привлек к работе меня, молодого инженера НИС. Мне было обещано три зарплаты за эту «небольшую шабашку», как называл создание программы расчета зарплаты Василий Петрович. Никого при этом не смущало, что я писал программы на «Фортране» для EC ЭВМ. А программу надо было написать на «ДВК-2М».
Я долго раздумывал, браться мне за эту разработку или нет, ведь я не знал ни предметной области, ни языка программирования. Но, как мне объяснил Василий Петрович, опыта программирования такого уровня задач на персоналках нет вообще ни у кого, а подводить клиента было нельзя. Кроме того, мне обещали поддержку моего бывшего преподавателя. И я решился. Если бы я тогда знал, через что мне придется пройти!
Мы пообщались немного с девочками-расчетчицами, которые показали нам ведомости для расчета зарплаты. Большие такие книги, размером примерно с бумажный лист формата А1. Страниц на 100 каждая. В эти книги они «разносили» табели и руками, с помощью счетов (те, кто постарше) или калькулятора (продвинутые пользователи), умножали оклад на время, добавляли доплаты и вычитали налоги и «исполнительные листы».
Мы с Василием Петровичем подбросили монетку и по-честному поделили работу. Мне достались начисления, ему – удержания.
Первое, что я сделал, когда добрался до компьютера, – выяснил, что на нем есть язык программирования. Бейсик. Через два дня нужно было что-то показывать заказчику, и поэтому мне пришлось изучить его очень быстро. Изучение заняло ночь. Утром я написал первую программу. Да, в этом языке было немного команд, несколько десятков, и большинство из них оказались экзотическими и совсем ненужными. Основными были Input и Print, а также арифметические команды «плюс», «минус», «умножить» и «разделить». И еще несколько команд для поиска и форматирования данных и работы с таблицами. Десятка команд было вполне достаточно для автоматизации работы расчетной группы.
На демонстрации я показал заполнение справочников цехов, работников, табелей и расчет повременного начисления для всех работников цеха. Отработанное время умножалось на оклад и заносилось в таблицу начислений. Таблицу с расчетом можно было вывести на экран или принтер.
Василий Петрович пошел несколько другим путем. В созданной им программе «Удержания» расчет происходил следующим образом. Сперва на экране появлялось сообщение:
«Введите табельный номер работника».
Расчетчица вводила:
«17».
«Введите код начисления».
«01».
«Это подоходный налог. Введите сумму, с которой надо удержать налог, руб.»
«147».
«Подоходный налог 13 % с суммы 147 руб. равняется 19 руб. 11 коп.»
Увидев такую красоту, расчетчица спросила Василия Петровича:
– И что мне с этим делать?
– Не знаю, может, в ведомость записывать после расчета по табельному номеру?
– Двести пятьдесят человек по пять – семь удержаний? Вводить данные и записывать результат? А спать когда?
Видимо, слухи о наших подходах к программированию дошли до директора кооператива, потому что через несколько дней я уже был единственным программистом на этом проекте.
Конечно же, я попытался применить научный подход. Но увы. Методическая литература по теме отсутствовала. Единственная книга, которую я нашел, рассказывала об автоматизации расчета зарплаты на ЭВМ серии EC. Описывалась следующая технология. Пользователи вручную заполняли шаблоны данных. Собирали их в пакеты и отвозили в вычислительный центр. Операторы вводили данные, и большая машина делала расчет. Информация вводилась дважды. Если программа находила расхождения, ввод пакета повторялся. Расчет начинался только после полного совпадения данных. Таким образом была реализована защита от ошибок.
Но эта технология и эти шаблоны абсолютно не подходили для работы с персональным компьютером. Пришлось все делать с нуля, подробно расспрашивая расчетчиц. Мне тогда повезло. Руководительница расчетной группы Марина, несмотря на свою горячность, была очень хорошим специалистом. Она смогла грамотно поставить задачу. Мы с ней разработали свои алгоритмы расчета начислений и удержаний, откуда мат Марины был предусмотрительно удален, и, по большому счету, ничего не упустили.
Этот подход сыграл со мной в будущем злую шутку. Когда я начал заниматься автоматизацией основных средств, я также положился на руководителя другой группы. Та поставила мне задачу: рассчитать амортизацию основных средств за месяц как итоговую амортизацию прошлого месяца минус амортизацию выбывших основных средств плюс амортизацию введенных. Но при повторении ручного алгоритма в компьютере нужные результаты не получались. Мы бились месяц, но ничего не сходилось. В отчаянии я вспомнил про научный подход и отправился в библиотеку. Нашел учебник по бухгалтерскому учету, открыл раздел по учету основных средств. И сразу же понял, что нужно сделать. В итоге мы перешли к суммированию индивидуальных амортизаций по каждой карточке основных средств. Машине ничего не стоило просуммировать 10 тысяч позиций, в отличие от людей. Так мы, наконец-то, получили корректный результат.
А я получил еще один урок научного подхода. Для правильной постановки задачи программисту недостаточно пообщаться с пользователем. Обязательно надо изучить нормативную документацию, которая регулирует бизнес-процесс: законы и постановления правительства, положения по бухгалтерскому учету (ПБУ), положения об отделах и должностные инструкции, приказы и инструкции по предприятию. В особо сложных случаях – учебники и журнальные статьи. Чем больше источников исследует разработчик, тем более качественно будет сформулирована задача. И меньше переделок будет в коде.
Но вернемся к нашему рассказу. Не прошло и полгода, как мы провели пробный расчет зарплаты. Девочки вбили все данные, я запустил программу, мы распечатали расчетные ведомости, и расчетчицы сели за сверку.
Я был так горд собой, ведь создание программы стоило мне множества бессонных ночей. Я освоил новый язык программирования и предметную область. Усмирил болгарский дисковод (об этом – подробнее в следующей истории). Написал десятки страниц кода. Поэтому, когда я увидел рыдающую Марину, подумал: «Да, понимаю ее чувства. Не будет больше задержек на работе, бессонных ночей и красных глаз». Но оказалось, что рыдает Марина совсем по другому поводу: расчеты и близко не сходились! Ошибок было очень много. И во вводе данных, и в коде программы, и даже в алгоритмах. Поэтому пришлось еще пару месяцев дорабатывать программу, в том числе написать специальный код для защиты от неверного ввода данных, так как двойной ввод позволить себе мы не могли.
Но и это еще не все. Поскольку делали мы все это на ДВК-2М, уже в ходе проекта выяснилось, что его техническое оснащение не дает возможности запустить проект в полном объеме. Болгарские дисководы и очень небольшой объем ОЗУ и дискет – такая техника не выдерживала нагрузки. Ни один расчет так и не дошел до конца. Программу пришлось сдавать на примере расчета двух цехов – и спасибо, что ее приняли и оплатили, хотя и понимали, что использовать не смогут.
Поэтому все пришлось повторить после того, как заказчик приобрел новые персональные компьютеры «Искра-1030» с винчестерами и ОЗУ в 256 килобайт! После двух лет работы и освоения нового языка FoxBase программа все-таки пошла в промышленную эксплуатацию. Я выстоял, я справился со всеми трудностями и, наконец-то, увидел счастливые глаза моих расчетчиц, с которыми сроднился за это время! Программу я назвал «Роза», хотя Розы среды расчетчиц не было, просто по заглавным буквам словосочетания «Расчет зарплаты».
Но на дорожку программа преподала мне еще один урок. Первые расчетные листки распечатали и отнесли руководству Водоканала. Через некоторое время меня вызвал главный инженер.