OBINumer i FiltrSQL i API i XLWykonajPodanyWydruk

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

KrzysztofKK
Posty: 12
Rejestracja: 19 sie 2018, 23:04
Rola: Administrator CDN XL
Wersja: 2017

OBINumer i FiltrSQL i API i XLWykonajPodanyWydruk

Post autor: KrzysztofKK »

Witam Serdecznie

Jestem w trakcie pisania czegoś w deseń jak automatyczny wydruk dokumentu na wskazaną drukarkę poprzez modelowanie procesów. wygląda to następująco. Tworzę FS w XL i poprzez procesy trafia ona do XL Work tam oczekuje na wykonanie zadania. Proces ma zdefiniowaną akcję - uruchomienie programu zewnętrznego i w parametrach przekazuję poniższy kod :

Kod: Zaznacz cały

<PROGRAM>C:\Program Files (x86)\Comarch ERP XL 2019.3\AutoW\logowanie.exe<\PROGRAM>
<PARAMETRY>@OBINumer<\PARAMETRY>
Program zewnętrzny ma za zadanie zalogować się do XLa, wydrukować dokument na wskazaną drukarkę i zamknąć formatkę. Wszystko pięknie i ładnie ale nie wiem jak przekazać parametr @OBINumer do programu a w szczególności do parametru FiltrSQL ?

Poniżej kod programu i bardzo proszę o pomoc. Z góry dziękuje:

Kod: Zaznacz cały

using System;

using System.Windows.Forms;
using cdn_api;

namespace logowanie
{
    public partial class Form1 : Form
    {
        

