  // 

function PrintHeader(PO, RO)
{
  // ( -)
  //PO.PrintBarcode(RO.Barcode,0,12,300);

  //    POS'
  PO.PrintCenterString("POS "+RO.NPOS+" "+RO.UserName," ");

  //   
  PO.PrintLRStringLF(RO.ReceiptType+" "+PO.AddCharLeft(RO.ReceiptNo,0,8),
                               " "+PO.AddCharLeft(RO.SessionNo,0,4)," ");

  PO.PrintLRStringLF("=","=","=");
}

  // 

function PrintPosition(PO, RO)
{
  Sp = "  ";
  Sp2 = "    ";
  //    
  CharPos = "_";

    // 
    if (RO.Pos.Storno == 1)
      PO.PrintCenterString(""," ");

    //    
    PO.PrintStringWordWrap(RO.Pos.Number+". "+RO.Pos.WareText);

    //-,   
    PO.PrintLRStringLF(Sp+PO.FormatQuantity(RO.Pos.Quantity)+"*"+
                          PO.FormatCurrency(RO.Pos.Price),
                          PO.FormatCurrency(RO.Pos.SummForD),CharPos);

    if (RO.Pos.Storno == 0)
    {
      // 
      if (RO.Pos.AspectStr != "")
      for (RO.Pos.Aspect.Index = 1;
           RO.Pos.Aspect.Index <=
           RO.Pos.Aspect.Count;
           RO.Pos.Aspect.Index++)
      {
        if (RO.Pos.Aspect.Code != 0)
          PO.PrintStringWordWrap(Sp2+RO.Pos.Aspect.AspectText+": "+
                         RO.Pos.Aspect.Text);
      }

      if (RO.Pos.WareCode != 0)
      // 
        PO.PrintStringWordWrap(Sp+" "+RO.Pos.WareCode);

      if (RO.Pos.WareMark != "")
      // 
        PO.PrintStringWordWrap(Sp+". "+RO.Pos.WareMark);

      if (RO.Pos.WareSeries != "")
      // 
        PO.PrintStringWordWrap(Sp+" "+RO.Pos.WareSeries);

      if (RO.Pos.WareCertificat != "")
      // 
        PO.PrintStringWordWrap(Sp+". "+RO.Pos.WareCertificat);

      if (RO.Pos.Barcode != "")
      // 
        PO.PrintStringWordWrap(Sp+" "+RO.Pos.Barcode);

      //  
      for (RO.Pos.DiscPos.Index = 1;
           RO.Pos.DiscPos.Index <=
           RO.Pos.DiscPos.Count;
           RO.Pos.DiscPos.Index++)
      {
        if (RO.Pos.DiscPos.Summ != 0)
        {
          if (RO.Pos.DiscPos.Text != "")
            PO.PrintStringWordWrap(Sp+RO.Pos.DiscPos.Text);
          switch(RO.Pos.DiscPos.TypeD)
          {
            case 0:
              PO.PrintLRStringLF(Sp2+"-"+
                              PO.FormatPercent(RO.Pos.DiscPos.Value)+"%",
                             PO.FormatCurrency(RO.Pos.DiscPos.Summ),CharPos);
              break;
            case 1:
              PO.PrintLRStringLF(Sp2+"-"+
                             PO.FormatCurrency(RO.Pos.DiscPos.Value)+"",
                             PO.FormatCurrency(RO.Pos.DiscPos.Summ),CharPos);
              break;
            case 2:
              PO.PrintLRStringLF(Sp2+"+"+
                               PO.FormatPercent(RO.Pos.DiscPos.Value)+"%",
                             PO.FormatCurrency(-RO.Pos.DiscPos.Summ),CharPos);
              break;
            case 3:
              PO.PrintLRStringLF(Sp2+"+"+
                              PO.FormatCurrency(RO.Pos.DiscPos.Value)+"",
                             PO.FormatCurrency(-RO.Pos.DiscPos.Summ),CharPos);
              break;
          }
        }
      }

      //   
      if (RO.Pos.DiscPos.TotalSumm  != 0)
        if (RO.Pos.DiscPos.TotalSumm < 0)
          PO.PrintLRStringLF(Sp+"+"+PO.FormatPercent(RO.Pos.DiscPos.TotalValue)+"%",
                                  PO.FormatCurrency(-RO.Pos.DiscPos.TotalSumm),CharPos);
        else
          PO.PrintLRStringLF(Sp+"-"+PO.FormatPercent(RO.Pos.DiscPos.TotalValue)+"%",
                                   PO.FormatCurrency(RO.Pos.DiscPos.TotalSumm),CharPos);

      //   
      if (RO.Pos.TotalDiscSumm != 0)
        if (RO.Pos.TotalDiscSumm < 0)
          PO.PrintLRStringLF(Sp+"+"+PO.FormatPercent(RO.Pos.TotalDiscValue)+"%",
                                  PO.FormatCurrency(-RO.Pos.TotalDiscSumm),CharPos);
        else
          PO.PrintLRStringLF(Sp+"-"+PO.FormatPercent(RO.Pos.TotalDiscValue)+"%",
                                   PO.FormatCurrency(RO.Pos.TotalDiscSumm),CharPos);

      //  
      if (RO.Pos.TotalDiscSumm != 0)
        PO.PrintLRString(Sp+"  ",PO.FormatCurrency(RO.Pos.SummWD),CharPos);

      // 
      if (RO.Pos.Tax.Count > 0)
      {
        PO.PrintStringWordWrap(Sp+" ");
        PO.PrintLRStringLF(Sp2+"",PO.FormatCurrency(RO.Pos.Tax.BaseSummMinusTax),CharPos);
      }

      // 
      for(RO.Pos.Tax.Index = 1;
          RO.Pos.Tax.Index <=
          RO.Pos.Tax.Count;
          RO.Pos.Tax.Index++)
      {
        if (RO.Pos.Tax.TaxRateValue != 0)
          PO.PrintLRString(Sp2+RO.Pos.Tax.TaxRateText,
                           PO.FormatCurrency(RO.Pos.Tax.Summ),CharPos);
      }

      // 
      if (RO.Pos.Tax.TotalSumm > 0)
        PO.PrintLRStringLF(Sp2+" ",PO.FormatCurrency(RO.Pos.Tax.TotalSumm),CharPos);

   }

  if (RO.Pos.Number != RO.Pos.Count)
    PO.PrintLRStringLF("_","_","_");

}


  // 

