metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-09-28 09:14 pm

Опердень и undo

А вот скажите мне, как истинные оперденьщики, модно ли сейчас делать в оперденях функцию "откатить изменения в паре сотен документов на неделю назад, потому что пользователи сошли с ума и сделали что-то не то"?

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

[identity profile] falcrum.livejournal.com 2012-09-28 06:17 pm (UTC)(link)
А документы не уходят в сторонние системы за неделю-то? Как откатывать?

[identity profile] vp.livejournal.com 2012-09-28 06:18 pm (UTC)(link)
откатить изменения все или откатить изменения какие-то определенные? если все, то это таки да, резервная копия.

[identity profile] metaclass.livejournal.com 2012-09-28 06:24 pm (UTC)(link)
Сторонние системы тоже должны поддерживать иммутабельность и версионность!

[identity profile] metaclass.livejournal.com 2012-09-28 06:26 pm (UTC)(link)
Определенные. Или все. Как паук прикажет.
С кнопочкой у Главного Пользователя и подтверждением у еще более Главного Пользователя.
А резервную копию нельзя - она за подписью DBA хранится в сейфе у безопасников, которые будут неделю согласовывать доступ к ней :)

[identity profile] falcrum.livejournal.com 2012-09-28 06:26 pm (UTC)(link)
А какое им дело до твоих откатов даже в Волшебной Стране Грибов Иммутабельности? Входные контроли пройдены - всё, до свидания.

[identity profile] avnik.livejournal.com 2012-09-28 06:31 pm (UTC)(link)
git же.
Вам и иммутабельность, и версионность и пауки.

PS appendonly еще очень можно и инстаграмно.
ext_659950: (normal)

[identity profile] perplexed-bear.livejournal.com 2012-09-28 06:41 pm (UTC)(link)
Лет 6 назад я такое делал в системе коммерческого кредитования. Там автоматически делались сторно до даты отката (мы назвали это "размоткой "), и кредит приводился к исходному виду. А потом можно было менять события за даты в прошлом, и всё автоматически пересчитывалось, генерились корректировочные проводки с задними датами валютирования (это мы назвали "накатка").

Вроде, работает до сих пор.

[identity profile] denisioru.livejournal.com 2012-09-28 06:55 pm (UTC)(link)
В опердени не бывает откатов. Документ, попавший в систему остается в ней навсегда. Коррекция выполнется новыми документами (как сторнирование в бухгалтерии).

[identity profile] vit-r.livejournal.com 2012-09-28 06:59 pm (UTC)(link)
Undo работает только в форме, которая не зарегистрирована. Всё, что попало в двойную бухгалтерию может исправляться только корректирующими проводками.

[identity profile] berezovsky.livejournal.com 2012-09-28 07:06 pm (UTC)(link)
ещё должна быть кнопка, чтоб пространство и время сворачивались и разворачивались из нужного места, ну, чтоб наверняка

[identity profile] gds.livejournal.com 2012-09-28 07:10 pm (UTC)(link)
да, ровно такое же делал. Даже гуй к такому, чтобы пользователь сам выбирал, докуда "снимать провОдки".

[identity profile] juan-gandhi.livejournal.com 2012-09-28 07:15 pm (UTC)(link)
Вот именно. 21-й век на дворе.

[identity profile] x-a-e-p.livejournal.com 2012-09-28 07:18 pm (UTC)(link)
Ну если потребность возникает нечасто, то делать версионность смысла нету. Достаточно бекапов.

[identity profile] lazy-flyer.livejournal.com 2012-09-28 07:21 pm (UTC)(link)
За попытки undo в двойной - надо сношать ломом в анус.

[identity profile] metaclass.livejournal.com 2012-09-28 07:28 pm (UTC)(link)
Второй пункт не совсем понятен. Это же может быть ввод первичного документа, пользователь ошибся, ввел не ту цифру. До тех пор, пока отчетный период не закрыт (или пока этот документ не стал основанием для создания других документов) - его можно исправлять.

[identity profile] rumas-d.livejournal.com 2012-09-28 07:29 pm (UTC)(link)
Чувствуется разработчик клиент-банка ;-)

[identity profile] falcrum.livejournal.com 2012-09-28 08:10 pm (UTC)(link)
Отчего же? Общее правило как бы.

[identity profile] vit-r.livejournal.com 2012-09-28 08:14 pm (UTC)(link)
А сделал проводку в один лимон. Потом Б решает, что была ошибка и один нолик лишний.

Правильные записи:
01.01 А - приход + 1 000 000.00
10.01 Б - корректура - 900 000.00

Записи за которые могут посадить:
01.01 А - приход + 100 000

Потому как не А, не 01.01 и в промежутке могло много чего произойти.

[identity profile] vit-r.livejournal.com 2012-09-28 08:15 pm (UTC)(link)
На российских просторах встречал особое понимание термина "двойная бухгалтерия"

[identity profile] chumpa.livejournal.com 2012-09-28 08:55 pm (UTC)(link)
такое популярно и требуется. Если готовая система (SAP, 1c) это не умеет, её ломают/"энханцируют" на предмет. Ибо нефиг.

