ОКВЭД -> ОКВЭД2
Скачать (zip-файл; Размер - 51391)Обсудить в форуме
Описание
Класс для преобразования ОКВЭД в ОКВЭД2.
Основой служат ключи, которые надо скачать с сайта Минфина
http://economy.gov.ru/minec/activity/sections/classificators
Файл ключей надо сохранить в открытом формате ods или xlsx
Путь по умолчанию Import\OKVED\ОКВЭД_ОКВЭД2.xlsx
В архиве вспомогательные макросы, включаемве через import и таблица ОКВЭД2 из К+
Основой служат ключи, которые надо скачать с сайта Минфина
http://economy.gov.ru/minec/activity/sections/classificators
Файл ключей надо сохранить в открытом формате ods или xlsx
Путь по умолчанию Import\OKVED\ОКВЭД_ОКВЭД2.xlsx
В архиве вспомогательные макросы, включаемве через import и таблица ОКВЭД2 из К+
Текст примера
import "okved_cnv_class.mac"; var fClient=TBFile("client.dbt","R",0,null,"bank.def"); var cnv=TOkvedConverter(); while(fClient.Next) cnv.ProcessClient(fClient.rec.Client); end; [Клиентов у котрых код ОКВЭД2 уже установлен ######](cnv.cntYet2); [Клиентов у котрых нет кодов ОКВЭД ######](cnv.cntClientNoOkved); [Клиентов у котрых коды ОКВЭД2 установлен на основе кодов ОКВЭД ######](cnv.cntClientCnv); [Всего установлено категорий (кодов ОКВЭД2) ######](cnv.cntCtgSet); //// okved_cnv_class.mac: import CtgInter, ClnInter; IMPORT "odsimportclass.mac"; import "boostbmp.d32"; Class TOkvedConverter private var ClientID; var aOkvedCnvTable=TAssArraySO; var operDate={curdate}; var cntYet2=0; var cntClientCnv=0; var cntClientNoOkved=0; var cntCtgSet=0; private macro ImportOkvedCnvTable var objImport=ODSImport(); objImport.ForceString=true; objImport.strAppName="OKVED OKVED2 KEY"; objImport.SkipTopRow=2; var aXlsTable=objImport.GetTable("..\\Import\\OKVED\\ОКВЭД_ОКВЭД2.xlsx"); if((ValType(aXlsTable) == V_GENOBJ) and IsEqClass("TArray", aXlsTable) and (aXlsTable.Size>0)) var a; var okved1, okved2; var aObj; for (a,aXlsTable) if (ValType(a[0])!=V_UNDEF) okved1=a[0]; end; okved2=a[2]; aObj=aOkvedCnvTable.Get(okved1); if (ValType(aObj)==V_UNDEF) aObj=GenObject("TARRAY"); aOkvedCnvTable.Insert(okved1,aObj); end; aObj[aObj.Size]=okved2; //PrintLN(okved1,"\t",okved2); end; end; end; //macro /*-----------------------------------------------------------------------*/ private macro SetOkved2(v) if ((ValType(v)==V_STRING) and (trim(v)=="")) return; end; if (SetCtgVal(OBJTYPE_CLIENT, 397, GetClientId(ClientID), v, operDate)) cntCtgSet=cntCtgSet+1; else PrintLn("Клиент "+ClientID+". "+"Ошибка установки категории 397 (ОКВЭД2) в значение ["+v+"]"); end; end; /* macro SetCtg */ /*-----------------------------------------------------------------------*/ macro ConvertOkved(okved1) var okved2=aOkvedCnvTable.Get(okved1); if (ValType(okved2)==V_UNDEF) PrintLn("Клиент "+ClientID+". "+"Не найдены соответствия для ОКВЭД "+okved1); else //PrintLn(Implode(okved2)); return okved2; end; end; /*-----------------------------------------------------------------------*/ private macro GetClientCtg(iCtgId) var aVal=TArray(); if (GetCtgVal (OBJTYPE_CLIENT, iCtgId, GetClientId(ClientID), aVal )) return aVal; else return null; end; end; /* macro GetClientCtg */ /*-----------------------------------------------------------------------*/ macro ProcessClient(ClientID_) var elem; if ((ValType(ClientID_)==V_UNDEF) or (ClientID_==0)) return; end; ClientID=ClientID_; var aOkved=GetClientCtg(397); if ((ValType(aOkved)==V_UNDEF) or (aOkved.Size==0)) aOkved=TArray(); var aOkved1=GetClientCtg(301); var a2, elem2; if ((ValType(aOkved1)==V_GENOBJ) and (aOkved1.Size>0)) for (elem, aOkved1) a2=COnvertOkved(elem); if (ValType(a2)==V_GENOBJ) for (elem2, a2) aOkved[aOkved.Size]=elem2; end; end; end; var aOkvedUnique=TAssArrayS(); for (elem, aOkved) if ((ValType(elem)==V_UNDEF) or (elem=="")) elif (aOkvedUnique.Exist(elem)) //защита от задвоения //PrintLn("Skip "+elem); else SetOkved2(elem); aOkvedUnique.Insert(elem); end; end; if (aOkved.Size>0) cntClientCnv=cntClientCnv+1; end; else cntClientNoOkved=cntClientNoOkved+1; end; else cntYet2=cntYet2+1; end; end; ImportOkvedCnvTable(); end;