Вспомогательные отчёты в Excel для 230-ФЗ
Скачать (zip-файл; Размер - 17340)Обсудить в форуме
Описание
В архиве 2 вспомогательных отчета по НКО, выводимых в Excel для удобной последующей работы с ними. В тексте примера один из них: отчёт с быстрым выводом в Excel через TFE_lite с выделением шрифтом и цветом. Отчёт по документам НКО за период. Используются два временных файла - описания их в def файле в архиве.
В архиве ещё отчёт со списком НКО по счетам и TFE_lite для быстрого вывода в Excel.
В архиве ещё отчёт со списком НКО по счетам и TFE_lite для быстрого вывода в Excel.
Текст примера
// список документов проходящих по счетам НКО за заданный период // Используется быстрый вывод в Excel = TFE_lite // и 2 временных файла, описанных в приложенном 230FZ.def // Номер документа и сумма сделаны увеличенным и жирным шрифтом // Если на клиенте-НКО стоит отметка ДА в 953 категории, а статус выгрузки в модуль ФинМон пустой - ячейка статус подкрашивается жёлтым цветом import bankinter, rsexts, rcw, clnInter, globals; import "TFE_lite.mac"; // здесь должен быть ваш путь к папке, где лежит TFE_lite.mac var AcMask="40703*,40603*,40503*"; var ac=TBFILE("account.dbt","R",0); var cl=TBFILE("client.dbt","R",0); var xx; var dd=TBFILE("doc230fz.dbt","EAC+",0,GetWorkFileName("doc230fz"),"230FZ.def"); // пропишите ваш путь в def-файлу var dac=TBFILE("ac230fz.dbt","EAC+",0,GetWorkFileName("ac230fz"),"230FZ.def"); // -//- var opc=TBFILE("opcontr.dbt","R",2); var dat1 = {curdate}-1; var dat2 = {curdate}; var aaStat=TARRAY; aaStat[0]="";aaStat[1]="на контроль";aaStat[2]="проконтр.";aaStat[3]="завизир.";aaStat[4]="отложен";aaStat[5]="выгружен";aaStat[6]="отвергнут"; var WhatNKOOut=0; macro GetClCtg(_ctgId, _clId) // получение категории для Client var aa=TARRAY(); aa.Size = 0; If (GetCtgVal(3,_ctgID,GetClientID(_clID),aa)) if (aa.Size > 0) return aa[aa.size-1]; end; end; return ""; end; macro GetAccCtg(_ctgId, _acc) // получение категории для account var aa=TARRAY(), _cur = 0; aa.Size = 0; _cur = Int(Substr(_acc,6,3)); if (_cur == 810) _cur = 0; end; If (GetCtgVal(5,_ctgID,GetAccountID(1, _cur, _acc),aa)) if (aa.Size > 0) return aa[aa.size-1]; end; end; return ""; end; macro Filldac(_dat, _acc, _opbik, _opacc, _opinn, _opnam, _debkre, d0) //заполнение одной записи временного файла dac.clear; dac.keynum = 1; dac.rec.account = _acc; if ((StrLen(_opInn) - index(_opInn,"/")) < 3) _opInn = trim(Substr(_opInn,1,Index(_opInn,"/")-1)); end; if (not dac.Geteq) ac.clear; ac.rec.account = _acc; ac.GetEq; dac.keynum = 0; dac.clear; dac.rec.client = ac.rec.client; if (not dac.GetEq) dac.clear; dac.rec.client = ac.rec.client; dac.rec.code = GetClientCodeById(dac.rec.client); dac.rec.account = ac.rec.account; dac.rec.c953=GetClCtg(953,ac.rec.client); dac.insert; else dac.rec.account = ac.rec.account; dac.insert; end; end; if (((dac.rec.c953 == "ДА") and (mod(WhatNKOout,2) == 0)) or ((dac.rec.c953 != "ДА") and (WhatNKOout > 0))) opc.rewind; opc.clear; dd.clear; dd.rec.date_carry = _dat; dd.rec.client = dac.rec.client; dd.rec.code = dac.rec.code; dd.rec.account = _acc; dd.rec.opbik = _opbik; _opAcc = trim(StrSubst(_opAcc ,"()","")); dd.rec.opacc = _opacc; dd.rec.opinn = _opinn; dd.rec.opnam = _opnam; dd.rec.debkre = _debkre; dd.rec.sum = d0.rec.sum; dd.rec.ground = d0.rec.ground; dd.rec.oper = d0.rec.oper; dd.rec.numb_document = d0.rec.numb_document; opc.rec.iApplicationKind = dd.rec.iApplicationKind = d0.rec.iApplicationKind; opc.rec.ApplicationKey = dd.rec.ApplicationKey = d0.rec.ApplicationKey; dd.rec.Number_Pack = d0.rec.Number_Pack; if (opc.GetEq) dd.rec.status = opc.rec.status; end; dd.insert; end; end; macro Fill_DD // заполнение временного файла var _opAcc="",d0=TBFILE("arhdoc.dbt","R",0); InitProgress(dat2 - Dat1,"","Заполняю временный файл"); if (Dat1 < {curdate}) d0.rewind; d0.clear; d0.rec.date_carry = dat1; d0.getlt; while ((d0.next) and (d0.rec.date_carry <= Dat2)) if (d0.rec.result_carry != 23) UseProgress(d0.rec.date_carry - Dat1); if (compareStrWithMasks(AcMask, d0.rec.real_receiver) == 0) _opAcc = d0.rec.account_payer; if (d0.rec.real_payer != d0.rec.account_payer) _opAcc = String(_opAcc, " (",d0.rec.real_payer,")"); end; FillDac(d0.rec.date_carry, d0.rec.real_receiver,d0.rec.MFO_payer,_opAcc,trim(d0.rec.OKPO_payer + " /" + d0.rec.KPP_PAYER),d0.rec.payer,1, d0); end; if (compareStrWithMasks(AcMask, d0.rec.real_payer) == 0) _opAcc = d0.rec.account_receiver; if (d0.rec.real_receiver != d0.rec.account_receiver) _opAcc = String(_opAcc, " (",d0.rec.real_receiver,")"); end; FillDac(d0.rec.date_carry, d0.rec.real_payer,d0.rec.MFO_receiver,_opAcc,trim(d0.rec.OKPO_receiver + " /" + d0.rec.KPP_Receiver),d0.rec.receiver,2,d0); end; end; end; end; if (Dat2 >= {curdate}) UseProgress({curdate} - Dat1); d0=TBFILE("document.dbt","R",0); d0.rewind; while (d0.next) if (d0.rec.result_carry != 23) if (compareStrWithMasks(AcMask, d0.rec.real_receiver) == 0) _opAcc = d0.rec.account_payer; if (d0.rec.real_payer != d0.rec.account_payer) _opAcc = String(_opAcc, " (",d0.rec.real_payer,")"); end; FillDac({curdate},d0.rec.real_receiver,d0.rec.MFO_payer,_opAcc,Trim(d0.rec.OKPO_payer + " /" + d0.rec.KPP_PAYER),d0.rec.payer,1,d0); end; if (compareStrWithMasks(AcMask, d0.rec.real_payer) == 0) _opAcc = d0.rec.account_receiver; if (d0.rec.real_receiver != d0.rec.account_receiver) _opAcc = String(_opAcc, " (",d0.rec.real_receiver,")"); end; FillDac({curdate},d0.rec.real_payer,d0.rec.MFO_receiver,_opAcc,trim(d0.rec.OKPO_receiver + " /" + d0.rec.KPP_receiver),d0.rec.receiver,2,d0); end; end; end; end; RemProgress; end; macro wrk() // раб.макрос var _ii=0,_clId=0, _clCode="", _clNam = "", _cAcc="",_acc, _deb="",_kre="", _c953="",aa=TARRAY(), _ret, _status="",_INN=""; if (mod(int(dat1),7) == 0) dat1 = dat1 - 2; end; if (mod(int(dat1),7) == 6) dat1 = dat1 - 1; end; if (not GetDate(Dat1,"Дата начала периода")) exit(1); end; if (not GetDate(Dat2,"Дата конца периода")) exit(1); end; GetRegistryValue("MVODB\\ПРОЦЕДУРЫ\\БАЛАНСОВЫЕ СЧЕТА\\НЕКОММЕР_ОРГАНИЗ", V_STRING, AcMask, _ret); aa.Size = 0; aa[0]="Только с категорией \"ДА\""; aa[1]="Только с пустой категорией"; aa[2]="Все НКО"; WhatNKOout = menu(aa,"","Операции каких НКО выводим?"); if (WhatNKOout < 0) exit(1); end; Fill_DD(); xx = TFE("230FZ_"+StrSubst(String(Dat1:f,"--",Dat2:f),".","-")); xx.ColSizes("F,50,40,230,120,60,60,60,40,60,125,70,250,80,80,250"); //Установка размеров столбцов и автофильтра (F) xx.AddRow("H^Клиент","ML3^","H^п/п","ML^","H^Статус","H^Пачка","H^Получатель/плательщик","ML3^","H^Сумма","ML^","H^Назначение"); // 2 строки заголовков с объединениями ячеек xx.AddRow("H^Код","H^Категория 9003-9004","H^Наименование /ИНН","H^Счёт","H^Дата","H^№","MU^","MU^","H^БИК","H^Счёт","H^ИНН/КПП","H^Наименование","H^Дебет","H^Кредит","MU^"); dd.rewind; dd.clear; _clID = 0; _cAcc = _acc = _c953= _clNam = _clCOde = ""; dac.keynum = 0; InitProgress(dd.nrecords,"","Заполняю Excel из временного файла"); _ii = 0; while (dd.next) _ii = _ii + 1; UseProgress(_ii); if (dd.rec.client != _clId) _clId = dd.rec.client; _inn = GetCLientInn(_clId); _acc = dd.rec.account; _clCode = String("SCU#^" ,dd.rec.code); dac.rewind; dac.clear; _c953 = "SCU#^"; dac.rec.client = dd.rec.client; if (dac.getEq) _c953 = String("SCU#^",dac.rec.c953); end; _cAcc = String("WCU#^" ,dd.rec.account, " дог.№",GetAccCtg(508,dd.rec.account)," от ", GetAccCtg(507,dd.rec.account):f); GetClientFullName(_clId, _clNam); _clNam = String("WU#^",_clNam," /ИНН=",_inn); end; if (dd.rec.account != _acc) _cAcc = String("SCU#^",dd.rec.account); _acc = dd.rec.account; end; _deb = _kre = "N2#^"; if (dd.rec.debkre == 2) if (dd.rec.sum < $1000000) _deb = String("BШ14N2#^",dd.rec.sum); else _deb = String("BN2#^",dd.rec.sum); end; elif (dd.rec.debkre == 1) if (dd.rec.sum < $1000000) _kre = String("Ш14BN2#^",dd.rec.sum); else _kre = String("BN2#^",dd.rec.sum); end; end; _status =String("SC#^",aaStat[dd.rec.status]); if ((_c953 == "ДА") and (dd.rec.status == 0)) _status = "SCY#^"; end; xx.AddRow( _clCode, _c953, _clnam, _cAcc, String("DC#^",dd.rec.date_carry:f), String("Ш12BSC#^",dd.rec.Numb_document), _status, String("IC#^",dd.rec.Number_Pack), String("SC#^",dd.rec.opbik), String("WC#^",dd.rec.opacc), String("WC#^",dd.rec.opinn), String("W#^",dd.rec.opnam), _deb, _kre, String("W#^",dd.rec.Ground)); _clNam = _c953 = _clCode = _cAcc = "MU^"; end; RemProgress; xx.Go("230FZ_"+StrSubst(String(Dat1:f,"--",Dat2:f),".","-")); end; wrk; exit(1);