Ereçete Gönderimi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Ereçete Gönderimi

Mesaj gönderen NewMember »

Arkadaşlar merhaba;
Yazılımımızda e reçete gönderimlerini normalde c# ile yazılmış bir uygulamadan gönderiyoruz.Ancak bir yazılımımızda delphiden göndermemiz gerekti.
Aşağıda kod örneği var.
Ama Showmessage den sonra access violation veriyor.Sanırım cevap nesnesi oluşmuyor.Yani gönderim oluşmuyor.
Bu konuyla ilgilenen arkadaşlardan yardım bekliyuorum.Örnekte imzası gönderim mevcut.Şimdilik bu yeterli.

Yardım edecek arkadaşlara şimdiden teşekkürler.

Not:TLS 1.2 ayarını delphi den yapılacak bir kod yada properties bulamadım.Ama gönderim yaptığımız pc windows 10.İnternet explorer seçeneklerinden sadece TLS 1.2 kullan işaretledik.

Kod: Tümünü seç

procedure TForm1.btnReceteGonderClick(Sender: TObject);
var
  Servis: SaglikTesisiReceteIslemleri;
  ReceteGondermeIstek: ereceteGirisIstekDVO;
  IlacListesi: Array_Of_ereceteIlacDVO;
  Sonuc: ereceteGirisResponse;
  EreceteGirisNesnesi: ereceteGiris;
  Ilac1, Ilac2: ereceteIlacDVO;
  Recete: ereceteDVO;
  cevap: ereceteGirisCevapDVO;
  UserName: string;
  Parola: string;
  TesisKodu: integer;
  doktorTcNo: integer;
  TcNo: integer;
const
  ReceteIslemleriServiceWS = 'https://medeczane.sgk.gov.tr/medula/eczane/saglikTesisiReceteIslemleriWS';
begin
  UserName := 'XXX';  //Gerçekte doğru bilgiler gönderiliyor.
  TesisKodu := 12345;//Gerçekte doğru bilgiler gönderiliyor.
  Parola := 'XXXX';//Gerçekte doğru bilgiler gönderiliyor.
  doktorTcNo := 12345;//Gerçekte doğru bilgiler gönderiliyor.
  TcNo := 12345;//Gerçekte doğru bilgiler gönderiliyor.

  HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := UserName; 
  HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Parola; 
  HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;

  Servis := GetSaglikTesisiReceteIslemleri(False, ReceteIslemleriServiceWS, HTTPRIO1);


  Ilac1 := ereceteIlacDVO.Create;

  Ilac1.adet := 1;
  Ilac1.barkod := 8699522095605;
  Ilac1.ilacAdi := 'AUGMENTIN BID 625 MG 14 FILMTABLET';
  Ilac1.kullanimDoz1 := 1;
  Ilac1.kullanimDoz2 := 1;
  Ilac1.kullanimPeriyotBirimi := 3;
  Ilac1.kullanimSekli := 1;
  Ilac1.kullanimPeriyot := 1;

  IlacListesi := [Ilac1];
  ReceteGondermeIstek := ereceteGirisIstekDVO.Create;


  ReceteGondermeIstek.doktorTcKimlikNo := doktorTcNo;
  ReceteGondermeIstek.tesisKodu := TesisKodu;

  Recete := ereceteDVO.Create;
  Recete.doktorBransKodu := 9999;

  Recete.doktorTcKimlikNo := doktorTcNo;
  Recete.tcKimlikNo := TcNo;
  Recete.receteAltTuru := 1;
  Recete.receteTuru := 1;
  Recete.tesisKodu := TesisKodu;
  Recete.takipNo := '0';
  
  Recete.ereceteIlacListesi := IlacListesi;
 
  ReceteGondermeIstek.ereceteDVO := Recete;
 
  EreceteGirisNesnesi := ereceteGiris.Create;
  EreceteGirisNesnesi.arg0 := ReceteGondermeIstek;
  Sonuc := Servis.ereceteGiris(EreceteGirisNesnesi);


  cevap := ereceteGirisCevapDVO.Create;
  cevap := Sonuc.ereceteGirisReturn;
  ShowMessage('1');
  ShowMessage(Cevap.sonucKodu);
  ShowMessage(Cevap.sonucMesaji);
