Пример печати платёжных поручений, ордеров и требований.

Автор:Alexandr1
Дата:27.12.2004
Просмотров:5132
Скачиваний:1035
Оценка: - , Оценок - 0
Скачать (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

Текст примера

 пример:

/*--------------------------------------------------------------
   Добавление строки к другой строке с разделителем в конце
   Разделителем служит символ с 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;

Аналогично сделаны платёжное требование и платёжный ордер. См. макросы.