        public Form1()
        {
            InitializeComponent();
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            XLLoginInfo_20171 Login = new XLLoginInfo_20171();
            Login.Wersja = 20171;
            Login.ProgramID = "WydrukXL";
            Login.Baza = "TEST";
            Login.OpeIdent = "ADMIN";
            Login.PlikLog = @"d:\cdnxl.log";
            Login.TrybWsadowy = 0;
            Login.OpeHaslo = "1234";
            Int32 SesjaID = 0;
            //Int32 PracownikID = 0;
            int LoginResult = cdn_api.cdn_api.XLLogin(Login, ref SesjaID);


            cdn_api.XLPolaczenieInfo_20171 xlPołączenieInfo = new cdn_api.XLPolaczenieInfo_20171();
            xlPołączenieInfo.Wersja = 20171;
            cdn_api.cdn_api.XLPolaczenie(xlPołączenieInfo);
            String connStr = xlPołączenieInfo.ConnectString;

            cdn_api.XLWydrukInfo_20171 XLWydruk = new cdn_api.XLWydrukInfo_20171();

            string aaa = String.Format("(TrN_GIDTyp=2033 AND TrN_GIDNumer=@OBINumer)");
            

            XLWydruk.Wersja = 20171;
            XLWydruk.Zrodlo = 1;
            XLWydruk.Wydruk = 99;
            XLWydruk.Format = 1;
            XLWydruk.FiltrSQL = aaa;
            XLWydruk.Urzadzenie = 3;  // Inna drukarka
            XLWydruk.NazwaDrukarki = "Biuro";
            //XLWydruk.DrukujDoPliku = 1;
            //XLWydruk.PlikDocelowy = "D:\\plik.pdf";

            int lReturn = cdn_api.cdn_api.XLWykonajPodanyWydruk(XLWydruk);


            if (LoginResult == 0)
            {
                MessageBox.Show("ok");
            }
            else
            {
                MessageBox.Show("problem");
            }

            cdn_api.cdn_api.XLLogout(SesjaID);
            

        }
        private void OpisBłęduAPI(Int32 wersja, Int32 numerFunkcji, Int32 numerBłędu)
        {
            cdn_api.XLKomunikatInfo_20171 xLKomunikatInfo_17 = new cdn_api.XLKomunikatInfo_20171();
            xLKomunikatInfo_17.Funkcja = numerFunkcji;
            xLKomunikatInfo_17.Blad = numerBłędu;
            xLKomunikatInfo_17.Wersja = wersja;
            cdn_api.cdn_api.XLOpisBledu(xLKomunikatInfo_17);
            MessageBox.Show(this, "Funkcja: " + numerFunkcji + "\nBłąd: " + numerBłędu + "\nKomunikat: " + xLKomunikatInfo_17.OpisBledu,
            "Błąd funkcji API", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
}

Awatar użytkownika
viesiek1
Posty: 416
Rejestracja: 03 maja 2011, 18:40
Rola: Administrator CDN XL
Wersja: 2023
Lokalizacja: Bielsko-Biała
Kontakt:

Re: OBINumer i FiltrSQL i API i XLWykonajPodanyWydruk

Post autor: viesiek1 »

Nie wiem czy to masz na myśli, ale pobranie argumentów w programie można zrobić tak:

Kod: Zaznacz cały

    string[] lArgs = Environment.GetCommandLineArgs();

    if (lArgs != null)
    {
        if (lArgs.Length > 1 && lArgs[1] == "waybill")
        {
            gWaybill = true;
        }
    }
Wiesław Świergała

tel: +48 33 829 54 50
e-mail: wieslaw.swiergala@hydro.com.pl

http://www.hydro.com.pl

KrzysztofKK
Posty: 12
Rejestracja: 19 sie 2018, 23:04
Rola: Administrator CDN XL
Wersja: 2017

Re: OBINumer i FiltrSQL i API i XLWykonajPodanyWydruk

Post autor: KrzysztofKK »

Witam Serdecznie i dziękuje za zaangażowanie ale powiem szczerze że nie wiem jak to zastosować w moim kodzie aby otrzymać konkretny GidNumer dla dokumentu FS. To co powyżej napisałem oparłem na wiedzy użytkowników forum i częściowej dokumentacji. We wszystkich przykładach jest podany na sztywno TrN_GIDNumer a w dokumentacji API parametr : FiltrSQL jest wymagany - nie potrafię tego swoim rozumem ogarnąć. Czy byłaby możliwość poprawienia (modyfikacji) mojego kodu ? Bardzo proszę o pomoc. Z góry dziękuje.

KrzysztofKK
Posty: 12
Rejestracja: 19 sie 2018, 23:04
Rola: Administrator CDN XL
Wersja: 2017

Re: OBINumer i FiltrSQL i API i XLWykonajPodanyWydruk

Post autor: KrzysztofKK »

Witam Państwa Serdecznie - chciałbym odgrzebać swój temat ponieważ zagadnienie automatycznego wydruku z API i modelowaniem procesów wraca do mnie jak bumerang - sytuacja ma się następująco (może ktoś się spotkał z takim problemem).

Problem - zamykanie sesji

Opis parametrów dla ilości kopi wynosi = 1 w konfiguracji wydruku w ERP XL a pomimo tego drukują się dwie kopie i jest to chyba związane z problemem zamykania sesji w API . Poniżej kod aplikacji i komentarz logów przykładowy

Kod: Zaznacz cały

SqlConnection conn01 = new SqlConnection("Data Source=172.16.64.2;Initial Catalog=CDNXL;User ID=sa;Password=xxxxxx;MultipleActiveResultSets=true");
string sql01 = "SELECT top 1 [GidWZ] FROM [CDNXL].[dbo].[WWZ] join cdn.tranag on GidWZ=trn_gidnumer where gidtypwz in (2033) 
and TrN_NettoR = 0 and [WydrukWZ]='wydrukowane' and TrN_Url='wydruk_wz_wm' and trn_stan = '6' order by gidwz asc";
                
SqlCommand cmd01 = new SqlCommand(sql01, conn01);
conn01.Open();
SqlDataReader reader01 = cmd01.ExecuteReader();
if (reader01.Read())
{
@obinumer01 = reader01.GetValue(0).ToString();

XLLoginInfo_20220 LoginA = new XLLoginInfo_20220();
LoginA.Wersja = 20220;
LoginA.ProgramID = "Anulowany";
LoginA.Baza = "BAZAXL";
LoginA.OpeIdent = "XL03";
LoginA.PlikLog = @"g:\cdnxl.log";
LoginA.TrybWsadowy = 0;
LoginA.OpeHaslo = "xl03";
Int32 SesjaID = 0;

int LoginResult = cdn_api.cdn_api.XLLogin(LoginA, ref SesjaID);

cdn_api.XLPolaczenieInfo_20220 xlPołączenieInfo = new cdn_api.XLPolaczenieInfo_20220();
xlPołączenieInfo.Wersja = 20220;
cdn_api.cdn_api.XLPolaczenie(xlPołączenieInfo);
String connStr = xlPołączenieInfo.ConnectString;

cdn_api.XLWydrukInfo_20220 XLWydrukA = new cdn_api.XLWydrukInfo_20220();

XLWydrukA.Wersja = 20220;
XLWydrukA.Zrodlo = 0;
XLWydrukA.Wydruk = 81; //numer wydruku ustawić i poszukać
XLWydrukA.Format = 1;
XLWydrukA.FiltrSQL = "(TrN_GIDTyp = 2033 AND TrN_GIDNumer = " + @obinumer01 + ")";
XLWydrukA.Urzadzenie = 3;
XLWydruk.NazwaDrukarki = "RECEPCJA";

int lReturn = cdn_api.cdn_api.XLWykonajPodanyWydruk(XLWydrukA);
cdn_api.cdn_api.XLLogout(SesjaID);

//aktualizacja anulowanego i wydrukowanego dokumentu o wpis - 'anulowany'
SqlConnection connectionup016 = new SqlConnection("Data Source=172.16.64.2;Initial Catalog=CDNXL_AXPOL;User ID=sa;Password=z1x2cvb");
string update016 = "Update [CDNXL].[dbo].[WWZ] SET [WydrukWZ]='anulowany' where [GidWZ]=" + @obinumer01 + "";
SqlCommand commandup016 = new SqlCommand(update016, connectionup016);
connectionup016.Open();

commandup016.ExecuteNonQuery();
connectionup016.Close();
}
conn01.Close();
co jakiś czas w logach pojawia mi się wpis jak poniżej
1 I 27.06.2023 14:02:52 Wykryto aktywne sesje modułu X:Anulowany uruchomione na tym komputerze.|Czy chcesz usunąć informacje zapisane przez te sesje?
2 I 27.06.2023 14:02:52 Program wykrył, że poprzednia sesja programu X:Anulowany na którym pracował operator DRUKXL nie została poprawnie zakończona.|Informacja o tym fakcie została zapisana dla wiadomości Administratora.
W jaki sposób powinna zostać zamknięta sesja - według dokumentacji chyba mam ok w kodzie - bardzo proszę o pomoc w rozwiązaniu problemu z góry dziękuje.

ODPOWIEDZ