{"id":9725,"date":"2025-08-08T10:07:28","date_gmt":"2025-08-08T08:07:28","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/640\/?post_type=ht_kb&#038;p=9725"},"modified":"2025-08-08T11:27:47","modified_gmt":"2025-08-08T09:27:47","slug":"definicja-hook-contract-elementy-zapotrzebowania-rezerwacje","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/definicja-hook-contract-elementy-zapotrzebowania-rezerwacje\/","title":{"rendered":"Definicja Hook Contract: Elementy zapotrzebowania (Rezerwacje)"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Spis tre\u015bci<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Prze\u0142\u0105cznik Spisu Tre\u015bci\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/definicja-hook-contract-elementy-zapotrzebowania-rezerwacje\/#Grupa_docelowa\" >Grupa docelowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/definicja-hook-contract-elementy-zapotrzebowania-rezerwacje\/#Opis\" >Opis<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/definicja-hook-contract-elementy-zapotrzebowania-rezerwacje\/#Konkretne_elementy_zapotrzebowania_i_ogolne_dane_zapotrzebowania\" >Konkretne elementy zapotrzebowania i og\u00f3lne dane zapotrzebowania<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/definicja-hook-contract-elementy-zapotrzebowania-rezerwacje\/#Hook_DemandElement\" >Hook DemandElement<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<p>Definicja Hook Contract dla element\u00f3w zapotrzebowania jest u\u017cywana do integracji nowych dokument\u00f3w lub zam\u00f3wie\u0144, dla kt\u00f3rych dane dost\u0119pno\u015bci i rezerwacji maj\u0105 by\u0107 zarz\u0105dzane z og\u00f3lnym zarz\u0105dzaniem danymi zapotrzebowania przy u\u017cyciu implementacji Hook Contract.<\/p>\n<p>Niniejszy artyku\u0142 opisuje, jakie usprawnienia mo\u017cna wprowadzi\u0107 za pomoc\u0105 definicji Hook Contract oraz jakie ograniczenia i funkcje specjalne nale\u017cy wzi\u0105\u0107 pod uwag\u0119.<\/p>\n<p>Informacje na temat infrastruktury Hook mo\u017cna znale\u017a\u0107 w artykule <a href=\"#https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/hook-contracts\/\"><em>Hook Contracts.<\/em><\/a><\/p>\n<h3 id=\"grupa-docelowa\" ><span class=\"ez-toc-section\" id=\"Grupa_docelowa\"><\/span>Grupa docelowa<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Programi\u015bci<\/li>\n<\/ul>\n<h3 id=\"opis\" ><span class=\"ez-toc-section\" id=\"Opis\"><\/span>Opis<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4 id=\"konkretne-elementy-zapotrzebowania-i-ogolne-dane-zapotrzebowania\" ><span class=\"ez-toc-section\" id=\"Konkretne_elementy_zapotrzebowania_i_ogolne_dane_zapotrzebowania\"><\/span>Konkretne elementy zapotrzebowania i og\u00f3lne dane zapotrzebowania<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Z punktu widzenia logistyki magazynowej wiele proces\u00f3w biznesowych polega na planowaniu i wykonywaniu przesuni\u0119\u0107 towar\u00f3w. Na pocz\u0105tku takiego procesu otwarte zam\u00f3wienia lub dokumenty zapowiadaj\u0105 przysz\u0142e zmiany zapas\u00f3w; na ko\u0144cu generowane s\u0105 transakcje magazynowe, a zapasy s\u0105 zwi\u0119kszane lub zmniejszane.<\/p>\n<p>R\u00f3\u017cne zam\u00f3wienia i dokumenty w modelu danych odzwierciedlaj\u0105 r\u00f3wnie\u017c w r\u00f3\u017cny spos\u00f3b, ile artyku\u0142\u00f3w i w\u0142a\u015bcicieli zapotrzebowania nale\u017cy zg\u0142osi\u0107 z wyprzedzeniem (planowana realizacja) w magazynie w okre\u015blonym terminie lub ile zapotrzebowania zostanie zaspokojone (planowane przyj\u0119cie). Te konkretne zam\u00f3wienia lub dokumenty (najcz\u0119\u015bciej ich pozycje, np. niekompletna pozycja zam\u00f3wienia sprzeda\u017cy) s\u0105 okre\u015blane jako <em>konkretne elementy zapotrzebowania.<\/em><\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Termin <em>Zapotrzebowanie<\/em> nie odnosi si\u0119 do danych wykorzystywanych w planowaniu zapotrzebowania materia\u0142owego.<\/div><\/section>\n<p>Istnieje kilka konkretnych element\u00f3w zapotrzebowania, kt\u00f3re r\u00f3wnie\u017c reprezentuj\u0105 planowane wydania i przyj\u0119cia, ale nie s\u0105 zam\u00f3wieniami ani dokumentami. Nie pojawiaj\u0105 si\u0119 one w zestawie warto\u015bci <em>OrderType<\/em> i zdefiniowano dla nich dodatkowy zestaw warto\u015bci <em>NoOrderType:<\/em><\/p>\n<ul>\n<li><em>NoOrderType.INVENTORY_TRANSACTION<\/em> dla transakcji magazynowych<\/li>\n<li><em>NoOrderType.INVENTORY_TRANSACTION_ERROR<\/em> dla transakcji magazynowych z b\u0142\u0119dami<\/li>\n<li>NoOrderType.FREE_DEMAND dla zapotrzebowania bez dowodu<\/li>\n<li>NoOrderType.ONHAND dla samego zapasu, jako pokrycie zapotrzebowania specjalnego<\/li>\n<\/ul>\n<p>Ka\u017cdy specyficzny element zapotrzebowania jest identyfikowany przez unikaln\u0105 kombinacj\u0119 {<em>orderType, noOrderType, headerGuid, detailGuid<\/em>}.<\/p>\n<p>Do pracy z rezerwacjami dla ka\u017cdego konkretnego elementu zapotrzebowania tworzone s\u0105 dodatkowo instancje specjalnych obiekt\u00f3w biznesowych, kt\u00f3re przechowuj\u0105 dane dotycz\u0105ce zapotrzebowania, pokrycia zapotrzebowania oraz rezerwacji w uog\u00f3lnionej formie.<\/p>\n<p>Interfejs API rezerwacji udost\u0119pnia metody umo\u017cliwiaj\u0105ce wykonywanie operacji na tych og\u00f3lnych danych zapotrzebowania (tworzenie nowych og\u00f3lnych danych zapotrzebowania, przenoszenie ilo\u015bci zapotrzebowania pomi\u0119dzy og\u00f3lnymi elementami zapotrzebowania, rezerwowanie itp.) bez konieczno\u015bci znajomo\u015bci konkretnych element\u00f3w zapotrzebowania. Niezb\u0119dne do tego informacje i parametry s\u0105 przekazywane za po\u015brednictwem interfejsu API. Niekt\u00f3re parametry s\u0105 jednak zdefiniowane na sta\u0142e dla danego typu zam\u00f3wienia lub mog\u0105 by\u0107 zmieniane, dzi\u0119ki czemu nie trzeba ich ka\u017cdorazowo przekazywa\u0107 ani przechowywa\u0107 w modelu danych.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Przyk\u0142ad 1:<\/p>\n<p>Typ rezerwacji danych zapotrzebowania (rezerwacja automatyczna\/rezerwacja r\u0119czna itp.) mo\u017ce zosta\u0107 zast\u0105piony r\u0119cznie. Z tego powodu mo\u017cliwe jest zresetowanie typu rezerwacji w aplikacji <em>Rezerwacje<\/em> do warto\u015bci, kt\u00f3ra jest aktualnie zdefiniowana przez dane podstawowe.<\/div><\/section>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Przyk\u0142ad 2:<\/p>\n<p>Ze wzgl\u0119du na elastyczno\u015b\u0107, sam termin nie jest zapisywany w danych zapotrzebowania dla typu rezerwacji <em>Automatycznie z okresem rezerwacji,<\/em> ale jest okre\u015blany na podstawie konkretnych danych zam\u00f3wienia, je\u015bli to konieczne.<\/div><\/section>\n<p>Zdarza si\u0119 r\u00f3wnie\u017c, \u017ce zmiany w og\u00f3lnych danych zapotrzebowania powoduj\u0105 okre\u015blone zmiany w okre\u015blonych elementach zapotrzebowania.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Przyk\u0142ad 1:<\/p>\n<p>Podczas reorganizacji danych zapotrzebowania, identyfikatory GUID zapotrzebowania, kt\u00f3re s\u0105 zwykle zapisywane w okre\u015blonych elementach zapotrzebowania, musz\u0105 zosta\u0107 zast\u0105pione identyfikatorami ZEROGUID.<\/div><\/section>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Przyk\u0142ad 2:<\/p>\n<p>Zarezerwowane zapotrzebowanie mo\u017ce zosta\u0107 pozbawione swojej rezerwacji w procesie o wysokim priorytecie (np. przy ksi\u0119gowaniu ujemnej r\u00f3\u017cnicy inwentaryzacyjnej, gdy ca\u0142y zapas jest zarezerwowany). To, czy jest to w og\u00f3le dozwolone oraz w jaki spos\u00f3b konkretne elementy zapotrzebowania maj\u0105 zosta\u0107 o tym \u201epoinformowane\u201d, zale\u017cy od typu zam\u00f3wienia.<\/div><\/section>\n<p>Poni\u017csza definicja Hook Contract s\u0142u\u017cy do mapowania mi\u0119dzy og\u00f3lnymi i szczeg\u00f3\u0142owymi danymi zapotrzebowania:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">com.cisag.app.inventory.reservation.hook.log.DemandElement<\/pre>\n<p>Implementacja powinna istnie\u0107 dla ka\u017cdego konkretnego elementu zapotrzebowania z okre\u015blon\u0105 warto\u015bci\u0105 <em>orderType.<\/em><\/p>\n<h4 id=\"hook-demandelement\" ><span class=\"ez-toc-section\" id=\"Hook_DemandElement\"><\/span>Hook <em>DemandElement<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Dla ka\u017cdego konkretnego elementu zapotrzebowania w standardzie istnieje jedna implementacja definicji Hook Contract <em>com.cisag.app.inventory.reservation.hook.log.DemandElement,<\/em> np. <em>com.cisag.app.sales.order.log.DemandElementSalesOrderImpl<\/em> dla zam\u00f3wie\u0144 sprzeda\u017cy. Standardowe implementacje mog\u0105 by\u0107 u\u017cywane jako szablon dla nowych element\u00f3w zapotrzebowania.<\/p>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Hook zast\u0119puje mechanizm wywo\u0142ania zwrotnego. Implementacje interfejs\u00f3w <em>com.cisag.app.inventory.reservation.log.FixedReservationAvailabilityCallback, com.cisag.app.inventory.reservation.log.DemandCallback<\/em> i <em>com.cisag.app.inventory.reservation.log.OrderBindingCallback<\/em> nie s\u0105 ju\u017c potrzebne.<\/div><\/section>\n<p>Definicja Hook Contract sk\u0142ada si\u0119 z dw\u00f3ch interfejs\u00f3w Hook. Interfejs <em>com.cisag.app.inventory.reservation.hook.log.DemandElementHook<\/em> powinien by\u0107 zawsze zaimplementowany. Zaimplementowana klasa umo\u017cliwia zapytanie o og\u00f3lne w\u0142a\u015bciwo\u015bci zapotrzebowania <em>(getReservationCreationType(), getHighestcom.cisag.app.inventory.reservation.hook.log.DemandElementBindingHookionSupportLevel()<\/em> itp.), zmian\u0119 identyfikatora GUID elementu zapotrzebowania w konkretnym elemencie zapotrzebowania <em>(setDemandGuid())<\/em> lub reakcj\u0119 na zewn\u0119trzn\u0105 zmian\u0119 rezerwacji w przypadku \u017ar\u00f3d\u0142a zapotrzebowania <em>(reservationChanged()).<\/em><\/p>\n<p>Interfejs Hook <em>com.cisag.app.inventory.reservation.hook.log.DemandElementBindingHook<\/em> powinien by\u0107 r\u00f3wnie\u017c zaimplementowany dla typ\u00f3w zam\u00f3wie\u0144, kt\u00f3re s\u0105 ze sob\u0105 trwale powi\u0105zane w procesie biznesowym (np. zlecenie produkcyjne i zam\u00f3wienie sprzeda\u017cy w produkcji zwi\u0105zanej z zam\u00f3wieniem).<\/p>\n<p>Ka\u017cda implementacja Hook musi by\u0107 oznaczona adnotacj\u0105 <em>com.cisag.app.inventory.reservation.log.DemandProperties<\/em> (w\u0142a\u015bciwo\u015bci <em>orderType, demandOrigin<\/em> i <em>demandCoverage).<\/em><\/p>\n","protected":false},"author":28,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-9725","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-definicje-hook-contract"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/9725","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/comments?post=9725"}],"version-history":[{"count":7,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/9725\/revisions"}],"predecessor-version":[{"id":36392,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/9725\/revisions\/36392"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/media?parent=9725"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}