[identity profile] chumpa.livejournal.com 2012-09-28 08:56 pm (UTC)(link)
по поводу двойных проводок и пр. -- есть сторно и "красное сторно". Оба в ходу, пауки из розетки у курси.

[identity profile] potan.livejournal.com 2012-09-28 09:06 pm (UTC)(link)
+1
Когда-то билинговые системы на RCS делали, пора на более современные технологии переходить!

[identity profile] jdevelop.livejournal.com 2012-09-28 09:35 pm (UTC)(link)
с леджером это работает ок, а вот если там зависимости-справочники и прочее вуду, то уже ойц

особенно когда справочник отдается отдельным сервисом, который черный ящик

[identity profile] rssh.livejournal.com 2012-09-29 05:08 am (UTC)(link)
после закрытия периода -- только сторнирование

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

[identity profile] mudasobwa.livejournal.com 2012-09-29 05:27 am (UTC)(link)
У меня была похожая задача. Я в соседней базе хранил «дельты» (ну, не дельты, а предыдущие версии, повторять систему контроля версий как-то странно) с датами (типа: doc_id, date_of_change, old_version). С индексом по дате.

Есть два варианта отката: иногда нужно, чтобы документ откатился назад, но стал «новой версией» (откат на две недели от версии 20 к версии 3 создает не версию 3, но версию 21 с содержимым 3), а иногда можно просто «вернуться к бэкапу».

Соседняя база никак не влияет на работоспособность системы без нее, пурджится по крону и позволяет элегантно откатиться куда угодно. От оригинальной базы нужен один несложный триггер со слабым приоритетом.

[identity profile] trueblacker.livejournal.com 2012-09-29 06:36 am (UTC)(link)
помню свое недоумение, когда впервые получил мыло, в котором русскоговорящий чел по английски просил меня удалить предыдущее письмо от него же. Потом узнал, что это за него старается outlook.

[identity profile] berezovsky.livejournal.com 2012-09-29 06:45 am (UTC)(link)
Поговорил с ботами? :-)))

[identity profile] trueblacker.livejournal.com 2012-09-29 07:01 am (UTC)(link)
чего только не бывало. Но в тот конкретный раз удержался.

[identity profile] molnij.livejournal.com 2012-09-29 09:06 am (UTC)(link)
в самом общем случае - только руками. ибо выясняется что в половине случаев надо откатить, в половине заодно поправить в учетных, вот тут вообще не трогать и т.п. но история всех изменений ведется. да.

[identity profile] migmit.livejournal.com 2012-09-29 10:52 am (UTC)(link)
Особое — это как раз здесь.

[identity profile] lazy-flyer.livejournal.com 2012-09-29 05:21 pm (UTC)(link)
Ребе, если можно исправлять - зачем тогда откат? После того, как разнесли главную книгу - любые откаты de facto являются преступлением.

[identity profile] metaclass.livejournal.com 2012-09-29 05:31 pm (UTC)(link)
Я не совсем понимаю, что значит "разнесли главную книгу".
У меня главные книги (общая и по счетам) являются отчетами (кросс-таблицей), которые создаются из проводок.
Проводки можно менять, до закрытия периода целиком, или по отдельным счетам. Т.е. пока период не закрыт - можно исправлять, после этого - сторнирование, уже в другом отчетном периоде.
История изменений проводок, само собой хранится, но неотъемлемой частью учета не является.

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

[identity profile] lazy-flyer.livejournal.com 2012-09-29 05:47 pm (UTC)(link)
Ну...Грубо.
Введенные документы хранятся в журналах. Там их можно править. Потом они заносятся в главную книгу. Распихиваются по счетам, грубо. После этого - документ нерушим. Как правило закрытие периода и есть моментом внесения записей в главную книгу.
Отчёты в любом случае - вторичны. Первичны - проводки.
А меняем данные - это пиздец. Есть "Закон о бухгалтерском учёте...", где подробно расписано, что можно, а что нельзя.

[identity profile] metaclass.livejournal.com 2012-09-29 05:58 pm (UTC)(link)
Да, у меня первичны проводки. И есть специально для этих целей функция "закрыть проводки от изменения".
Просто "заносятся в главную книгу" в рамках моих представлений звучит странно, как "заносятся в sql-запрос" или "заносятся в предикат".

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

[identity profile] lazy-flyer.livejournal.com 2012-09-29 06:01 pm (UTC)(link)
Аха.
Я начинаю понимать, почему в РБ так популярны кастомизированные и писаные на заказ системы бухучёта.

[identity profile] ng67.livejournal.com 2012-09-30 02:59 pm (UTC)(link)
Журнал транзакций в SQL плюс архивирование этого журнала раз в сутки.
Откатываем до резервной копии за нужный день, потом по журналу транзакций смотрим что было до нужного нам момента.

В 1С есть кстати версионирование объектов, то есть можно узнать какая сволочь поменяла дебет с кредитом.

[identity profile] Дмитрий Васильев (from livejournal.com) 2012-09-30 06:56 pm (UTC)(link)
http://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_flashback.htm
http://www.postgresql.org/docs/8.3/static/contrib-spi.html#AEN107671

[identity profile] dennab.livejournal.com 2012-10-01 04:35 pm (UTC)(link)
Lotus Domino?
FileNet?
IBM Content Manager?