ПрологВ некотором царстве, в некотором государстве, в некотором управлении общественного питания время от время проводят инвентаризацию: записывают, сколько всего на данный момент есть в столовой, сверяют с тем, что выходит по базе данных, и приводят базу в соответствие с реальностью, а разницу кидают на недостачу да на излишки. А у продуктов, у каждого граммчика, есть денежный эквивалент. И денежный эквивалент недостач ответственные люди должны возмещать из собственного кармана.
Да вот незадача: минимальный денежный эквивалент граммчика - копеечка, а самая мелкая монета в царстве-государстве - пятак. Вот и страдает управление каждый раз, несуществующие копеечки деля...
читать дальше1
Во время очередной инвентаризации кто-то вспоминает, что в управлении уже полгода работает человек, называющий себя программистом, ловит его и требует округлять недостающие суммы еще во время инвентаризации. А разницу между разницей и круглой разницей кидать не на недостачу, а на округление.
Человек, выдающий себя за программиста, задает несколько вопросов, вздыхает, а потом идет и за пару дней дописывает к программе десять строк, обрабатывающие два варианта:
- если не хватает, условно говоря, ста грамм манки и трех рублей двух копеек, то сто грамм манки и три рубля идут на недостачу, а две копейки - на округление (если там было два рубля девяносто восемь копеек, то то же самое, только дебет с кредитом местами меняются, и больше их не будет в этой саге),
- если манки и в базе, и на складе по нулям, а на эквиваленте из-за округления осталось две копейки, то они идут на округление и всё.
Записав изменения на сервер, человек закрывает окно и забывает, что в нём было.
2
Проходит месяц, и человека, выдающего себя за программиста, срочно вызывают в управление, потому что там перестали сходиться отчеты. А не сходится в них количество: в инвентаризации вводят, что оно ноль, а в базе что-то по-прежнему висит!
Человек торопится, потому что договорился ехать в Кишинев за конфетами, но потом находит в проводках по инвентаризации строки, которые явно писал сам, радостно говорит: "А-а, вот оно что!", добавляет рядом с "Операция.Сумма=Копейки" строчку "Операция.Количество=Недостача" и уматывает в Кишинев, потому что ситуация "в базе были один грамм манки и две копейки эквивалента, а на самом деле нет ни шиша" теперь обрабатывается нормально!
3
Проходит неделя, и ч.,в.с.з.п., срочно вызывают в управление, потому что там ваще перестали сходиться отчеты.
Потому что, "исправляя свою ошибку", он начисто забыл, что программа отрабатывала две ситуации, а не одну.
Потому что теперь в ситуации номер один программа кидала сто грамм манки и три рубля на недостачу, а потом _опять сто грамм манки_ и две копейки - на округление.
В результате чего управление внизапно недосчиталось четырех килограмм бройлерных цыплят и еще всякого по мелочам.
3
Вписав в программу еще пару строчек и ожидая, пока можно будет выгнать всех из программы для сохранения изменений, ч.в.с.з.п. хочет облегчить жизнь управлению и пытается сделать запрос, который бы вывел список таких удвоившихся недостач. Поскольку запросы ч.в.с.з.п. составлять не умеет, он просто подбирает разные опции наугад, даже после того, как понимает, что некоторые из них заставляют запрос выполняться очень долго. В конечном счете программа вешается полностью, и, когда обеденный перерыв кончается и приходит время вносить наконец исправление, ради которого его и вызывали, ч.в.с.з.п. закрывает ее нажатием на крестик.
В результате база ломается совсем и ее приходится целый час переиндексировать - из-за еще одной глупости даже два раза.
3
Уже после того, как база заканчивает переиндексироваться и всё сходится, ч.в.с.з.п. вспоминает, что хотел сбегать к другому бухгалтеру спросить о своих подозрениях (можно ли вообще кидать на счет _округления_ один грамм _манки_?), получает ответ, дописывает к программе еще пару строчек и заставляет сверять заново, хотя в конторе как раз вот-вот должны отрубить электричество и вся эта деятельность пахнет очередной переиндексацией баз, которой не случается только чудом. Впрочем, всё, кажется, сходится.
Мораль
Ее нет.
Хорошо, что оно разрулилось)