// Расчетно-платежная ведомость

var CFile,
    CTabl;

var wb, wsh;

int len = 512;

char arg[len],
     str[len],
     buf[len],
     ts1[len],
     ts2[len],
     ts[len];

// Параметры
string Podr = ""; // Название подразделения
string Dat = "";  // Дата ведомости
int NPodr  = 0; // 1 - печатать наименование подразделения и месяц на всех листах; 0 - не печатать
int Tilist = 1; // 1 - использвать титульный лист; 0 - не использовать
int Podn   = 0; // 1 - использвать лист для подножия; 0 - не использовать

rpved(&xls,&retpar,nret,&rpar,nrp)
{    
   rpved_new(retpar,nret,rpar,nrp);
}

rpved_new(&retpar,nret,&rpar,nrp)
// xls - ссылка на Excel пришедшая из comtab
// retpar - массив данных пришедший из comtab
// nret - число элементов в массиве retpar
// rpar - массив параметров для данного модуля
// nrp - число элементов в массиве rpar
{
  try
  {
    if ( nrp >= 1 )
    {
      Podr = rpar[0];
    }
    if ( nrp >= 2 )
    {
      Dat    = rpar[1];
      Tilist = rpar[2];
      NPodr  = rpar[3];
      Podn   = rpar[4];
    }

    if ( atoi(nrp) != 5 )
    {
      AmbaMessageBox("Версия скриптового модуля (файл rpved.s) не соответствует версии формы печати","Предупреждение!",0,0);
    }

    CFile = CreateObject("CurPrnFile"); // объект класса для работы с текущим файлом печати
    CFile.SetFlagBrowse(0);                 // запрещаем просмотр
    
    CTabl = CreateObject("CurPrnTbl");  // объект класса для работы с текущей таблицей
    FillFld();
    
    int cwsh = tGetWshCount();
    string fnam = "Courier New";
    char sss[256];
    int nf = 8;

    if ( NPodr ) // печатаем наименование подразделения и месяц на всех листах
    {
      for ( int l=2; l<=atoi(retpar[1]) ;l++ )
      {
         tGetWshByIndex(l);
         tWshSelect();

         tFontNameCell("B1",fnam);
         tFontSizeCell("B1",nf);

         ts = ""; Trim(Podr); Trim(Dat);
         ts = "Ведомость за " + Dat + "     ";
         if ( Str_Cmp(Podr,""," ") )
            ts += " Структурное подразделение: " + Podr;
         tWriteStringToCell2(1,2,OemToAnsi(ts));
      }
    }

    // печатаем подножие
    int n = atoi(retpar[2]);

    if ( Podn )
    {
      // подножие на отдельном листе
      n = 1;
      tGetWshByIndex(tGetWshCount());
      tWshSelect();
    }
    else
    {
      tGetWshByIndex(atoi(retpar[1]));
      tWshSelect();
    }

    sprintf(sss,"A%d",n+1);
    tFontNameCell(sss,fnam);
    tFontSizeCell(sss,nf);

    sprintf(sss,"A%d",n+2);
    tFontNameCell(sss,fnam);
    tFontSizeCell(sss,nf);

    sprintf(sss,"A%d",n+3);
    tFontNameCell(sss,fnam);
    tFontSizeCell(sss,nf);
    tVerticalAlignment2(n+3,1,n+3,1,1);

    sprintf(sss,"A%d",n+4);
    tFontNameCell(sss,fnam);
    tFontSizeCell(sss,nf);

    sprintf(sss,"A%d",n+5);
    tFontNameCell(sss,fnam);
    tFontSizeCell(sss,nf);
    tVerticalAlignment2(n+3,1,n+3,1,1);

    sprintf(sss,"A%d",n+6);
    tFontNameCell(sss,fnam);
    tFontSizeCell(sss,nf);

    tWriteStringToCell2(n+1,1,OemToAnsi("По настоящей ведомости  выдано ______________________, не выдано ______________________ ,  депонировано _________________"));
    tWriteStringToCell2(n+2,1,OemToAnsi("Составил ________________   _____________   _____________________     Раздатчик ________________   _____________   _____________________"));
    sprintf(sss,"%c           (должность)        (подпись)     (расшифровка подписи)                 (должность)        (подпись)     (расшифровка подписи)",'\t');
    tWriteStringToCell2(n+3,1,OemToAnsi(sss));
    tWriteStringToCell2(n+4,1,OemToAnsi("Проверил ________________   _____________   _____________________     Кассир  _____________   _____________________"));
    sprintf(sss,"%c           (должность)        (подпись)     (расшифровка подписи)               (подпись)     (расшифровка подписи)",'\t');
    tWriteStringToCell2(n+5,1,OemToAnsi(sss));
    tWriteStringToCell2(n+6,1,OemToAnsi("\"____\" _________________  20 ___ г.                                   \"____\" __________________  20 ___ г."));

    
    // печатаем шапку
    if (Tilist)
    {
      tGetWshByIndex(1);
      tWshSelect();

      tWriteStringToCell("C4",OemToAnsi("В кассу для оплаты в срок"));
      tWriteStringToCell("C6",OemToAnsi("c \"___\"_____________ 20 __ г.  по \"___\"_____________ 20 __ г."));
    
      // сумма прописью
      string cash = Trim(CTabl.Get_Bottom_Text(fld[idxCASHSUM]));
      
      R_MAKE_SCRIPT(cash,str,100,0);
    
      tWriteStringToCell("C8",OemToAnsi("в сумме"));
      tWriteStringToCell("O8",OemToAnsi(Trim(str)));

      PasteDelim(cash,ts1,ts2);

      if ( strlen(ts2) == 0 ) ts2 = "0";

      tWriteStringToCell("O9",static_cast_to_string(ts1) + OemToAnsi(" руб. ") + static_cast_to_string(ts2) + OemToAnsi(" коп."));
    
      char Ruk[len], Dol[len], Glb[len], Dgl[len], Org[len];
    
      GetEnterpriseVar("РУКП",    Ruk,len-1); // Руководитель предприятия
      GetEnterpriseVar("ДОЛЖ",    Dol,len-1); // Должность руководителя предприятия
      GetEnterpriseVar("ГЛБУХ",   Glb,len-1); // Главный бухгалтер
      GetEnterpriseVar("ДОЛЖБУХ", Dgl,len-1); // Должность главного бухгалтера
      GetEnterpriseVar("ИМЯП",    Org,len-1); // Должность главного бухгалтера
    
      tMergeCellsCell("C11:AJ11",1);
      tHorizontalAlignment("C11:AJ11",1); 
      tWriteStringToCell("C11",OemToAnsi(Trim(Dol)));

      tMergeCellsCell("AK11:BD11",1);
      tBordersCell("AK11:BD11",0,0,0,1,1); 

      tWriteStringToCell("BG11",OemToAnsi(Trim(Ruk)));
    
      tMergeCellsCell("AK12:BD12",1);
      tHorizontalAlignment("AK12:BD12",2); 
      tWriteStringToCell("AK12",OemToAnsi("(подпись)"));
    
      tWriteStringToCell("BG12",OemToAnsi("(расшифровка подписи)"));
    
      tMergeCellsCell("C14:AJ14",1);
      tHorizontalAlignment("C14:AJ14",1); 
      tWriteStringToCell("C14",OemToAnsi(Trim(Dgl)));
    
      tMergeCellsCell("AK14:BD14",1);
      tBordersCell("AK14:BD14",0,0,0,1,1); 
    
      tWriteStringToCell("BG14",OemToAnsi(Trim(Glb)));
    
      tMergeCellsCell("AK15:BD15",1);
      tHorizontalAlignment("AK15:BD15",2); 
      tWriteStringToCell("AK15",OemToAnsi("(подпись)"));
    
      tWriteStringToCell("BG15",OemToAnsi("(расшифровка подписи)"));

      tWriteStringToCell("CO2",OemToAnsi("РАСЧЕТНО - ПЛАТЕЖНАЯ ВЕДОМОСТЬ ____________"));
      tWriteStringToCell("CZ3",OemToAnsi("за  " + Trim(R_SYS_DATA("61",str,40,0))+ "  г."));
      tWriteStringToCell("CS6",OemToAnsi("Учреждение ____________________________________________"));
    
      tMergeCellsCell("CS7:FR7",1);
      tHorizontalAlignment("CS7:FR7",1); 
      tWriteStringToCell("CS7",OemToAnsi(Trim(Org)));
    
      tWriteStringToCell("CS9",OemToAnsi("Структурное подразделение ______________________________"));
    
      tMergeCellsCell("CS10:FR10",1);
      tHorizontalAlignment("CS10:FR10",1); 
      tWriteStringToCell("CS10",OemToAnsi(Trim(Podr)));
  
      tMergeCellsCell("GP4:HQ4",1);
      tBordersCell("GP4:HQ4",1,1,1,1,1); 
      tHorizontalAlignment("GP4:HQ4",2); 
      tWriteStringToCell("GP4",OemToAnsi("КОДЫ"));

      tMergeCellsCell("FS5:GN5",1);
      tHorizontalAlignment("FS5:GN5",3); 
      tWriteStringToCell("FS5",OemToAnsi("Форма по ОКУД"));

      tMergeCellsCell("GP5:HQ5",1);
      tBordersCell("GP5:HQ5",1,1,1,1,1); 

      tHorizontalAlignment("GP5:HQ5",2); 
      tWriteStringToCell("GP5",OemToAnsi("0504401"));

      tMergeCellsCell("FS6:GN6",1);
      tHorizontalAlignment("FS6:GN6",3); 
      tWriteStringToCell("FS6",OemToAnsi("Дата"));

      tMergeCellsCell("GP6:HQ6",1);
      tBordersCell("GP6:HQ6",1,1,1,1,1); 

      tMergeCellsCell("FS7:GN7",1);
      tHorizontalAlignment("FS7:GN7",3); 
      tWriteStringToCell("FS7",OemToAnsi("по ОКПО"));

      tMergeCellsCell("GP7:HQ7",1);
      tBordersCell("GP7:HQ7",1,1,1,1,1); 

      tMergeCellsCell("GP8:HQ8",1);
      tBordersCell("GP8:HQ8",1,1,1,1,1); 

      tMergeCellsCell("FS10:GN10",1);
      tHorizontalAlignment("FS10:GN10",3); 
      tWriteStringToCell("FS10",OemToAnsi("по ОКЕИ"));

      tMergeCellsCell("GP9:HQ10",1);
      tBordersCell("GP9:HQ10",1,1,1,1,1); 
      tHorizontalAlignment("GP9:HQ10",2); 
      tVerticalAlignment("GP9:HQ10",3); 
      tWriteStringToCell("GP9",OemToAnsi("383"));

      tWriteStringToCell("GA17",OemToAnsi("от  Дата"));

      tMergeCellsCell("GP17:HQ17",1);
      tBordersCell("GP17:HQ17",1,1,1,1,1); 
      tHorizontalAlignment("GP17:HQ17",2); 

      tHorizontalAlignment("EQ17",3); 
      tWriteStringToCell("EQ17",OemToAnsi("Расходный кассовый ордер №"));

      tMergeCellsCell("ES17:FW17",1);
      tBordersCell("ES17:FW17",1,1,1,1,1); 
      tHorizontalAlignment("ES17:FW17",2); 

      tHorizontalAlignment("BV17",3); 
      tWriteStringToCell("BV17",OemToAnsi("Кредит счета"));

      tMergeCellsCell("BX17:DB17",1);
      tBordersCell("BX17:DB17",1,1,1,1,1); 

      tHorizontalAlignment("BX17:DB17",2); 

      tHorizontalAlignment("W17",3); 
      tWriteStringToCell("W17",OemToAnsi("Дебет счета"));

      tMergeCellsCell("Y17:BC17",1);
      tBordersCell("Y17:BC17",1,1,1,1,1); 
      tHorizontalAlignment("Y17:BC17",2); 
    }
  }
  catch(...)
  {
    tMakeXlsVisible(); // делаем форму видимой
    throw;
  }

  tWshCellSelect(1,1);       
  tMakeXlsVisible(); // делаем форму видимой

  return 0;
}


