Отчёт по 193-Т
Скачать (zip-файл; Размер - 4837)Обсудить в форуме
Описание
Проверка клиентской базы по 193-Т.
Для работы надо пересохранить ЦеБэшные файлы в формате ods (LibreOffice Calc)
и прописать к ним путь в макросе в строке
var strFolder="\\\\МОЙ_СУПЕРСЕРВЕР\\МОЯ_СУПЕРШАРА$\\193-T";
strFolder должна указывать на папку с PNU файлами, предполагается что это папка на файловом сервере где хранятся общие справочники и куда имеет доступ пользователь, под которым крутится сервер приложений. В момент проверки файл должен быть закрыт, иначе он не скопируется, это такая фича-бага библиотек RS. См SCR 146468, SCR 146467, тема в айсе не публична по мнению RS
проверка проводится по всем файлам pnu??????.ods, найденным в этой папке.
В макросе используется библиотека boostre, которую можно найти в примерах в библиотеке разработчика или заменить функцию проверки строки на цифровой формат.
С найденным клиентом ничего не делается, только печать. Мои легализаторы не смогли внятно сформулировать, что делать в этом случае.
PS. макрос под 5.5, но её нет в списке
Для работы надо пересохранить ЦеБэшные файлы в формате ods (LibreOffice Calc)
и прописать к ним путь в макросе в строке
var strFolder="\\\\МОЙ_СУПЕРСЕРВЕР\\МОЯ_СУПЕРШАРА$\\193-T";
strFolder должна указывать на папку с PNU файлами, предполагается что это папка на файловом сервере где хранятся общие справочники и куда имеет доступ пользователь, под которым крутится сервер приложений. В момент проверки файл должен быть закрыт, иначе он не скопируется, это такая фича-бага библиотек RS. См SCR 146468, SCR 146467, тема в айсе не публична по мнению RS
проверка проводится по всем файлам pnu??????.ods, найденным в этой папке.
В макросе используется библиотека boostre, которую можно найти в примерах в библиотеке разработчика или заменить функцию проверки строки на цифровой формат.
С найденным клиентом ничего не делается, только печать. Мои легализаторы не смогли внятно сформулировать, что делать в этом случае.
PS. макрос под 5.5, но её нет в списке
Текст примера
import ClnInter; import "odsimportclass.mac"; import boostre; var strFolder="\\\\МОЙ_СУПЕРСЕРВЕР\\МОЯ_СУПЕРШАРА$\\193-T"; var fRegDoc = TBFile("regdoc.dbt", "R", 3, null,"bank.def"); var aTable=TArray(); var iClnCount=0; var iTotalRowCount=0; macro GetOdsFileNameByDate var strFileName:String; var repDate=Date(); GetDate(repDate); strFileName=String(repDate); strFileName=SubStr(strFileName,1,2)+SubStr(strFileName,4,2)+SubStr(strFileName,9,2); strFileName=strFolder+"\\pnu"+strFileName+".ods"; return (strFileName); end; /* macro GetOdsFileNameByDate */ macro CheckOdsFile(strFileName) var i:Integer; var a; var bInn:Bool, bOgrn:Bool; var iRowCount=0; macro CheckRegDoc(iRDKind, strRegNum, strRDName); var ret=false; macro ProcessClient() ret=true; /************************************/ /* Действо с клиентом */ /************************************/ //PrintLn(fRegDoc.rec.Client); var sFullName, sShortName, sAddName, sINN, sORGN; GetClientNames(fRegDoc.rec.Client, sFullName, sShortName, sAddName); sINN=GetClientINN(fRegDoc.rec.Client); sORGN=GetClientRegNumber(fRegDoc.rec.Client); [ ]; [ │ В RS-Bank'е │ ################################](strFileName:w); [─────────────┼──────────────────────────────────┼─────────────────────────────────]; [Наименование │ ################################ │ ################################](sShortName:w,a[1]:w); [ИНН │ ################################ │ ################################](sINN:r,a[3]:r); [ОГРН │ ################################ │ ################################](sORGN:r,a[2]:r); [Код │ ################################ │ ################################](GetClientCodeByID(fRegDoc.rec.Client):r,a[0]:r); [Группа │ ################################ │ ################################]("",a[5]:r); [ ]; end; /* macro ProcessClient */ fRegDoc.rec.RDKind=iRDKind; fRegDoc.rec.RegNum=strRegNum; fRegDoc.rec.Client=0; var getOk=fRegDoc.GetGE(); while (getOk and (fRegDoc.rec.RDKind==iRDKind) and (fRegDoc.rec.RegNum==strRegNum)) ProcessClient(); getOk=fRegDoc.Next(); end; return ret; end; /* macro CheckRegDoc(); */ macro CheckStrParam(iIdx,iLen,sName) var strRE="^\\d{"+String(iLen)+"}$"; a[iIdx]=Trim(String(a[iIdx])); //нормализация if (boostre_match(strRE, a[iIdx])<=0) PrintLn("Файл: "+strFileName+ " № п/п "+ a[0]+ " "+ sName + " ["+a[iIdx]+"] не соответствует формату "+strRE); end; end; /* macro CheckStrParam */ var obODSImport=ODSImport(); obODSImport.ForceString=true; aTable=obODSImport.getTable(strFileName); if (not IsEqClass("TArray", aTable)) PrintLn("Не удалось извлечь таблицу с данными из файла "+strFileName); else /* с 1. в первой может быть шапка или заголовок таблицы */ for(i,1,aTable.Size-1,1) a=aTable[i]; if((a[3]=="ИНН") or (a[2]=="ОГРН")) // else if (IsEqClass("TArray", a) and (a.Size>3)) iRowCount=iRowCount+1; if (a[0]!=iRowCount) PrintLn("Что-то не так. Номер по алгоритму - "+String(iRowCount)+", номер по файлу - "+a[0]); end; CheckStrParam(2, 13 ,"ОГРН"); CheckStrParam(3, 10 ,"ИНН"); bInn = CheckRegDoc(RD_KIND_INN, a[3],"ИНН"); bOgrn = CheckRegDoc(RD_KIND_OGRN, a[2], "ОГРН"); if (bInn or bOgrn) iClnCount=iClnCount+1; end; end; end; end; /* for */ end; iTotalRowCount=iTotalRowCount+iRowCount; end; /* macro CheckOdsFile */ var dir = TDirList (strFolder+"\\pnu??????.ods","F"); var iFile:Integer; for(iFile,0,dir.Count-1,1) CheckOdsFile(strFolder+"\\"+dir.Name(iFile)); end; /* for */ if (ValType(iFile)==V_UNDEF) PrintLn("Файлов не обнаружено"); else PrintLn("Файлов: "+String(iFile+1)); PrintLn("Строк: "+String(iTotalRowCount)); PrintLn("Совпадений: "+iClnCount); end;