{"id":846,"date":"2016-02-09T13:44:01","date_gmt":"2016-02-09T13:44:01","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/?p=846"},"modified":"2016-02-09T13:44:03","modified_gmt":"2016-02-09T13:44:03","slug":"esto-de-disenar-estructuras-bajo-presion","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2016\/02\/09\/esto-de-disenar-estructuras-bajo-presion\/","title":{"rendered":"Esto de dise\u00f1ar estructuras bajo presi\u00f3n &#8230;"},"content":{"rendered":"<p>&#8230; siempre es arriesgado. Emocionante, claro, pero no si quieres vivir tranquilo. <!--more--><\/p>\n<p>Y es que estoy seguro de que terminar\u00e9 metiendo la pata en algo. S\u00f3lo espero que no vaya a m\u00e1s y que pueda controlar los datos.<\/p>\n<p>Bien, el caso es que hace poco se me ocurri\u00f3 que podr\u00eda intentar crear una estructura <em>nueva<\/em> que cubriese algunas necesidades:<\/p>\n<ul>\n<li>Deb\u00eda contener un valor final de f\u00e1cil acceso.<\/li>\n<li>Deb\u00eda explicar c\u00f3mo hab\u00eda obtenido dicho valor.<\/li>\n<li>Deb\u00eda ser barata de implementar.<\/li>\n<\/ul>\n<p>Es decir, un contenedor de valores num\u00e9ricos que mantuviese un importe final y una historia de c\u00f3mo ha llegado hasta ah\u00ed. Si adem\u00e1s le a\u00f1ad\u00eda un identificador sencillo la estructura final costar\u00eda muy poco de mantener y tendr\u00eda un acceso r\u00e1pido.<\/p>\n<p>Lo llam\u00e9 <strong>acumulador gen\u00e9rico<\/strong>, con un par, y empleando papel y l\u00e1piz llegu\u00e9 a la conclusi\u00f3n de que la informaci\u00f3n indispensable constaba de dos atributos:<\/p>\n<ol>\n<li>Identificador alfanum\u00e9rico.<\/li>\n<li>Valor como n\u00famero decimal amplio.<\/li>\n<\/ol>\n<p>Posteriormente le a\u00f1ad\u00ed:<\/p>\n<ol>\n<li>Una fecha de \u00faltima modificaci\u00f3n.<\/li>\n<li>Un historial de operaciones conteniendo cada una lo siguiente:\n<ol>\n<li>Una fecha.<\/li>\n<li>Una cifra (tambi\u00e9n decimal amplia).<\/li>\n<li>Una operaci\u00f3n sobre el total: suma o resta.<\/li>\n<li>Un origen que en mi caso bast\u00f3 con el identificador del documento (incluyendo la l\u00ednea) que originaba la operaci\u00f3n.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>El c\u00f3digo result\u00f3 ser muy sencillo. Cada vez que quer\u00eda a\u00f1adir o quitar valor al contenedor le a\u00f1ad\u00eda una operaci\u00f3n. Luego recalculaba el total siguiendo las operaciones y marcaba la fecha. Puede simplificarse m\u00e1s a\u00fan si eliminamos el atributo de operaci\u00f3n (sumar o restar) y empleamos cifras negativas pero decid\u00ed mantenerlo as\u00ed porque me conven\u00eda para su aplicaci\u00f3n en los movimientos de mercanc\u00eda de un almac\u00e9n. Concretamente, si a\u00f1ad\u00eda un tipo de operaci\u00f3n especial de igualdad (para los inventarios), obten\u00eda un mecanismo muy sencillo de interpretar.<a href=\"http:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/02\/acumuladores.png\" rel=\"attachment wp-att-948\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-948 alignright\" src=\"http:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/02\/acumuladores.png\" alt=\"acumuladores\" width=\"239\" height=\"237\" srcset=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/02\/acumuladores.png 239w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/02\/acumuladores-150x150.png 150w\" sizes=\"auto, (max-width: 239px) 100vw, 239px\" \/><\/a><\/p>\n<p>De esta forma al final ten\u00edamos una cifra y una historia que la explicaba. Tambi\u00e9n era posible eliminar parte de ella suprimiendo algunos registros y el total se recalculaba autom\u00e1ticamente. \u00datil si elimin\u00e1bamos alg\u00fan documento (como un albar\u00e1n de entrega de mercanc\u00eda) que afectase al acumulador.<\/p>\n<p>Hasta ahora lo he probado con las existencias de art\u00edculos incluyendo todos los movimientos de mercanc\u00eda del a\u00f1o, unos trescientos mil, y ha funcionado estupendamente. Ha resultado ser una buena idea.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><!-- QTM hash: 714caf7dee6cc9771908247efb9b632020c30821 --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; siempre es arriesgado. Emocionante, claro, pero no si quieres vivir tranquilo.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[509,489],"class_list":["post-846","post","type-post","status-publish","format-standard","hentry","category-software","tag-acumuladores","tag-estructuras-de-datos"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=846"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/846\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}