end;
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Ereçete Gönderimi

Mesaj gönderen ertank »

Merhaba, kullandığınız wsdl den üretilmiş pas dosyasını da paylaşabilir misiniz?
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Ereçete Gönderimi

Mesaj gönderen NewMember »

Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Ereçete Gönderimi

Mesaj gönderen NewMember »

Pardon yanlış wdsl göndermişim.
Reçete işlemleri pas aşağıda...

saglikTesisiReceteIslemleriWS.pas - 204 KB
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Ereçete Gönderimi

Mesaj gönderen ertank »

Borçok farklı alternatif denedim. Kişi bilgisi gönderilmediğini farkettim ve ekledim ancak "Sonuc.ereceteGirisReturn" bilgisi her zaman NULL olarak dönüyor.

Bu durumda aklıma gelen web servis ile ilgili dökümanı incelemek. Bir ihtimal eksik bilgi gönderildiği için cevap gelmiyor olabilir. Dışarıdan yapılabilecek sızma vs karşı önlem almak adına hata mesajı döndürmüyor olabilir sistem.

Ben kullanmıyorum, ancak SOAPUI ile denemeler yaparak çalışan bir XML tespit edebilirseniz Fidler ile kendi gönderdiğiniz XML dosyasını inceleyip aradaki farkları bularak sonuca ulaşmanız mümkün olabilir.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Ereçete Gönderimi

Mesaj gönderen NewMember »

@ertank ilgilendiğiniziçin gerçekten minnettarım.Doğru şekilde giden xmli c# exeden gidendan alabilirim.
Tamamen bu konuda yetersiz olduğumdan soruyorum.Bu HTTPRIO ile gönderdiğim XML i nasıl alabilirim.Bu konuda da yardımcı olabilirseniz çok memnun olurum.
Birde kişi bilgisi gitmiyor demişsiniz ya.Onun haricinde kodda eksik yada düzeltilmesi gereken bir yer varmıdır?
Teşekkürler...
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Ereçete Gönderimi

Mesaj gönderen csunguray »

HTTPRIO1 bileşeninde gönderilen XML i nasıl görüntüleriz?
viewtopic.php?t=30636
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Ereçete Gönderimi

Mesaj gönderen ertank »

Benim kullandığım kod aşağıdaki gibi:

Kod: Tümünü seç

var
  Servis: SaglikTesisiReceteIslemleri;
  IlacListesi: Array_Of_ereceteIlacDVO;
  TaniListesi: Array_Of_ereceteTaniDVO;
  AciklamaListesi: Array_Of_ereceteAciklamaDVO;
  Sonuc: ereceteGirisResponse;
  EreceteGirisNesnesi: ereceteGiris;
  UserName: string;
  Parola: string;
  TesisKodu: integer;
  doktorTcNo: integer;
  TcNo: integer;
const
  ReceteIslemleriServiceWS = 'https://medeczane.sgk.gov.tr/medula/eczane/saglikTesisiReceteIslemleriWS';
