Отзыв 300-ок

Автор:KaMPiLeR
Дата:10.10.2003
Просмотров:3201
Скачиваний:761
Оценка:, Оценок - 6
Скачать (arj-файл; Размер - 2923)

Обсудить в форуме

Описание

Отзываем 300-ки (нехватка средств на корсчете).
Макет D, ни в коем случае не применять для отзыва одного документа -
нельзя - макет D только для отзыва из 300-ки (проходили).

Нормальный пример как можно из menu сделать MultiSelect (Thnx Adyan)

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

 /*Евгений Дадыков aka -=KaMPiLeR=- МБ СЕНАТОР*/
/*******************************************************************************
 *
 * Отзываем 300-ки (нехватка средств на корсчете).
 * Макет D, ни в коем случае не применять для отзыва одного документа -
 * нельзя - макет D только для отзыва из 300-ки (проходили).
 *
 * Нормальный пример как можно из menu сделать MultiSelect (Thnx Adyan)
 * В поле DocumnetId должно быть приписан справа символ "*"
 * делаеться это на этапе приема документов из РКЦ (mcirecr.mac)
 *
 * там где идет проверка макета вставить
 *
 *******************************************************************************
  elif(
       ( Счетчик_итогов == 4 ) /* 300-ка промежуточная */
       or
       ( Счетчик_итогов == 5 ) /* 300-ка реальная */
      )
      /*Подготавливаем 300-ки*/
      cnt300=cnt300+1;
      sum300=sum300+Начальный.Sum;
      Начальный.Code_Currency = 0;
      Начальный.CorSchem = 0;
      Начальный.DocumentId=substr(Строка,1,6);
      Начальный.DateCarry=date(
                               int(substr( Строка,  7, 2 )),
                               int(substr( Строка,  9, 2 )),
                               int(substr( Строка, 11, 4 ))
                              );
      if( (geteq(Начальный))and(Начальный.DocumentId==substr(Строка,1,6)) )
         /*Приписываем звездочку в конце DocumentId - признак что
           нехватило средств на корсчете*/
         Начальный.DocumentId=Начальный.DocumentId+"*";
         update(Начальный);
      end;

 ************************************************************************************************
   cnt300 и sum300 - можно потом выводить с сообщением после подкачки всего рейса что
                     в рейсе есть 300-ки.
 */
import BankInter, format, _repstr, _repdb, _math;

file _corac(coracdoc) key 5 write;
file _sr(srlog) write;


Array
  mnMenu, /* mnMenu - пункты меню, */
  Select; /* Select списoк выбранных пунктов */

asize(mnMenu,0);
mnMenu(0)="Конец выбора";
mnMenu(1)="Выделить все";
mnMenu(2)="Инвертировать";
i=3;

rewind(_corac);

count=0;
Summ=$0;
mydate={curdate};
/*
  эта строка, если выгружали из планируемых - перед закрытием дня
*/
  getdate(mydate,"С какой даты выгружали");

_corac.DateCarry=mydate;
_corac.Code_Currency = 0;
_corac.CorSchem = 0;
_corac.DocumentId="";
getge(_corac);
ТекЗапись=0;
InitProgress ( NRecords(_corac),""," Заполняю меню ");
while(next(_corac))
  if( (index(_corac.DocumentId,"*"))and(_corac.DateCarry==mydate) )
     summa=string(_corac.Sum:a);
     summa=AddLeaderChars(summa," ",15);
     numb=_corac.Numb_Document;
     /*numb=mod(numb,1000);*/
     numb=AddLeaderChars(numb," ",6);
     mnMenu(i)=substr(substr(_corac.DocumentId,1,6)+":"+numb+":"+summa+":"+_corac.DateCarry+":"+substr(_corac.Account_Payer,14,5)+":"+_corac.Payer,1,76);
     /*string(_corac.Sum:a)*/
     i=i+1;
     count=count+1;
     Summ=Summ+_corac.Sum;
  end;
  ТекЗапись = ТекЗапись + 1;
  UseProgress (ТекЗапись);
end;
if(aSize(mnMenu)==3)
   msgbox("Нет документов на отзыв 300-ки");
   exit(1);
else
   msgbox("Трехсотка ("+string(count)+")::="+string(Summ:a));
end;

