Проверка ЮЛ на Ликвидирование.

Автор:sergksa
Дата:05.12.2014
Просмотров:3426
Скачиваний:572
Оценка:, Оценок - 1
Скачать (rar-файл; Размер - 81501)

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

Описание

После того, как попользовал и оптимизировал возможности проверки паспортов по данным ФМС :
Примеры:
https://isupport.softlab.ru/Portal/Samples/sample.asp?ID=454
https://isupport.softlab.ru/Portal/Samples/sample.asp?ID=459
а также новые штатные возможности РС по этой же проблематике.



Тут наткнулся на очень похожую проблему, проверки ЮЛ на их Ликвидирование. Оказывается, на сайте ЦБ справочник ведется.
Можно скачать по ссылке: http://www.cbr.ru/egrulinfo/?Prtid=egrul1
Файл UL_LIQUIDATION.CSV вытащить из архива.
Отсортировать файл утилитой Sort.exe (спасибо за идею нашим коллегам под никами tema и olegbarsky)

Sort UL_LIQUIDATION.CSV > UL_LIQUIDATION.TXT


UL_LIQUIDATION.TXT – становится поисковым файлом, который можно оперативно использовать для проверки по ИНН является ли ЮЛ ликвидированным или находится ли оно на стадии ликвидации.

Естественно задача могла бы быть рещена и другими способами, в том числе и с конвертацией в СУБД, но данный способ показался мне привлекательным в плане простоты, оперативности при обновлении (можно легко написать скрипт обновления из планировщика) , скорости и относительной независимости от изменений формата файла.

Поскольку файл в пример можно загрузить только в размере до 0.5 мб, не включил в пример полный файл с данными UL_LIQUIDATION.TXT но сделал его из двух строк для тестирования макросов.

Пример с заполненным файлом UL_LIQUIDATION.TXT можно скачать по ссылке:
https://yadi.sk/d/59S5kAZadAuYq (~110мб)

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

 
var ULLfilename="..\\..\\psp_bad\\UL_LIQUIDATION.txt";
var ULLsprstatus="..\\..\\psp_bad\\DICT_UL_LIQUIDATION_STATUS.csv";

Import wbn_lib;
private var errorS=0;


Macro INN_in_file(INN: string,sve: string): bool; //sk
                              //вся строка данных 
//[#](inn);
	var p1=0, p2 = 0,half,i,findstr;
       var sss,pr,sn1,sn2,rzd=strfor(13)+strfor(10),pasplen=12;//длина нормального паспорта вместе с разделителями
       var pasp = TStream (ULLfilename);

   setparm(1,"");

	findstr = rzd+INN;
     p2 = pasp.GetSize;

     while (p2-p1>pasplen)

	half = p1+int((p2-p1)/2);
       if (half<1000) half=0; end;

	pasp.SetPos(half);
       pasp.Read(sss, V_STRING, 2000);


       if (half==0)
         sss=rzd+sss;
       else
         i=index(sss,rzd);
         if (i==0)  return false; end;
         half=half+i-1;
         sss=substr(sss,i);
       end;

//  [############# ########### ############# #] (p1,p2,half,tooem(strsubst(strsubst(sss,rzd," "),strfor(9),"-")));


       i=index(sss,findstr);
       if (i>0)  // значит попался, считываем инфу
         half=half+i-1+strlen(rzd);
         pasp.SetPos(half);
         pasp.Read(sve, V_STRING, 2000);
         i=index(sve,rzd);
         if (i>10) sve=substr(sve,1,i-1); end;
         setparm(1,tooem(sve));
         return true; 
       end;
       if (sss>findstr) if (half==p2) return false; end;  p2=half ; end;
       if (sss<findstr) if (half==p1) return false; end; p1=half ; end;
      end; //while
      return false;

onerror();
 if (errorS==0)
  msgbox("Ошибка "+ULLfilename+"| пожалуйста сообщите в отдел АБС");
  errorS=1;
 end;
 return false;

end;


//test
var sss;

[##########](INN_in_file("1234567890",sss));
[#](sss);

[##########](INN_in_file("0000000002"));
[##########](INN_in_file("2442000392"));
[##########](INN_in_file("0000000001"));

//[##########](Pasp_in_file("4503","520825"));


private array ULL_ST_MAS;

// можно много спосбов придумать по использованию данного справочника
macro ULL_status(kod)
 file aa () txt;
 var i;
 if (kod==0) return "Неизвестный статус ликвидации"; end;

 if (asize(ULL_ST_MAS)==0)
  open(aa,ULLsprstatus);
  while (next(aa))
   aa.str=tooem(aa.str);
   i=wbn(aa.str,strfor(9),1);
   ULL_ST_MAS(i)=wbn(aa.str,strfor(9),3);
///[#](aa.str);
  end;
 end;
 return ULL_ST_MAS(kod);

end;//macro

//test;msgbox(ULL_status(40));exit;


//возвращает информацию об ликвидации или пустую строку.
macro ULL_test_INN(inn)
var rr="",sve,st,data;
 if ((INN_in_file(inn,sve)))
  st=wbn(sve,strfor(9),6);
  data=wbn(sve,strfor(9),7);
  rr="ЮЛ с ИНН:"+inn+" "+ULL_STATUS(st)+" ("+data+")";
 end;

return rr;
end;//macro

//test
/*
[#](ULL_test_INN("9901007417"));
[#](ULL_test_INN("0000000002"));
*/


/* 
// Дополнение к файлам типа document.mac по проверке на ликвидацию
import ULL;
// ...
// вставка в макрос Проверитьдокумент
   if (ULL_test_INN(Документ.OKPO_payer)>"")
    if (gettrue(false,"Ошибка при проврке плательщика "+документ.Payer+"|"+ULL_test_INN(Документ.OKPO_payer)+"|Продолжить?"))
     return 1;
    end;
   end;
   if (ULL_test_INN(Документ.OKPO_receiver)>"")
    if (gettrue(false,"Ошибка при проврке получателя "+документ.receiver+"|"+ULL_test_INN(Документ.OKPO_receiver)+"|Продолжить?"))
     return 1;
    end;
   end;
*/