Учет, старый и новый
Один мой давний приятель любил в шутку повторять раз за разом: бухгалтерия старше арифметики. А я всякий раз думал: какова тут доля шутки. Хотя сейчас основоположником принципов современного учета чаше всего называют известного итальянского математика 15 века, нет никаких сомнений в том, что учет существовал и до 15 века, и до нашей эры.

Казалось бы, что за такое время уже можно было бы все придумать, проверить и обкатать. А нам остается только грамотно применить наши прекрасные компьютерные технологии к тому, что изобрели до нас. В данном случае это не работает по причине того, что предметом теории учета является информация. А все, что связано с информацией, с появлением компьютеров, естественным образом меняется и очень сильно.

Тем удивительнее должно быть то, что учет как раз нисколько не изменился. Это если брать во внимание не поверхностные признаки, а саму суть. Да, сейчас вы уже не встретите человека, который будет жаловаться вам, что у него баланс не сошелся. Но лично я не готов поверить в то, что это все, на что способны современные технологии . Практики учета остались в основе своей прежними. И, что еще более важно, прежними остались решаемые задачи.

На первый взгляд учет, как таковой, кажется чем-то достаточно простым. Зарегистрировал события (учет за редким исключением всегда имеет дело с событиями) и можно считать, что учел. Однако, на регистрации ничего не заканчивается, а только начинается. За регистрацией событий всегда следует их интерпретация. Это - две части одного процесса. И они связаны неразрывно. Без регистрации не будет интерпретации. С другой стороны, регистрация приобретает смысл только через интерпретацию. Сама по себе регистрация никому не нужна.

При этом, их следует четко различать. Потому что регистрация осуществляется однократно (сейчас отбросим случаи корректировки) и как можно ближе к моменту события. В идеале - в тот же самый момент, когда произошло событие. А интерпретация, в общем случае, процесс повторяющийся и отстоящий от регистрации во времени.

Можно сказать, что интерпретация есть ни что иное, как функция (или множество функций), аргументами которой(которых) являются множество событий, зарегистрированных в системе. Например, мы последовательно регистрируем события поступления на склад и выдачи со склада. Тогда текущий остаток чего-либо - это разность суммы всех поступлений и суммы всех выдач. И вот тут начинается самое интересное. Вычисление такой функции по нынешним временам - это задача даже не для студента. Это задача для школьного урока информатики.

А каких-то 50 лет назад это было совсем не так. До начала массового использования компьютеров в учете никому не приходило в голову вычислять функцию текущего остатка таким образом. У 1С есть один учебный курс, в материалах которого дается красочное, почти художественное описание некоей колхозницы тети Нюры. Она сидит на краю бурта и отмечает каждое ведро картошки палочкой в тетради. А интеллигенция, собирающая эту картошку, колхозники, помогающие интеллигенции, а заодно с ними и слушатели курса, все вместе напряженно всматриваются в эту картину. И ждут, когда тетю Нюру озарит идея переписывать мелком на дощечке итог после каждого сданного ведра. Потому что вечером придет председатель колхоза, спросит - сколько ведер собрали. И что тогда будет делать тетя Нюра? Считать палочки?

Практическая невозможность осуществить в отсутствии компьютеров прямую интерпретацию заставляла людей прибегать к ухищрениям и использовать интерпретацию второго порядка. Вводится понятие учетного регистра. После регистрации события (не в тот же момент, а позже, иногда, намного позже) осуществляется первичная интерпретация. Ее результаты сохраняются в учетном регистре. А в тот момент, когда кому-то требуется получить окончательный результат, выполняется интерпретация интерпретированного ранее.

Основной задачей, которую решали докомпьютерные учетные системы, было как облегчить вычисление трудновычислимого. Надо было придумать такой учетный регистр, который нетрудно будет сформировать на этапе первичной интерпретации и который, в то же время, даст нам максимум информации на этапе вторичной.

Надо сказать, что за сотни и тысячи лет люди смогли достичь в этом деле многого. Регистр Луки Пачоли действительно красив. В том числе и с инженерной точки зрения. Но сейчас у нас совсем другие проблемы. У нас нет проблем с вычислением чего угодно, но... Раньше каждый бухгалтер знал, как это работает, но почти ни у кого не получалось с первого раза. А теперь у каждого бухгалтера все получается с первого раза (если он не промахнется мимо кнопки), но почти никто не знает - как это работает. Задача, которая ждет своего решения сегодня, заключается в том, чтобы сделать процесс вычислений прозрачным и контролируемым. И старые практики нам здесь не помогают, а только мешают.

Вы разбираетесь с какой-либо проблемой. Доходите в отладчике до значений, полученных из регистра. А дальше - все! Вы имеете дело с данными, которые были сформированы в прошлом. По правилам, которые действовали в прошлом. И не факт, что тот, кто менял правила удосужился оставить правильный след, хотя бы в виде комментария. В прежние времена все, что вы могли сделать, это убедиться, что правильно разглядели цифру в регистре и не ошиблись, когда переписывали ее себе в отчет. Сформировать регистр заново представлялось, как абсолютно невозможное дело. Сегодня, когда мы имеем дело с учетными системами, разработанными по старым рецептам, мы оказываемся практически в той же ситуации. Вот только раньше у нас было больше оснований доверять старым регистрам. Потому что они возникли в результате долгих поисков и на основе некоего, достаточно широкого консенсуса профессионалов. Практики их формирования обкатывались столетиями. И в целом все это выглядело, как нечто заслуживающее доверия.

В учетных системах, которые слепо скопировали старую идею, структура регистров и правила их формирования оказались отданы на уровень низового разработчика. И пользователям (в широком смысле этого слова, который включает в себя тех же низовых разработчиков) остается только надеяться, что тот, кто разрабатывал тот или иной регистр думал о чем-то еще, кроме своей зарплаты.

Я лично застал самое начало массового использования компьютеров в учете. Тогда часто приходилось слышать, что вот сейчас наконец сделают какую-нибудь одну, самую правильную программу, и все ее так или иначе примут. Я и тогда относился к этому скептически, а сейчас уже можно с уверенностью сказать, что "этот фарш обратно не провернешь". В общем случае, у нас уже не будет возможности опираться на многовековой консенсус и отработанные практики. Современная экономическая жизнь требует все большей гибкости, больше различных, зачастую абсолютно новых интерпретаций, большей скорости их создания и еще большей скорости их изменения и подстройки. Должный контроль за процессом вычислений - вот главная задача для действительно современной учетной системы. Поэтому следует отказаться от старой идеи регистров в пользу применения более прозрачных функций.

Что же касается вопросов производительности, то тут в нашем распоряжении есть кое-что из арсенала ИТ-технологий. У нас есть кеширование функций. Оно может быть многоуровневым и подстраиваемым под каждого пользователя. Кроме того, это может быть предварительное кеширование. Настоящее быстродействие мы получим тогда, когда пользователь, запросив данные по себестоимости, получит их моментально, потому что система знает, когда эти данные потребуются этому пользователю и вычисляет их накануне ночью. (Конкретно у 1С это сейчас расчет за весь месяц, несмотря ни на какие регистры. И он порой может быть очень долгим)

В общем, спасибо, конечно 1С, что привела тетю Нюру с колхозного поля прямиком в computer science, но кому от этого стало хорошо? Может имело смысл оставить ее там, на краю бурта, с ее палочками? И может имеет смысл перестать уже решать старые задачи старыми методами, и начать двигаться вперед?