flChoice=TRUE;
nm=1;
while(flChoice)
  nm=menu(mnMenu,"~ENTER~ - выбор, ~ESC~ - выход, ~PgUp~ - вверх, ~PgDw~- вниз","Выбор документов на отзыв по 300",null,null,nm);
  /*SWITCH (mn)*/
  if(nm<0)/*по ESC вываливаемся из отчета*/
    exit(1);
  end;
  if(nm==0)/*0-й пункт меню - КОНЕЦ ВЫБОРА*/
     i=3; j=0;
     aSize(Select,0);
     while(i<aSize(mnMenu))
        if(index(mnMenu(i),"~")!=0)
           Select(j)=substr(mnMenu(i),2,strlen(mnMenu(i))-2);
           j=j+1;
        end;
        i=i+1;
     end;
     if(asize(Select)==0)
        if(GetTrue(False,"Ничего не выбрано, закончить выбор?"))
          exit(1);
        end;
     else
       flChoice=false;
     end;
  end;
  if(nm==1)/*1-й пункт меню - Выделить все*/
     i=3;
     while(i<asize(mnMenu))
        if (index(mnMenu(i),"~")==0)
           mnMenu(i)="~"+mnMenu(i)+"~";
        end;
        i=i+1;
     end;
  end;
  if(nm==2)/*2-й пункт меню - Инвертировать*/
     i=3;
     while(i<asize(mnMenu))
        if (index(mnMenu(i),"~")>0)
           mnMenu(i)=substr(mnMenu(i),2,strlen(mnMenu(i))-2);
        else
           mnMenu(i)="~"+mnMenu(i)+"~";
        end;
        i=i+1;
     end;
  end;
  /*
    если уже есть выделение красным цветом (символы "~"),
    то снимаем его, нет-ставим
  */
  if(nm>2)
     if (index(mnMenu(nm),"~")>0)
        mnMenu(nm)=substr(mnMenu(nm),2,strlen(mnMenu(nm))-2);
     else
        mnMenu(nm)="~"+mnMenu(nm)+"~";
     end;
  end;
end;

/*Прочитать значение НомерРейса и увеличить его на единицу*/
НомерРейса=AddLeaderChars(НомерРейсаНаМЦИ+1,"0",2);

/*Выгружаем по D-макету, но предварительно найти в coracdoc.dbt*/
setoutput(GetIniString("TEXTDIR")+"\\300.res");
j=0;
while(j<=asize(Select))
  i=0;
  rewind(_corac);
  _corac.Code_Currency = 0;
  _corac.CorSchem = 0;

  Строка = substr( Select(j), i+1 );
  i=index(Строка,":"); if( i==0 ) return; end;
  _corac.DocumentId = substr( Строка, 1, i-1 )/*+"*"*/;

  Строка = substr( Строка, i+1 );
  i=index(Строка,":"); if( i==0 ) return; end;
  НомерДокта = int( substr( Строка, 1, i-1 ) );

  Строка = substr( Строка, i+1 );
  i=index(Строка,":"); if( i==0 ) return; end;
  Сумма1 = strSubst(subStr(Строка, 1, i-1),"''","");
  Сумма = money( Сумма1);

  Строка = substr( Строка, i+1 );
  i=index(Строка,":"); if( i==0 ) return; end;
  _corac.DateCarry = date(
                          int(substr( Строка, 1, 2 )),
                          int(substr( Строка, 4, 2 )),
                          int(substr( Строка, 7, 4 ))
                         );
  
  Строка = substr( Строка, i+1 );
  i=index(Строка,":"); if( i==0 ) return; end;
  СчетПолучателя = substr( Строка, 1, i-1 );

  Получатель = substr( Строка, i );
  if(
     (geteq(_corac))/*and(_corac.Sum==Сумма)
     and
     (_corac.Numb_Document==НомерДокта)
     and
     (_corac.Account_Receiver==СчетПолучателя)*/
    )
    _corac.DocumentId=substr(_corac.DocumentId,1,6);
    update(_corac);
    println(
            "D",                                         /*     1 = Вид макета*/
            AddLeaderChars(_corac.Numb_Document,"0",5),  /*   2-6 = Номер докмента*/
            {MFO_Bank},                                  /*  7-15 = Наш БИК*/
            strsubst(
                     AddLeaderChars(string(_corac.Sum),"0",19),  
                     ".",                                /*19 - так как с точкой*/
                     ""
                    ),                                   /* 16-33 = Сумма документа*/
            substr(_corac.DocumentId,1,6),               /* 34-39 = Электронный номер отзываемого документа*/
            {CORAC_Bank},                                /* 40-59 = Наш Корсчет*/
            strsubst(
                     strsubst(string(date),"-",""),
                     " ",
                     "0"
                    ),                                   /* 60-67 = Дата составления ЭСИД*/
            strsubst(
                     strsubst(string(time),":",""),
                     " ",
                     "0"
                    ),                                   /* 68-73 = Время составления ЭСИД */
            AddLeaderChars(НомерРейса,"0",6),            /* 74-79 = Порядковый номер ЭСИД */
            substr(НашКодСоставителя,1,10)               /* 80-89 = Уникальный идентификатор составителя ЭСИД */
           );
  end;
  j=j+1;
end;

_sr.CorSchem=0;
_sr.Code_Currency=0;
_sr.Oper={Oper};
_sr.kind="О";
_sr.date=mydate;
_sr.rd=date;
_sr.rt=time;
_sr.state=0;
_sr.session=int(НомерРейса);
_sr.filename=GetIniString("TEXTDIR")+"\\300.res";
_sr.fdate=date;
_sr.ftime=time;
_sr.fsize=91*asize(Select);
insert(_sr);