function PrintFooter(PO, RO)
{
  Sp = "  ";
  Sp2 = "    ";
  //  
  Char = "_";


  PO.PrintLRStringLF("=","=","=");

  //    
  PO.PrintLRStringLF(" . "+RO.DateOpen," . "+RO.DateClose," ");

  //    
  PO.PrintLRStringLF(".. "+RO.TimeOpen,".. "+RO.TimeClose," ");

  // 
  for(RO.Aspect.Index = 1;
      RO.Aspect.Index <=
      RO.Aspect.Count;
      RO.Aspect.Index++)
  {
    if (RO.Aspect.Text != "")
      PO.PrintStringWordWrap(RO.Aspect.AspectText+": "+RO.Aspect.Text);
  }

  //   
  if(RO.ClientCard != "")
  PO.PrintStringWordWrap(": "+RO.ClientCard+" "+RO.ClientName);

  //-   
  PO.PrintLRStringLF(": "+RO.PosCount,": "+RO.BuyCount," ");

  //  
  PO.PrintLRStringLF("",PO.FormatCurrency(RO.SummForD),Char);

  if(RO.Disc.Count > 0)
    PO.PrintStringWordWrap("  ");

  //  
  for (RO.Disc.Index = 1;
       RO.Disc.Index <=
       RO.Disc.Count;
       RO.Disc.Index++)
  {
    if (RO.Disc.Summ != 0)
    {
      if (RO.Disc.Text != "")
        PO.PrintStringWordWrap(RO.Disc.Text);
      switch(RO.Disc.TypeD)
      {
        case 0:
          PO.PrintLRStringLF(Sp+"-"+PO.FormatPercent(RO.Disc.Value)+"%",
                                    PO.FormatCurrency(RO.Disc.Summ),Char);
          break;
        case 1:
          PO.PrintLRStringLF(Sp+"-"+PO.FormatCurrency(RO.Disc.Value)+"",
                                    PO.FormatCurrency(RO.Disc.Summ),Char);
          break;
        case 2:
          PO.PrintLRStringLF(Sp+"+"+PO.FormatPercent(RO.Disc.Value)+"%",
                                    PO.FormatCurrency(-RO.Disc.Summ),Char);
          break;
        case 3:
          PO.PrintLRStringLF(Sp+"+"+PO.FormatCurrency(RO.Disc.Value)+"",
                                    PO.FormatCurrency(-RO.Disc.Summ),Char);
          break;
      }
    }
  }

  //   
  if (RO.Disc.Count > 0)
    if (RO.Disc.TotalSumm < 0)
      PO.PrintLRStringLF("+"+PO.FormatPercent(RO.Disc.TotalValue)+"%",
                           PO.FormatCurrency(-RO.Disc.TotalSumm),Char);
    else
      PO.PrintLRStringLF("-"+PO.FormatPercent(RO.Disc.TotalValue)+"%",
                             PO.FormatCurrency(RO.Disc.TotalSumm),Char);

  //  
  //  
  if (RO.TotalDiscSumm != 0)
    if (RO.TotalDiscSumm < 0)
      {
          PO.PrintLRString("  ",PO.FormatCurrency(-RO.TotalDiscSumm),Char);
          PO.PrintLRString("+"+PO.FormatPercent(RO.TotalDiscValue)+"%",
                             PO.FormatCurrency(-RO.TotalDiscSumm),Char);
      }
    else
      {
          PO.PrintLRString("  ",PO.FormatCurrency(RO.TotalDiscSumm),Char);
          PO.PrintLRString("-"+PO.FormatPercent(RO.TotalDiscValue)+"%",
                              PO.FormatCurrency(RO.TotalDiscSumm),Char);
      }


  //  
  if ((RO.SummForD-RO.SummWD) != 0)
    PO.PrintLRStringLF("  ",PO.FormatCurrency(RO.SummWD),Char);

  // 
  for(RO.Tax.Index = 1;
      RO.Tax.Index <=
      RO.Tax.Count;
      RO.Tax.Index++)
  {
    if(RO.Tax.Index == 1)
      PO.PrintStringWordWrap(" ");

    if (RO.Tax.Summ != 0)
      PO.PrintLRString(Sp+RO.Tax.TaxRateText,
                          PO.FormatCurrency(RO.Tax.Summ),Char);

    //   
    if(RO.Tax.Index == RO.Tax.Count)
      PO.PrintLRString(Sp+"",PO.FormatCurrency(RO.Tax.TotalSumm),Char);
  }

  //
  PO.PrintStringWordWrap("");
  for(RO.Payment.Index = 1;
      RO.Payment.Index <=
      RO.Payment.Count;
      RO.Payment.Index++)
  {
    if(RO.Payment.ClientSumm > 0)
    {
      PO.PrintLRStringLF(Sp+RO.Payment.Text+", "+RO.Payment.Currency,
                        "="+PO.FormatCurrency(RO.Payment.ClientSumm),Char);

      PO.PrintStringWordWrap(Sp+PO.FormatCurrency(RO.Payment.ClientSummCurr)+"  "+
                                          RO.Payment.CurrencyRate);
    }
    else
    {
      PO.PrintStringWordWrap("");
      PO.PrintLRStringLF(Sp+RO.Payment.Text+", "+RO.Payment.Currency,
                        "="+PO.FormatCurrency(-RO.Payment.ClientSumm),Char);

      PO.PrintStringWordWrap(Sp+PO.FormatCurrency(-RO.Payment.ClientSummCurr)+"  "+
                                          RO.Payment.CurrencyRate);
    }
    if(RO.Payment.Card != "")
      PO.PrintStringWordWrap(Sp2+RO.Payment.Card);
  }

  PO.PrintLRStringLF("=","=","=");

  // ( -)
  //PO.PrintBarcode(RO.Barcode,0,12,300);

}