begin
  UserName := 'XXX';  //Gerçekte doğru bilgiler gönderiliyor.
  TesisKodu := 12345;//Gerçekte doğru bilgiler gönderiliyor.
  Parola := 'XXXX';//Gerçekte doğru bilgiler gönderiliyor.
  doktorTcNo := 12345;//Gerçekte doğru bilgiler gönderiliyor.
  TcNo := 12345;//Gerçekte doğru bilgiler gönderiliyor.

  HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := UserName;
  HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Parola;
  HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;

  Servis := GetSaglikTesisiReceteIslemleri(False, ReceteIslemleriServiceWS, HTTPRIO1);

  Sonuc := nil;
  EreceteGirisNesnesi := ereceteGiris.Create;
  try
    EreceteGirisNesnesi.arg0 := ereceteGirisIstekDVO.Create;
    EreceteGirisNesnesi.arg0.doktorTcKimlikNo := doktorTcNo;
    EreceteGirisNesnesi.arg0.tesisKodu := TesisKodu;
    EreceteGirisNesnesi.arg0.ereceteDVO := ereceteDVO.Create;
    EreceteGirisNesnesi.arg0.ereceteDVO.doktorBransKodu := 9999;
    EreceteGirisNesnesi.arg0.ereceteDVO.doktorTcKimlikNo := doktorTcNo;
    EreceteGirisNesnesi.arg0.ereceteDVO.tcKimlikNo := TcNo;
    EreceteGirisNesnesi.arg0.ereceteDVO.receteAltTuru := 1;
    EreceteGirisNesnesi.arg0.ereceteDVO.receteTuru := 1;
    EreceteGirisNesnesi.arg0.ereceteDVO.tesisKodu := TesisKodu;
    EreceteGirisNesnesi.arg0.ereceteDVO.takipNo := '0';

    EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO := kisiDVO.Create();
    EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO.adi := 'testad';
    EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO.cinsiyeti := 'E';
    EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO.dogumTarihi := '1982-01-01';
    EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO.soyadi := 'testsoyad';
    EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO.tcKimlikNo := 1;

    SetLength(IlacListesi, 1);
    IlacListesi[0] := ereceteIlacDVO.Create();
    IlacListesi[0].adet := 1;
    IlacListesi[0].barkod := 8699522095605;
    IlacListesi[0].ilacAdi := 'AUGMENTIN BID 625 MG 14 FILMTABLET';
    IlacListesi[0].kullanimDoz1 := 1;
    IlacListesi[0].kullanimDoz2 := 1;
    IlacListesi[0].kullanimPeriyotBirimi := 3;
    IlacListesi[0].kullanimSekli := 1;
    IlacListesi[0].kullanimPeriyot := 1;
    EreceteGirisNesnesi.arg0.ereceteDVO.ereceteIlacListesi := IlacListesi;

    SetLength(TaniListesi, 0);
    // Boş tanı listesi gönderiliyor
    EreceteGirisNesnesi.arg0.ereceteDVO.ereceteTaniListesi := TaniListesi;

    SetLength(AciklamaListesi, 0);
    // Boş açıklama listesi gönderiliyor
    EreceteGirisNesnesi.arg0.ereceteDVO.ereceteAciklamaListesi := AciklamaListesi;

    Sonuc := Servis.ereceteGiris(EreceteGirisNesnesi);
    if (Sonuc <> nil) and (Sonuc.ereceteGirisReturn <> nil) then
    begin
      ShowMessage('sonuc kodu:  ' + Sonuc.ereceteGirisReturn.sonucKodu + sLineBreak +
                  'sonuc mesaji:' + Sonuc.ereceteGirisReturn.sonucMesaji);
    end
    else
    begin
      ShowMessage('Sonuc NULL');
    end;
  finally
    IlacListesi[0].Free();
    EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO.Free();
    Sonuc.Free();
  end;
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Ereçete Gönderimi

Mesaj gönderen NewMember »

İlk gönderdiğim kodda eksikler varmış.
Düzelttim.
Kodun son hali:

