Пример печати платёжных поручений, ордеров и требований.
Скачать (rar-файл; Размер - 192841)Обсудить в форуме
Описание
Создан OLE-сервер печати (Builder C++ 6.0, отчёты сделаны в QuickReport), который у нас вызывается при запуске RS-Bank (второй раз он не запускается). В макросе создаётся ActiveX-объект, которому передаются параметры для печати (тип документа и сам документ - одной строкой, поля в которых разделены спец. разделителем) и в конце вызывается метод Print. Работает и в 2-х звенке и в 3-звенке. Правильность работы проверялась начиная со сборки 5.0.61.10 и заканчивая 5.0.86.6.
Дополнительно в сервере печати сделаны печать штампов на этих документах, но их несложно отключить при желании. Параметры свои сохраняет в реестре. Печатает на принтеры, которые установлены и подключены в системе Windows. Если есть вопросы и пожелания - alex_grankin@mail.ru
Дополнительно в сервере печати сделаны печать штампов на этих документах, но их несложно отключить при желании. Параметры свои сохраняет в реестре. Печатает на принтеры, которые установлены и подключены в системе Windows. Если есть вопросы и пожелания - alex_grankin@mail.ru
Текст примера
пример: /*-------------------------------------------------------------- Добавление строки к другой строке с разделителем в конце Разделителем служит символ с ASCII-кодом 0x27 --------------------------------------------------------------*/ macro AddX(where,from) VAR x; x = where + from + ""; SetParm(0,x); end; macro NewDrawPlat( doc, /* новая переменная */ РазделительКопеек, /* новая переменная */ datevalue, number, dateD, dptch, payer, /* не используется */ deb_acc, deb_corracc, bank_payer, payerMFO, sum, receiver, /* не используется */ kred_acc, kred_corracc, bank_receiver, receiverMFO, ground, queue, paydate, kindoper, rezfiel /* Это поле добавлено по просьбе нашего отдела клиринга. Если оно не нужно, вместо него можно передавать пустую строку, или строку с пробелом. */ ) var x1, srvprn, CS, kopeck, rub, divide_kopeck, sumstr, shortsum, pospoint, NCopy, budjclassifcode = "", okato = "", taxground = "", taxperiod = "", taxnumber = "", taxdate = BDATE_ZERO, taxpaymenttype = "", Date_Carry = BDATE_ZERO; file d(document); record adoc(arhdoc); if ( doc.Date_Document < PL_CrisisDate ) return 0; end; if ( IsArhDoc( doc.AutoKey ) ) copy( d, doc ); SetRecordAddr( adoc, d, 0, 0, TRUE ); Date_Carry = adoc.Date_Carry; else Date_Carry = {curdate}; end; divide_kopeck = РазделительКопеек; shortsum = СуммаЦифрами(sum); rub = RubToStrAlt(sum); if ( ValType(dptch) == V_UNDEF ) dptch = ""; end; SetTaxPays ( doc, budjclassifcode, okato, taxground, taxperiod, taxnumber, taxdate, taxpaymenttype ); CS = doc.ComposerStatus; x1 = ""; if (IsStandAlone()) srvprn = ActiveX("Alex.PrintServer",null,true); else srvprn = TlgActiveX("Alex.PrintServer",true); end; /* Тип документа - Платёжное поручение - PP */ srvprn.Par = "PP"; /*Номер документа*/ AddX(x1,string(number)); /*Дата документа*/ AddX(x1,date10p(dateD,".")); /*Вид отправки*/ AddX(x1,dptch); /*Сумма прописью*/ AddX(x1,rub); /*Сумма*/ AddX(x1,ShortSum); /*ИНН Плательщика*/ AddX(x1,doc.OKPO_Payer); /*КПП Плательщика*/ AddX(x1,doc.KPP_Payer); /*Плательщик*/ AddX(x1,doc.Payer); /*ИНН Получателя*/ AddX(x1,doc.OKPO_Receiver); /*КПП Получателя*/ AddX(x1,doc.KPP_Receiver); /*Получатель*/ AddX(x1,GetReceiver(doc)); /*Банк плательщика*/ AddX(x1,bank_payer); /*Банк получателя*/ AddX(x1,bank_receiver); /*Счет плательщика*/ AddX(x1,deb_acc); /*Счет получателя*/ AddX(x1,kred_acc); /*БИК плательщика*/ AddX(x1,PayerMFO); /*БИК получателя*/ AddX(x1,ReceiverMFO); /*КС плательщика*/ AddX(x1,deb_corracc); /*КС получателя*/ AddX(x1,kred_corracc); /*Вид операциониста*/ AddX(x1,kindoper); /*Очередность платежа*/ AddX(x1,queue); /*Основание платежа*/ AddX(x1,MyGrou); /*Дата поступления в банк плательщика*/ AddX(x1,date10p(PayDate,".")); /*Дата списания со счёта плательщика*/ AddX(x1,date10p(DateValue,".")); /*Налоговые поля*/ /* 1 */ AddX(x1,CS /* doc.ComposerStatus */); /* 2 */ AddX(x1,budjclassifcode); /* 3 */ AddX(x1,okato); /* 4 */ AddX(x1,taxground); /* 5 */ AddX(x1,taxperiod); /* 6 */ AddX(x1,taxnumber); /* 7 */ AddX(x1,taxdate); /* 8 */ AddX(x1,taxpaymenttype); /* Рез. поле для спец. плат. поручения Это поле добавлено по просьбе нашего отдела клиринга. Если оно не нужно, вместо него можно передавать пустую строку, или строку с пробелом.*/ AddX(x1,rezfiel); /* Передаём строку с платежкой */ srvprn.Doc = x1; /*печать отчета*/ srvprn.Print; return 1; OnError(er) println(" " + er.Message,"\n Модуль: ",er.Module,"\n Строка: ",er.Line); end; Аналогично сделаны платёжное требование и платёжный ордер. См. макросы.