Отчёт по 193-Т

Автор:tema
Дата:15.11.2013
Просмотров:3419
Скачиваний:665
Оценка:, Оценок - 2
Скачать (zip-файл; Размер - 4837)

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

Описание

Проверка клиентской базы по 193-Т.
Для работы надо пересохранить ЦеБэшные файлы в формате 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;