Kod: Tümünü seç

 HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := UserName;
  HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Parola;
  HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;

  Servis := GetSaglikTesisiReceteIslemleri(False, ReceteIslemleriServiceWS, HTTPRIO1);

  //1.İlaç Nesnesini Oluştur İstersen Her ilaç için 1 nesne oluşturmalısın
  Ilac1 := ereceteIlacDVO.Create;
  //Bilgilerini Gir
  Ilac1.adet := 1;
  Ilac1.barkod := 8699522095605;
  Ilac1.ilacAdi := 'AUGMENTIN BID 625 MG 14 FILMTABLET';
  Ilac1.kullanimDoz1 := 1;
  Ilac1.kullanimDoz2 := 1;
  Ilac1.kullanimPeriyotBirimi := 3;
  Ilac1.kullanimSekli := 1;
  Ilac1.kullanimPeriyot := 1;
  //İlaç 1 i İlaçListesi nesnesinin içine gönder
  IlacListesi := [Ilac1];
  //Reçete Göndermek İçin Nesne Oluştur
  ReceteGondermeIstek := ereceteGirisIstekDVO.Create;

  //1.Tanı nesnesini oluştur ve Bilgilerini Gir Her Tanı İçin ayrı Bir Nesne Oluşturmalısın.
  Tani:=ereceteTaniDVO.Create;
  tani.taniKodu:='J03.9';
  //1.Tanıyı TanıListesi nesnesinin içine gönder...
  TaniListesi:=[Tani];

  ReceteGondermeIstek.doktorTcKimlikNo := doktorTcNo;
  ReceteGondermeIstek.tesisKodu := TesisKodu;

  Recete := ereceteDVO.Create;
  Recete.doktorBransKodu := 9999;
  Recete.doktorTcKimlikNo := doktorTcNo;
  Recete.tcKimlikNo := TcNo;
  Recete.receteAltTuru := 1;
  Recete.receteTuru := 1;
  Recete.protokolNo:='156';
  Recete.receteTarihi:='29.03.2018';
  Recete.tesisKodu := TesisKodu;
  Recete.takipNo := '0';
  //Reçeteye Tanı Bilgisini Ver
  Recete.ereceteTaniListesi:=TaniListesi;
  //Reçeteye İlaç Listesi Bilgisini Ver
  Recete.ereceteIlacListesi:=ilaclistesi;

  ReceteGondermeIstek.ereceteDVO := Recete;
  EreceteGirisNesnesi := ereceteGiris.Create;
  EreceteGirisNesnesi.arg0 := ReceteGondermeIstek;
  Sonuc := Servis.ereceteGiris(EreceteGirisNesnesi);

  cevap := ereceteGirisCevapDVO.Create;
  cevap := Sonuc.ereceteGirisReturn;

  ShowMessage(Cevap.sonucKodu);
  ShowMessage(Cevap.sonucMesaji);

OnBefore

Kod: Tümünü seç

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding">
<SOAP-ENV:Body xmlns:NS1="http://servisler.ws.eczane.gss.sgk.gov.tr" SOAP-ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<NS1:ereceteGiris><parameters SOAP-ENC:id="1" xsi:type="NS1:ereceteGiris"><arg0 SOAP-ENC:id="2" xsi:type="NS1:ereceteGirisIstekDVO">
<ereceteDVO SOAP-ENC:id="3" xsi:type="NS1:ereceteDVO">
<protokolNo xsi:type="xsd:string">156</protokolNo>
<provizyonTipi xsi:type="xsd:int">0</provizyonTipi>
<receteAltTuru xsi:type="xsd:int">1</receteAltTuru>
<receteTarihi xsi:type="xsd:string">29.03.2018</receteTarihi>
<receteTuru xsi:type="xsd:int">1</receteTuru>
<takipNo xsi:type="xsd:string">0</takipNo>
<tcKimlikNo xsi:type="xsd:long">685258514</tcKimlikNo>
<tesisKodu xsi:type="xsd:int">11349903</tesisKodu>
<doktorBransKodu xsi:type="xsd:int">9999</doktorBransKodu>
<doktorSertifikaKodu xsi:type="xsd:int">0</doktorSertifikaKodu>

