04.07.2005, 17:31 | #1 |
Участник
|
Hi.
nado sdelat' export/import bankovskih platezhej cherez CustVendOutPaym v XML (UTF kodirovka) Problema v tom, sto fail otkrivajetsja sherez (eto tak v super-klassah) <div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]return[/color] [color=:blue]new[/color] AsciiIo(_filename, _mode);</div> Sootvetstvenno kodirovka XML headera nesootvetstvujet kodirovke pishushihsja dannih. Kak bit'.. !? PS: edinstvennoe pisat' svoju f-ju dlja perevoda simvolov iz non-utf v UTF. mozet ispolzovat' ICONV lib-u ? |
|
05.07.2005, 09:43 | #2 |
Гость
|
Решал похожую задачу для DBF-файлов. Выкрутился вот таким хитрым способом: подменил экземпляр AsciiIo экземпляром СВОЕГО класса, умеющего работать с DBF. Трюк правда основан на недокументированной особенности интерпретатора Х++ (см. обсуждение), но он прекрасно работает!
В Вашем случае можно сделать примерно следующее: 1. В наследнике CustVendOutPaym объявить переменную нужного Вам класса Например: <div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]class[/color] VendOutPaym_MY_BANK [color=:blue]extends[/color] VendOutPaym { XMLDocument fileXML; }</div> 2. В наследнике CustVendOutPaym перекрыть метод file() следующим образом: <div class='XPPtop'>X++</div><div class='XPP'>XMLDocument file() { [color=:blue]return[/color] fileXML; }</div> 3. В наследнике CustVendOutPaym в методе open() произвести открытие XML-файла необходимым образом (то есть инициализировать объект fileXML). 4. В наследниках CustVendOutPaymRecord, также должен быть объявлен объект требуемого нам класса (см. п. 1). 5. Осталось осуществить передчу этого объекта из наследника CustVendOutPaym наследникам CustVendOutPaymRecord. Это происходит, как Вы правильно заметили, в супер-классах (см. метод generatePaymentLines() класса CustVendOutPaym). Нам остается только перекрыть метод setFile() в наследнике CustVendOutPaymRecord: <div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]void[/color] setFile(XMLDocument _file) { fileXML = _file; }</div> P.S.: Способ, конечно, выглядит запутанным. Возможно, Вы предпочтете перекодировку в UTF. Но, по-моему, с XML все-таки удобнее и правильнее работать через специальные классы, чем городить огород через AsciiIo. |
|
05.07.2005, 15:09 | #3 |
Участник
|
Pasiba. takaja ideja bila ispolzovat' XML klasi.
A eto 100% esli ukazhu XML-u UTF kodirovku i on budet pisat' v ukazannoj kodirevke ? malo li gde che-go... |
|
05.07.2005, 17:55 | #4 |
Участник
|
Chego-to ne poluchajetsja ... dumal sto etot hack srabotaet.. no super-class nehochet prinimat' parametr XMLDocument kak AsciiIo v metode SetFile v klasse vendOutPaymRecord ...
metod v VendOutPaym_BANK_NAME <div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]void[/color] setFile(XMLDocument _file) { fileXML = _file; }</div> vrode vse sdelal kak nado... PS: vendOutPaymRecord sozdajetsja konstruktorom, poetomu vo vremja kompiljacii X++ interpr. nevidit, sto setFile perepisan... skoree vsego.. Код: vendOutPaymRecord = this.constructRecord(ledgerJournalTrans.paymMode, ledgerJournalTrans.paymSpec); |
|
05.07.2005, 18:02 | #5 |
Участник
|
Mh.. vrode vse srabotalo
<div class='XPPtop'>X++</div><div class='XPP'>Object o; o = this.file(); vendOutPaymRecord.setFile(o);</div> |
|
06.07.2005, 08:20 | #6 |
Гость
|
Цитата:
Сообщение от Delfins
PS: vendOutPaymRecord sozdajetsja konstruktorom, poetomu vo vremja kompiljacii X++ interpr. nevidit, sto setFile perepisan... skoree vsego..
|
|