Jeśli konieczne jest przeniesienie danych zakończonych zamówień sprzedaży ze starszego systemu do systemu ERP – na przykład w celu spełnienia wymagań dotyczących przechowywania dokumentów biznesowych w ustawowych okresach retencji – należy skorzystać z aplikacji Import danych z odpowiednim filtrem dla importu historycznych zamówień sprzedaży.
Artykuł zawiera instrukcję obsługi aplikacji Import danych w kontekście historycznych zamówień sprzedaży. Przedstawiono tu ogólne instrukcje oraz wskazano funkcje specjalne, które należy uwzględnić podczas pracy z importem. Podano również informacje na temat możliwych warunków wstępnych oraz skutków operacji.
Opis samej aplikacji Import danych, wraz z opisami pól i przycisków, znajduje się w dokumentacji Import danych.
Informacje ogólne
Import historycznych zamówień sprzedaży opiera się na aktualnym modelu danych przechowywanym w bazie danych repozytorium. W przypadku eksportu dostępnych jest więcej atrybutów niż przy imporcie, dlatego zaleca się przygotowanie odrębnych filtrów dla eksportu i importu.
Relacje typu 1:1 w modelu danych bazują zazwyczaj na technicznym atrybucie GUID. W zależności od zastosowania możliwe jest wykorzystanie atrybutu GUID lub klucza funkcjonalnego obiektu docelowego (najczęściej kodu lub numeru). W przypadku niektórych obiektów biznesowych wymagane jest uwzględnienie organizacji, która umożliwia konwersję klucza funkcjonalnego na techniczny. Taka organizacja nie jest zazwyczaj zawarta bezpośrednio w źródle danych importowych, lecz jest ustalana kontekstowo – na podstawie dokumentu. Dalsze informacje znajdują się w rozdziale Przegląd: Atrybuty.
Niektóre dane historyczne zamówień sprzedaży, takie jak:
- wartości w walucie lokalnej,
- ilości planistyczne,
- zestawy i ich komponenty,
- oraz wewnętrzne atrybuty pomocnicze,
nie podlegają importowi.
Zaimportowane dane historyczne zamówień sprzedaży są zapisywane w odpowiednich obiektach biznesowych:
-
Identyfikator i GUID
-
Dane reorganizacji dokumentu
com.cisag.app.general.obj.DocumentReorganisationData
-
Dane reorganizacji pozycji dokumentu
com.cisag.app.general.obj.DocumentDetailReorganisationData
-
-
Dalsze dane:
-
Historyczne zamówienie sprzedaży
com.cisag.app.sales.orderarchive.obj.SalesOrderArchive
-
Historyczna pozycja zamówienia sprzedaży
com.cisag.app.sales.orderarchive.obj.SalesOrderArchiveDetail
-
Zaimportowane historyczne zamówienia sprzedaży można weryfikować w aplikacji Lista: Historyczne zamówienia sprzedaży.
Obiekty biznesowe kodu skrótu jako części
Obiekty biznesowe z kodem skrótu są wykorzystywane zarówno w danych nagłówkowych, jak i pozycjach historycznego zamówienia sprzedaży. Są to technicznie powiązane grupy atrybutów, które mają identyczną strukturę w wielu dokumentach. Ich ponowne wykorzystanie pozwala zoptymalizować przestrzeń w bazie danych oraz w pamięci operacyjnej systemu.
Dzięki specjalnej konwersji, obiekty z kodem skrótu są prezentowane jako części dostępne do eksportu i importu.
Szablon dla pliku importu
Jeśli nie ma pewności, jaki format pliku importu jest właściwy, można wykonać następujące kroki:
-
Wprowadzić przykładowe zamówienie sprzedaży za pomocą aplikacji Zamówienia sprzedaży
-
Zdefiniować, że dla tego zamówienia mają zostać wygenerowane dane historyczne w ramach reorganizacji.
W tym celu należy wprowadzić odpowiedni wpis w aplikacji Ustawienia reorganizacji dokumentów/Dane historyczne, przypisany wyłącznie do typu dokumentu przykładowego zamówienia sprzedaży -
Przeprowadzić reorganizację zamówienia sprzedaży
→W wyniku reorganizacji zamówienie sprzedaży zostanie zapisane jako historyczne zamówienie sprzedaży. -
Wyeksportować historyczne zamówienie sprzedaży z wykorzystaniem filtra do importu w żądanym formacie i z wymaganymi atrybutami
Uzyskany plik może posłużyć jako wzorzec do tworzenia plików importu.
Zaleca się również zapoznać z sekcją Przykład pliku importu.
Tworzenie nowych historycznych zamówień sprzedaży
Minimalne wymagania
Atrybuty podstawowe – Zamówienie sprzedaży
Opis atrybutu | Atrybut |
Klient | customerData.CustomerPartner |
Data wprowadzenia | data |
Odbiorca faktury (jeśli nie jest dostępny, używany jest klient) |
invoiceCustomerData.CustomerPartner |
Rodzaj zamówienia sprzedaży Wskazówka Należy sprawdzić, czy zasadne jest zastosowanie odrębnego rodzaju zamówienia sprzedaży do importu danych historycznych, np. z systemów zewnętrznych. |
type |
Organizacja sprzedaży (w systemach jednofirmowych z wyłączonymi uprawnieniami do treści jest to automatycznie klient) |
invoicingPartyData.Partner |
Waluta | currency |
Opcjonalnie można również przenieść numer za pomocą importu. W takim przypadku numer ustalony w ramach schematu numeracji przypisanego do rodzaju jest ignorowany. Należy stosować konwencję, która zapobiega niezgodnościom z numerami już istniejącymi lub mającymi być nadanymi automatycznie.
Minimalne wymagane atrybuty – Pozycja zamówienia
Opis atrybutu | Atrybut |
Artykuł (w razie potrzeby z opisem pseudoartykułu) |
item |
Ilość całkowita (zalecane z wyjątkiem pozycji rozliczeniowych; w razie potrzeby z jednostką) |
totalQuantity |
Preferowana data | preferredDate |
Data dostawy | deliveryDate |
Dostawca (jeśli wymagany i nie przypisany wcześniej) |
supplier |
Odbiorca dostawy
|
deliveryCustomerData.customer |
Magazyn (jeśli wymagany i nie przypisany wcześniej) |
storageArea.warehouse |
Integracja z zaopatrzeniem (jeśli różni się od typu dokumentu) |
purchasingReference |
Cena netto
|
Opcjonalnie można również przenieść numer za pomocą importu pozycji.
Przykład pliku importu
Odpowiedni minimalny XML z atrybutami funkcjonalnymi i dwoma pozycjami ma na przykład następującą zawartość:
<?xml version="1.0" encoding="UTF-8"?>
<semiramis xmlns="com.cisag.app.sales.orderarchive.obj.SalesOrderArchive" xsi:schemaLocation="com.cisag.app.sales.orderarchive.obj.SalesOrderArchive SalesOrderArchive.xsd" created="2023-07-27T05:53:59.154Z" locale="en-US-XMLSchemaCompliant" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SalesOrderArchive xmlns="com.cisag.app.sales.orderarchive.obj.SalesOrderArchive">
<customerOrderData>
<purchaseOrder/>
<date>
<value/>
</data>
</customerOrderData>
<date>2022-07-25T22:00:00.000Z</date>
<numer>VA0001714</numer>
<customerData>
<CareOfPartner>
<numer>71002</numer>
</CareOfPartner>
<CustomerPartner>
<numer>10010</numer>
</CustomerPartner>
</CustomerData>
<invoiceCustomerData>
<CareOfPartner>
<numer>71002</numer>
</CareOfPartner>
<CustomerPartner>
<numer>10010</numer>
</CustomerPartner>
</invoiceCustomerData>
<invoicingPartyData>
<CareOfPartner xsi:nil="true"/>
<Partner>
<numer>90000</numer>
</Partner>
</invoicingPartyData>
<Currency>
<isoCode>EUR</isoCode>
</Currency>
<Type>
<code>100</code>
</Type>
<Details>
<totalQuantity>
<amount>1</amount>
<Uom>
<code>pc</code>
</Uom>
</totalQuantity>
<preferredDate>
<value>26#08#2023</value>
</preferredDate>
<deliveryDate>2023-08-25T18:00:00.000Z</deliveryDate>
<purchasingReference>NONE</purchasingReference>
<storageArea>
<magazyn>100</magazyn>
</storageArea>
<netPrice>
<amount>1024.1</amount>
<Currency>
<isoCode>EUR</isoCode>
</currency>
</netPrice>
<retailNetPrice>
<amount>0</amount>
<currency>
<isoCode>EUR</isoCode>
</currency>
</retailNetPrice>
<deliveryCustomerData>
<CareOfPartner>
<numer>71002</numer>
</CareOfPartner>
<CustomerPartner>
<numer>10010</numer>
</CustomerPartner>
</deliveryCustomerData>
<deliveryPartnerData>
<careOfName/>
<CareOfPartner xsi:nil="true"/>
</deliveryPartnerData>
<Item>
<numer>10010</numer>
</Item>
<PseudoItemDescription xsi:nil="true"/>
<SupplierPartner xsi:nil="true"/>
</Details>
<Details>
<totalQuantity>
<amount>4</amount>
<Uom>
<code>pc</code>
</Uom>
</totalQuantity>
<preferredDate>
<value>26#08#2023</value>
</preferredDate>
<deliveryDate>2023-08-25T18:00:00.000Z</deliveryDate>
<purchasingReference>NONE</purchasingReference>
<storageArea>
<magazyn>100</magazyn>
</storageArea>
<netPrice>
<amount>59.35</amount>
<Currency>
<isoCode>EUR</isoCode>
</currency>
</netPrice>
<retailNetPrice>
<amount>0</amount>
<currency>
<isoCode>EUR</isoCode>
</currency>
</retailNetPrice>
<deliveryCustomerData>
<CareOfPartner>
<numer>71002</numer>
</CareOfPartner>
<CustomerPartner>
<numer>10010</numer>
</CustomerPartner>
</deliveryCustomerData>
<deliveryPartnerData>
<careOfName/>
<CareOfPartner xsi:nil="true"/>
</deliveryPartnerData>
<Item>
<numer>10020</numer>
</Item>
<PseudoItemDescription xsi:nil="true"/>
<SupplierPartner xsi:nil="true"/>
</Details>
</SalesOrderArchive></semiramis>.
W tym przykładzie pozostałe atrybuty są dodawane za pomocą wartości domyślnych, na przykład zgodnie z danymi podstawowymi.
Można również zaimportować dodatkowe wartości i użyć atrybutów technicznych zamiast atrybutów funkcjonalnych. Listę atrybutów można znaleźć w rozdziale Przegląd: Atrybuty.
Anulowane pozycje
Jeśli pozycja zostanie utworzona, nie można jej anulować w tym samym imporcie (przypadek canceled==true nie jest dostępny). W celu anulowania nowo utworzonej pozycji należy przeprowadzić dwa osobne importy. W pierwszym imporcie należy utworzyć pozycję z kompletem danych, bez ustawionego atrybutu canceled. W drugim imporcie należy anulować tę samą pozycję, ustawiając atrybut canceled na true. Należy pamiętać, że w drugim imporcie wszystkie pozostałe zmiany dotyczące tej pozycji zostaną zignorowane.
Edycja istniejących historycznych zamówień sprzedaży
Dla importu historycznych zamówień sprzedaży nie udostępniono aplikacji korygującej. Oznacza to, że nieprawidłowe dane należy skorygować poprzez przygotowanie poprawnego pliku importu i wykonanie ponownego procesu importu.
W przypadku importu historycznych zamówień sprzedaży w systemach wielofirmowych oraz systemach jednofirmowych z aktywowanymi uprawnieniami do treści wymagana jest organizacja sprzedaży. Podczas edycji istniejącego zamówienia organizacja sprzedaży jest zawsze określana na podstawie danych dokumentu zapisanych w nagłówku. Wartości organizacji sprzedaży z pliku importu są w takim przypadku ignorowane.
W celu odnalezienia historycznego zamówienia sprzedaży zapisanego w bazie danych należy podać jego identyfikator techniczny (SalesOrderArchive:guid) lub funkcjonalny (rodzaj i numer).
Dla pozycji dostępne są wszystkie opcje importu, w tym usuwanie. W celu zidentyfikowania zapisanej pozycji należy również podać identyfikator techniczny (SalesOrderArchiveDetail:guid) lub identyfikator funkcjonalny (numer).
Zmiany za pomocą importu są możliwe tylko wtedy, gdy nie są zablokowane przez kontrolę systemową.
Pozycje anulowane
W przypadku pozycji anulowanych oraz pozycji, które zostały anulowane w ramach importu (atrybut canceled ustawiony na true), żadne inne dane nie są przetwarzane z pliku importu.
Jeśli znacznik usuwania zostanie usunięty dla pozycji szczegółowej, zostanie on automatycznie usunięty również dla odpowiedniej pozycji podstawowej. Należy jednak pamiętać, że wartości pozycji podstawowej nie są wtedy pobierane z pliku importu. Dane pozycji podstawowej mogą zostać wyświetlone jako dodatkowy blok po pozycjach szczegółowych.
Na przykład w poniższym pliku XML anulowanie zostaje cofnięte dla pozycji szczegółowej 10-10 historycznego zamówienia sprzedaży 100-VA12345, a jednocześnie pole Numer referencyjny w pozycji podstawowej przyjmuje wartość abc.
<?xml version="1.0" encoding="UTF-8"?><semiramis
xmlns="com.cisag.app.sales.orderarchive.obj.SalesOrderArchive"
xsi:schemaLocation="com.cisag.app.sales.orderarchive.obj.SalesOrderArchive SalesOrderArchive.xsd" created="2023-07-26T15:10:45.999Z" locale="en-US-XMLSchemaCompliant" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" nlsMode="SINGLE_LANGUAGE" dateTimeMode="COMPACT">
<SalesOrderArchive xmlns="com.cisag.app.sales.orderarchive.obj.SalesOrderArchive">
<numer>VA12345</numer>
<type>
<code>100</code>
</type>
<Details>
<numer>10</numer>
<SubDetails>
<numer>10</numer>
<subNumber>10</subNumber>
<canceled>false</canceled>
</subDetails>
</Details>
<Details>
<numer>10</numer>
<reference>abc</reference>
</Details>
</SalesOrderArchive>
</semiramis>
Alternatywnie można również anulować anulowanie dla pozycji głównej, co automatycznie usunie znacznik usuwania ze wszystkich pozycji szczegółowych w tej pozycji.
Automatyczne zwolnienie po imporcie
Po pomyślnym zakończeniu importu możliwe jest automatyczne zwolnienie historycznego zamówienia sprzedaży. Funkcja ta zapobiega użyciu niekompletnego zamówienia w dalszych procesach. W momencie zwolnienia historyczne zamówienie sprzedaży otrzymuje status Nieprawidłowe, co uniemożliwia jego dalsze wykorzystanie także na tym etapie.
W tym celu należy ustawić atrybut bazy wirtualnej autoRelease na wartość true dla odpowiedniej instancji.
Jeśli funkcja jest aktywna i nie wystąpiły inne błędy, w dzienniku komunikatów zostaje wyświetlona informacja o automatycznym zwolnieniu zamówienia. W przeciwnym razie pojawia się komunikat ostrzegawczy.
Należy mieć na uwadze, że po zwolnieniu możliwe jest już wyłącznie przeprowadzenie reorganizacji. Dokumenty o statusie W opracowaniu (com.cisag.app.general.obj.DocumentReorganisationData:archiveDataStatus) można usunąć np. przez import, używając trybu importu mode="delete"
(patrz dokumentacja Wprowadzenie: Wymiana danych).
Instrukcja: Import historycznych zamówień sprzedaży
Aby zaimportować historyczne zamówienie sprzedaży, należy:
-
Uruchomić aplikację Import danych.
-
Wyświetlić filtr dla obiektu biznesowego:
com.cisag.app.sales.orderarchive.obj.SalesOrderArchive
→ Zostanie otwarty filtr dla importu historycznych zamówień sprzedaży. -
W razie potrzeby skopiować istniejący filtr lub utworzyć nowy dla tego obiektu biznesowego.
-
Wprowadzić lub zmienić wartości atrybutów w filtrze zgodnie z wymaganiami.
-
Nacisnąć przycisk [Import danych] na standardowym pasku przycisków.
→ Otworzy się okno dialogowe Import danych. -
W oknie dialogowym określić ustawienia importu dla danego pliku. Szczegółowe opisy pól znajdują się w dokumentacji Import danych.
-
Uruchomić proces importu, naciskając przycisk [W tle].
→ Import zostanie wykonany.
Przegląd: Atrybuty
Atrybuty poszczególnych obiektów biznesowych dostępnych do importu przedstawiono poniżej. Dla atrybutów kluczy obcych podano również odpowiednią nazwę relacji. Pola identyfikacyjne i obowiązkowe mogą ulec zmianie oraz zostać rozszerzone poprzez dostosowanie.
W przypadku niektórych obiektów biznesowych konwersja kluczy funkcjonalnych na techniczne wymaga organizacji sprzedaży. Na listach atrybutów fakt ten oznaczono adnotacją Organizacja sprzedaży (zgodna z nagłówkiem) w kolumnie Atrybut.
Atrybuty identyfikacyjne (kluczowe) oznaczone są symbolem (K).
Dane podstawowe
Historyczne zamówienie sprzedaży (SalesOrderArchive)
Atrybut | Relacja | Opis |
autoRelease |
(atrybut wirtualny) | Automatyczne zwolnienie. Zobacz rozdział Automatyczne zwolnienie po imporcie. |
currency |
– | Waluta. Musi być określona i dostępna. Nie może być zmieniona po przypisaniu pozycji. |
customerData |
– | Zobacz rozdział Dane klienta (customerData, invoiceCustomerData). |
customerOrderData.purchaseOrder |
– | Zewnętrzny numer dokumentu. |
customerOrderData.date |
– | Data dokumentu zewnętrznego. |
date |
– | Data wprowadzenia. |
guid (K) |
– | Identyfikator techniczny dokumentu. Wymagany do modyfikacji lub usunięcia już zapisanych danych. |
invoiceCustomerData |
– | Zobacz rozdział Dane klienta (customerData, invoiceCustomerData). |
invoicingPartyData.careOf |
invoicingPartyData.CareOfPartner | Organizacja sprzedaży: Osoba kontaktowa. Wskazówka Nie musi być bieżącym partnerem kontaktowym. |
invoicingPartyData.careOfName |
– | Organizacja sprzedaży: Osoba kontaktowa – Nazwa. |
invoicingPartyData.partner |
invoicingPartyData.Partner | Organizacja sprzedaży. Musi być określona i istniejąca jako aktywna organizacja sprzedaży. Musi posiadać techniczne uprawnienia do danego rodzaju dokumentu. Nie można zmieniać po utworzeniu nowego dokumentu. |
number (K) |
– | Numer dokumentu (identyfikacja funkcjonalna). Opcjonalny przy nowym utworzeniu (jeśli pusty, określany automatycznie zgodnie z zakresem numeracji przypisanym do typu dokumentu). Obowiązkowy przy edycji lub usuwaniu, jeśli guid nie został podany. |
responsible |
ResponsiblePartner | Osoba odpowiedzialna. Wskazówka Nie musi być aktualnie zatrudnionym pracownikiem. |
salesRepresentatives[0..2] |
SalesRepresentatives | Przedstawiciele handlowi (maksymalnie trzech). Wskazówka Nie muszą być aktywnymi przedstawicielami. |
type (K) |
– | Rodzaj dokumentu (identyfikacja funkcjonalna). Obowiązkowy przy nowym utworzeniu, jeśli guid nie został określony. Nie może mieć ustawionego znacznika usuwania przy tworzeniu. Nie można zmieniać po utworzeniu. Wskazówka Znacznik usuwania można wstawić później. |
Dane klienta (customerData, invoiceCustomerData)
Dane klienta w dwóch zastosowaniach są przechowywane w bazie danych jako obiekt biznesowy z kodem skrótu i są wyświetlane jako część eksportu/importu. To samo dotyczy danych adresowych. Następujące nazwy części zostały przypisane zgodnie z nazwami atrybutów technicznych:
-
customerData – Klient
-
invoiceCustomerData – Odbiorca faktury
Poniższe atrybuty występują osobno dla każdego zastosowania.
Wyjaśnienie relacji atrybutów:
Atrybut | Relacja | Opis |
addressData.city |
adres – miasto | |
addressData.country |
addressData.Country | adres – kraj |
addressData.district |
adres – dzielnica | |
addressData.poBox |
adres – skrytka pocztowa | |
addressData.poBoxCity |
adres – skrytka pocztowa: miasto | |
addressData.poBoxPostalCode |
adres – kod pocztowy skrytki pocztowej | |
addressData.postalCode |
adres – kod pocztowy | |
addressData.region |
addressData.Region | adres – region |
addressData.street |
adres – ulica | |
customer |
CustomerPartner | klient Wskazówka dla zastosowań Klient (customerData) i Odbiorca faktury (invoiceCustomerData), atrybut ten nie może zostać zmieniony przez import, jeśli istnieją pozycje zamówienia. W takim przypadku dane w pliku importu są ignorowane. |
careOf |
CareOfPartner | Osoba kontaktowa |
careOfName |
Imię i nazwisko osoby kontaktowej | |
name |
nazwa klienta |
Dane pozycji (pozycje podstawowe i szczegółowe)
Historyczne pozycje zamówień sprzedaży (SalesOrderArchiveDetail)
Atrybut Relacja Objaśnienie
Atrybut | Relacja | Opis |
canceled |
Anulowane | Patrz rozdział: Tworzenie nowych historycznych zleceń sprzedaży |
deliveryCustomerData |
Patrz rozdział: Dane odbiorcy dostawy (deliveryCustomerData) | |
deliveryCustomerData. taxIdentificationNumber |
Identyfikator podatku od sprzedaży odbiorcy dostawy | |
deliveryDate |
Data dostawy | |
deliveryPartnerData.careOf |
CareOfPartner | deliveryPartner: Osoba kontaktowa dostawy |
deliveryPartnerData.careOfName |
deliveryPartner: Imię i nazwisko osoby kontaktowej | |
ean |
Europejski numer artykułu (EAN) – więcej informacji w dokumentacji: Import pozycji przy użyciu numeru EAN | |
guid |
(K) | Identyfikacja techniczna (pozycja) do zmiany lub usunięcia zapisanych danych – jeśli znana |
item |
Pozycja – artykuł | |
number |
(K) | Numer (identyfikacja techniczna), opcjonalny przy nowym tworzeniu – w przeciwnym razie określany automatycznie; obowiązkowy, jeśli identyfikator nie został podany przy zmianie/usunięciu |
preferredDate.value |
Preferowana data | |
priceDimension |
Wymiar ceny | |
priceUom |
Jednostka ceny | |
pseudoItemDescription |
Opis pseudoartykułu – tylko dla pseudoartykułów, dla pozostałych ignorowany | |
purchasingReference |
Odnośnik do zamówienia | |
reference |
Odniesienie | |
storageArea.warehouse |
Magazyn | |
supplier |
SupplierPartner | Dostawca |
totalQuantity.amount |
Całkowita ilość – ilość | |
totalQuantity.uom |
Uom | Całkowita ilość – jednostka miary |
Dane odbiorcy dostawy (deliveryCustomerData)
Dane odbiorcy dostawy są przechowywane w bazie danych jako obiekt biznesowy z kodem skrótu i są wyświetlane jako część eksportu/importu. To samo dotyczy danych adresowych. Nazwa części deliveryCustomerData została przypisana analogicznie do nazwy atrybutu technicznego.
Wyjaśnienie relacji atrybutów:
Atrybut | Relacja | Opis |
addressData.city |
adres – miasto | |
addressData.country |
addressData.Country | adres – kraj |
addressData.district |
adres – dzielnica | |
addressData.poBox |
adres – skrytka pocztowa | |
addressData.poBoxCity |
adres – skrytka pocztowa miasto | |
addressData.poBoxPostalCode |
adres – kod pocztowy skrytki pocztowej | |
addressData.postalCode |
adres – kod pocztowy | |
addressData.region |
addressData.Region | adres – region |
addressData.street |
adres – ulica | |
careOf |
CareOfPartner | osoba kontaktowa |
careOfName |
imię i nazwisko osoby kontaktowej | |
customer | CustomerPartner | klient |
name | nazwa klienta |