<item SOAP-ENC:id="4" xsi:type="NS1:ereceteIlacDVO">
<adet xsi:type="xsd:int">1</adet>
<barkod xsi:type="xsd:long">8699522095605</barkod>
<ilacAdi xsi:type="xsd:string">AUGMENTIN BID 625 MG 14 FILMTABLET</ilacAdi>
<kullanimDoz1 xsi:type="xsd:int">1</kullanimDoz1>
<kullanimPeriyotBirimi xsi:type="xsd:int">3</kullanimPeriyotBirimi>
<kullanimSekli xsi:type="xsd:int">1</kullanimSekli>
<kullanimDoz2 xsi:type="xsd:double">1</kullanimDoz2>
<kullanimPeriyot xsi:type="xsd:int">1</kullanimPeriyot>
</item>

<item SOAP-ENC:id="5" xsi:type="NS1:ereceteTaniDVO">
<taniKodu xsi:type="xsd:string">J03.9</taniKodu>
</item>

<doktorTcKimlikNo xsi:type="xsd:long">45245265</doktorTcKimlikNo>
</ereceteDVO>
<tesisKodu xsi:type="xsd:int">11349903</tesisKodu>
<doktorTcKimlikNo xsi:type="xsd:long">45245265</doktorTcKimlikNo>
</arg0></parameters></NS1:ereceteGiris></SOAP-ENV:Body></SOAP-ENV:Envelope>

OnAfter

Kod: Tümünü seç

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Header/><soapenv:Body><ns2:ereceteGirisResponse xmlns:ns2="http://servisler.ws.eczane.gss.sgk.gov.tr"><ereceteGirisReturn><sonucKodu>9999</sonucKodu><sonucMesaji>Sistemde beklenmeyen bir hata olustu Detay: Sistem Hatasi</sonucMesaji></ereceteGirisReturn></ns2:ereceteGirisResponse></soapenv:Body></soapenv:Envelope>

XML Bu şekilde dönüyor.

TCler doğru.Bilinçli değiştirdim.Ancak burda username ve parola yok.Olması gerekiyromuydu?

Sonuç aynı.Yine aynı.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Ereçete Gönderimi

Mesaj gönderen csunguray »

Security Header kullanmıyor musunuz?
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Ereçete Gönderimi

Mesaj gönderen ertank »

Geriye dönen XML içinde "sonucKodu" ve "sonucMesaji" bilgileri mevcut.
1- Acaba oluşturduğunuz WSDL dosyasında bir sorun olabilir mi?
2- Kullandığınız Delphi sürümü nedir?
3- Create edilen nesnelerin bazılarını manuel olarak Free etmelisiniz. Yoksa hafıza kaçağı oluşur. Nitekim sizin kodunuzda hafıza kaçakları mevcut.
4- C# ile aynı bilgileri kullandığınızda giden XML bilgisini de paylaşabilir misiniz?
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Ereçete Gönderimi

Mesaj gönderen NewMember »

1.WDSL dosyasını manuel olarak import ettim.Google gruplarda bu konuda epey bir yazışma var.Muhtemelen görmüşsünüzdür.Direkt olarak siteden import etmiyor.İndirip pc den import ediyorum.
2.XE 10
3.Free işleminide yaptım ama sonuç değişmedi.
4.C# projesi sadece exe.Biz o exeye kendi oluşturduğumuz xmli gönderiyoruz.(Delphiden) O exe parse edip gönderiyor.Dolayısıyla c# tan türetilen xmli görme şansım maalesef yok.

İlginiz için tekrar teşekkür ederim...
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Ereçete Gönderimi

Mesaj gönderen csunguray »