PasteDelim(chi,&rub,&kop)
{
  char ts[len];
  sprintf(ts,"%s",Trim(chi));

  string dc = "";
  if ( reinterpret_cast_to_long(strrchr(ts,'.')) )
    dc = static_cast_to_string(strrchr(ts,'.'));

  char cc[len];

  int x = strlen(ts);

  for ( int d = 0; d < x; d++ )
  {
    if ( ts[d] == '.' ) 
      break;

    cc[d] = ts[d];
  }

  buf[0] = 0;

  int b = 0;
  int t = 0;

  sprintf(ts,"'");

  for ( int d = strlen(cc); d > 0; d-- )
  {
    t++;
    buf[b] = cc[d-1];
    b++;

    if ( d-1 == 0 ) break;

    if ( t == 3 )
    {
      t = 0;
      buf[b] = ts[0];
      b++;
    }
  }

  buf[b] = 0;

  b = 0;

  for ( int d = strlen(buf); d; d-- )
  {
    ts[b] = buf[d-1];
    b++;
  }

  ts[b] = 0;

  sprintf(str,"%s%s",ts,dc);

  rub = ts;
  kop = SubStr(dc,1); Trim(kop);

  return static_cast_to_string(str);
}


Trim(&str)
{
  FreeSpaceString(str,3,""); 
  return static_cast_to_string(str);
}


FillFld()
//=============================================================================
// Находим поля в таблице
//=============================================================================
{
  fld[idxCASHSUM] = CTabl.Find_Name_Fld("CASHSUM");

  return 0;
}

int idxCASHSUM = 0, // сумма в ведомость

    CountIdx = 1; // число элементов в массиве fld

int fld[CountIdx]; // массив для намеров полей таблицы
