ApiAutomator przykład 1 - automat do tworzenia zamówień zakupu

Program do automatyzacji pracy administratora i użytkowników systemu ERP XL
Awatar użytkownika
mikey
Site Admin
Posty: 97
Rejestracja: 25 lis 2007, 23:42
Rola: Administrator CDN XL
Wersja: 2016
Lokalizacja: Wielkopolska

ApiAutomator przykład 1 - automat do tworzenia zamówień zakupu

Post autor: mikey »

Pierwszy przykład jest niestety mało "biznesowy" ... nikt nie wystawia losowych zamówień, ale w kolejnych etapach przyda nam się rozbudowana baza danych, szczególnie przy automatyzacji sprzedaży będą wymagane stany magazynowe, dlatego zaczynam od dokumentów ZZ.
Jest to rozszerzona wersja podanego w Dokumentacji rozwiązania, którego zadaniem jest stworzenie wielu zamówień, które wykorzystamy na kolejnych etapach poznawania programu.
W tym przykładzie nie korzystamy jeszcze z zewnętrzych systemów, wykorzystamy nasz serwer SQL do wygenerowania losowych zamówień o losowej ilości pozycji.
Poniższa Procedura Danych wybiera losowo klienta i listę towarów, ZZ jest zamykany w Trybie=2 czyli - potwierdzony.
Procedura to tak naprawdę tylko 3 selecty, z czego
  • pierwszy zwraca jeden wiersz - nagłówek zamówienia
  • drugi zwraca kilka losowych (do 50) - pozycji zamówienia
  • ostatni zwraca wiersz z komendą zamknięcia zamówienia

Kod: Zaznacz cały

create procedure [aa].[RandomZZDane] @Gid int = 0
as
begin

declare @MagNr int; /* zmienna - losowy magazyn */
declare @KliNr int; /* zmienna - losowy klient */
declare @RndNr int; /* zmienna - losowa ilość pozycji */

select	top 1 @MagNr=mag_gidnumer from cdn.magazyny order by newid();/* wybór - losowy magazyn */
select	top 1 @KliNr=knt_gidnumer from cdn.kntkarty order by newid(); /* wybór - losowy klient */
set @RndNr = abs(checksum(newid()) % 50) + 1;  /* wybór - losowa ilość pozycji */

	-- **************** nagłówek ****************	
select
	top 1
	'XLNowyDokumentZam' as _komenda, /* _komenda API którą trzeba wywołać */
	5 as Typ, /* 1-Zapytanie na zakup, 2-Zapytanie na sprzedaż, 3-Oferta zakupu, 4-Oferta sprzedaży, 5-Zamówienie na zakup, 6-Zamówienie na sprzedaż*/
	knt_gidtyp as KntTyp,
	knt_gidnumer as KntNumer,
	mag_kod as Magazyn
from
	cdn.kntkarty
inner join
	cdn.magazyny
on
	knt_gidnumer=@KliNr and
	mag_gidnumer=@MagNr
	-- **************** pozycje ****************
select
	top (@RndNr)
	'XLDodajPozycjeZam' as _komenda, /* _komenda API którą trzeba wywołać */
	format(abs(checksum(newid()) % 240) + 12,'G','pl-PL') as Ilosc,
	format(TwC_Wartosc,'G','pl-PL') as Cena,
	twr_gidtyp as TwrTyp,
	twr_gidnumer as TwrNumer
from
	cdn.twrkarty
inner join
	cdn.twrceny
on
	TwC_TwrNumer = Twr_GIDNumer
where
	twc_twrlp=1 and
	twc_wartosc > 0 /* wybieraj tylko te towary, które mają zdefiniowaną cenę zakupu */
order by
	newid()
	-- **************** zamknięcie ****************
select
	'XLZamknijDokumentZam' as _komenda, /* _komenda API którą trzeba wywołać */
	2 as TrybZamkniecia
end
ApiAutomator uruchamiam z takimi parametrami zapisanymi w skrypcie przetwarzaj.bat (należy je oczywiście zamienić na odpowiednie dla Waszej instalacji):

Kod: Zaznacz cały

 @echo off                                                                           
 chcp 1250                                                                           
 aa.exe --zrodlo=n:1,aa.TestoweZZDane ^                                              
         --dbUser=sa ^                                                               
         --dbPass=aaaaaa ^                                                           
         --cdnName=3lance ^                                                          
         --cdnLogin=ADMIN ^                                                          
         --cdnPass="" ^                                                              
         --dbString="DRIVER={SQL Server};Server=cdnsrv\ex14;Database=ERPXL_3lance" ^ 
         --logFile=test.log                                                          
i jeszcze wyjaśnienie dla komendy chpc 1250 - to komenda windowsa, która ustawia w konsoli stronę kodową win-1250, potrzebne jeśli w konsoli nie pojawiają się polskie znaki.
Efektem działania skryptu jest wystawienie dokumentu ZZ na 8 pozycji:
Efekt uruchomienia programu ApiAutomator
Efekt uruchomienia programu ApiAutomator
Program i przykładową bazę danych można ściągnąć tutaj: https://github.com/xl-tools/ApiAutomato ... a/releases

Awatar użytkownika
mikey
Site Admin
Posty: 97
Rejestracja: 25 lis 2007, 23:42
Rola: Administrator CDN XL
Wersja: 2016
Lokalizacja: Wielkopolska

Re: ApiAutomator przykład 1 - automat do tworzenia zamówień zakupu

Post autor: mikey »

W przykładzie tym, dodajemy jedno zamówienie, przez jedno wywołanie ApiAutomatora w pliku przetwarzaj.bat.
Aby obsłużyć kilka zamówień jednocześnie, stworzymy prostą Procedurę Kolejki, która zwraca 25 poleceń, czyli pozwoli nam stworzyć 25 zamówień w jednym przebiegu.

Kod: Zaznacz cały

create procedure aa.RandomZZKolejka
as
begin
if OBJECT_ID('tempdb..##Kolejka') is null create table ##Kolejka (nr int);	
insert into ##Kolejka values(1);
declare @liczba as int;
select @liczba=count(*) from ##Kolejka;
select 
	case when @liczba > 25 then 25 else @liczba end as gid,
	'aa.RandomZZDane' as procedura;
end
Procedura ta zwraca za każdym wywołaniem jeden wiersz z nazwą Procedury Danych
W celu przekazania do AA by posługiwał się procedurą kolejki, zmieniamy jeden parametr wywołania (--zrodlo) tak by wskazywało nazwę tej procedury (--zrodlo=p:aa.RandomZZKolejka). Wywołanie AA może wyglądać następująco (przetwarzaj3.bat)

Kod: Zaznacz cały

@echo off
chcp 1250
aa.exe --zrodlo=p:aa.RandomZZKolejka --dbUser=sa  --dbPass=aaaaaa  --cdnName=3lance  --cdnLogin=ADMIN  --cdnPass=""  --dbString="DRIVER={SQL Server};Server=cdnsrv\ex14;Database=ERPXL_3lance"  --logFile=test.log --logInfo="*.*=false;*.info=true"
źródła skryptów dostępne są tutaj
bazę danych zawierającą podstawowe dane przydatne do testowania funkcjonalności można pobrać tutaj

ODPOWIEDZ