Kendi programımdan örnek kod. Sizlerin sorunu büyük ihtimalle Security Header kullanmıyor olmanız. Bunun için daha önce paylaşmış olduğum WSSE_SGK.pas dosyasını kullanmanız gerekli. (https://groups.google.com/forum/#!msg/s ... Lto-iHXG4J bağlantısında var.)

Kod: Tümünü seç

procedure TFormReceteler.ActionMedulayaGonderExecute(Sender: TObject);
var
  Servis  : SaglikTesisiReceteIslemleri;
  Giris   : EreceteGirisIstekDVO;
  Sonuc   : EreceteGirisCevapDVO;
const
  WS_URL = 'https://medeczane.sgk.gov.tr/medula/eczane/saglikTesisiReceteIslemleriWS';

  function GetIlacAckList: Array_Of_ereceteIlacAciklamaDVO;
  var
    Sayac: Integer;
  begin
    try
      QIlacAciklama.Filter := 'SATIR_REF = ' + IntToSTr(QIlaclar.FieldByName('REF').AsInteger);
      QIlacAciklama.Filtered := True;
      Sayac := 0;
      SetLength(Result, Sayac);
      QIlacAciklama.First;
      while not QIlacAciklama.Eof do
      begin
        Inc(Sayac);
        SetLength(Result, Sayac);
        Result[Sayac - 1] := EreceteIlacAciklamaDVO.Create;
        Result[Sayac - 1].aciklamaTuru := QIlacAciklama.FieldByName('ACIKLAMA_TURU').AsInteger;
        Result[Sayac - 1].aciklama := QIlacAciklama.FieldByName('ACIKLAMA').AsString;
        QIlacAciklama.Next;
      end;
    finally
      QIlacAciklama.Filtered := False;
    end;
  end;

  function GetIlacList: Array_Of_ereceteIlacDVO;
  var
    Sayac: Integer;
  begin
    Sayac := 0;
    SetLength(Result, Sayac);
    QIlaclar.First;
    while not QIlaclar.Eof do
    begin
      Inc(Sayac);
      SetLength(Result, Sayac);
      Result[Sayac - 1] := EreceteIlacDVO.Create;
      Result[Sayac - 1].adet := QIlaclar.FieldByName('ADET').AsInteger;
      Result[Sayac - 1].barkod := StrToInt64(QIlaclar.FieldByName('KOD').AsString);
      Result[Sayac - 1].ilacAdi := QIlaclar.FieldByName('ACIKLAMA').AsString;
      Result[Sayac - 1].kullanimDoz1 := QIlaclar.FieldByName('KULLANIM_DOZ1').AsInteger;
      Result[Sayac - 1].kullanimPeriyotBirimi := QIlaclar.FieldByName('KULLANIM_PERIYOT_BIRIMI').AsInteger;
      Result[Sayac - 1].kullanimSekli := QIlaclar.FieldByName('KULLANIM_SEKLI').AsInteger;
      Result[Sayac - 1].ereceteIlacAciklamaListesi := GetIlacAckList;
      Result[Sayac - 1].kullanimDoz2 := QIlaclar.FieldByName('KULLANIM_DOZ2').AsFloat;
      Result[Sayac - 1].kullanimPeriyot := QIlaclar.FieldByName('KULLANIM_PERIYOT').AsInteger;
      Result[Sayac - 1].geriOdemeKapsaminda := QIlaclar.FieldByName('GERI_ODEME_KAPSAMINDA').AsString;
      QIlaclar.Next;
    end;
  end;

  function GetTaniList: SaglikTesisiReceteIslemleriWS.Array_Of_ereceteTaniDVO;
  var
    Sayac: Integer;
  begin
    Sayac := 0;
    SetLength(Result, Sayac);
    QTanilar.First;
    while not QTanilar.Eof do
    begin
      Inc(Sayac);
      SetLength(Result, Sayac);
      Result[Sayac - 1] := SaglikTesisiReceteIslemleriWS.EreceteTaniDVO.Create;
      Result[Sayac - 1].taniKodu := QTanilar.FieldByName('KOD').AsString;
      Result[Sayac - 1].taniAdi := QTanilar.FieldByName('ACIKLAMA').AsString;
      QTanilar.Next;
    end;
  end;

  function GetReceteAck: Array_Of_ereceteAciklamaDVO;
  var
    Sayac: Integer;
  begin
    Sayac := 0;
    SetLength(Result, Sayac);
    QReceteAciklama.First;
    while not QReceteAciklama.Eof do
    begin
      Inc(Sayac);
      SetLength(Result, Sayac);
      Result[Sayac - 1] := EreceteAciklamaDVO.Create;
      Result[Sayac - 1].aciklamaTuru := QReceteAciklama.FieldByName('ACIKLAMA_TURU').AsInteger;
      Result[Sayac - 1].aciklama := QReceteAciklama.FieldByName('ACIKLAMA').AsString;
      QReceteAciklama.Next;
    end;
  end;

begin
  Screen.Cursor := crSQLWait;
  try
    if QRecete.FieldByName('ERECETE_NO').AsString > '' then raise Exception.Create('Bu reçete zaten medulaya gönderilmiş!');
    if QRecete.FieldByName('DR_TCKIMLIK').AsString = '' then raise Exception.Create('Doktorun TC kimlik numarası girilmemiş!');
    if QRecete.FieldByName('DR_ERECETE_SIFRE').AsString = '' then raise Exception.Create('Doktorun e-reçete şifresi girilmemiş!');
    if QRecete.FieldByName('DR_BRANS').AsString = '' then raise Exception.Create('Doktorun branşı girilmemiş!');
    DetayYukle; // Burada reçeteye ait satır kayıtları (İlaç, tanı vs.) okunuyor
    HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := QRecete.FieldByName('DR_TCKIMLIK').AsString;
    HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := QRecete.FieldByName('DR_ERECETE_SIFRE').AsString;
    HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;

    Giris := nil;
    Sonuc := nil;

    Servis := GetSaglikTesisiReceteIslemleri(False, WS_URL, HTTPRIO1);
    Giris  := EreceteGirisIstekDVO.Create;

    Giris.tesisKodu  := CurrentParam.M3_Tesis_Kodu;

    Giris.doktorTcKimlikNo  := StrToInt64Def(QRecete.FieldByName('DR_TCKIMLIK').AsString, -1);
    Giris.ereceteDVO  := EreceteDVO.Create;
    Giris.ereceteDVO.protokolNo := QRecete.FieldByName('DEFTER_KAYIT_NO').AsString;
    Giris.ereceteDVO.provizyonTipi := QRecete.FieldByName('PROVIZYON_TIPI').AsInteger;
    Giris.ereceteDVO.receteAltTuru := QRecete.FieldByName('RECETE_ALT_TURU').AsInteger;
    Giris.ereceteDVO.receteTarihi := FormatDateTime('dd.mm.yyyy', QRecete.FieldByName('RECETE_TARIHI').AsDateTime);
    Giris.ereceteDVO.receteTuru := QRecete.FieldByName('RECETE_TURU').AsInteger;
    Giris.ereceteDVO.takipNo := QRecete.FieldByName('MEDULA_TAKIP_NO').AsString;
    Giris.ereceteDVO.tcKimlikNo := StrToInt64Def(QRecete.FieldByName('TCKIMLIK').AsString, -1);
    Giris.ereceteDVO.tesisKodu := CurrentParam.M3_Tesis_Kodu;
    Giris.ereceteDVO.seriNo := QRecete.FieldByName('SERI_NO').AsString;
    Giris.ereceteDVO.doktorBransKodu := QRecete.FieldByName('DR_BRANS').AsInteger;
    Giris.ereceteDVO.doktorSertifikaKodu := QRecete.FieldByName('SERTIFIKA_KODU').AsInteger;
    Giris.ereceteDVO.kisiDVO := KisiDVO.Create;
    Giris.ereceteDVO.kisiDVO.adi := QRecete.FieldByName('HASTA_ADI').AsString;
    Giris.ereceteDVO.kisiDVO.cinsiyeti := QRecete.FieldByName('CINSIYET').AsString;
    Giris.ereceteDVO.kisiDVO.dogumTarihi := FormatDateTime('dd.mm.yyyy', QRecete.FieldByName('DOGTRH').AsDateTime);
    Giris.ereceteDVO.kisiDVO.soyadi := QRecete.FieldByName('HASTA_SOYADI').AsString;
    Giris.ereceteDVO.kisiDVO.tcKimlikNo := StrToInt64Def(QRecete.FieldByName('TCKIMLIK').AsString, -1);
    //Giris.ereceteDVO.ereceteNo := '';
    Giris.ereceteDVO.ereceteIlacListesi := GetIlacList;
    Giris.ereceteDVO.ereceteTaniListesi := GetTaniList;
    Giris.ereceteDVO.ereceteAciklamaListesi := GetReceteAck;
    Giris.ereceteDVO.doktorAdi := QRecete.FieldByName('DR_ADI').AsString;
    Giris.ereceteDVO.doktorSoyadi := QRecete.FieldByName('DR_SOYADI').AsString;
    Giris.ereceteDVO.doktorTcKimlikNo := StrToInt64Def(QRecete.FieldByName('DR_TCKIMLIK').AsString, -1);
    // Giris.ereceteDVO.yatanHastaOnayiBekliyor := '';
    // Giris.ereceteDVO.ehuOnayiBekliyor := '';

    SetSecurityHeader2(Servis, QRecete.FieldByName('DR_TCKIMLIK').AsString, QRecete.FieldByName('DR_ERECETE_SIFRE').AsString);
    try
      Sonuc := Servis.ereceteGiris(Giris);
    except
      on E: Exception do
      begin
        ShowMessage('HATA OLUŞTU: '+ E.Message); // Exception'ın ürettiği mesajı görüntüle
        raise;
      end;
    end;
    if StrToIntDef(Sonuc.sonucKodu, -1) <> 0 then
    begin
      raise Exception.Create('MEDULA: (' + Sonuc.sonucKodu + ') ' + Sonuc.sonucMesaji);
    end;

    KayitGuncelle; // Burada veritabanı güncellenecek
    ShowMessage('Reçete medulaya gönderildi!');
  finally
    Screen.Cursor := crDefault;
    if Giris <> nil then Giris.Free;
    if Sonuc <> nil then Sonuc.Free;
  end;
end;

En son csunguray tarafından 30 Mar 2018 06:47 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Ereçete Gönderimi

Mesaj gönderen ertank »

csunguray yazdı: 30 Mar 2018 09:36

Kod: Tümünü seç

    Giris.ereceteDVO.kisiDVO := KisiDVO.Create;  // ilk kullanım
    Giris.ereceteDVO.kisiDVO.adi := QRecete.FieldByName('HASTA_ADI').AsString;
    Giris.ereceteDVO.kisiDVO.cinsiyeti := QRecete.FieldByName('CINSIYET').AsString;
    Giris.ereceteDVO.kisiDVO.dogumTarihi := FormatDateTime('dd.mm.yyyy', QRecete.FieldByName('DOGTRH').AsDateTime);
    Giris.ereceteDVO.kisiDVO.soyadi := QRecete.FieldByName('HASTA_SOYADI').AsString;
    Giris.ereceteDVO.kisiDVO.tcKimlikNo := StrToInt64Def(QRecete.FieldByName('TCKIMLIK').AsString, -1);
    //Giris.ereceteDVO.ereceteNo := '';
    Giris.ereceteDVO.kisiDVO := KisiDVO.Create; // ikinci kullanım
Merhaba, bilgi ve paylaşım için teşekkürler.

Örnek kod içinde iki kez "KisiDVO.Create" kullanmanızın belli bir sebebi var mı acaba?
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Ereçete Gönderimi

Mesaj gönderen csunguray »

Kod hatası gibi... Şimdi mesajdan düzeltiyorum.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Cevapla