|
![]() |
#1 |
Гость
|
Решал похожую задачу для 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. |
|