|
Фискальный принтер | ☑ | ||
---|---|---|---|---|
0
247tsm
17.06.13
✎
16:53
|
Добрый день,
Начальник поставил задачу подключить фискальный принтер Datecs FP550 к 1с8.1 и 1с7.7, но используя не драйвер работы с текстовым файлом, а используя COM-объекты. С сайта Datecs.bg я скачал COM server FP3530. Установил его, но не знаю, как к нему обратиться из 1С. На команду СоздатьОбъект("FP3530") ругается "Неудачная попытка создания объекта". Перепробовал разные варианты: FiscalPrinter=СоздатьОбъект("FP3530.FiscalPrinter"); FiscalPrinter=СоздатьОбъект("FP3530"); FiscalPrinter=СоздатьОбъект("FP3530_COM_Server"); FiscalPrinter=СоздатьОбъект("FP3530.DatecsFP550"); Но во всех одна и та же ошибка "Неудачная попытка создания объекта". В Help com-сервера даны только методы для вызова тех или иных функций фискального принтера. Но до методов нужно же "сказать 1С", с чем она должна работать, т.е. создать объект. Может я не прав. Подскажите. Спасибо. |
|||
1
247tsm
17.06.13
✎
17:24
|
Неужели никто не может что-то сказать по теме?
|
|||
2
IVT_2009
17.06.13
✎
17:28
|
поиск в гугле говорит что в комплекте есть пример на дельфи. Строку инициализации глядите там
|
|||
3
oreshka7387
17.06.13
✎
17:29
|
а обработки обслуживания торгового оборудования нету? тебе её самому написать надо?
|
|||
4
IVT_2009
17.06.13
✎
17:30
|
судя по коду это 77 , там обработка обслуживания не катит
|
|||
5
oreshka7387
17.06.13
✎
17:30
|
так ему на 8 же надо
|
|||
6
IVT_2009
17.06.13
✎
17:33
|
если вы правильно пишете строку инициализации в создатьОбъект то попробуйте dll файлы принудительно зарегистрировать в системе командой regsvr32
|
|||
7
stix2010
17.06.13
✎
17:37
|
драйвера Артсофт будут стоить дешевле времени потраченного Вами на разработку своего лисапета: http://www.artsoft.ua/1C+ekkr.php
|
|||
8
247tsm
17.06.13
✎
17:45
|
(6) там нет DLL. Там exe-модуль, который запускает этот COM-сервер. Он висит в трее. Мне нужно из 1С управлять фискальным принтером через этот сервер. Но как в 1С обратиться к этому серверу я не знаю, т.е. мне не известно, какое имя указать в СоздатьОбъект. В процессах компа есть процесс FP3530.EXE. Мне проще проверить в 1С7.7, а потом сделаю и в 8.1
|
|||
9
247tsm
17.06.13
✎
18:14
|
(2) просмотрел примеры на дельфи, но не смог определить, как подключиться.
|
|||
10
SherifSP
17.06.13
✎
18:37
|
(9) Компоненту зарегистрировал?
|
|||
11
247tsm
17.06.13
✎
19:34
|
(9) Как зарегистрировать? Это COM-объект. С помощью regsrv не регистрируется, не может найти точку входа.
|
|||
12
247tsm
17.06.13
✎
19:35
|
(10) Как зарегистрировать? Это COM-объект. С помощью regsrv не регистрируется, не может найти точку входа.
|
|||
13
Славен
17.06.13
✎
19:37
|
нам бы хоть примеры на дэлфи показал
|
|||
14
247tsm
18.06.13
✎
10:17
|
Вот текст на дельфи:
unit uMainForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, FP3530_TLB, StdCtrls, Buttons, ExtCtrls, AppEvnts; const cNewLine = #13#10; MY_CAPTION = 'COM Server - Example'; type TDatecsFDevice = ( dt_Unknown, dt_DP500PLUS_KL, dt_DP55_KL, dt_MP55_KL, dt_DP_50_KL, dt_FP_1000_KL, dt_FP_550_KL, dt_FMP10_KL, dt_FP60_KL, dt_FP1000_DV, dt_FP300_DV, dt_FP550_DV, dt_FP60_DV, dt_FP2000_KL, dt_FP_550D_KL ); TfmMainForm = class( TForm) PageControl1: TPageControl; tsInit: TTabSheet; ts_DEVICE_STATUS: TTabSheet; btn_INIT_EX1: TButton; lb_COMPORT: TLabel; lb_Baudrate: TLabel; cbx_Baudrate: TComboBox; cbx_COMPORT: TComboBox; GroupBox13: TGroupBox; chbx_S0_7: TCheckBox; chbx_S0_6: TCheckBox; chbx_S0_5: TCheckBox; chbx_S0_4: TCheckBox; chbx_S0_3: TCheckBox; chbx_S0_2: TCheckBox; chbx_S0_1: TCheckBox; chbx_S0_0: TCheckBox; GroupBox15: TGroupBox; chbx_S3_7: TCheckBox; chbx_S3_6: TCheckBox; chbx_S3_5: TCheckBox; chbx_S3_4: TCheckBox; chbx_S3_3: TCheckBox; chbx_S3_2: TCheckBox; chbx_S3_1: TCheckBox; chbx_S3_0: TCheckBox; GroupBox21: TGroupBox; chbx_S1_7: TCheckBox; chbx_S1_6: TCheckBox; chbx_S1_5: TCheckBox; chbx_S1_4: TCheckBox; chbx_S1_3: TCheckBox; chbx_S1_2: TCheckBox; chbx_S1_1: TCheckBox; chbx_S1_0: TCheckBox; GroupBox22: TGroupBox; chbx_S4_7: TCheckBox; chbx_S4_6: TCheckBox; chbx_S4_5: TCheckBox; chbx_S4_4: TCheckBox; chbx_S4_3: TCheckBox; chbx_S4_2: TCheckBox; chbx_S4_1: TCheckBox; chbx_S4_0: TCheckBox; GroupBox23: TGroupBox; chbx_S2_7: TCheckBox; chbx_S2_6: TCheckBox; chbx_S2_5: TCheckBox; chbx_S2_4: TCheckBox; chbx_S2_3: TCheckBox; chbx_S2_2: TCheckBox; chbx_S2_1: TCheckBox; chbx_S2_0: TCheckBox; GroupBox24: TGroupBox; chbx_S5_7: TCheckBox; chbx_S5_6: TCheckBox; chbx_S5_5: TCheckBox; chbx_S5_4: TCheckBox; chbx_S5_3: TCheckBox; chbx_S5_2: TCheckBox; chbx_S5_1: TCheckBox; chbx_S5_0: TCheckBox; cbx_TRGT_METHOD: TComboBox; btn_EXECUTE_THIS: TBitBtn; Label1: TLabel; Panel1: TPanel; mem_LOG: TMemo; ApplicationEvents1: TApplicationEvents; Label2: TLabel; cbx_PrinterModel: TComboBox; lb_IPADDR: TLabel; ed_IPADDR: TEdit; lb_PORT: TLabel; ed_PORT: TEdit; procedure btn_INIT_EX1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btn_EXECUTE_THISClick(Sender: TObject); procedure ApplicationEvents1SettingChange(Sender: TObject; Flag: Integer; const Section: String; var Result: Integer); procedure cbx_PrinterModelChange(Sender: TObject); private TRANSTAT_MSG : String; FBON_OPENED,SBON_OPENED : Boolean; CURRENT_TENDER : WideString; LAST_AMOUNT : WideString; CURRENT_SALESCOUNT : WideString; function GET_COM_EX: TStringList; function CALC_COMNUM: Integer; function GetParam(src : WideString;INDX: Byte; MySep : Char = ';'): WideString; procedure SHOW_MYINFO(TRGT_MESSAGE : String); procedure SHOW_MYALERT(TRGT_MESSAGE : String); function SHOW_MYQUESTION (TRGT_QUESTION : string) : Integer; procedure ADD_LOG(TRGT_LOG : String); function GET_MY_DEVICE : TDatecsFDevice; //SAMPLES -BEGIN //ERROR HANDLING procedure ERROR_HANDLING; function CHECK_AND_RESOLVE : Boolean; function CAN_OPEN : Boolean; function EMERGENSY_SITUATION : Boolean; function FEMERGENSY_SITUATION : Boolean; function SEMERGENSY_SITUATION : Boolean; function CHECK_ASSIGNED : Boolean; function CALC_ERROR(TRGT_ERRCODE : Integer) : String; //STATUS OF THE FISCAL DEVICE procedure CALC_SWITCHES; procedure REFRESH_SWITCHES; procedure INIT_SWITCHES_EX(TRGT_LANG : Integer); //FISCAL TRANSACTIONS function OPEN_FISCAL_BON : Boolean; function SELL_SOMETHING : Boolean; function SELL_CMD_49(MAJOR_VERS,MINOR_VERS : Integer;MY_PARAMS : WideString):Boolean; function CMD_49_0(MINOR_VERS: Integer;MY_PARAMS: WideString): Integer; function CMD_49_1(MINOR_VERS: Integer;MY_PARAMS: WideString): Integer; function CMD_49_2(MINOR_VERS: Integer;MY_PARAMS: WideString): Integer; function CMD_49_3(MINOR_VERS: Integer;MY_PARAMS: WideString): Integer; function CMD_49_4(MINOR_VERS: Integer;MY_PARAMS: WideString): Integer; function CMD_49_5(MINOR_VERS: Integer;MY_PARAMS: WideString): Integer; function PRINT_DELIMITER : Boolean; function MAKE_SUBTOTAL(TRGT_PERCENT : Real) : Boolean; function MAKE_TOTAL : Boolean; function GET_LAST_DOCNUM : Boolean; function CLOSE_FISCAL_BON : Boolean; function PRINT_FISCAL_TEXT(TRGT_TEXT : WideString) : Boolean; function MAKE_FISCAL_TRANSACTION : Boolean; function CMD_70_0_0(Amount : WideString) : Integer; function CMD_88_0_0 : Boolean; //NONFISCAL TRANSACTIONS function OPEN_NONFISCAL : Boolean; function PRINT_NONFISCAL_TEXT(TRGT_TEXT : WideString) : Boolean; function CLOSE_NONFISCAL_BON : Boolean; function MAKE_NONFISCAL_TRANSACTION : Boolean; //REPORTS function ZX_REPORT(TRGT_OPTION : WideString) : Boolean; function ZXDEP_REPORT(TRGT_OPTION : WideString) : Boolean; //SAMPLES - END public MyFiscDevice : TDatecsFDevice; //... FPDP55_KL: ICS_BGR_DP55_KL; FP2000_KL : ICS_BGR_FP2000_KL; FP60_KL : ICS_BGR_FP60_KL; FP550_KL : ICS_BGR_FP550_KL; FP550D_KL : ICS_BGR_FP550_D_KL; //... end; var fmMainForm : TfmMainForm; tmp_Bol : Boolean; tmp_Str : string; tmp_Int : Integer; tmp_Ext : Extended; S0, S1, S2, S3, S4, S5: WideString; implementation {$R *.dfm} function TfmMainForm.GetParam(src: WideString; INDX: Byte; MySep: Char): WideString; var i, ParEnd: Byte; tmpS : WideString; begin tmpS:=src; for i := 0 to INDX - 1 do begin ParEnd := pos(MySep, tmpS); if ParEnd = 0 then begin Result := ''; Exit; end; Result := Copy(tmpS, 1, ParEnd - 1); Delete(tmpS, 1, ParEnd); end; end; function TfmMainForm.SHOW_MYQUESTION(TRGT_QUESTION: string): Integer; begin Result:= MessageBox(fmMainForm.Handle,PChar(TRGT_QUESTION),PChar(MY_CAPTION),$124); ADD_LOG(tmp_Str); end; procedure TfmMainForm.SHOW_MYALERT(TRGT_MESSAGE: string); begin MessageBox(fmMainForm.Handle,PChar(TRGT_MESSAGE),PChar(MY_CAPTION),$30); ADD_LOG(tmp_Str); end; procedure TfmMainForm.SHOW_MYINFO(TRGT_MESSAGE: String); begin MessageBox(fmMainForm.Handle,PChar(TRGT_MESSAGE),PChar(MY_CAPTION),$40); ADD_LOG(tmp_Str); end; function TfmMainForm.GET_MY_DEVICE: TDatecsFDevice; begin //Result:=dt_Unknown; try //GET FROM YOUR PROGRAM SETTINGS the type of used device //from registry or ini files or ... case cbx_PrinterModel.ItemIndex of 0 : Result:=dt_DP55_KL;//for example 1 : Result:=dt_FP2000_KL; 2 : Result:=dt_FP2000_KL; 3 : Result:=dt_FP60_KL; 4 : Result:=dt_FP_550_KL; 5 : Result:=dt_FP_550D_KL; end; except Result:=dt_Unknown; end; end; procedure TfmMainForm.btn_INIT_EX1Click(Sender: TObject); function INITIALISATION_OF_DEVICE_SITUATION : boolean; var NewInstanceCreated : boolean; begin NewInstanceCreated:=false; try MyFiscDevice := GET_MY_DEVICE; case MyFiscDevice of dt_DP500PLUS_KL, dt_DP55_KL, dt_MP55_KL, dt_DP_50_KL: begin //CREATE INSTANCE OF ICS_BGR_DP55_KL //written on Delphi this is something like: if FPDP55_KL<>nil then FPDP55_KL:=nil; FPDP55_KL := CoCS_BGR_DP55_KL.Create; FPDP55_KL.INIT_Ex1(CALC_COMNUM, StrToInt(cbx_Baudrate.Text)); NewInstanceCreated:= (FPDP55_KL<>nil); if NewInstanceCreated then begin fmMainForm.Caption:='Пример за употребата на "ICS_BGR_DP55_KL"'; end; end; dt_FP_1000_KL: begin //CREATE INSTANCE OF ICS_BGR_FP1000_KL end; dt_FP_550_KL: begin //CREATE INSTANCE OF ICS_BGR_FP550_KL //written on Delphi this is something like: if FP550_KL<>nil then FP550_KL:=nil; FP550_KL := CoCS_BGR_FP550_KL.Create; FP550_KL.INIT_EX3( // CALC_COMNUM ,//: StrToInt(cbx_Baudrate.Text) ,//: 3000 ,//:ReadIntervalTimeout 0 ,//:ReadTotalTimeoutMultiplier 3200 ,//:ReadTotalTimeoutConstant 3000 ,//:WriteTotalTimeoutMultiplier 3000 ,//:WriteTotalTimeoutConstant 8 ,//: REPEAT_COUNT False ,//:MoreInstances False ,//:WithInputCheck True ,//:WithOutpCheck True ,//:AlwaysGetOutput True //:AutoCutText ); NewInstanceCreated:= (FP550_KL<>nil); if NewInstanceCreated then begin fmMainForm.Caption:='Пример за употребата на "ICS_BGR_FP550_KL"'; end; end; dt_FMP10_KL: begin //CREATE INSTANCE OF ICS_BGR_FMP10_KL end; dt_FP1000_DV, dt_FP300_DV, dt_FP550_DV, dt_FP60_DV: begin //CREATE INSTANCE OF ICSFP3530 end; dt_FP60_KL: begin //CREATE INSTANCE OF ICS... //written on Delphi this is something like: if FP60_KL<>nil then FP60_KL:=nil; FP60_KL := CoCS_BGR_FP60_KL.Create; FP60_KL.INIT_EX3( // CALC_COMNUM ,//: StrToInt(cbx_Baudrate.Text) ,//: 3000 ,//:ReadIntervalTimeout 0 ,//:ReadTotalTimeoutMultiplier 3200 ,//:ReadTotalTimeoutConstant 3000 ,//:WriteTotalTimeoutMultiplier 3000 ,//:WriteTotalTimeoutConstant 8 ,//: REPEAT_COUNT False ,//:MoreInstances False ,//:WithInputCheck True ,//:WithOutpCheck True ,//:AlwaysGetOutput True //:AutoCutText ); NewInstanceCreated:= (FP60_KL<>nil); if NewInstanceCreated then begin fmMainForm.Caption:='Пример за употребата на "ICS_BGR_FP60_KL"'; end; end; dt_FP2000_KL: begin //CREATE INSTANCE OF ICS... //written on Delphi this is something like: case cbx_PrinterModel.ItemIndex of 1: begin if FP2000_KL<>nil then FP2000_KL:=nil; FP2000_KL := CoCS_BGR_FP2000_KL.Create; //FP2000_KL.INIT_Ex1(CALC_COMNUM, StrToInt(cbx_Baudrate.Text)); FP2000_KL.INIT_EX3( // CALC_COMNUM ,//: StrToInt(cbx_Baudrate.Text) ,//: 3000 ,//:ReadIntervalTimeout 0 ,//:ReadTotalTimeoutMultiplier 3200 ,//:ReadTotalTimeoutConstant 3000 ,//:WriteTotalTimeoutMultiplier 3000 ,//:WriteTotalTimeoutConstant 8 ,//: REPEAT_COUNT False ,//:MoreInstances False ,//:WithInputCheck True ,//:WithOutpCheck True ,//:AlwaysGetOutput True //:AutoCutText ); NewInstanceCreated:= (FP2000_KL<>nil); if NewInstanceCreated then begin fmMainForm.Caption:='Пример за употребата на "ICS_BGR_FP2000_KL"'; end; end; 2: begin if FP2000_KL<>nil then FP2000_KL:=nil; FP2000_KL := CoCS_BGR_FP2000_KL.Create; tmp_Str:=FP2000_KL.INIT_Ex2(Trim(ed_IPADDR.Text),Trim(ed_PORT.Text)); NewInstanceCreated:= (FP2000_KL<>nil); if NewInstanceCreated then begin fmMainForm.Caption:='Пример за употребата на "ICS_BGR_FP2000_KL"(TCP/IP)'; //ShowMessage(tmp_Str); end; end; end; end; dt_FP_550D_KL: begin //CREATE INSTANCE OF ICS_BGR_FP550_D_KL //written on Delphi this is something like: if FP550D_KL<>nil then FP550D_KL:=nil; FP550D_KL := CoCS_BGR_FP550_D_KL.Create; FP550D_KL.INIT_EX3( // CALC_COMNUM ,//: StrToInt(cbx_Baudrate.Text) ,//: 3000 ,//:ReadIntervalTimeout 0 ,//:ReadTotalTimeoutMultiplier 3200 ,//:ReadTotalTimeoutConstant 3000 ,//:WriteTotalTimeoutMultiplier 3000 ,//:WriteTotalTimeoutConstant 8 ,//: REPEAT_COUNT False ,//:MoreInstances False ,//:WithInputCheck True ,//:WithOutpCheck True ,//:AlwaysGetOutput True //:AutoCutText ); NewInstanceCreated:= (FP550D_KL<>nil); if NewInstanceCreated then begin fmMainForm.Caption:='Пример за употребата на "ICS_BGR_FP550_KL"'; end; end; end; Result := (MyFiscDevice<>dt_Unknown) and (NewInstanceCreated); except Result := false; end; end; function CHECK_SOME_ : Boolean; begin Result:=False; try case cbx_PrinterModel.ItemIndex of -1 : begin ShowMessage('Please set device model first !'); PageControl1.ActivePage:=tsInit; if cbx_PrinterModel.Enabled then cbx_PrinterModel.SetFocus; Exit; end; 2 : begin if cbx_PrinterModel.ItemIndex=2 then begin if (Trim(ed_IPADDR.Text)='') then begin ShowMessage('Please set ip address !'); PageControl1.ActivePage:=tsInit; if ed_IPADDR.Enabled then ed_IPADDR.SetFocus; Exit; end; if (Trim(ed_PORT.Text)='') then begin ShowMessage('Please set port number !'); PageControl1.ActivePage:=tsInit; if ed_PORT.Enabled then ed_PORT.SetFocus; Exit; end; end; end else begin if cbx_COMPORT.ItemIndex =-1 then begin ShowMessage('Please set comport!'); PageControl1.ActivePage:=tsInit; if cbx_COMPORT.Enabled then cbx_COMPORT.SetFocus; Exit; end; end; end; //... Result:=True; except Result:=False; end; end; begin if not CHECK_SOME_ then Exit; try try INITIALISATION_OF_DEVICE_SITUATION; except ShowMessage('TfmMainForm.btn_INIT_EX1Click - Exception'); end; finally INIT_SWITCHES_EX(0); fmMainForm.Update; end; end; procedure TfmMainForm.FormCreate(Sender: TObject); procedure ADD_COMPORTS; var i: Integer; begin try try cbx_COMPORT.Items.Clear; cbx_COMPORT.Items := Get_COM_EX; except // end; finally if cbx_COMPORT.Items.Count = 0 then for i := 1 to 28 do cbx_COMPORT.Items.Add('COM ' + IntToStr(i)); end; end; begin ADD_COMPORTS; DateSeparator := '.'; TimeSeparator := ':'; DecimalSeparator := '.'; ShortDateFormat := 'dd.mm.yyyy'; ShortTimeFormat := 'hh:mm:ss'; end; function TfmMainForm.GET_COM_EX: TStringList; var ComLst : TStringList; max, i : integer; tempStr:string; VerInfo: TOSVersioninfo; procedure EnumerateDosDevices(List: TStrings); var Buffer: pChar; BufLen: Cardinal; len : Cardinal; p : PChar; sl : TStringlist; begin Assert(Assigned(List)); BufLen := High(Word); Buffer := AllocMem(BufLen); try repeat len := QueryDosDevice(nil, Buffer, Buflen - 1); if len = ERROR_INSUFFICIENT_BUFFER then begin BufLen := Buflen * 2; ReAllocMem(Buffer, BufLen); end; until len <> ERROR_INSUFFICIENT_BUFFER; Buffer[Len]:= #0; sl := TStringlist.Create; try p := Buffer; while p <@Buffer[Len]do begin sl.Add(p); p := StrEnd(p)+ 1; end; sl.Sorted := true; List.Assign(sl); finally sl.Free; end; { finally } finally FreeMem(Buffer); end; { finally } end; function FillCommList(List: Tstrings): integer; var Temp : TStringlist; i, index: Integer; begin try Assert(Assigned(List)); List.Clear; Temp := TStringlist.Create; try EnumerateDosDevices(Temp); i := 1; while i < 256 do begin if(Temp.Find('COM' + IntToStr(i), index))then begin List.Add('COM ' + IntToStr(i)); end; inc(i); end; finally Temp.Free; end; { finally } Result := List.Count; except on E: Exception do raise Exception.Create('Exception in method "FillCommList":' + E.Message); end; end; function GET_WIN98_SERIAL(List: Tstrings): boolean; var i : integer; portStr:String; portHND: THandle; begin Assert(Assigned(List)); List.Clear; Result := false; try for i := 1 to 256 do begin portStr := Format('\\.\COM%d',[i]); portHND := CreateFile(PChar(portStr), GENERIC_READ or GENERIC_WRITE, 0,nil, OPEN_EXISTING, 0, 0); if portHND = INVALID_HANDLE_VALUE then begin // Error := GetLastError; // if (Error = ERROR_ACCESS_DENIED) or (Error = ERROR_ACCESS_DENIED) then // Result:=1; CloseHandle(portHND); end else begin Result := true; CloseHandle(portHND); List.Add('COM ' + inttostr(i)); end; end; except Result := False; end; end; begin ComLst := TStringList.Create; Result := TStringList.Create; try try // dm_.JvCIE_.OS.OSVersion VerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); GetVersionEx(VerInfo); if(VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT)then begin max := FillCommList(ComLst); if max > 0 then for i := 0 to max - 1 do begin tempStr := ComLst.Strings[i]; // Delete(tempStr, 1, 3); Result.Add(tempStr); end; end else GET_WIN98_SERIAL(Result); except on E: Exception do raise Exception.Create('Exception in method "Get_COM_EX":' + E.Message); end; finally ComLst.Free; end; end; procedure TfmMainForm.REFRESH_SWITCHES; begin if not CHECK_ASSIGNED then Exit; try try ADD_LOG('[CMD_74_0_1]: ПОЛУЧАВАНЕ НА СТАТУСИТЕ'); case MyFiscDevice of dt_DP55_KL:tmp_Int:=FPDP55_KL.CMD_74_0_1(S0, S1, S2, S3, S4, S5); dt_FP2000_KL:tmp_Int:=FP2000_KL.CMD_74_0_1(S0, S1, S2, S3, S4, S5); dt_FP60_KL:tmp_Int:=FP60_KL.CMD_74_0_1(S0, S1, S2, S3, S4, S5); dt_FP_550_KL:tmp_Int:=FP550_KL.CMD_74_0_1(S0, S1, S2, S3, S4, S5); dt_FP_550D_KL:tmp_Int:=FP550D_KL.CMD_74_0_1(S0, S1, S2, S3, S4, S5); end; if tmp_Int<>0 then begin //TODO : Exception handler ShowMessage('Get status error... Check connection!'); tmp_Str:=CALC_ERROR(tmp_Int); ShowMessage(tmp_Str); end else CALC_SWITCHES; except //TODO : Exception handler end; finally fmMainForm.Update; end; end; function TfmMainForm.OPEN_FISCAL_BON: Boolean; var AllReceipt,FiscReceipt,OpCode ,OpPwd,TillNmb : WideString; procedure INIT; begin AllReceipt:=''; FiscReceipt:=''; end; function SET_PARAMS_FROM_DB : Boolean; begin try //GET THIS FROM YOUR DATABASE case MyFiscDevice of dt_DP55_KL: begin //This is default values for our ECR's OpCode:='1'; OpPwd:='1'; TillNmb:='1'; end; dt_FP2000_KL: begin //This is default values for our printers OpCode:='1'; OpPwd:='0000'; //OpPwd:='0001'; For error example TillNmb:='1'; end; dt_FP60_KL: begin //This is default values for our printers OpCode:='1'; OpPwd:='0000'; //OpPwd:='0001'; For error example TillNmb:='1'; end; dt_FP_550_KL: begin //This is default values for our printers OpCode:='1'; OpPwd:='0000'; //OpPwd:='0001'; For error example TillNmb:='1'; end; dt_FP_550D_KL: begin //This is default values for our printers OpCode:='1'; OpPwd:='0000'; //OpPwd:='0001'; For error example TillNmb:='1'; end; end; Result:=True; except Result:=False; end; end; begin Result:=False; if not CHECK_ASSIGNED then Exit; try try INIT; if not SET_PARAMS_FROM_DB then Exit; ADD_LOG('[CMD_48_0_0]: ОТВАРЯНЕ НА СЛУЖЕБЕН БОН'); case MyFiscDevice of dt_DP55_KL:tmp_Int:=FPDP55_KL.CMD_48_0_0(OpCode,OpPwd,TillNmb,AllReceipt,FiscReceipt); dt_FP2000_KL: tmp_Int:=FP2000_KL.CMD_48_0_0(OpCode,OpPwd,TillNmb,AllReceipt,FiscReceipt); dt_FP60_KL: tmp_Int:=FP60_KL.CMD_48_0_0(OpCode,OpPwd,TillNmb,AllReceipt,FiscReceipt); dt_FP_550_KL:tmp_Int:=FP550_KL.CMD_48_0_0(OpCode,OpPwd,TillNmb,AllReceipt,FiscReceipt); dt_FP_550D_KL:tmp_Int:=FP550D_KL.CMD_48_0_0(OpCode,OpPwd,TillNmb,AllReceipt,FiscReceipt); end; if tmp_Int<>0 then begin tmp_Str:=CALC_ERROR(tmp_Int); SHOW_MYALERT(tmp_Str); //1. Analize this... //2. status bytes or/and CMD_76_0_0 //3. programatically do something or... //4. ...call of administrator //... end else Result:=True; except Result:=False; end; finally CALC_SWITCHES; fmMainForm.Update; end; end; function TfmMainForm.SELL_CMD_49(MAJOR_VERS, MINOR_VERS: Integer;MY_PARAMS: WideString): Boolean; begin Result:=False; try case MAJOR_VERS of 0 : tmp_Int := CMD_49_0(MINOR_VERS,MY_PARAMS); 1 : tmp_Int := CMD_49_1(MINOR_VERS,MY_PARAMS); 2 : tmp_Int := CMD_49_2(MINOR_VERS,MY_PARAMS); 3 : tmp_Int := CMD_49_3(MINOR_VERS,MY_PARAMS); 4 : tmp_Int := CMD_49_4(MINOR_VERS,MY_PARAMS); 5 : tmp_Int := CMD_49_5(MINOR_VERS,MY_PARAMS); end; if tmp_Int <> 0 then begin tmp_Str:=CALC_ERROR(tmp_Int); SHOW_MYALERT(tmp_Str); //1. Analize this ... //2. status bytes or/and CMD_76_0_0 //3. programatically do something or... //4. ...call of administrator //... Exit; end else begin Result:=True; CALC_SWITCHES; end; except Result:=False; end; end; function TfmMainForm.PRINT_DELIMITER: Boolean; begin Result:=False; if not CHECK_ASSIGNED then Exit; try ADD_LOG('[CMD_92_0_0]: ПЕЧАТ НА РАЗДЕЛИТЕЛНА ЛИНИЯ'); case MyFiscDevice of dt_DP55_KL:tmp_Int:=FPDP55_KL.CMD_92_0_0('1'); dt_FP2000_KL:tmp_Int:=FP2000_KL.CMD_92_0_0('1'); dt_FP60_KL:tmp_Int:=FP60_KL.CMD_92_0_0('1'); dt_FP_550_KL:tmp_Int:=FP550_KL.CMD_92_0_0('1'); dt_FP_550D_KL:tmp_Int:=FP550D_KL.CMD_92_0_0('1'); end; if tmp_Int <> 0 then begin tmp_Str:=CALC_ERROR(tmp_Int); SHOW_MYALERT(tmp_Str); Exit; end else begin Result:=True; CALC_SWITCHES; end; except Result:=False; end; end; function TfmMainForm.SELL_SOMETHING: Boolean; var MyInput : WideString; function GET_SELL_DATA (TRGT_EXAMPLE : Integer) : WideString; var TaxCd, Price, Qwan, Perc, L1, L2 : WideString; begin Result:=''; case TRGT_EXAMPLE of 0: begin //Get this data from your database L1:='Тест на продажба:ред 1'; //L2:='Тест на продажба:ред 2'; L2:='1234567890 1234567890 1234567890 1234567890 1234567890 1234567890'; Price := FormatFloat('0.00', 0.10); Qwan := FormatFloat('0.000', 1.543); Perc := FormatFloat('0.00', 10.00);// TaxCd := 'Б'; Result:=L1+';'+L2+';'+TaxCd+';'+Price+';'+Qwan+';'+Perc+';'; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |