Стоит посмотреть
Остатки на корреспондентских счетах (отчет в Excel)
Сохранить в файлеОбсудить в форуме
Описание
Ну там все из текста видно, читайте... :)
Можно использовать как наглядный пример работы с Excel.
Можно использовать как наглядный пример работы с Excel.
Текст примера
/* ''Новиков А.В. 14.09.2001 Остатки на корреспондентских счетах (служ. Токарева) */ Import BankInter,CurrInter,RslX,Lgxs; CONST Код_А = CodeFor("A")-1, /*код 65 соответствует букве А*/ Num_St = CodeFor("Z")-Код_А; /*число латинских букв от A до Z, потом идут AA,AB,AC...*/ VAR ob,wb; Array ws; array mass0,mass1,mass2,mass3,mass4,mass5/*приоритет*/; array Kod_Val_mass; file accblnc(accblnc,"bank.def") key 0; file account(account,"bank.def") key 0; file client(client,"bank.def") key 0; file currency(currency,"bank.def") key 0; Macro mass_(mass0); var i=0,tmp; while(GetParm( i+1, tmp )) mass0(i)=string(tmp); i=i+1; end; setparm(0,mass0); end; Macro Поиск_Валюты_СокрНазвание(код_валюты); currency.Code_Currency=код_валюты; if(GetEQ(currency)) return currency.Short_Name; else return ""; end; end; Macro Поиск_Валюты_Название(код_валюты); currency.Code_Currency=код_валюты; if(GetEQ(currency)) return currency.Name_Currency; else return ""; end; end; Macro sort_(a1,a2); var a=a1; setparm(0,a2); setparm(1,a); end; Macro Sort_mass(a,a1,a2,a3,a4); var i=0,k,j,n,m; n=asize(a); While (i<n) m=a(i); k=i; j=i; While (j<n) if (m>a(j)) m=A(j); k=j; end; j=j+1; end; sort_(A(k),A(i)); sort_(A1(k),A1(i)); sort_(A2(k),A2(i)); sort_(A3(k),A3(i)); sort_(A4(k),A4(i)); /* A[k]=A[i]; A[i]=m; */ i=i+1; end; setparm(0,a); setparm(1,a1); setparm(2,a2); setparm(3,a3); setparm(4,a4); end; Macro accBalance0(Balance0,Account_,Dat,i); var kod_val,flag; var flag_sort=true,k=0; var n3=asize(Kod_val_mass); IF(I==0) ASIZE(mass1,0); ASIZE(mass2,0); ASIZE(mass3,0); ASIZE(mass4,0); ASIZE(mass5,0); END; accblnc.Balance0=Balance0; accblnc.Account=Account_; flag=GetGE(accblnc); While(flag and (accblnc.Balance0==Balance0)) account.Account=accblnc.Account; if( GetEQ(account) and(account.Open_Date<=Dat) and( (Dat<=account.Close_Date)or(account.Close_Date==date(0,0,0)) ) ) client.Client=account.Client; if(GetEQ(client)) mass1(i)=string(account.NameAccount,/*" account.NameAccount ",client.szShortName," г. ",client.szSity,*/" ",account.Account); kod_val=int(SubStr(account.Account,6,3)); if(kod_val==810) /*если рубли то остаток в рублях*/ mass2(i)=restA(account.Account,dat); mass3(i)=restA(account.Account,(dat-1)); kod_val=0; else /* иначе остаток в валюте*/ mass2(i)=restAC(account.Account,kod_val,dat); mass3(i)=restAC(account.Account,kod_val,(dat-1)); end; /* if(mass2(i)<0) mass2(i)=-mass2(i); end; if(mass3(i)<0) mass3(i)=-mass3(i); end; */ mass2(i)=-mass2(i); mass3(i)=-mass3(i); mass4(i)=Поиск_Валюты_СокрНазвание(kod_val); /*mass4(i)=Поиск_Валюты_Название(kod_val);*/ k=0;flag_sort=true;/*расстановка приоритетов*/ while((k<n3)and(flag_sort)) if(Kod_val_mass(k)==mass4(i)) flag_sort=false; mass5(i)=k; end; k=k+1; end; if(flag_sort) /*если такой код валюты еще не описан*/ mass5(i)=k; end; i=i+1; end; end; flag=next(accblnc); end; /*сортировка имеющегося массива*/ Sort_mass(mass5,mass1,mass2,mass3,mass4); return i; end; /*========================================================================== Процедуры выгрузки в EXCEL ===========================================================================*/ Macro My_exit(i); ob.Workbooks.Close (false); ob.Quit; exit(i); end; Macro ОткрытиеТаблицы_Книги(path1,NameFile1) if(IsStandAlone()) ob=ActiveX ("Excel.Application"); else ob=TlgActiveX ("Excel.Application"); end; if(SelectFile(NameFile1,path1,"Выбор файла *.xls, ESC - отмена")) /*файл с шапкой (таблицами и графиками) найден*/ ob.Workbooks.Open(NameFile1,0,true); /*true - только для чтения*/ else msgbox("Файл с таблицей-шаблоном не найден!!!","| Нажмите ESC"); My_exit(1); ob.Workbooks.add;/*новый файл*/ end;; wb=ob.Workbooks.Item(1); /* Item - извлечение части объектов из группы*/ wb.Activate; end; Macro ИнициализацияЛистов(ЧислоЛистов); var i=1; while(i<=ЧислоЛистов) ws(i)=wb.Worksheets.Item (i); /*(* ws(i).Activate;/*можно писать сразу во все листы*/ *)*/ i=i+1; end; end; Macro ФорматированиеСтолбца_Ячейки(лист,Код_Ячейки1,Код_Ячейки2, HorizontalAlignment, VerticalAlignment, MergeCells ); var Код_Ячейки=Код_Ячейки1+":"+Код_Ячейки2; ws(лист).Range(Код_Ячейки).HorizontalAlignment = HorizontalAlignment; ws(лист).Range(Код_Ячейки).VerticalAlignment = VerticalAlignment; ws(лист).Range(Код_Ячейки).MergeCells = MergeCells; ws(лист).Range(Код_Ячейки).WrapText = False; end; Macro ЦветЯчейки(лист,Код_Ячейки1,Код_Ячейки2,Цвет); var Код_Ячейки=Код_Ячейки1+":"+Код_Ячейки2; ws(лист).Range(Код_Ячейки).Interior.ColorIndex = Цвет; end; Macro Шрифт(лист,Код_Ячейки,Name,FontStyle,Size); ws(лист).Range(Код_Ячейки).Font.Name = Name; ws(лист).Range(Код_Ячейки).Font.FontStyle = FontStyle; ws(лист).Range(Код_Ячейки).Font.Size = Size; /*Шрифт(лист,Код_Ячейки,"Arial Cyr","полужирный",14)*/ end; Macro КопирСтрок(лист,Код_Ячейки1,Код_Ячейки2); var Код_Ячейки=Код_Ячейки1+":"+Код_Ячейки2; ws(лист).Range(Код_Ячейки).Copy; end; Macro ВставкаСтрок(лист,Код_Ячейки1,Код_Ячейки2); var Код_Ячейки=Код_Ячейки1+":"+Код_Ячейки2; ws(лист).Range(Код_Ячейки).Insert; end; Macro УдалениеСтрок(лист,Код_Ячейки1,Код_Ячейки2); var Код_Ячейки=Код_Ячейки1+":"+Код_Ячейки2; ws(лист).Range(Код_Ячейки).Delete; end; Macro Запись_ячейка(лист,Код_Ячейки,Value); ws(лист).Range(Код_Ячейки).Value = Value; end; Macro Код_Столбца_(Номер_Столбца1); var t=0, /*t = 0, если от A до Z , t = 1,если от AA до AZ и т.д.*/ Код_Столбца=StrFor(Код_А+Номер_Столбца1); t=int((Номер_Столбца1-1)/Num_St); if(t==0) Код_Столбца=""; else Код_Столбца=StrFor(Код_А+t); end; return Код_Столбца+StrFor(Код_А+Номер_Столбца1-(Num_St*t) ); end; Macro formula2(Столбец,n,НомерСтрокиИтог,per); var ячейки=Столбец,i1=2,i=НомерСтрокиИтог,formula=""; i=i-per; ячейки=string(Столбец,i); formula=ячейки; while (i1<n) i=i-per; ячейки=string(Столбец,i); formula=ячейки+";"+formula; i1=i1+1; end; return string("=СУММ(",formula,")"); end; /*********************************************************/ /***** Главная процедура расчета и записи в EXCEL *********/ /************************************************** *******/ /*Все объединено в одну процедурку*/ Macro MainEXCEL(DateC); var ЧислоЛистов=1, /*const?*/ path_ =GetIniString("XLSDIR","bank.ini")+"\\NOV\\", NameFile1="ost_*.xls", path1=path_+NameFile1; var dat=DateC,i=0,j=0; var Код_Ячейки="",Переменная; var Код_Ячейки1,Код_Ячейки2; var Номер_Столбца = 3, Номер_Строки = 3, /*с которой начинается заполнение данных*/ лист = 1; var n1=0,n2=0,k=0,K1=0; var flag_sort=true; ОткрытиеТаблицы_Книги(path1,NameFile1); ИнициализацияЛистов(ЧислоЛистов); ws(лист).Activate;/*можно писать в этот лист*/ ob.Visible=true; Переменная="Остаток по состоянию на "+string(dat); Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); Переменная="Остаток по состоянию на "+string(dat-1); Код_Ячейки=string(Код_Столбца_(Номер_Столбца+1),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); mass_(mass0,"30102","30110","30114","30109"); n1=asize(mass0); mass_(Kod_val_mass,"RUR","USD","DEM","UAH"); While(j<n1) /*цикл по балансовым счетам*/ Номер_Столбца=1; Номер_Строки=Номер_Строки+1; Код_Ячейки =string(Номер_Строки+1); КопирСтрок(лист,Код_Ячейки,Код_Ячейки); Код_Ячейки=string(Номер_Строки); ВставкаСтрок(лист,Код_Ячейки,Код_Ячейки); if(mass0(j)=="30109") Переменная="КОРСЧЕТА ЛОРО"; Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); n2=accBalance0(mass0(j),"",Dat,0); Переменная=15; else Переменная="КОРСЧЕТА НОСТРО"; Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); n2=accBalance0(mass0(j),"",Dat,0); j=j+1; n2=accBalance0(mass0(j),"",Dat,n2); j=j+1; n2=accBalance0(mass0(j),"",Dat,n2); Переменная=48; end; Код_Ячейки1=Код_Ячейки; Код_Ячейки2=string(Код_Столбца_(Номер_Столбца+5),Номер_Строки); ФорматированиеСтолбца_Ячейки(лист,Код_Ячейки1,Код_Ячейки2,1,-4107,false); ФорматированиеСтолбца_Ячейки(лист,Код_Ячейки1,Код_Ячейки2,-4108,-4108,true); Шрифт(лист,Код_Ячейки,"Arial Cyr","полужирный",14); ЦветЯчейки(лист,Код_Ячейки,Код_Ячейки,Переменная); k=0; K1=0; While(k<n2) /*цикл по счетам каждого балансового счета*/ Номер_Строки=Номер_Строки+1; Код_Ячейки =string(Номер_Строки+1); КопирСтрок(лист,Код_Ячейки,Код_Ячейки); Код_Ячейки=string(Номер_Строки); ВставкаСтрок(лист,Код_Ячейки,Код_Ячейки); Номер_Столбца=1; Переменная=i+1; Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); Номер_Столбца=Номер_Столбца+1; Переменная=mass1(k); Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); Номер_Столбца=Номер_Столбца+1; Переменная=double(mass2(k)/100); Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); Номер_Столбца=Номер_Столбца+1; Переменная=double(mass3(k)/100); Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); Номер_Столбца=Номер_Столбца+1;/*пропуск одного столбца*/ Переменная=double(mass2(k)/100)-double(mass3(k)/100); Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); if(Переменная==0) elif(Переменная>0) Переменная=43; else Переменная=38; end; ЦветЯчейки(лист,Код_Ячейки,Код_Ячейки,Переменная); Код_Ячейки=string(Код_Столбца_(Номер_Столбца-1),Номер_Строки); ЦветЯчейки(лист,Код_Ячейки,Код_Ячейки,Переменная); Код_Ячейки=string(Код_Столбца_(Номер_Столбца-2),Номер_Строки); ЦветЯчейки(лист,Код_Ячейки,Код_Ячейки,Переменная); Номер_Столбца=Номер_Столбца+1; Переменная=mass4(k); Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); i=i+1; k=k+1;K1=K1+1; if(Переменная!=mass4(k)) /*итого по валюте*/ Номер_Строки=Номер_Строки+1; Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); Номер_Столбца=1; Код_Ячейки =string(Номер_Строки); КопирСтрок(лист,Код_Ячейки,Код_Ячейки); Код_Ячейки=string(Номер_Строки); ВставкаСтрок(лист,Код_Ячейки,Код_Ячейки); Переменная="Итого "+Переменная; Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); Шрифт(лист,Код_Ячейки,"Arial Cyr","полужирный",12); ЦветЯчейки(лист,Код_Ячейки,Код_Ячейки,16); Код_Ячейки1=Код_Ячейки; Код_Ячейки2=string(Код_Столбца_(Номер_Столбца+1),Номер_Строки); ФорматированиеСтолбца_Ячейки(лист,Код_Ячейки1,Код_Ячейки2,1,-4107,false); ФорматированиеСтолбца_Ячейки(лист,Код_Ячейки1,Код_Ячейки2,-4108,-4108,true); Номер_Столбца=Номер_Столбца+1; Номер_Столбца=Номер_Столбца+1; Переменная=formula2(string(Код_Столбца_(Номер_Столбца)), K1+1, Номер_Строки,1); Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); Номер_Столбца=Номер_Столбца+1; Переменная=formula2(string(Код_Столбца_(Номер_Столбца)), K1+1, Номер_Строки,1); Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); Номер_Столбца=Номер_Столбца+1; Переменная=formula2(string(Код_Столбца_(Номер_Столбца)), K1+1, Номер_Строки,1); Код_Ячейки=string(Код_Столбца_(Номер_Столбца),Номер_Строки); Запись_ячейка(лист,Код_Ячейки,Переменная); K1=0; end; end; /*цикл по счетам каждого балансового счета*/ j=j+1; end; /*цикл по балансовым счетам*/ Номер_Строки=Номер_Строки+1; Код_Ячейки=string(Номер_Строки); УдалениеСтрок(лист,Код_Ячейки,Код_Ячейки); УдалениеСтрок(лист,Код_Ячейки,Код_Ячейки); msgbox("Все! Теперь можете просмотреть полученный отчет в EXCEL","| Нажмите ESC"); ob.Visible=true; end; var datC=date; if(not GetDate(datC,"Введите дату отчета")) msgbox("А надо было нажать ENTER!!!"); exit(1); end; MainEXCEL(datC/*ДатаОтчета*/); exit(1);