{"id":1847,"date":"2024-08-12T07:44:39","date_gmt":"2024-08-12T07:44:39","guid":{"rendered":"https:\/\/staticalmo.com\/?p=1847"},"modified":"2024-10-25T09:07:13","modified_gmt":"2024-10-25T09:07:13","slug":"ridurre-il-carico-di-lavoro-aziendale-responsabile-acquisti","status":"publish","type":"post","link":"https:\/\/staticalmo.com\/en\/ridurre-il-carico-di-lavoro-aziendale-responsabile-acquisti\/","title":{"rendered":"Ridurre il carico di lavoro aziendale: responsabile acquisti"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Se hai una azienda che richiede input fisici o materia prima, saprai meglio di STATiCalmo che organizzare le scorte significa evitare brutte sorprese. Grazie alla programmazione, si possono risparmiare ore-uomo della segretaria o del responsabile acquisti. Se tu, titolare o imprenditore, ti occupi direttamente degli acquisti, vedo un problema, ma questo fa parte di un altro discorso. In questo articolo non parler\u00f2 proprio di statistica, citer\u00f2 il linguaggio R, che proviene dalla statistica. Ci\u00f2 che segue ha pi\u00f9 a che fare con l&#8217;informatica, o se proprio vogliamo fare i pomposi, con un&#8217;intelligenza artificiale che fa parte del dominio dei sistemi esperti (expert systems). Chiaramente per sapere quando fare acquisti, serve un cruscotto dati statistico, o comunque <\/span><a href=\"https:\/\/youtu.be\/CK3JQspEE6M\"><span style=\"font-weight: 400;\">una tabella che indica &#8220;quantit\u00e0 critiche&#8221;<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Sui fogli di calcolo come Excel o Google Sheets abbiamo le macro: una automazione che ripete delle azioni che abbiamo registrato. Chiaramente hanno senso se abbiamo registrato azioni od operazioni <\/span><b>ripetitive<\/b><span style=\"font-weight: 400;\">. Se vogliamo automatizzare azioni <\/span><b>esterne <\/b><span style=\"font-weight: 400;\">a quei due ambienti, ad esempio su un browser web (Chrome, Firefox, Safari, etc.), possiamo utilizzare uno strumento che ci permette di <\/span><b>programmare <\/b><span style=\"font-weight: 400;\">azioni. Mi riferisco alla libreria Selenium, che su R troviamo col nome Rselenium. Esiste anche su Python, Javascript. Sull\u2019ultimo linguaggio, esiste una libreria pi\u00f9 apprezzata di nome Cypress.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Selenium ha una definizione che non lo rende proprio trovabile da un non addetto ai lavori: automazione del browser. Cypress ne ha una ancora pi\u00f9 difficile da agganciare all\u2019obiettivo di questo articolo: automazione dei test su applicazioni web.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Con Selenium programmeremo varie operazioni, ridotte rispetto un caso pi\u00f9 reale, <\/span><a href=\"https:\/\/staticalmo.com\/intelligenza-artificiale-automazione-o-industriosita\/\"><span style=\"font-weight: 400;\">che prese singolarmente non fanno pensare ad un comportamento intelligente<\/span><\/a><span style=\"font-weight: 400;\">:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Inserire i link (URL) dei prodotti che acquistiamo pi\u00f9 spesso. Aggiungere alternative complicherebbe il processo.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Aprire i link controllando la disponibilit\u00e0 di ogni prodotto.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Fare clic su \u201cAggiungi al carrello\u201d per ogni prodotto che ha passato il controllo precedente<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Eseguire il pagamento. E qui viene la parte pi\u00f9 delicata dal punto di vista della sicurezza.\u00a0<\/span><\/li>\n<\/ol>\n<pre><code class=\"language-r\">\n# idealmente questo codice va integrato con un cameriere dei dati (API)\n# che chiama questo servizio quando vengono raggiunti numeri &quot;critici&quot;\n# sulle scorte, presenti ad esempio su un foglio di calcolo di Google\n# o\/e ERP \nlibrary(&quot;RSelenium&quot;)\n\n### Parte scorrevole ----\n\n# create driver object\ndriver&lt;-rsDriver(browser=&quot;firefox&quot;, port=4550L, verbose=F, chromever = NULL) \n#scelgo FireFox per un motivo preciso. Se non lo hai, installalo\n# pulisci memoria, console, objects prima di riavviarlo\n\n# Apri la pagina di Amazon, ovviamente business.amazon ha pi\u00f9 senso\ndriver$client$navigate(&quot;https:\/\/www.amazon.it&quot;)\n\n# qui inserirai gli acquisti periodici\ntutti_urls &lt;- c(&quot;https:\/\/www.amazon.it\/Farina-Caputo-Pizzeria-Kg-Cartone\/dp\/B07QCGS8JH\/ref=sr_1_1?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;crid=3B57LQMB2P209&amp;dib=eyJ2IjoiMSJ9.wbge344vLMdlohBrasE6P5cgk0DxKFEdlZI221RPOpbuSpxfeg7dGptWwuWs45OnC2H-L6mebdBXIpll_YtSZp8WA7T-hgl6TZYJDqMrb74zxmI6WT-qkpG2oHG-np1P_vtLO_ya3I1vu5ixh1LOnjR3rxYgaDjUIRzXIr1vzuofYfJG8kIDpV_AYul6ZEn6RMyXHYL04yTknESQC2cLk8YOmFZyoxBUC8SVnrAvAvQbFcsjtp5wg0KU_pYXGyt4SyTzdsEhKbLMnpHG1ArDuQFhu4feKDKd_Xq0dPksp68.7fV-948QxQrzI9iQpHOl6MO4ceXpYwefuI1fLc86ZNQ&amp;dib_tag=se&amp;keywords=farina+caputo&amp;qid=1714286670&amp;sprefix=farina+caputo%2Caps%2C144&amp;sr=8-1&quot;,\n                &quot;https:\/\/www.amazon.it\/MOZZARELLA-PIZZA-MONTANINA-5Kg-ABBASCIANO\/dp\/B0C4LHYSC1\/ref=sr_1_10?crid=3HF5ELPOZ6IEA&amp;dib=eyJ2IjoiMSJ9.ygT1FDeOXWue8yX7pOXfhsoPpyeyXA0M3mWx27Xuu0uyyBq616MVGfeV1wAoxVYYGX8s65Rd3rzHe6Ppg_UjafvjEPWR5OSM4Kl3FbGyNmn554Jf3-zH5mBdzdzeqMmNDLYk_SWYiBIJdNT7oFOOelSWST79OFRp7omrvkqqO5r44dAVMpv3T5pgV6e2nltSdP-n_QX2hAdFag8vrGbkco1bisyHMUyx0O8I6JXMu9C6xyDrbwgAPfiJf8nlK7PJVYzgL2VOUSPQmoZekQJBgGs9oZsb1mDM6zcQZ0dbREo.KqyR7iA-HqWodH2tXWptupGqyDkGcJ1wqSfZj1il_nQ&amp;dib_tag=se&amp;keywords=mozzarella+per+pizza&amp;qid=1714286706&amp;sprefix=mozzare%2Caps%2C115&amp;sr=8-10&quot;,\n                #&quot;https:\/\/www.amazon.it\/Passata-pomodoro-vetro-Mutti-cartone\/dp\/B09JT1L18P\/ref=sr_1_3?crid=215UVAXCMH621&amp;dib=eyJ2IjoiMSJ9.XcufPe7nGvkWcVUSWjPNgEZpKl9NxuMA_qjs1rWcy2MP7l_C_HQVgTVicAebBJ4irRuDLg8PUBmd7oqHa-K_bQIBS3wgewJtYCORNgBCTi09zvnFTqrcDTqtXrrFaZJQbOrn9GZ-0S6JQga7TfUNo3c2pVuVeFx_f5L2y3hEoeD807m1ohfTMXaLZGOqXPKaeH-ll6X9nCLVaI2pViL7Djxe25deRW1zj-Er8uZ4KYqFqqLnCSgVXd8Xnas6guaAaz7OrSrYwbakERkiNjEatRs-4JsjBDyjFjizCdrmO6o.fISYDOKOZJrzmsVZUebDCulWZs8-5YtBxKWIVh6QV5w&amp;dib_tag=se&amp;keywords=pomodoro+mutti&amp;qid=1714288485&amp;sprefix=pomodoro+%2Caps%2C92&amp;sr=8-3&quot;,\n                &quot;https:\/\/www.amazon.it\/Calabrese-Valle-Crati-Condimenti-Bottiglie\/dp\/B081M6Y24Q\/ref=sr_1_20?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;crid=1BS9YFSTOBUQM&amp;dib=eyJ2IjoiMSJ9.gR3VrzQm2azxCS9X4X_pEZsc3_FehjXEVzcVQB2-FtRjXhBfrjFYyv33pQV-s__ENG85pnDDQhjVW82oRLw1TW58LgFspBgJ9fG1bjB3gAcKqpaCfTk4r4luFxbbpCWMqM2iwNqnr8lrT8iy36zdqXqaPuCYXA2I8pxTORNp9J8ZCeUx7zjfuuNBtviIl6IluYjvcgCe5pVlan6-BqlR5QL2wcAgXoqn96oKi7SMFeZPg0huRjZb_aCL0pBVmUFOWNyrVNtTQZLDNBxVJWN8FWmwN0Rw-LyMOXMvzOj-8xI.EMTmlgRjOBTuy95M02VaIErMj4IBtWBHuABjsPO8kBQ&amp;dib_tag=se&amp;keywords=bottiglia+pomodoro&amp;qid=1714288621&amp;sprefix=bottiglia+pomodoro%2Caps%2C101&amp;sr=8-20&quot;)\nfor(urls in tutti_urls)\n{\n  testo &lt;- &quot;&quot;\n  \n  for(url in urls)\n  {   \n    # Apri la pagina e aspetta che carica interamente\n    driver$client$navigate(url)\n    Sys.sleep(2) # 2 secondi, occhio\n    \n    # Cerca tag div che dice se l&#039;ingrediente, materia prima risulta disponibile nel magazzino\n    div &lt;- try(driver$client$findElement(using = &quot;id&quot;, value = &quot;availability&quot;))  \n    #attenzione, il nome di quel &quot;value&quot; PUO&#039; cambiare\n    \n    # SE la pagina non ha quel tag, assumi assenza in magazzino. Ipotesi forte\n    if(class(div) == &quot;try-error&quot;)\n      next\n    else\n    {   \n      # Ottieni testo da div tag\n      testo &lt;- div$getElementText()[[1]]\n      break\n    }\n  }\n  \n  if(testo == &quot;Disponibilit\u00e0 immediata&quot;) \n    #attenzione, testo pu\u00f2 cambiare. Es. &quot;Disponibilit\u00e0 2&quot; o comunque un numero\n  {  \n    \n    aggiungi_al_carrello &lt;- driver$client$findElement(using = &quot;id&quot;, value = &quot;add-to-cart-button&quot;)\n    aggiungi_al_carrello$clickElement()\n    \n  }\n  \n  Sys.sleep(5)\n  \n}\n\n### Parte delicata ----\n# Le credenziali non vanno MAI digitate all&#039;interno di un codice\n# Esistono varie soluzioni per conservare segreti: Keyring, creare file specifici, etc.\n\n# Vai alla pagina del carrello\ndriver$client$navigate(&quot;https:\/\/www.amazon.it\/gp\/cart\/view.html?ref_=nav_cart&quot;)\n\n\n# Trova bottone &quot;Procedi all&#039;ordine&quot; \nprosegui_ordine &lt;- driver$client$findElement(using = &quot;name&quot;, value = &quot;proceedToRetailCheckout&quot;)\n\n# Clicca bottone precedente\nprosegui_ordine$clickElement()\n\n# Trova rettangolo inserimento nome utente\nusername_input &lt;- driver$client$findElement(using = &quot;id&quot;, value = &quot;ap_email&quot;)\n\n# Inserisci nome utente \nusername_input$sendKeysToElement(list(&quot;SEGRETO_UTENTE&quot;)) #OCCHIO\n\n# Invia nome utente\nusername_input$submitElement()\n\n\n# Trova rettangolo inserimento password\npassword_input &lt;- driver$client$findElement(using = &quot;id&quot;, value = &quot;ap_password&quot;)\n\n# Inserisci password\npassword_input$sendKeysToElement(list(&quot;SEGRETO_PASSWORD&quot;)) #OCCHIO\n\n# Invia password\npassword_input$submitElement()\n\n# Aspetta il caricamento della password\nSys.sleep(2)\n\n<\/code><\/pre>\n<p><code><\/code><code><\/code><code>  <\/code><\/p>\n<p><span style=\"font-weight: 400;\">Tutto bello fino ad ora, eh? Sulla carta abbiamo un codice che riduce a manciate di secondi il processo di acquisto della segretaria o del responsabile acquisti. Sulla carta\u2026a schermo&#8230; Peccato che abbiamo qualcosa di <\/span><i><span style=\"font-weight: 400;\">immutabile<\/span><\/i><span style=\"font-weight: 400;\">, il codice, che fa qualcosa su qualcosa di <\/span><b>mutabile<\/b><span style=\"font-weight: 400;\">, il sito (o front-end) di Amazon. Se domani mattina qualcuno si alza, ad Amazon, e decide che disponibilit\u00e0 immediata diventa \u201cDisponibile ora!\u201d, quel codice NON funziona pi\u00f9. Stesso discorso se cambia leggermente il bottone \u201cAggiungi al carrello\u201d. Bisogna anticipare quell\u2019evento e avere l\u2019accortezza di gestire quella che gli informatici chiamano eccezione: se il codice non va a buon fine, si pu\u00f2, ad esempio, mandare una mail al programmatore, titolare, etc. Pensa che qualche manager riceve premi di produzione perch\u00e9 riesce a far risparmiare all\u2019azienda qualche soldino perch\u00e9 non fa inserire pezzi di codice del genere\u2026..\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Quindi questo presunto sistema esperto o intelligenza artificiale d\u2019acquisti non ha adattabilit\u00e0 a meno che il programmatore metta mano al codice. Esistono gi\u00e0 sistemi pi\u00f9 adattabili che integrano modelli statistici linguistici (LLM), ma questa toppa crea un altro buco.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Torno sul punto 4 perch\u00e9 anche l\u00ec ci si pu\u00f2 giocare la reputazione e la carriera: esistono delle buone pratiche per conservare dati sensibili, <\/span><a href=\"https:\/\/staticalmo.com\/r-potter-e-la-pietra-filosofale\"><span style=\"font-weight: 400;\">cosa che in passato ho chiamato camera dei segreti<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Vuoi scoprire se vale la pena automatizzare una serie di acquisti, in funzione delle ore-uomo\/anno necessare? <\/span><a href=\"https:\/\/staticalmo.com\/contact\/\"><span style=\"font-weight: 400;\">Sentiamoci in una chiamata gratuita<\/span><\/a><span style=\"font-weight: 400;\">.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Puoi accedere al codice di sopra <\/span><a href=\"https:\/\/gist.github.com\/F041\/3edf69b287333020818f15b35108056f\"><span style=\"font-weight: 400;\">anche in formato diverso<\/span><\/a><span style=\"font-weight: 400;\">, da pi\u00f9 da addetto ai lavori.<\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>Se hai una azienda che richiede input fisici o materia prima, saprai meglio di STATiCalmo che organizzare le scorte significa evitare brutte sorprese. Grazie alla programmazione, si possono risparmiare ore-uomo della segretaria o del responsabile acquisti. Se tu, titolare o imprenditore, ti occupi direttamente degli acquisti, vedo un problema, ma questo fa parte di un &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/staticalmo.com\/en\/ridurre-il-carico-di-lavoro-aziendale-responsabile-acquisti\/\"> <span class=\"screen-reader-text\">Ridurre il carico di lavoro aziendale: responsabile acquisti<\/span> Read More &raquo;<\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","_themeisle_gutenberg_block_has_review":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1847","post","type-post","status-publish","format-standard","hentry","category-senza-categoria"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/posts\/1847","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/comments?post=1847"}],"version-history":[{"count":3,"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/posts\/1847\/revisions"}],"predecessor-version":[{"id":1850,"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/posts\/1847\/revisions\/1850"}],"wp:attachment":[{"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/media?parent=1847"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/categories?post=1847"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/tags?post=1847"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}