Функционирование рынка республиканских облигаций
Введение.
Глава 1. Функционирование рынка РКО.
Участники рынка.
Процедура торгов.
Первичное размещение (аукцион).
Вторичные торги.
Погашение.
Документооборот.
Отчеты, предоставляемые биржей.
Отчеты, предоставляемые Дилерами.
Глава 2. Задачи Дилера на рынке РКО.
Ведение бэк-офиса.
Оптимизация вложений собственных средств.
Управление средствами инвесторов.
Исполнение поручений Инвесторов.
Анализ эффективности вложений.
Глава 3. Задачи формирования и ведения собственного портфеля облигаций Дилера.
Формирование портфеля облигаций.
Ликвидность портфеля.
Период инвестирования.
Инвестирование с целью максимизации дохода.
Безрисковое инвестирование.
Анализ эффективности вложений денежных средств в РКО.
Постановка задачи.
Метод решения.
Экономическая интерпретация метода.
Экономическая интерпретация полученных результатов.
Применение результатов исследования для построения методов эффективного управления портфелем облигаций.
Заключение.
Список литературы.
Приложения.
Приложение № 1. Программа автоматизации учета РКО.
Приложение 1.1. Руководство пользователя.
Приложение 1.2. Текст программы.
Приложение № 1.3. Журнал оборотов.
Приложение № 1.4. Журнал лицевого учета.
Приложение № 1.5. Мемориальный ордер.
Приложение № 1.6. Отчет инвестору о совершенных сделках.
Приложение № 1.7. Структура пртфеля в разрезе по бумагам.
Приложение № 1.8. Структура портфеля обобщенная.
Приложение № 1.9. Биржевая информация.
Приложение № 1.10. Еженедельный отчет в депозитарий.
Приложение № 1.11. Ежемесячный отчет в депозитарий.
Приложение № 2. Программа анализа эффективности вложений в РКО.
Приложение 2.1. Текст программы.
Приложение № 2.2. Диаграмма сравнения доходности портфеля и рынка.
Приложение № 2.3. Диаграмма сравнения индекса портфеля и рынка.
Приложение № 3. Входные статистические данные.
Приложение 3.1. Информация о бумагах.
Приложение 3.2. Информация о сделках.
Приложение 3.3. Информация о движениях денежных средств.
Приложение 3.4. Биржевая информация.
Введение.
Республиканские краткосрочные бескупонные облигации (РКО) выпускаются Министерством Финансов Республики Татарстан. Рынок РКО существует с 1995 года. За три года он стал важнейшим сегментом в экономике Татарстана, сравнимый по объему заимствований с рынком межбанковских кредитов и иностранной валюты.
Гарантом надежности вложений в РКО является Правительство РТ. РКО - ликвидный и наиболее доходный инструмент финансового рынка. Доходность по РКО выше, чем по банковским вкладам и депозитным сертификатам, а также государственным ценным бумагам. Имея льготное налогообложение, РКО является наиболее привлекательным вложением свободных финансовых ресурсов.
Вкладывать средства в РКО могут как юридические, так и физические лица. Доход по этим облигациям получается от разницы между ценой покупки и продажи, т.е. дисконт.
РКО обращаются в бездокументарной форме и учитываются записями по счетам депо. Продажа и покупка производится на фондовой бирже. В связи с этим возникает задача учета операций с РКО как со стороны биржи, так и со стороны организаций-инвесторов.
На данном сегменте фондового рынка можно производить как краткосрочные спекулятивные операции, так и долгосрочные вложения свободных собственных или заемных средств. Таким образом, актуальной является задача оценки эффективности вложений в РКО.
В данной дипломной работе решаются две задачи:
1. Автоматизация учета операций с РКО;
2. Оценка эффективности вложений в РКО.
На основе результатов второй задачи можно будет сделать некоторые выводы для оптимизации принятия решений при вложении в бескупонные облигации.
Глава 1. Функционирование рынка РКО.
Республиканские краткосрочные облигации обращаются на Волжско-Камской бирже (ВКБ) посредством проведения электронных торгов. В функционировании рынка РКО можно выделить следующие моменты:
1. Участники рынка.
2. Процедура торгов.
3. Документооборот.
Участники рынка.
Участники рынка разделяются на две категории: Дилеры и инвесторы.
Дилер - любое юридическое лицо, профессиональным участником рынка ценных бумаг, заключившее договор на выполнение функций по обслуживанию операций с облигациями с коммунальным предприятием "Дирекция по работе с ценными бумагами". Дилер может заключать сделки с РКО от своего имени и за свой счет, а также может выполнять функции финансового брокера при заключении сделок от своего имени за счет и по поручению инвестора.
Инвестор - любое юридическое или физическое лицо, заключившее с Дилером договор брокерского обслуживания на рынке РКО. Инвестор может приобретать облигации только через Дилеров, уплачивая при этом комиссию.
Процедура торгов.
В ходе торгов РКО проходят следующие этапы:
* Первичное размещение;
* Вторичные торги;
* Погашение.
Первичное размещение (аукцион).
Аукцион - это первичное размещение облигаций, проводимого Организатором (Коммунальное предприятие "Дирекция по работе с ценными бумагами", агент Министерства финансов РТ по обслуживанию выпусков облигаций) по поручению Министерства финансов Республики Татарстан. Они проводятся по специальному графику. Дата аукциона, предельный объем выпуска, место и время проведения аукциона объявляются Организатором. Контрагентами в этой процедуре являются Министерство Финансов с одной стороны, и Дилеры - другой. В ходе аукциона Дилеры подают заявки на покупку облигаций. После подачи всех заявок до установленного времени, Министерство Финансов устанавливает цену отсечения - минимальная цена, по которой он готов продать облигации. Все заявки, поданные выше цены отсечения, удовлетворяются, заявки, поданные с более низкой ценой, не удовлетворяются.
Вторичные торги.
Обращение облигаций на вторичных торгах осуществляется в форме сделок купли-продажи через Торговую систему (организация, уполномоченная на основании договора с Министерством финансов РТ и двусторонних договоров с Дилерами обеспечивать процедуру заключения сделок купли-продажи путем предоставления технических средств). Контрагентами в этой процедуре выступают Дилеры. Дилеры вводят в Торговую систему посредством рабочих терминалов заявки на покупку или продажу облигаций. Если цены заявок совпадают, то они удовлетворяются, т.е. сделка считается совершенной.
Погашение.
Погашение облигаций производится в определенный день Министерством Финансов по номинальной стоимости.
Документооборот.
РКО обращаются в электронной форме. Учет по ним ведется посредством записей на счетах депо, открытых в Волжско-Камской трастовой компании (ВКТК). В связи с этим возникают вопросы отражения учета операций в документальной форме. В ходе обращения РКО можно выделить следующие типы документов:
* Отчеты, предоставляемые биржей;
* Отчеты, предоставляемые Дилерами.
Отчеты, предоставляемые биржей.
По завершении торгов биржа предоставляет каждому Дилеру следующие документы:
* Биржевая информация;
* Выписка из протокола торгов;
* Обязательства Дилера по итогам торгов;
* Выписка из реестра сделок.
Отчеты, предоставляемые Дилерами.
В процессе участия в торгах Дилеры обязаны предоставлять следующие документы бирже:
* Еженедельный отчет;
* Ежемесячный отчет;
* Другие документы, необходимые для допуска Дилера к торгам.
После совершения сделки купли-продажи по поручению Инвестора, Дилер обязан предоставить Инвестору отчет о совершенной сделке в форме, установленной в договоре по брокерскому обслуживанию и выписку со счета депо. Дилер также может предоставить биржевую информацию и оказывать консультационные услуги.
Глава 2. Задачи Дилера на рынке РКО.
Являясь активным участником рынка РКО, Дилер сталкивается со следующими задачами:
1. Ведение бэк-офиса;
2. Оптимизация вложений собственных средств;
3. Управление средствами Инвесторов;
4. Исполнение поручений Инвесторов;
5. Анализ эффективности вложений.
Ведение бэк-офиса.
Бэк-офис - система электронного учета операций с ценными бумагами. Он включает в себя очень широкий спектр функциональных вопросов:
* Ведение журнала лицевого учета и журнала оборотов (Приложение № 1.3, 1.4);
* Формирование и печать мемориальных ордеров (Приложение №1.5);
* Формирование и печать отчетов Инвесторам (Приложение №1.6);
* Формирование и печать собственного портфеля Дилера (Приложение № 1.7, 1.8);
* Формирование и печать биржевой информации (Приложение №1.9);
* Формирование и печать еженедельного и ежемесячного отчетов (Приложение №1.10, 1.11).
Все перечисленные задачи реализованы в представленной программе автоматизированного учета операций с РКО.
Оптимизация вложений собственных средств.
Под оптимизацией вложений собственных средств понимается создание портфеля облигаций, который удовлетворял бы поставленной инвестиционной или спекулятивной задаче.
Для формирования портфеля можно исходить из следующих факторов:
* Ликвидность;
* "Время жизни";
* Получение наибольшего дохода;
* Использование РКО в залоговых операциях для получения межбанковских кредитов.
Управление средствами инвесторов.
Дилер может сам управлять средствами Инвесторов, если был заключен договор трастового обслуживания. При этом он может брать комиссию как с отдельной сделки, так и с дохода, полученного Инвестором. В данном случае актуальной является задача оптимального управления портфелем Инвестора и оценка эффективности деятельности Дилера.
Исполнение поручений Инвесторов.
Дилер, являясь также и брокером на рынке РКО, совершает операции купли-продажи от своего имени, но по поручению Инвестора и за его счет. В этом случае Дилер должен вести учет приема заявок Инвесторов, исполнение поручений на бирже и формирование отчетов. За эти услуги он получает комиссионное вознаграждение.
Анализ эффективности вложений.
Данная задача является одной из наиболее сложных и необходимых. Определение метода анализа - нетривиальная задача. В Главе 3 рассмотрены две методики анализа эффективности вложений собственных средств в облигации.
Глава 3. Задачи формирования и ведения собственного
портфеля облигаций Дилера.
В процессе управления портфелем облигаций Дилер ставит перед собой следующие задачи:
* формирование портфеля облигаций;
* анализ эффективности вложений денежных средств.
Формирование портфеля облигаций.
В процессе участия в торгах Дилер инвестирует свободные денежные средства в облигации, создавая при этом портфель, состоящий из разных серий РКО, отличающиеся тем, что имеют разные сроки до погашения.
Спецификой портфеля, состоящего из РКО, могут являться следующие моменты:
* ликвидность портфеля;
* период инвестирования;
* инвестирование с целью максимизации дохода;
* безрисковое инвестирование.
Ликвидность портфеля.
При инвестировании средств в РКО необходимо учитывать следующий момент. Денежные средства Дилеров, инвестируемые в облигации на вторичных торгах, часто превышают объемы торгов по какой-либо отдельной серии облигации. В связи с этим возникает вопрос ликвидности портфеля. Как показывает практика фондового рынка, облигации с наименьшим сроком погашения более ликвидные, чем те, которые имеют более длительный срок до погашения. Но, с другой стороны, облигации с меньшим сроком до погашения имеют и меньшую доходность. Таким образом, при продаже легче всего продать облигации с меньшим сроком до погашения, а купить те, которые имеют более длительный срок до погашения.
Период инвестирования.
Дилер при инвестировании сталкивается и со следующей задачей: период инвестирования. Так как ликвидность рынка напрямую зависит от срока до погашения облигации, то с этим приходится диверсифицировать портфеля по срокам погашения облигаций. Причем необходимо выбрать наилучшую стратегию, зависящую от целей инвестирования. Если целью инвестирования является получения максимального дохода за продолжительный период времени, то можно инвестировать средства в наиболее доходные серии облигаций. В случае если целью инвестирования является краткосрочная спекуляция, то наиболее оптимальной стратегией в данном случае является покупка серий облигаций со сроком погашения, близким к установленному сроку инвестирования; в этом случае минимизируется риск невозможности продажи облигаций на вторичном рынке.
Инвестирование с целью максимизации дохода.
В случае если целью инвестирования является максимизация дохода, причем срок инвестирования не фиксирован, т.е. неизвестен период инвестирования, Дилер сталкивается с двумя противоречивыми факторами: доходность и ликвидность. В связи с этим возникают задачи оптимального управления портфелем облигаций. Методы, которые применяют Дилеры, являются их собственными разработками (ноу-хау). Существуют множество публикаций в финансово-экономической литературе по оптимизации вложений в бескупонные облигации, но предложенные методы либо содержат в себе неверные предпосылки при построении метода оптимизации, либо содержат упрощения, после чего модель становится неприменима на практике.
Безрисковое инвестирование.
В целях получения дохода, но также минимизации риска извлечения денежных средств из портфеля, можно формировать портфеля с помощью диверсификации по срокам погашения серий облигаций. Облигации, по определению, являясь долговыми обязательствами, имеют срок погашения, т.е. срок, в который инвестор получает номинал облигации, поэтому о риске вложений приходится говорить лишь с точки зрения периода вложения.
Анализ эффективности вложений денежных средств в РКО.
Постановка задачи.
Анализ эффективности вложения денежных в РКО можно разделить на анализ внутреннего управления портфелем облигаций и внешнего.
Внутреннее управление - это оценка изменения индекса портфеля в сравнении с индексом рынка.
Внешнее управление - это оценка изменения средневзвешенной доходности к погашению портфеля в сравнении со средневзвешенной доходностью к погашению рынка.
Таким образом, возникает задача сравнения управления портфелем облигаций относительно рынка путем построения некоторого показателя, который адекватно отражал бы динамику изменения портфеля в сравнении с динамикой изменения рынка.
Метод решения.
Предлагаются методики для решения поставленных задач путем построения следующих показателей:
1. Индекс портфеля и рынка (для оценки внутреннего управления).
Индекс строится следующим образом.
Для портфеля:
(1)
(1.1)
(1.2)
где:
значение индекса в момент t
коэффициент
стоимость портфеля по средневзвешенным ценам на момент закрытия торгов в момент t
сумма дополнительных вложений (извлечений) денежных средств в портфель в момент t, причем, если
дополнительные вложения
сумма изъятых денег
средневзвешенная цена i серии на момент закрытия торгов
количество бумаг i серии в портфеле
количество серий бумаг, обращающихся на рынке
Для рынка при расчете коэффициента и переменные будут иметь следующий смысл:
объем капитализации рынка по средневзвешенным ценам на момент t
сумма размещенных (погашенных) средств на аукционе
сумма размещенных средств на аукционе
сумма погашенных средств на аукционе
количество бумаг i серии, обращающихся на рынке
Данный индекс показывает, насколько эффективнее было внутреннее управление портфелем по сравнению с рыночной конъюктурой. Причем, если индекс портфеля меньше индекса рынка, то управление было неэффективным.
2. Эффективная норма доходности к погашению портфеля и рынка (для оценки внешнего управления).
Показатель строится следующим образом(2 метода):
В теории расчета применяется следующий метод:
(2)
где:
(2.1)
сумма i расходного платежа
сумма i доходного платежа
количество дней между i расходным и доходным платежами
эффективная норма доходности, которая и определяется из решения данного уравнения
количество расходных и доходных платежей
Уравнение (2) решается численными методами, причем решение единственно.
Из-за неудобства решения уравнения на практике обычно применяют другой метод нахождения :
(2.2)
где:
доходность к погашению i бумаги
количество i бумаги
дней до погашения i бумаги
рассчитывается следующим образом:
(2.3)
где:
цена покупки i бумаги в % от номинала (расходный платеж)
цена погашения в % от номинала (доходный платеж)
количество дней в году
дней до погашения i бумаги
Данный метод более удобен при расчетах и дает более быстрые результаты, вследствие чего он был применен при построении данного показателя.
Экономическая интерпретация метода.
Анализ с помощью методики построения индекса портфеля и рынка включает в себя следующие моменты:
Индекс построен таким образом, что он адекватно отражает управление портфелем и поведение рынка.
По построенному индексу можно определить доходность к приобретению портфеля и рынка, что бывает необходимым для сравнения вложений в РКО с другими инвестиционными операциями. Доходность к приобретению - это доходность на день расчета, которую можно получить при продаже портфеля облигаций.
Кроме того, можно оценить поведение рынка РКО в сравнении с другими рынками. Методика сравнения может быть различной и их построение требует учета специфики различных рынков.
Второй вид анализа - вычисление эффективной нормы доходности портфеля и рынка.
Предложенный метод отражает поведение рынка и доходность к погашению портфеля в текущий момент времени. Воздействовать на этот показатель можно путем добавления или извлечения денежных средств в портфель облигаций. При этом, эффективное внешнее управление напрямую зависит от объемов добавления/извлечения денежных средств и сложившейся конъюнктурой рынка в день проведения операций, т.е. другими словами, должно быть своевременное проведение данных операций.
Этот вид анализа можно применить также для эффективного распределения свободных ресурсов между различными инвестиционными рынками, оценивая и сравнивая доходности различных рынков и направляя свободные денежные средства на наиболее доходные секторы.
Экономическая интерпретация полученных результатов.
В данной работе сравнивался портфель РКО банка и рынок РКО с февраля по май месяц 1997 года.
При анализе путем построения индекса было выявлено следующее. График, построенный на основе индекса рынка (Приложение №2.3), имеет положительный наклон. Это обусловлено тем, что рынок в то время имел тенденцию к снижению доходности, поэтому, индекс, отражающий доходность к приобретению, увеличивался. В приведенном примере, основанном на реальных данных, внутреннее управление портфелем было эффективным по сравнению с рынком до начала мая месяца.
На графике сравнения доходности портфеля и рынка (Приложение № 2.2) можно видеть падение доходности к погашению портфеля в связи со сложившейся рыночной конъюнктурой. При анализе с помощью данного показателя можно сказать, что апрель месяц был наиболее благоприятным для дополнительного инвестирования денежных средств.
Применение результатов исследования для построения методов эффективного управления портфелем облигаций.
Результаты исследования с помощью применения предложенных методик позволяют сделать основополагающие выводы для построения методов эффективного управления портфелем облигаций. В данном случае, под эффективным управлением понимается получение наибольшего дохода за определенный промежуток времени.
Для построения методик эффективного управления портфелем облигаций необходимо учитывать следующее:
1) управление должно давать максимальный эффект;
2) в управлении нужно учитывать возможность ввода-вывода денежных средств;
3) необходимость попытки прогнозирования ситуации при изменении рыночной конъюнктуры;
4) управление портфелем с точки зрения как доходности, так и ликвидности;
Полученные результаты также позволяют оценить степень влияния человека (в данном случае - трейдер) на управление портфелем облигаций. От методов, применяемых им для принятия решений, зависит эффективность управления портфелем облигаций. В этом случае бывает целесообразным контроль за управлением портфелем со стороны вышестоящего начальства без применения обременительных методик расчетов, с другой стороны, можно поощрять трейдера за успешное управление портфелем облигаций. Следовательно, предложенный индекс можно применить для оценки управления портфелем облигаций трейдером.
Другая задача, которою можно решить на основе полученных результатов - это задача доверительного управления (траст). Основываясь на результатах, можно предложить следующую схему взимания платы за траст со стороны управляющего с клиента. Сравнивается индекс рынка и индекс портфеля облигаций, находящегося в трасте. В случае, если индекс портфеля превосходит индекс рынка, то дополнительный доход, получающийся от более эффективного управления портфелем облигаций, делится в определенной пропорции между управляющим и клиентом. Другой вариант: управляющий гарантирует клиенту определенный процент, а плата управляющему рассчитывается по определенной методике исходя из гарантированного дохода и дохода, полученного свыше.
Заключение.
В работе решены следующие ключевые моменты, необходимые для работы с Республиканскими краткосрочными бескупонными облигациями (РКО):
* Автоматизация учета операций с РКО
* Оценка эффективности вложений в РКО
* Описано функционирование рынка РКО, поставлены задачи, которые решает Дилер на рынке.
Решением задачи автоматизации операций с РКО является программный продукт, написанный на Visual Basic for Microsoft Excel, который позволяет вести полный документооборот Дилера на рынке РКО. Результатами автоматизации являются стандартизованные выходные формы, необходимые для ведения бухгалтерского учета РКО и предоставления различных отчетов.
При решении задачи оценки эффективности вложений в РКО применялись статьи, содержащие информацию об различных методиках расчета доходности облигаций. Результатом решения данной задачи является разработка собственной методики анализа. Методика проверена на реальных численных данных за определенный период функционирования рынка РКО. Конечным продуктом метода является программа, написанная на Visual Basic for Microsoft Excel, позволяющая делать анализ эффективности управления портфелем облигаций. Приведенный метод анализа также можно применить в дальнейшем для построения методов эффективного управления портфелем облигаций.
Обе поставленные задачи внедрены и используются на практике.
Список литературы.
1. Башарин Г.П. «Начала финансовой математики» Москва, «ИНФРА-М» 1997 г.
2. Бродский В., Горлин Ю. «Модель действительной доходности ГКО для клиентов» журнал «Рынок ценных бумаг» №1 1994 г.
3. Ветров А. «Как построить агрегированные показатели доходности рынка ГКО/ОФЗ» журнал «Рынок ценных бумаг» №5 1996 г.
4. Горелов М. «Построение оптимального портфеля ГКО: как максимизировать прибыль» журнал «Рынок ценных бумаг» №6 1996 г.
5. Горелов М., Никифоров Л. «О границах применимости принципа рыночного момента» журнал «Рынок ценных бумаг» №16 1996 г.
6. Горелов М. «Что нельзя упускать при построении модели управления портфелем ГКО» журнал «Рынок ценных бумаг» №11 1996 г.
7. Горлин Ю. «Оценка доходности операций с ГКО: вырианты биржевой игры» журнал «Рынок ценных бумаг» №6 1994 г.
8. Грядовая О. «Доходность как критерий оптимизации решений по управлению портфелем ГКО» журнал «Рынок ценных бумаг» №15 1994 г.
9. Губерниев В. «ГКО в оптимальном портфеле» журнал «Рынок ценных бумаг» №15 1996 г.
10. Демушкина Е. «Сделки с государственными ценными бумагами» журнал «Рынок ценных бумаг» №23 1996 г.
11. Екушов А. «Как превысить среднюю доходность рынка ГКО» журнал «Рынок ценных бумаг» №11 1997 г.
12. Ивахин А. «Как преодолеть ограничения в моделировании рынка ГКО» журнал «Рынок ценных бумаг» №12 1996 г.
13. Комягин В.Б. «Программирование в Excel 5 и Excel 7 на языке Visual Basic» Москва, «Радио и связь» 1996 г.
14. Кузнецов М., Нифатов П. «Денежный поток и торговые операции на рынке ГКО» журнал «Рынок ценных бумаг» №4 1996 г.
15. Мешкова Н. Кулакова Ю. «Прогнозирование тренда цены ГКО» журнал «Рынок ценных бумаг» №6 1996 г.
16. Михеев А. «Играем на заемные средства» журнал «Рынок ценных бумаг» №3 1997 г.
17. Остроушко О., Гришин О. «Доходность и дюрация портфеля ГКО» журнал «Рынок ценных бумаг» №5 1996г.
18. Положение об обслуживании и обращении выпусков РКО РТ(утверждено постановлением Кабинета Министров РТ от 21 апреля 1995 г. № 238)
19. «Потоки платежей,виды облигаций и вычисление доходности» Москва «Консультационное агентство «Соболев» 1996 г.
20. «Рынок ценных бумаг» учебник под ред. Галанова В.А., Басова А.И. Москва «Финансы и статистика» 1996 г.
21. Суменкова Е.В. «Операции с ценными бумагами» Москва «Перспектива» 1997 г.
22. Ушаков П. «О взаимосвязях индикаторов рынка ГКО» журнал «Рынок ценных бумаг» №3 1997 г.
23. Черкасов В.Е. «Практическое руководство по финансово-экономическим расчетам» Москва «Метаинформ» 1995 г.
24. Черновский А. «Как оценить эффективноть управления портфелем ГКО» журнал «Рынок ценных бумаг» №24 1996 г.
25. Четыркин Е. «Методы финансовых и коммерческих расчетов»
Приложения.
Приложение № 1. Программа автоматизации учета РКО.
Приложение 1.1. Руководство пользователя.
Данная программа написана на Microsoft Visual Basic for Excel. Для запуска программы необходимо открыть файл sprav.xls в Excel, после чего в линейке меню появится дополнительный пункт меню «Справочник», состоящий из следующих разделов:
Дата
Просмотр остатков
Печать
Депозитарий
Портфель
Биржевая информация
Отчеты клиентам
Отчет недельный
Отчет месячный
Журнал лицевого учета
Окно
Бумаги
Сделки
Клиенты
Биржа
Рассмотрим подробнее каждое из пунктов меню.
Дата - изменение даты для работы.
Просмотр остатков - просмотр остатков по Клиентам.
Печать - распечатка на принтер следующих данных:
Депозитарий - печать депозитария.
Портфель - печать собственного портфеля Дилера.
Биржевая информация - печать биржевой информации.
Отчеты клиентам - печать отчетов Клиентам.
Отчет недельный - печать еженедельного отчета, предоставляемого в депозитарий.
Отчет месячный - печать ежемесячного отчета, предоставляемого в депозитарий.
Журнал лицевого учета - печать журнала лицевого учета и журнала оборотов Дилера.
Окно - выбор следующих окон для ввода информации:
Бумаги - выбор окна ввода информации об обращающихся на рынке бумагах.
Сделки - выбор окна ввода сделок.
Клиенты - выбор окна ввода Клиентов.
Биржа - выбор окна ввода биржевой информации.
Результатом работы программы являются Приложения №1.3-1.12
Приложение 1.2. Текст программы.
Option Explicit
Option Base 1
Public CurDate As Date
Public DepoArray() As Integer
Public BumArray(); BumArrayV() As Integer
Public Button; Просмотр; ExitVar; Покупка; Продажа; Погашение As Boolean
Const DilerConst = 1000900000
Const FilialConst = 1000999999
Const ConstMaxBum = 100 ' максимальное кол-во бумаг(выпусков)
Const MaxCount = 1000 ' максимальное кол-во сделок по 1-ой бумаге
Const S192 = "50202"
Const S904 = "47423"
Const S960 = "70102"
Const S970 = "70204"
Const SR970 = "70204"
Sub Auto_Open()
ActiveWindow.WindowState = xlMaximized
CurDate = Date
Worksheets("Врем").Cells(1; 4) = CurDate
Application.OnWindow = "CancelChanges"
Application.Windows("Sprav.xls").OnWindow = "Start"
End Sub
Sub Auto_Close()
MenuBars(xlModule).Reset
MenuBars(xlWorksheet).Reset
Application.OnWindow = ""
Application.Windows("Sprav.xls").OnWindow = ""
ActiveWorkbook.Save
End Sub
Sub Start()
Call CreateMenu
Application.DisplayFullScreen = False
ActiveWindow.WindowState = xlMaximized
CurDate = Date
Worksheets("Врем").Cells(1; 4) = CurDate
End Sub
Sub CancelChanges()
MenuBars(xlModule).Reset
MenuBars(xlWorksheet).Reset
End Sub
Sub CreateMenu()
MenuBars(xlModule).Reset
MenuBars(xlWorksheet).Reset
With MenuBars(xlModule).Menus.Add("&Справочник")
.MenuItems.Add "&Дата"; "DateChange"
.MenuItems.Add "П&росмотр остатков"; "PrintOst"
.MenuItems.AddMenu ("&Печать")
.MenuItems("&Печать").MenuItems.Add "&Депозитарий"; "PrintDepo"
.MenuItems("&Печать").MenuItems.Add "&Портфель"; "PrintPortfel"
.MenuItems("&Печать").MenuItems.Add "&Биржевая информация"; "PrintBirgaInfo"
.MenuItems("&Печать").MenuItems.Add "Отчеты &клиентам"; "PrintOtchClient"
.MenuItems("&Печать").MenuItems.Add "Отчет &недельный"; "PrintOtchWeek"
.MenuItems("&Печать").MenuItems.Add "Отчет &месячный"; "PrintOtchMonth"
.MenuItems("&Печать").MenuItems.Add "Журнал &лицевого учета"; "PrintMagazine"
.MenuItems.AddMenu ("&Окно")
.MenuItems("&Окно").MenuItems.Add "&Бумаги"; "ViewPaper"
.MenuItems("&Окно").MenuItems.Add "&Сделки"; "ViewDeal"
.MenuItems("&Окно").MenuItems.Add "&Клиенты"; "ViewClient"
.MenuItems("&Окно").MenuItems.Add "Би&ржа"; "ViewBirga"
.MenuItems("&Окно").MenuItems.Add "&Остатки 812"; "ViewOst812"
.MenuItems("&Окно").MenuItems.Add "О&статки биржа"; "ViewOstBirga"
.MenuItems("&Окно").MenuItems.Add "&Защита"; "ViewProgram"
End With
With MenuBars(xlWorksheet).Menus.Add("&Справочник")
.MenuItems.Add "&Дата"; "DateChange"
.MenuItems.Add "П&росмотр остатков"; "PrintOst"
.MenuItems.AddMenu ("&Печать")
.MenuItems("&Печать").MenuItems.Add "&Депозитарий"; "PrintDepo"
.MenuItems("&Печать").MenuItems.Add "&Портфель"; "PrintPortfel"
.MenuItems("&Печать").MenuItems.Add "&Биржевая информация"; "PrintBirgaInfo"
.MenuItems("&Печать").MenuItems.Add "Отчеты &клиентам"; "PrintOtchClient"
.MenuItems("&Печать").MenuItems.Add "Отчет &недельный"; "PrintOtchWeek"
.MenuItems("&Печать").MenuItems.Add "Отчет &месячный"; "PrintOtchMonth"
.MenuItems("&Печать").MenuItems.Add "Журнал &лицевого учета"; "PrintMagazine"
.MenuItems.AddMenu ("&Окно")
.MenuItems("&Окно").MenuItems.Add "&Бумаги"; "ViewPaper"
.MenuItems("&Окно").MenuItems.Add "&Сделки"; "ViewDeal"
.MenuItems("&Окно").MenuItems.Add "&Клиенты"; "ViewClient"
.MenuItems("&Окно").MenuItems.Add "Би&ржа"; "ViewBirga"
.MenuItems("&Окно").MenuItems.Add "&Остатки 812"; "ViewOst812"
.MenuItems("&Окно").MenuItems.Add "О&статки биржа"; "ViewOstBirga"
.MenuItems("&Окно").MenuItems.Add "&Защита"; "ViewProgram"
End With
End Sub
Sub ViewPaper()
Sheets("Бумаги").Select
Call EndOf
End Sub
Sub ViewDeal()
Sheets("Сделки").Select
Call EndOf
End Sub
Sub ViewClient()
Sheets("Клиенты").Select
Call EndOf
End Sub
Sub ViewBirga()
Sheets("Биржа").Select
Call EndOf
End Sub
Sub ViewOst812()
Sheets("Остатки812").Select
Call EndOf
End Sub
Sub ViewOstBirga()
Sheets("ОстаткиБиржа").Select
Call EndOf
End Sub
Sub ViewProgram()
Sheets("Защита").Select
End Sub
'------------------------------ Печать Депозитария ---------------
Sub PrintDepo()
Dim BumNum; CliNum; i; j; k; a; n; Sign; s As Integer
Dim Flag As Boolean
Dim Code As Long
Dim Str As String
Dim DepoFil() As Integer
Dim Num As Integer
CurDate = Worksheets("Врем").Cells(1; 4)
Call FormBum
Sheets("Депо").Select
BumNum = Worksheets("Врем").Cells(1; 2)
Cells(3; 5) = Worksheets("Врем").Cells(1; 4)
Cells(3; 5).NumberFormat = "Д ММММ, ГГГГ"
Cells(3; 5).HorizontalAlignment = xlCenterAcrossSelection
Cells(3; 5).Font.Bold = True
Num = 9
For i = 1 To BumNum
Cells(6; i + 1) = Worksheets("Врем").Cells(i; 1)
Cells(6; i + 1).Font.Bold = True
Cells(6; i + 1).Interior.ColorIndex = 40
Cells(Num + 1; i + 1).Interior.ColorIndex = 15
Cells(Num + 1; i + 1) = ""
Cells(Num; i + 1).Interior.ColorIndex = 40
Cells(Num; i + 1) = ""
Cells(5; i + 1).Interior.ColorIndex = 40
Next
Cells(Num; 1).Interior.ColorIndex = 40
Cells(Num; 1) = "Итого"
Cells(Num; 1).Font.Bold = True
Cells(Num; 1).Font.Italic = True
Cells(Num; 1).HorizontalAlignment = xlCenter
Cells(Num + 1; 1) = ""
Cells(Num + 1; 1).Interior.ColorIndex = 15
CliNum = Worksheets("Врем").Cells(1; 3)
ReDim DepoArray(CliNum; BumNum)
ReDim DepoFil(BumNum)
a = 2
While Worksheets("Сделки").Cells(a; 1) <> Empty
i = 1
While Worksheets("Клиенты").Cells(i + 1; 2) <> _
Worksheets("Сделки").Cells(a; 2)
If Worksheets("Клиенты").Cells(i + 1; 2) = Empty Then
MsgBox "Неверный номер клиента в Окне 'Сделки' строка: " + CStr(a)
Sheets("Сделки").Select
Cells(a; 2).Select
Exit Sub
End If
i = i + 1
Wend
k = 0
For j = 1 To BumNum
If Worksheets("Врем").Cells(j; 1) = Worksheets("Сделки").Cells(a; 3) Then
k = j
Exit For
End If
Next
If k = 0 Then
a = a + 1
GoTo NNN
End If
If Not IsEmpty(Worksheets("Сделки").Cells(a; 4)) Then
Sign = 1
Else
Sign = -1
End If
If CurDate >= Worksheets("Сделки").Cells(a; 1) Then
If Worksheets("Сделки").Cells(a; 2) = FilialConst Then
DepoFil(k) = DepoFil(k) + Sign * Worksheets("Сделки").Cells(a; 6)
Else
DepoArray(i; k) = DepoArray(i; k) + Sign * Worksheets("Сделки").Cells(a; 6)
End If
End If
a = a + 1
NNN:
Wend
n = 7
For i = 1 To CliNum
Flag = False
For k = 1 To BumNum
If DepoArray(i; k) > 0 Then Flag = True
Next
If Flag Then
Str = Format(Worksheets("Клиенты").Cells(i + 1; 2); "0000000000")
Str = Right(Str; 5)
Cells(n; 1).NumberFormat = "@"
Cells(n; 1).Font.Bold = True
Cells(n; 1).HorizontalAlignment = xlCenter
Cells(n; 1).Font.Italic = False
Cells(n; 1).Interior.ColorIndex = 2
Cells(n; 1) = Str
For k = 1 To BumNum
If DepoArray(i; k) <> 0 Then
Cells(n; k + 1) = DepoArray(i; k)
Else
Cells(n; k + 1) = ""
End If
Cells(n; k + 1).Font.Bold = False
Cells(n; k + 1).Font.Italic = False
Cells(n; k + 1).Interior.ColorIndex = 2
Next
If n = 7 Then
n = n + 4
Else
n = n + 1
End If
End If
Next
'расчет по филиалу
Cells(8; 1) = "Филиал"
Cells(8; 1).Font.Bold = True
Cells(8; 1).HorizontalAlignment = xlCenter
Cells(8; 1).Font.Italic = False
Cells(8; 1).Interior.ColorIndex = 2
For k = 1 To BumNum
If DepoFil(k) <> 0 Then
Cells(8; k + 1) = DepoFil(k)
Else
Cells(8; k + 1) = ""
End If
Cells(8; k + 1).Font.Bold = False
Cells(8; k + 1).Font.Italic = False
Cells(8; k + 1).Interior.ColorIndex = 2
Next
For i = 1 To BumNum
Cells(n; i + 1).Interior.ColorIndex = 40
s = 0
For k = 11 To n - 1
s = s + Cells(k; i + 1)
Next
Cells(n; i + 1).Value = s
Next
For i = 1 To BumNum
Cells(9; i + 1) = Cells(7; i + 1) + Cells(8; i + 1)
Next
Cells(n; 1).Interior.ColorIndex = 40
Cells(n; 1) = "Итого 9998"
Cells(n; 1).Font.Bold = True
Cells(n; 1).Font.Italic = True
Range("A1:Z200").Borders(xlLeft).LineStyle = xlNone
Range("A1:Z200").Borders(xlRight).LineStyle = xlNone
Range("A1:Z200").Borders(xlTop).LineStyle = xlNone
Range("A1:Z200").Borders(xlBottom).LineStyle = xlNone
Range("A1:Z200").BorderAround LineStyle:=xlNone
Range(Cells(5; 1); Cells(n; BumNum + 1)).Borders(xlLeft).Weight = xlThin
Range(Cells(5; 1); Cells(n; BumNum + 1)).Borders(xlRight).Weight = xlThin
Range(Cells(5; 1); Cells(n; BumNum + 1)).Borders(xlTop).Weight = xlThin
Range(Cells(5; 1); Cells(n; BumNum + 1)).Borders(xlBottom).Weight = xlThin
Range(Cells(5; 1); Cells(n; BumNum + 1)).BorderAround Weight:=xlMedium
Range(Cells(n + 1; 1); Cells(100; 30)).Delete shift:=xlToLeft
Range(Cells(1; BumNum + 2); Cells(100; 30)).Delete shift:=xlToLeft
If DialogPrint("Депо"; 1) Then Exit Sub
Call EditOstBirga(DilerConst)
End Sub
'-------------------------------- Печать Отчеты клиентам -----------
Sub PrintOtchClient()
Dim Sheet; Ost812 As Object
Dim i; j; d; a; Col; m; MM; NN; MMM; k; b; q As Long
Dim FlagBuy; FlagCell; FlagDeal; FlagDepo As Boolean
Dim CliNum As Long
Dim ComStr; StrComS As String
Dim BumNum; z; z1; Index As Integer
Dim s; sum; SumBuy; Ost; SumCom; ComBirga; ComDiler; ComSum As Double
Dim Com As Double
Dim OstIn; OstOut; OstBegin; OstEnd As Double
Dim RowNum As Long
Dim OstInDate; OstOutDate As String
Dim DoFlag As Boolean
Dim Auk As Boolean
Set Sheet = Worksheets("Сделки")
Sheet.Range("A2").Sort Key1:=Sheet.Range("A2"); Order1:=xlAscending; _
Key2:=Sheet.Range("B2"); Order2:=xlAscending; _
Key3:=Sheet.Range("D2"); Order3:=xlAscending; _
Header:=xlYes; OrderCustom:=1; _
MatchCase:=False; Orientation:=xlTopToBottom
CurDate = Worksheets("Врем").Cells(1; 4)
Worksheets("ОтчетыИнвесторам").Select
i = 2
FlagDeal = False
FlagBuy = True
FlagCell = True
NN = 29 ' начало
m = NN
Range(Cells(NN - 1; 2); Cells(NN + 200; 6)).Delete shift:=xlToLeft
Rows(CStr(NN - 1) + ":" + CStr(NN - 1)).RowHeight = 28
Rows(CStr(NN - 1) + ":" + CStr(NN - 1)).WrapText = True
Rows(CStr(NN - 1) + ":" + CStr(NN - 1)).HorizontalAlignment = xlCenter
Rows(CStr(NN - 1) + ":" + CStr(NN - 1)).VerticalAlignment = xlBottom
Cells(NN - 1; 2) = "№ выпуска"
Cells(NN - 1; 3) = "Дата погашения"
Cells(NN - 1; 4) = "Цена сделки"
Cells(NN - 1; 5) = "Количество"
Cells(NN - 1; 6) = "Сумма сделки"
Cells(NN - 3; 3) = "Совершенные сделки на рынке РКО"
Cells(NN - 3; 3).Font.Bold = True
sum = 0
SumBuy = 0
SumCom = 0
ComBirga = 0
Call FormBum
BumNum = Worksheets("Врем").Cells(1; 2)
ReDim BumArray(BumNum)
ReDim BumArrayV(BumNum)
Index = CInt(InputBox("Введите номер 1-го ордера"))
Do While Sheet.Cells(i; 1) <> Empty
If Sheet.Cells(i; 1) = CurDate And Sheet.Cells(i; 2) <> DilerConst Then
FlagDeal = True
If FlagBuy And Sheet.Cells(i; 4) <> Empty Then
Покупка = True
CliNum = Sheet.Cells(i; 2)
Cells(m; 2) = "Покупка"
Cells(m; 2).HorizontalAlignment = xlLeft
Range(Cells(m; 2); Cells(m; 6)).Interior.ColorIndex = 15
m = m + 1
MM = m
FlagBuy = False
End If
If FlagCell And Sheet.Cells(i; 4) = Empty Then
If Not FlagBuy Then
s = 0
Col = 0
SumCom = 0
ComBirga = 0
For a = MM To m - 1
Cells(a; 6) = Cells(a; 4) * Cells(a; 5) * 10
If Cells(a; 4) <> 100 Then
SumCom = SumCom + Cells(a; 4) * Cells(a; 5) * 10
ComBirga = ComBirga + _
CDbl(Format(Cells(a; 4) * Cells(a; 5) * 0,1 * Worksheets("Инфо").Cells(1; 2) + 0,001; "0,00"))
Else
Погашение = True
End If
Cells(a; 6).NumberFormat = "# ###"
s = s + Cells(a; 6)
Col = Col + Cells(a; 5)
Next a
sum = sum + s
SumBuy = s
Cells(m; 6) = s
Cells(m; 6).NumberFormat = "# ###"
Cells(m; 5) = Col
Cells(m; 2) = "Итого"
m = m + 1
End If
CliNum = Sheet.Cells(i; 2)
Cells(m; 2) = "Продажа"
Продажа = True
Cells(m; 2).HorizontalAlignment = xlLeft
Range(Cells(m; 2); Cells(m; 6)).Interior.ColorIndex = 15
m = m + 1
MM = m
FlagCell = False
End If
Cells(m; 2) = Sheet.Cells(i; 3)
q = 2
While Worksheets("Бумаги").Cells(q; 1) <> Empty
If Worksheets("Бумаги").Cells(q; 1) = Cells(m; 2) Then
Cells(m; 3) = Worksheets("Бумаги").Cells(q; 3)
Cells(m; 3).NumberFormat = "ДД.ММ.ГГ"
End If
q = q + 1
Wend
If Sheet.Cells(i; 4) <> Empty Then
Cells(m; 4) = Sheet.Cells(i; 4)
Else
Cells(m; 4) = Sheet.Cells(i; 5)
End If
Cells(m; 4).NumberFormat = "0,00"
Cells(m; 5) = Sheet.Cells(i; 6)
m = m + 1
If CliNum <> Sheet.Cells(i + 1; 2) Or Sheet.Cells(i + 1; 1) <> CurDate Then
s = 0
Col = 0
For a = MM To m - 1
Cells(a; 6) = Cells(a; 4) * Cells(a; 5) * 10
If Cells(a; 4) <> 100 Then
SumCom = SumCom + Cells(a; 4) * Cells(a; 5) * 10
ComBirga = ComBirga + _
CDbl(Format(Cells(a; 4) * Cells(a; 5) * 0,1 * Worksheets("Инфо").Cells(1; 2) + 0,001; "0,00"))
Else
Погашение = True
End If
Cells(a; 6).NumberFormat = "# ###,00"
s = s + Cells(a; 6)
Col = Col + Cells(a; 5)
Next a
sum = sum + s
If FlagCell Then SumBuy = s
Cells(m; 6) = s
Cells(m; 6).NumberFormat = "# ###,00"
Cells(m; 5) = Col
Cells(m; 2) = "Итого"
Cells(5; 4) = CliNum
If CliNum = FilialConst Then Cells(5; 4) = DilerConst
k = 2
While Worksheets("Клиенты").Cells(k; 1) <> Empty
If Worksheets("Клиенты").Cells(k; 2) = CliNum Then
Cells(4; 4) = Worksheets("Клиенты").Cells(k; 1)
End If
k = k + 1
Wend
Range(Cells(NN - 1; 2); Cells(m; 6)).Borders(xlLeft).Weight = xlThin
Range(Cells(NN - 1; 2); Cells(m; 6)).Borders(xlRight).Weight = xlThin
Range(Cells(NN - 1; 2); Cells(m; 6)).Borders(xlTop).Weight = xlThin
Range(Cells(NN - 1; 2); Cells(m; 6)).Borders(xlBottom).Weight = xlThin
Range(Cells(NN - 1; 2); Cells(m; 6)).BorderAround Weight:=xlMedium
For b = 1 To BumNum
BumArray(b) = 0
BumArrayV(b) = 0
Next
b = 2
While Worksheets("Сделки").Cells(b; 1) <> Empty
If CurDate >= Worksheets("Сделки").Cells(b; 1) And _
CliNum = Worksheets("Сделки").Cells(b; 2) Then
z = 0
For z1 = 1 To BumNum
If Worksheets("Врем").Cells(z1; 1) = Worksheets("Сделки").Cells(b; 3) Then
z = z1
Exit For
End If
Next
If z <> 0 Then
If Not IsEmpty(Worksheets("Сделки").Cells(b; 4)) Then
If CurDate > Worksheets("Сделки").Cells(b; 1) Then
BumArrayV(z) = BumArrayV(z) + Worksheets("Сделки").Cells(b; 6)
End If
BumArray(z) = BumArray(z) + Worksheets("Сделки").Cells(b; 6)
Else
If CurDate > Worksheets("Сделки").Cells(b; 1) Then
BumArrayV(z) = BumArrayV(z) - Worksheets("Сделки").Cells(b; 6)
End If
BumArray(z) = BumArray(z) - Worksheets("Сделки").Cells(b; 6)
End If
End If
End If
b = b + 1
Wend
' M+4
MMM = m + 5
Rows(CStr(m + 1) + ":" + CStr(m + 200)).Delete
FlagDepo = False
For b = 1 To BumNum
If BumArray(b) > 0 Or BumArrayV(b) > 0 Then
FlagDepo = True
Cells(MMM; 2) = Worksheets("Врем").Cells(b; 1)
If BumArrayV(b) < BumArray(b) Then
Cells(MMM; 4) = BumArray(b) - BumArrayV(b)
Else
If BumArrayV(b) > BumArray(b) Then
Cells(MMM; 5) = BumArrayV(b) - BumArray(b)
End If
End If
Cells(MMM; 3) = BumArrayV(b)
Cells(MMM; 6) = BumArray(b)
MMM = MMM + 1
End If
Next
If FlagDepo Then
Rows(CStr(m + 4) + ":" + CStr(m + 4)).RowHeight = 28
Rows(CStr(m + 4) + ":" + CStr(m + 4)).WrapText = True
Rows(CStr(m + 4) + ":" + CStr(m + 4)).HorizontalAlignment = xlCenter
Rows(CStr(m + 4) + ":" + CStr(m + 4)).VerticalAlignment = xlBottom
Cells(m + 4; 2) = "№ выпуска"
Cells(m + 4; 3) = "Входящий остаток"
Cells(m + 4; 4) = "Куплено"
Cells(m + 4; 5) = "Продано/ Погашено"
Cells(m + 4; 6) = "Исходящий остаток"
Cells(m + 2; 3).Font.Bold = True
Cells(m + 2; 3) = "Количество бумаг, принадлежащих Инвестору (штук)"
Range(Cells(m + 4; 2); Cells(MMM - 1; 6)).Borders(xlLeft).Weight = xlThin
Range(Cells(m + 4; 2); Cells(MMM - 1; 6)).Borders(xlRight).Weight = xlThin
Range(Cells(m + 4; 2); Cells(MMM - 1; 6)).Borders(xlTop).Weight = xlThin
Range(Cells(m + 4; 2); Cells(MMM - 1; 6)).Borders(xlBottom).Weight = xlThin
Range(Cells(m + 4; 2); Cells(MMM - 1; 6)).BorderAround Weight:=xlMedium
End If
' ------------------------------------------------------
' - расчет остатков
Set Ost812 = Worksheets("Остатки812")
Ost812.Range("B2").Sort Key1:=Ost812.Range("B2"); Order1:=xlAscending; _
Key2:=Ost812.Range("A2"); Order2:=xlDescending; _
Header:=xlYes; OrderCustom:=1; _
MatchCase:=False; Orientation:=xlTopToBottom
OstIn = 0
OstOut = 0
OstBegin = 0
OstInDate = ""
OstOutDate = ""
RowNum = 0
k = 2
DoFlag = True
Do While Ost812.Cells(k; 1) <> Empty
If Ost812.Cells(k; 2) = CliNum And DoFlag Then
If Ost812.Cells(k; 1) < CurDate Then
OstBegin = Ost812.Cells(k; 8)
Else
Do While Ost812.Cells(k; 1) <> Empty
If Ost812.Cells(k; 2) <> CliNum Then Exit Do
If Ost812.Cells(k; 1) = CurDate Then
OstBegin = Ost812.Cells(k; 3)
OstIn = Ost812.Cells(k; 4)
OstInDate = Ost812.Cells(k; 5)
OstOut = Ost812.Cells(k; 6)
OstOutDate = Ost812.Cells(k; 7)
RowNum = k
Exit Do
End If
k = k + 1
Loop
End If
DoFlag = False
End If
k = k + 1
Loop
If RowNum = 0 Then RowNum = k
k = RowNum
' - начало таблицы
With DialogSheets("ДиалогКлиент")
.Labels(8).Text = Cells(4; 4) ' Клиент
.Labels(9).Text = sum ' Сумма сделки
.Labels(10).Text = CurDate ' Дата текущая
.Labels(17).Text = CliNum
If CliNum = FilialConst Then .Labels(17).Text = DilerConst
.EditBoxes(1).Text = "0" ' Сумма списания
.EditBoxes(1).InputType = xlNumber
.EditBoxes(2).Text = CurDate ' Дата сделки
.EditBoxes(7).Text = OstOutDate ' списано (дата)
.EditBoxes(8).Text = OstOut ' списано (сумма)
.EditBoxes(8).InputType = xlNumber
.EditBoxes(9).Text = OstInDate ' перечислено (дата)
.EditBoxes(10).Text = OstIn ' перечислено (сумма)
.EditBoxes(10).InputType = xlNumber
Com = 0,00015
Select Case SumCom
Case Is < 36000
Com = 0,005
Case Is < 51000
Com = 0,004
Case Is < 101000
Com = 0,003
Case Is < 301000
Com = 0,002
Case Is < 501000
Com = 0,001
Case Is < 1001000
Com = 0,0005
Case Is < 3001000
Com = 0,00025
End Select
If Cells(4; 4) = "Универсалбанк" Then Com = 0
.EditBoxes(3).Text = Com ' Комиссия дилера
.EditBoxes(3).InputType = xlNumber
.EditBoxes(4).Text = "0" ' Сумма вознаграждения дилера
.EditBoxes(4).InputType = xlNumber
.EditBoxes(5).Text = "" ' Запись о вознаграждении
.EditBoxes(6).Text = OstBegin ' Остаток на 812 счете клиента
.EditBoxes(6).InputType = xlNumber
Cells(MMM + 3; 1) = "Начальник инвестиционно-аналитического отдела_________________"
Cells(MMM + 3; 6) = ""
Again:
Просмотр = False
ExitVar = False
Button = False
.Show
If .EditBoxes(1).Text = "" Then .EditBoxes(1).Text = 0
If .EditBoxes(3).Text = "" Then .EditBoxes(3).Text = 0
If .EditBoxes(4).Text = "" Then .EditBoxes(4).Text = 0
If .EditBoxes(6).Text = "" Then .EditBoxes(6).Text = 0
If .EditBoxes(8).Text = "" Then .EditBoxes(8).Text = 0
If .EditBoxes(10).Text = "" Then .EditBoxes(10).Text = 0
Cells(21; 1) = .EditBoxes(5).Text ' Запись о вознаграждении
Cells(21; 1).Font.Italic = True
Cells(6; 4) = .EditBoxes(2).Text ' Дата сделки
' занесение данных в итоговую таблицу
Cells(10; 6) = .EditBoxes(6).Text ' Входящий остаток
OstBegin = .EditBoxes(6).Text
Cells(14; 6) = SumBuy
Cells(15; 6) = sum - SumBuy
ComStr = Format(SumCom * .EditBoxes(3).Text; "0,00")
ComDiler = CDbl(ComStr)
Cells(16; 6) = ComBirga
Cells(18; 6) = ComDiler
Cells(20; 6) = .EditBoxes(4).Text
Cells(11; 6) = .EditBoxes(8).Text
OstOut = .EditBoxes(8).Text
OstIn = .EditBoxes(10).Text
Cells(12; 6) = .EditBoxes(10).Text
Cells(13; 6) = .EditBoxes(6).Text - .EditBoxes(8).Text + .EditBoxes(10).Text
Cells(11; 1) = "2.Списано на р/с / выдано наличными " + .EditBoxes(7).Text
OstInDate = .EditBoxes(9).Text
OstOutDate = .EditBoxes(7).Text
Cells(12; 1) = "3.Перечислено на покупку " + .EditBoxes(9).Text
Cells(22; 6) = 2 * SumBuy - sum + ComBirga + ComDiler
Cells(23; 6) = .EditBoxes(1).Text
Cells(24; 6) = .EditBoxes(6).Text - .EditBoxes(8).Text + .EditBoxes(10).Text - _
(2 * SumBuy - sum + ComBirga + ComDiler) - _
.EditBoxes(1).Text - .EditBoxes(4).Text
OstEnd = Cells(24; 6)
Ost812.Cells(k; 1) = CurDate
Ost812.Cells(k; 2) = CliNum
Ost812.Cells(k; 3) = OstBegin
Ost812.Cells(k; 4) = OstIn
Ost812.Cells(k; 5) = OstInDate
Ost812.Cells(k; 6) = OstOut
Ost812.Cells(k; 7) = OstOutDate
Ost812.Cells(k; 8) = OstEnd
Ost812.Cells(k; 9) = Cells(14; 6) + Cells(15; 6)
Ost812.Cells(k; 10) = Cells(16; 6)
Ost812.Cells(k; 11) = Cells(18; 6)
Call EditOstBirga(CliNum)
' конец занесения данных
If Просмотр Then
Worksheets("ОтчетыИнвесторам").PrintPreview
GoTo Again
End If
If Button Then ActiveWindow.SelectedSheets.PrintOut copies:=2
If ExitVar Then Exit Sub
End With
' печать мемориальных ордеров
Dim StrS As String
Auk = False
With DialogSheets("ДиалогОперация")
.Show
If .OptionButtons(1).Value = xlOn Then StrS = "Покупка"
If .OptionButtons(2).Value = xlOn Then StrS = "Продажа"
If .OptionButtons(3).Value = xlOn Then StrS = "Погашение"
If .OptionButtons(4).Value = xlOn Then StrS = "Покупка / Продажа"
If .OptionButtons(5).Value = xlOn Then StrS = "Покупка / Погашение"
If .OptionButtons(5).Value = xlOn Then Auk = True
End With
Worksheets("Ордер").Select
Dim Pos812 As Integer
Dim Page; Page1 As Object
Set Page = Worksheets("ОтчетыИнвесторам")
Set Page1 = Worksheets("Клиенты")
Pos812 = 2
While (Page1.Cells(Pos812; 1) <> Empty) And (Worksheets("Клиенты").Cells(Pos812; 2) <> CliNum)
Pos812 = Pos812 + 1
Wend
If Page.Cells(14; 6) - Page.Cells(15; 6) > 0 Then
If MemoOrder(Index; Page.Cells(14; 6) - Page.Cells(15; 6); 6; 7; Pos812; _
StrS + " РКО за " + CStr(CurDate)) Then Exit Sub
Index = Index + 1
Else
If MemoOrder(Index; Page.Cells(15; 6) - Page.Cells(14; 6); 7; 6; Pos812; _
StrS + " РКО за " + CStr(CurDate)) Then Exit Sub
Index = Index + 1
End If
Dim SumS As Double
SumS = Page.Cells(16; 6) + Page.Cells(18; 6) + Page.Cells(20; 6)
If SumS > 0 Then
StrS = ""
If Page.Cells(18; 6) > 0 Then StrS = "Комиссия Дилера " + CStr(Page.Cells(18; 6)) + " в т.ч. НДС " + _
CStr(Format(Page.Cells(18; 6) / 6; "0,00"))
If Page.Cells(16; 6) > 0 And Not Auk Then StrS = StrS + " возмещение ком. ВКБ " + CStr(Page.Cells(16; 6)) + " в т.ч. НДС " + _
CStr(Format(Page.Cells(16; 6) / 6; "0,00"))
If CliNum = FilialConst Then
If MemoOrder(Index; SumS; 6; 7; Pos812; StrS) Then Exit Sub
Else
If Auk Then
StrS = StrS + " по приобретению на аукционе"
If MemoOrder(Index; Page.Cells(18; 6) + Page.Cells(20; 6); 6; 12; Pos812; StrS) Then Exit Sub
StrS = "Возмещение ком. ВКБ " + CStr(Page.Cells(16; 6)) + " в т.ч. НДС " + _
CStr(Format(Page.Cells(16; 6) / 6; "0,00"))
Index = Index + 1
If MemoOrder(Index; Page.Cells(16; 6); 6; 8; Pos812; StrS) Then Exit Sub
Else
If MemoOrder(Index; SumS; 6; 8; Pos812; StrS) Then Exit Sub
End If
End If
Index = Index + 1
End If
If CliNum <> FilialConst Then
If Len(StrComS) > 0 Then
StrComS = StrComS + "," + CStr(Right(CliNum; 3))
Else
StrComS = StrComS + CStr(Right(CliNum; 3))
End If
End If
If CliNum <> FilialConst Then ComSum = ComSum + Page.Cells(16; 6)
Worksheets("ОтчетыИнвесторам").Select
'---------------
Rows(CStr(m + 4) + ":" + CStr(m + 4)).RowHeight = 13,8
Rows(CStr(m + 4) + ":" + CStr(m + 4)).WrapText = False
Rows(CStr(m + 4) + ":" + CStr(m + 4)).HorizontalAlignment = xlRight
Rows(CStr(m + 4) + ":" + CStr(m + 4)).VerticalAlignment = xlBottom
Range(Cells(NN; 2); Cells(NN + 200; 6)).Delete shift:=xlToLeft
m = NN
FlagBuy = True
FlagCell = True
ComBirga = 0
sum = 0
SumBuy = 0
SumCom = 0
End If
End If
i = i + 1
Loop
If Not FlagDeal Then
MsgBox "Сделок в текущий день не было"
Else
If ComSum > 0 Then
Worksheets("Ордер").Select
If MemoOrder(Index; ComSum; 9; 7; 2; _
"Комиссия ВКБ по инвесторам " + StrComS + " в т.ч. НДС " + _
CStr(Format(ComSum / 6; "0,00"))) Then Exit Sub
End If
End If
End Sub
'-------------------------------- Печать Отчеты недельные ----------
Sub PrintOtchWeek()
Dim BumNum; CliNum; i; j; k; a; n; Sign; s As Integer
Dim Flag As Boolean
Dim Code As Long
Dim Str As String
Dim DepoFil() As Integer
Dim Num As Integer
CurDate = Worksheets("Врем").Cells(1; 4)
Call FormBum
Sheets("ОтчетНедельный").Select
BumNum = Worksheets("Врем").Cells(1; 2)
Num = 8
For i = 1 To BumNum
Cells(6; i + 1) = Worksheets("Врем").Cells(i; 1)
Cells(6; i + 1).Font.Bold = True
Cells(6; i + 1).Interior.ColorIndex = 40
Cells(Num; i + 1).Interior.ColorIndex = 15
Cells(Num; i + 1) = ""
Cells(5; i + 1).Interior.ColorIndex = 40
Next
Cells(Num; 1).Interior.ColorIndex = 15
Cells(Num; 1) = ""
Cells(5; 1).Interior.ColorIndex = 40
Cells(5; 1) = ""
Cells(6; 1).Interior.ColorIndex = 40
Cells(6; 1).Font.Bold = True
Cells(6; 1) = "№ бумаги"
Cells(7; 1) = "Дилер"
Cells(6; 1).HorizontalAlignment = xlCenter
Cells(7; 1).HorizontalAlignment = xlCenter
Cells(7; 1).Font.Bold = True
CliNum = Worksheets("Врем").Cells(1; 3)
ReDim DepoArray(CliNum; BumNum)
a = 2
While Worksheets("Сделки").Cells(a; 1) <> Empty
i = 1
While Worksheets("Клиенты").Cells(i + 1; 2) <> _
Worksheets("Сделки").Cells(a; 2)
If Worksheets("Клиенты").Cells(i + 1; 2) = Empty Then
MsgBox "Неверный номер клиента в Окне 'Сделки'"
Exit Sub
End If
i = i + 1
Wend
k = 0
For j = 1 To BumNum
If Worksheets("Врем").Cells(j; 1) = Worksheets("Сделки").Cells(a; 3) Then
k = j
Exit For
End If
Next
If k = 0 Then
a = a + 1
GoTo NNN
End If
If Not IsEmpty(Worksheets("Сделки").Cells(a; 4)) Then
Sign = 1
Else
Sign = -1
End If
If CurDate >= Worksheets("Сделки").Cells(a; 1) Then
DepoArray(i; k) = DepoArray(i; k) + Sign * Worksheets("Сделки").Cells(a; 6)
End If
a = a + 1
NNN:
Wend
For k = 1 To BumNum
DepoArray(1; k) = DepoArray(1; k) + DepoArray(2; k)
DepoArray(2; k) = 0
Next k
n = 7
For i = 1 To CliNum
Flag = False
For k = 1 To BumNum
If DepoArray(i; k) > 0 Then Flag = True
Next
If Flag Then
If n > 7 Then
Str = Format(Worksheets("Клиенты").Cells(i + 1; 2); "0000000000")
Str = Right(Str; 5)
Cells(n; 1).NumberFormat = "@"
Cells(n; 1).Font.Bold = True
Cells(n; 1).HorizontalAlignment = xlCenter
Cells(n; 1).Font.Italic = False
Cells(n; 1).Interior.ColorIndex = 2
Cells(n; 1) = Str
End If
For k = 1 To BumNum
If DepoArray(i; k) <> 0 Then
Cells(n; k + 1) = DepoArray(i; k)
Else
Cells(n; k + 1) = ""
End If
Cells(n; k + 1).Font.Bold = False
Cells(n; k + 1).Font.Italic = False
Cells(n; k + 1).Interior.ColorIndex = 2
Next
If n = 7 Then
n = n + 2
Else
n = n + 1
End If
End If
Next
For i = 1 To BumNum
Cells(n; i + 1).Interior.ColorIndex = 40
s = 0
For k = 9 To n - 1
s = s + Cells(k; i + 1)
Next
Cells(n; i + 1).Value = s
Next
Cells(n; 1).Interior.ColorIndex = 40
Cells(n; 1) = "Итого по инвесторам"
Cells(n; 1).Font.Bold = True
Cells(n; 1).Font.Italic = True
Range("A1:Z200").Borders(xlLeft).LineStyle = xlNone
Range("A1:Z200").Borders(xlRight).LineStyle = xlNone
Range("A1:Z200").Borders(xlTop).LineStyle = xlNone
Range("A1:Z200").Borders(xlBottom).LineStyle = xlNone
Range("A1:Z200").BorderAround LineStyle:=xlNone
Range(Cells(5; 1); Cells(n; BumNum + 1)).Borders(xlLeft).Weight = xlThin
Range(Cells(5; 1); Cells(n; BumNum + 1)).Borders(xlRight).Weight = xlThin
Range(Cells(5; 1); Cells(n; BumNum + 1)).Borders(xlTop).Weight = xlThin
Range(Cells(5; 1); Cells(n; BumNum + 1)).Borders(xlBottom).Weight = xlThin
Range(Cells(5; 1); Cells(n; BumNum + 1)).BorderAround Weight:=xlMedium
Range(Cells(n + 1; 1); Cells(100; 30)).Delete shift:=xlToLeft
Range(Cells(1; BumNum + 2); Cells(100; 30)).Delete shift:=xlToLeft
Range("a2") = "на " + CStr(CurDate)
Range(Cells(n + 2; 1); Cells(n + 3; BumNum + 1)).BorderAround Weight:=xlMedium
Cells(n + 2; 1) = "Количество перечисленных облигаций на счета ""Депо"""
Cells(n + 3; 1) = "без совершения сделок купли-продажи"
Cells(n + 2; 1).Font.Bold = True
Cells(n + 3; 1).Font.Bold = True
Cells(n + 5; 1).Font.Size = 12
Cells(n + 5; 1) = "Ответственное лицо Дилера " + _
" _________________________ "
Cells(n + 3; BumNum + 1) = 0
Cells(n + 3; BumNum + 1).Font.Bold = True
If DialogPrint("ОтчетНедельный"; 2) Then Exit Sub
End Sub
'-------------------------------- Печать Отчеты Месячные -----------
Sub PrintOtchMonth()
Dim DateBegin; DateEnd; DateMas() As Date
Dim i; k; m; NumberClients; kk As Long
Dim Sign; BumNum; Row; Col; Num; sum As Integer
Dim DateFlag; Flag; CliInput(); BumInput() As Boolean
Dim Bum(ConstMaxBum) As Long
Dim mas() As Integer
Dim Sheet As Object
Dim Str As String
With DialogSheets("ДиалогМесОтчет")
.EditBoxes(1).InputType = xlDate
.EditBoxes(2).InputType = xlDate
.Show
If Not Button Then Exit Sub
If IsDate(.EditBoxes(1).Text) = False Or _
IsDate(.EditBoxes(2).Text) = False Then
MsgBox "Неверно введены даты"
Exit Sub
End If
DateBegin = CDate(.EditBoxes(1).Text)
DateEnd = CDate(.EditBoxes(2).Text)
If DateBegin >= DateEnd Then
MsgBox "Даты не пересекаются"
Exit Sub
End If
End With
Set Sheet = Worksheets("Бумаги")
i = 2
BumNum = 0
While Sheet.Cells(i; 1) <> Empty
If (Sheet.Cells(i; 2) < DateBegin And Sheet.Cells(i; 3) > DateBegin) Or _
(Sheet.Cells(i; 2) < DateEnd And Sheet.Cells(i; 3) > DateEnd) Or _
(Sheet.Cells(i; 2) > DateBegin And Sheet.Cells(i; 3) < DateEnd) Then
Bum(BumNum + 1) = Sheet.Cells(i; 1)
BumNum = BumNum + 1
End If
i = i + 1
Wend
Set Sheet = Worksheets("Клиенты")
i = 2
k = 0
While Sheet.Cells(i; 1) <> Empty
If Sheet.Cells(i; 2) > k And Sheet.Cells(i; 2) <> FilialConst Then
k = Sheet.Cells(i; 2)
End If
i = i + 1
Wend
NumberClients = k - DilerConst
DateFlag = True
ReDim mas(NumberClients; BumNum * 7)
ReDim DateMas(NumberClients; BumNum)
ReDim CliInput(NumberClients)
ReDim BumInput(BumNum)
i = 2
Worksheets("Сделки").Select
While Cells(i; 1) <> Empty
If Cells(i; 2) <> DilerConst And Cells(i; 2) <> FilialConst Then
If Cells(i; 1) < DateBegin Then
Flag = True
For k = 1 To BumNum ' поиск номера бумаги
If Cells(i; 3) = Bum(k) Then
Flag = False
Exit For
End If
Next k
If Flag Then GoTo cont
Sign = 1
If IsEmpty(Cells(i; 4)) Then Sign = -1
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 1) = _
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 1) + Sign * Cells(i; 6)
End If
If Cells(i; 1) >= DateBegin And DateFlag Then
For k = 1 To NumberClients
For m = 1 To BumNum
mas(k; (m - 1) * 7 + 2) = mas(k; (m - 1) * 7 + 1)
Next m
Next k
DateFlag = False
End If
If Cells(i; 1) >= DateBegin And Cells(i; 1) <= DateEnd Then
Flag = True
For k = 1 To BumNum
If Cells(i; 3) = Bum(k) Then
Flag = False
Exit For
End If
Next k
If Flag Then GoTo cont
If Cells(i; 7) <> "списание" And Cells(i; 7) <> "зачисление" Then
If Not IsEmpty(Cells(i; 4)) Then
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 3) = _
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 3) + Cells(i; 6)
Else
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 4) = _
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 4) + Cells(i; 6)
End If
If DateMas(Cells(i; 2) - DilerConst; k) <> Cells(i; 1) Then
DateMas(Cells(i; 2) - DilerConst; k) = Cells(i; 1)
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 5) = _
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 5) + 1
End If
End If
If Cells(i; 7) = "списание" Then
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 6) = _
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 6) + Cells(i; 6)
End If
If Cells(i; 7) = "зачисление" Then
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 7) = _
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 7) + Cells(i; 6)
End If
Sign = 1
If IsEmpty(Cells(i; 4)) Then Sign = -1
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 2) = _
mas(Cells(i; 2) - DilerConst; (k - 1) * 7 + 2) + Sign * Cells(i; 6)
End If
End If
cont:
i = i + 1
Wend
For i = 1 To NumberClients
CliInput(i) = False
For k = 1 To BumNum
If mas(i; (k - 1) * 7 + 1) > 0 Or _
mas(i; (k - 1) * 7 + 2) > 0 Or _
mas(i; (k - 1) * 7 + 3) > 0 Or _
mas(i; (k - 1) * 7 + 4) > 0 Or _
mas(i; (k - 1) * 7 + 5) > 0 Or _
mas(i; (k - 1) * 7 + 6) > 0 Or _
mas(i; (k - 1) * 7 + 7) > 0 Then CliInput(i) = True
Next k
Next i
For k = 1 To BumNum
BumInput(k) = False
For i = 1 To NumberClients
If mas(i; (k - 1) * 7 + 1) > 0 Or _
mas(i; (k - 1) * 7 + 2) > 0 Or _
mas(i; (k - 1) * 7 + 3) > 0 Or _
mas(i; (k - 1) * 7 + 4) > 0 Or _
mas(i; (k - 1) * 7 + 5) > 0 Or _
mas(i; (k - 1) * 7 + 6) > 0 Or _
mas(i; (k - 1) * 7 + 7) > 0 Then BumInput(k) = True
Next i
Next k
Worksheets("ОтчетМесячный").Select
Range(Cells(7; 1); Cells(800; 22)).Delete shift:=xlToLeft
Row = 4
Col = 2
Cells(2; 1) = "за период от " + CStr(DateBegin) + " до " + CStr(DateEnd)
kk = 0
Flag = False
For k = 1 To BumNum
If BumInput(k) Then
Cells(Row; Col) = Bum(k)
Num = 0
For i = 1 To NumberClients
If CliInput(i) Then
If Col = 2 Then
Str = Format(i; "0000000000")
Str = Right(Str; 5)
Cells(Row + Num + 3; Col - 1).NumberFormat = "@"
Cells(Row + Num + 3; Col - 1).Font.Bold = True
Cells(Row + Num + 3; Col - 1).HorizontalAlignment = xlCenter
Cells(Row + Num + 3; Col - 1).Font.Italic = False
Cells(Row + Num + 3; Col - 1).Interior.ColorIndex = 2
Cells(Row + Num + 3; Col - 1) = Str
End If
Cells(Row + Num + 3; Col) = mas(i; (k - 1) * 7 + 1)
Cells(Row + Num + 3; Col + 1) = mas(i; (k - 1) * 7 + 2)
Cells(Row + Num + 3; Col + 2) = mas(i; (k - 1) * 7 + 3)
Cells(Row + Num + 3; Col + 3) = mas(i; (k - 1) * 7 + 4)
Cells(Row + Num + 3; Col + 4) = mas(i; (k - 1) * 7 + 5)
Cells(Row + Num + 3; Col + 5) = mas(i; (k - 1) * 7 + 6)
Cells(Row + Num + 3; Col + 6) = mas(i; (k - 1) * 7 + 7)
Num = Num + 1
End If
Next i
Col = Col + 7
kk = kk + 1
Flag = True
End If
If ((kk > 0) And (kk Mod 3 = 0) And Flag) Or k = BumNum Then
Flag = False
For i = 2 To 22
sum = 0
For m = 1 To NumberClients
sum = sum + Cells(m + 6; i)
Next m
Cells(Num + 7; i) = sum
Cells(Num + 7; i).Font.Bold = True
Cells(Num + 7; i).Interior.ColorIndex = 15
Next i
Cells(Num + 7; 1) = "Итого"
Cells(Num + 7; 1).Font.Bold = True
Cells(Num + 7; 1).HorizontalAlignment = xlCenter
Cells(Num + 7; 1).Interior.ColorIndex = 15
Range(Cells(7; 1); Cells(Num + 7; 22)).Borders(xlLeft).Weight = xlThin
Range(Cells(7; 1); Cells(Num + 7; 22)).Borders(xlRight).Weight = xlThin
Range(Cells(7; 1); Cells(Num + 7; 22)).Borders(xlTop).Weight = xlThin
Range(Cells(7; 1); Cells(Num + 7; 22)).Borders(xlBottom).Weight = xlThin
Range(Cells(7; 1); Cells(Num + 7; 22)).BorderAround Weight:=xlMedium
Range(Cells(7; 9); Cells(Num + 7; 15)).BorderAround Weight:=xlMedium
Cells(Num + 10; 10) = "Ответственное лицо Дилера______________________________"
If DialogPrint("ОтчетМесячный"; 2) Then Exit Sub
Row = 4
Col = 2
Cells(Row; Col) = " "
Cells(Row; Col + 7) = " "
Cells(Row; Col + 14) = " "
Range(Cells(7; 1); Cells(800; 22)).Delete shift:=xlToLeft
End If
Next k
Worksheets("СписокКлиентов").Select
Num = 5
Range(Cells(Num; 1); Cells(100; 3)).Delete shift:=xlToLeft
For i = 1 To NumberClients
If CliInput(i) Then
k = 2
While Sheet.Cells(k; 2) <> DilerConst + i
k = k + 1
Wend
Cells(Num; 1) = Sheet.Cells(k; 1)
Cells(Num; 2) = Sheet.Cells(k; 2)
Cells(Num; 3) = Sheet.Cells(k; 3)
Cells(Num; 1).HorizontalAlignment = xlLeft
Cells(Num; 2).HorizontalAlignment = xlCenter
Cells(Num; 3).HorizontalAlignment = xlCenter
Cells(Num; 3).WrapText = True
Num = Num + 1
End If
Next i
Cells(2; 1) = "за период от " + CStr(DateBegin) + " до " + CStr(DateEnd)
Range(Cells(5; 1); Cells(Num - 1; 3)).Borders(xlLeft).Weight = xlThin
Range(Cells(5; 1); Cells(Num - 1; 3)).Borders(xlRight).Weight = xlThin
Range(Cells(5; 1); Cells(Num - 1; 3)).Borders(xlTop).Weight = xlThin
Range(Cells(5; 1); Cells(Num - 1; 3)).Borders(xlBottom).Weight = xlThin
Range(Cells(5; 1); Cells(Num - 1; 3)).BorderAround Weight:=xlMedium
Range(Cells(5; 2); Cells(Num - 1; 2)).BorderAround Weight:=xlMedium
Cells(Num + 2; 2) = "Ответственное лицо Дилера______________________________"
With DialogSheets("ДиалогПечать")
AgainMonthOtch1:
Просмотр = False
ExitVar = False
Button = False
.Show
If Просмотр Then
Worksheets("СписокКлиентов").PrintPreview
GoTo AgainMonthOtch1
End If
If ExitVar Then Exit Sub
If Button Then ActiveWindow.SelectedSheets.PrintOut copies:=2
End With
End Sub
'-------------------------------- Перечисление/списание биржа ------
Sub GotoBirga()
Dim Sheet As Object
Dim OstIn; OstOut; OstBegin; CliNum As Double
Dim RowNum; k As Long
Dim DoFlag As Boolean
Set Sheet = Worksheets("ОстаткиБиржа")
Sheet.Range("B2").Sort Key1:=Sheet.Range("B2"); Order1:=xlAscending; _
Key2:=Sheet.Range("A2"); Order2:=xlDescending; _
Header:=xlYes; OrderCustom:=1; _
MatchCase:=False; Orientation:=xlTopToBottom
Sheet.Select
CurDate = Worksheets("Врем").Cells(1; 4)
k = 2
While Worksheets("Клиенты").Cells(k; 1) <> Empty
k = k + 1
Wend
With DialogSheets("ДиалогБиржа")
.DropDowns.ListFillRange = "Клиенты!$B$2:$B$" + CStr(k - 1)
.EditBoxes(1).InputType = xlNumber
.EditBoxes(2).InputType = xlNumber
.Show
If Button = False Then
MsgBox "Данные не занесены"
Exit Sub
End If
CliNum = .DropDowns(1).List(.DropDowns(1).ListIndex)
If .EditBoxes(1).Text = "" Then
OstIn = 0
Else
OstIn = .EditBoxes(1).Text
End If
If .EditBoxes(2).Text = "" Then
OstOut = 0
Else
OstOut = .EditBoxes(2).Text
End If
OstBegin = 0
k = 2
DoFlag = True
Do While Cells(k; 1) <> Empty
If Cells(k; 2) = CliNum And DoFlag Then
If Cells(k; 1) < CurDate Then
OstBegin = Cells(k; 6)
Else
MsgBox "Невозможен ввод информации"
Exit Sub
End If
DoFlag = False
End If
k = k + 1
Loop
Cells(k; 1) = CurDate
Cells(k; 2) = CliNum
Cells(k; 3) = OstBegin
Cells(k; 4) = OstIn
Cells(k; 5) = OstOut
Cells(k; 6) = OstBegin + OstIn - OstOut
End With
End Sub
'-------------------------------- Просмотр остатков 812 ------------
Sub PrintOst()
Dim Sheet; Sheet1 As Object
Dim i; k; CliNum As Long
Dim Ost As Double
CurDate = Worksheets("Врем").Cells(1; 4)
i = 2
While Worksheets("Сделки").Cells(i; 1) <> Empty
If Worksheets("Сделки").Cells(i; 1) = CurDate Then
Call EditOstBirga(Worksheets("Сделки").Cells(i; 2))
End If
i = i + 1
Wend
Set Sheet = Worksheets("Остатки812")
Set Sheet1 = Worksheets("ОстаткиБиржа")
Sheets("Клиенты").Select
i = 2
Sheet.Range("B2").Sort Key1:=Sheet.Range("B2"); Order1:=xlAscending; _
Key2:=Sheet.Range("A2"); Order2:=xlDescending; _
Header:=xlYes; OrderCustom:=1; _
MatchCase:=False; Orientation:=xlTopToBottom
Sheet1.Range("B2").Sort Key1:=Sheet1.Range("B2"); Order1:=xlAscending; _
Key2:=Sheet1.Range("A2"); Order2:=xlDescending; _
Header:=xlYes; OrderCustom:=1; _
MatchCase:=False; Orientation:=xlTopToBottom
While Cells(i; 2) <> Empty
CliNum = Cells(i; 2)
k = 2
Do
If Sheet.Cells(k; 1) = Empty Then
Ost = 0
Exit Do
End If
If Sheet.Cells(k; 2) = CliNum Then
Ost = Sheet.Cells(k; 8)
Exit Do
End If
k = k + 1
Loop
Cells(i; 4) = Ost
k = 2
Do
If Sheet1.Cells(k; 1) = Empty Then
Ost = 0
Exit Do
End If
If Sheet1.Cells(k; 2) = CliNum Then
Ost = Sheet1.Cells(k; 6)
Exit Do
End If
k = k + 1
Loop
Cells(i; 5) = Ost
i = i + 1
Wend
End Sub
'-------------------------------- Печать портфель ------------------
Sub PrintPortfel()
Dim Sheet As Object
Dim i; k; BumNum; m As Long
Dim Bum(ConstMaxBum); DatePog(ConstMaxBum) As Long
Dim Volume(); BiginIndex(); dates(); V() As Integer
Dim Price(); BumPrice(); DohPog(); DohPriobr() As Double
Dim DateMas() As Date
Dim Flag; BumIndex() As Boolean
Dim SumPog1(); SumPog2(); SumPriobr1(); SumPriobr2() As Double
Dim SumPog11; SumPriobr11; SumPog22; SumPriobr22 As Double
Dim BumVol() As Integer
Dim AllVol As Long
Dim PortfelCost; PortfelBalance As Double
CurDate = Worksheets("Врем").Cells(1; 4)
Set Sheet = Worksheets("Бумаги")
i = 2
BumNum = 0
While Sheet.Cells(i; 1) <> Empty
If (Sheet.Cells(i; 2) <= CurDate And Sheet.Cells(i; 3) > CurDate) Then
Bum(BumNum + 1) = Sheet.Cells(i; 1)
DatePog(BumNum + 1) = Sheet.Cells(i; 3)
BumNum = BumNum + 1
End If
i = i + 1
Wend
Worksheets("Сделки").Select
Range("B2").Sort Key1:=Range("A2"); Order1:=xlAscending; _
Key2:=Range("D2"); Order2:=xlAscending; _
Header:=xlYes; OrderCustom:=1; _
MatchCase:=False; Orientation:=xlTopToBottom
ReDim Volume(BumNum; MaxCount)
ReDim Price(BumNum; MaxCount)
ReDim DateMas(BumNum; MaxCount)
ReDim DohPog(BumNum; MaxCount)
ReDim DohPriobr(BumNum; MaxCount)
ReDim dates(BumNum); V(BumNum); BeginIndex(BumNum)
ReDim BumIndex(BumNum); BumPrice(BumNum)
ReDim SumPog1(BumNum); SumPog2(BumNum); SumPriobr1(BumNum); SumPriobr2(BumNum)
ReDim BumVol(BumNum)
For i = 1 To BumNum
dates(i) = 1
Next i
i = 2
While Cells(i; 1) <> Empty
If Cells(i; 2) = DilerConst And Cells(i; 7) <> "списание" _
And Cells(i; 7) <> "зачисление" Then
Flag = True
For k = 1 To BumNum ' поиск номера бумаги
If Cells(i; 3) = Bum(k) Then
Flag = False
Exit For
End If
Next k
If Flag Then GoTo cont
If Cells(i; 1) <= CurDate Then
If Not IsEmpty(Cells(i; 4)) Then
Volume(k; dates(k)) = Cells(i; 6)
Price(k; dates(k)) = Cells(i; 4)
DateMas(k; dates(k)) = Cells(i; 1)
dates(k) = dates(k) + 1
V(k) = V(k) + Cells(i; 6)
Else
V(k) = V(k) - Cells(i; 6)
End If
End If
End If
cont:
i = i + 1
Wend
For k = 1 To BumNum
For i = dates(k) To 1 Step -1
If V(k) > Volume(k; i) Then
V(k) = V(k) - Volume(k; i)
Else
Volume(k; i) = V(k)
BeginIndex(k) = i
Exit For
End If
Next i
Next k
For k = 1 To BumNum
BumIndex(k) = False
If V(k) > 0 Then BumIndex(k) = True
Next k
i = 2
While Cells(i; 1) <= CurDate And Cells(i; 1) <> Empty
If (Cells(i; 1) = CurDate And Cells(i; 2) = DilerConst) _
And (Cells(i; 7) <> "зачисление" And Cells(i; 7) <> "списание") Then
For k = 1 To BumNum
If Cells(i; 3) = Bum(k) Then
BumIndex(k) = True
End If
Next k
End If
i = i + 1
Wend
i = 2
Set Sheet = Worksheets("Биржа")
Flag = True
While Sheet.Cells(i; 1) <> Empty
If Sheet.Cells(i; 1) = CurDate Then
Flag = False
For k = 1 To BumNum
If Sheet.Cells(i; 2) = Bum(k) Then
If Sheet.Cells(i; 6) > 0 Then
BumPrice(k) = Sheet.Cells(i; 6)
Else
BumPrice(k) = 0
End If
End If
Next k
End If
i = i + 1
Wend
If Flag Then
MsgBox "Биржевой информации нет. Портфель сформировать невозможно."
Exit Sub
End If
Worksheets("Портфель1").Select
Cells(4; 3) = CurDate
Range("A7:H200").Delete shift:=xlToLeft
m = 7
PortfelCost = 0
PortfelBalance = 0
For k = 1 To BumNum
If Volume(k; BeginIndex(k)) > 0 Then
For i = BeginIndex(k) To dates(k)
If Volume(k; i) > 0 Then
Cells(m; 1) = Bum(k)
Cells(m; 1).NumberFormat = "0"
Cells(m; 2) = DateMas(k; i)
Cells(m; 2).NumberFormat = "ДД.ММ.ГГ"
Cells(m; 3) = Price(k; i)
Cells(m; 3).NumberFormat = "0,00"
Cells(m; 4) = Volume(k; i)
Cells(m; 4).NumberFormat = "0"
DohPog(k; i) = (100 / Price(k; i) - 1) * 36500 / (DatePog(k) - DateMas(k; i))
Cells(m; 5) = DohPog(k; i)
Cells(m; 5).NumberFormat = "0,00"
Cells(m; 8).NumberFormat = "0"
Dim tmp As Long
tmp = CurDate - DateMas(k; i)
Cells(m; 8) = tmp
PortfelBalance = PortfelBalance + Price(k; i) * Volume(k; i)
If BumPrice(k) > 0 Then
PortfelCost = PortfelCost + BumPrice(k) * Volume(k; i)
Else
PortfelCost = PortfelCost + Price(k; i) * Volume(k; i)
End If
If BumPrice(k) > 0 Then
Cells(m; 6) = BumPrice(k)
Cells(m; 6).NumberFormat = "0,00"
If CurDate <> DateMas(k; i) Then
DohPriobr(k; i) = (BumPrice(k) / Price(k; i) - 1) * 36500 / (CurDate - DateMas(k; i))
Cells(m; 7) = DohPriobr(k; i)
Cells(m; 7).NumberFormat = "0,00"
End If
End If
m = m + 1
End If
Next i
Range(Cells(m; 1); Cells(m; 8)).Interior.ColorIndex = 15
m = m + 1
End If
Next k
Range(Cells(7; 1); Cells(m - 1; 8)).Borders(xlLeft).Weight = xlThin
Range(Cells(7; 1); Cells(m - 1; 8)).Borders(xlRight).Weight = xlThin
Range(Cells(7; 1); Cells(m - 1; 8)).Borders(xlTop).Weight = xlThin
Range(Cells(7; 1); Cells(m - 1; 8)).Borders(xlBottom).Weight = xlThin
Range(Cells(7; 1); Cells(m - 1; 8)).BorderAround Weight:=xlMedium
If DialogPrint("Портфель1"; 1) Then Exit Sub
Worksheets("Портфель2").Select
Cells(4; 3) = CurDate
SumPog11 = 0
SumPog22 = 0
SumPriobr11 = 0
SumPriobr22 = 0
AllVol = 0
m = 7
Range("A7:H200").Delete shift:=xlToLeft
For k = 1 To BumNum
If Volume(k; BeginIndex(k)) > 0 Then
SumPog1(k) = 0
SumPog2(k) = 0
SumPriobr1(k) = 0
SumPriobr2(k) = 0
BumVol(k) = 0
For i = BeginIndex(k) To dates(k)
If Volume(k; i) > 0 Then
SumPog1(k) = SumPog1(k) + DohPog(k; i) * Volume(k; i) * (DatePog(k) - DateMas(k; i))
SumPog2(k) = SumPog2(k) + Volume(k; i) * (DatePog(k) - DateMas(k; i))
If CurDate <> DateMas(k; i) Then
SumPriobr1(k) = SumPriobr1(k) + DohPriobr(k; i) * Volume(k; i) * (CurDate - DateMas(k; i))
SumPriobr2(k) = SumPriobr2(k) + Volume(k; i) * (CurDate - DateMas(k; i))
End If
SumPog11 = SumPog11 + SumPog1(k)
SumPog22 = SumPog22 + SumPog2(k)
SumPriobr11 = SumPriobr11 + SumPriobr1(k)
SumPriobr22 = SumPriobr22 + SumPriobr2(k)
BumVol(k) = BumVol(k) + Volume(k; i)
AllVol = AllVol + Volume(k; i)
End If
Next i
Cells(m; 1) = Bum(k)
Cells(m; 1).NumberFormat = "0"
Cells(m; 2) = BumVol(k)
Cells(m; 2).NumberFormat = "0"
Cells(m; 3) = SumPog1(k) / SumPog2(k)
Cells(m; 3).NumberFormat = "0,00"
If SumPriobr2(k) > 0 And SumPriobr1(k) > 0 Then
Cells(m; 4) = SumPriobr1(k) / SumPriobr2(k)
Cells(m; 4).NumberFormat = "0,00"
End If
m = m + 1
End If
Next k
Cells(m; 1) = "Итого"
Cells(m; 1).Font.Bold = True
Cells(m; 1).HorizontalAlignment = xlCenter
Cells(m; 2) = AllVol
Cells(m; 2).NumberFormat = "0"
Cells(m; 3) = SumPog11 / SumPog22
Cells(m; 3).NumberFormat = "0,00"
Cells(m; 4) = SumPriobr11 / SumPriobr22
Cells(m; 4).NumberFormat = "0,00"
Range(Cells(m; 1); Cells(m; 4)).Interior.ColorIndex = 15
Range(Cells(7; 1); Cells(m; 4)).Borders(xlLeft).Weight = xlThin
Range(Cells(7; 1); Cells(m; 4)).Borders(xlRight).Weight = xlThin
Range(Cells(7; 1); Cells(m; 4)).Borders(xlTop).Weight = xlThin
Range(Cells(7; 1); Cells(m; 4)).Borders(xlBottom).Weight = xlThin
Range(Cells(7; 1); Cells(m; 4)).BorderAround Weight:=xlMedium
Range(Cells(m; 1); Cells(m; 4)).BorderAround Weight:=xlMedium
Cells(m + 1; 1) = "Стоимость портфеля по балансу"
Cells(m + 2; 1) = "Текущая стоимость потфеля"
Cells(m + 1; 1).Font.Bold = True
Cells(m + 2; 1).Font.Bold = True
Range(Cells(m + 1; 1); Cells(m + 2; 4)).BorderAround Weight:=xlMedium
Cells(m + 1; 4) = PortfelBalance * 10
Cells(m + 1; 4).NumberFormat = "### ### ###,00"
Cells(m + 1; 4).Font.Bold = True
Cells(m + 2; 4) = PortfelCost * 10
Cells(m + 2; 4).NumberFormat = "### ### ###,00"
Cells(m + 2; 4).Font.Bold = True
If DialogPrint("Портфель2"; 1) Then Exit Sub
End Sub
'-------------------------------- Печать Журнала лицевого учета ---------
Sub PrintMagazine()
Dim Sheet As Object
Dim i; k; BumNum; m; m1; j As Long
Dim Bum(ConstMaxBum) As Long
Dim Volume(); BiginIndex(); dates(); V(); Vol As Integer
Dim sum; Price() As Double
Dim DateMas() As Date
Dim Flag; BumIndex() As Boolean
Dim ComBirga; ComMas(); MagMas(); Mag(4) As Double
CurDate = Worksheets("Врем").Cells(1; 4)
i = 2
Flag = True
Do While Worksheets("Сделки").Cells(i; 1) <> Empty
If Worksheets("Сделки").Cells(i; 1) = CurDate And _
Worksheets("Сделки").Cells(i; 2) = DilerConst Then
Flag = False
Exit Do
End If
i = i + 1
Loop
If Flag Then
MsgBox "Сделок в текущий день не было"
Exit Sub
End If
Set Sheet = Worksheets("Бумаги")
i = 2
BumNum = 0
While Sheet.Cells(i; 1) <> Empty
If (Sheet.Cells(i; 2) <= CurDate And Sheet.Cells(i; 3) >= CurDate) Then
Bum(BumNum + 1) = Sheet.Cells(i; 1)
BumNum = BumNum + 1
End If
i = i + 1
Wend
Worksheets("Сделки").Select
Range("B2").Sort Key1:=Range("A2"); Order1:=xlAscending; _
Key2:=Range("D2"); Order2:=xlAscending; _
Header:=xlYes; OrderCustom:=1; _
MatchCase:=False; Orientation:=xlTopToBottom
ReDim Volume(BumNum; MaxCount)
ReDim Price(BumNum; MaxCount)
ReDim DateMas(BumNum; MaxCount)
ReDim dates(BumNum); V(BumNum); BeginIndex(BumNum)
ReDim BumIndex(BumNum); ComMas(BumNum)
ReDim MagMas(BumNum; 4)
For i = 1 To BumNum
ComMas(i) = 0
dates(i) = 1
Next i
i = 2
While Cells(i; 1) <> Empty And CurDate > Cells(i; 1)
If Cells(i; 2) = DilerConst And Cells(i; 7) <> "списание" _
And Cells(i; 7) <> "зачисление" Then
Flag = True
For k = 1 To BumNum ' поиск номера бумаги
If Cells(i; 3) = Bum(k) Then
Flag = False
Exit For
End If
Next k
If Flag Then GoTo cont
If Not IsEmpty(Cells(i; 4)) Then
Volume(k; dates(k)) = Cells(i; 6)
Price(k; dates(k)) = Cells(i; 4)
DateMas(k; dates(k)) = Cells(i; 1)
dates(k) = dates(k) + 1
V(k) = V(k) + Cells(i; 6)
Else
V(k) = V(k) - Cells(i; 6)
End If
End If
cont:
i = i + 1
Wend
For k = 1 To BumNum
For i = dates(k) To 1 Step -1
If V(k) > Volume(k; i) Then
V(k) = V(k) - Volume(k; i)
Else
Volume(k; i) = V(k)
BeginIndex(k) = i
Exit For
End If
Next i
Next k
For k = 1 To BumNum
BumIndex(k) = False
If V(k) > 0 Then BumIndex(k) = True
Next k
ComBirga = Worksheets("Инфо").Cells(1; 2)
i = 2
While Cells(i; 1) <> Empty
If (Cells(i; 1) = CurDate And Cells(i; 2) = DilerConst) _
And (Cells(i; 7) <> "зачисление" And Cells(i; 7) <> "списание") Then
For k = 1 To BumNum
If Cells(i; 3) = Bum(k) Then
BumIndex(k) = True
If Not IsEmpty(Cells(i; 4)) Then
ComMas(k) = ComMas(k) + Format(Cells(i; 4) * Cells(i; 6) * ComBirga * 0,1 + 0,0001; "0,00")
Else
If Cells(i; 5) <> 100 Then
ComMas(k) = ComMas(k) + Format(Cells(i; 5) * Cells(i; 6) * ComBirga * 0,1 + 0,0001; "0,00")
End If
End If
End If
Next k
End If
i = i + 1
Wend
Set Sheet = Worksheets("Сделки")
Worksheets("Журнал лицевого учета").Select
Cells(5; 1) = CurDate
Cells(49; 2) = ComBirga
Покупка = False
Продажа = False
Vol = 0
sum = 0
For k = 1 To BumNum
If BumIndex(k) Then
m = 7
Range("A7:C43").ClearContents
Range("E7:G43").ClearContents
Vol = 0
sum = 0
For i = BeginIndex(k) To dates(k)
If Volume(k; i) > 0 Then
Cells(m; 1) = DateMas(k; i)
Cells(m; 2) = Volume(k; i)
Cells(m; 3) = Format(Price(k; i); "0,00")
Vol = Vol + Volume(k; i)
sum = sum + Format(Price(k; i); "0,00") * Volume(k; i) * 10
m = m + 1
End If
Next i
Cells(6; 2) = Vol
Cells(6; 4) = sum
Cells(49; 3) = ComMas(k)
Cells(5; 3) = CStr(Bum(k)) + "MFTS"
i = 2
m1 = 7
j = BeginIndex(k)
While Sheet.Cells(i; 1) <> Empty
If Sheet.Cells(i; 1) = CurDate And Sheet.Cells(i; 3) = Bum(k) And _
Sheet.Cells(i; 7) <> "зачисление" And Sheet.Cells(i; 7) <> "списание" And _
Sheet.Cells(i; 2) = DilerConst Then
If Not IsEmpty(Sheet.Cells(i; 4)) Then
Покупка = True
Cells(m; 1) = Sheet.Cells(i; 1)
Cells(m; 2) = Sheet.Cells(i; 6)
Cells(m; 3) = Sheet.Cells(i; 4)
Volume(k; dates(k)) = Sheet.Cells(i; 6)
Price(k; dates(k)) = Sheet.Cells(i; 4)
DateMas(k; dates(k)) = Sheet.Cells(i; 4)
dates(k) = dates(k) + 1
m = m + 1
Else
Продажа = True
Vol = Sheet.Cells(i; 6)
If Vol < Volume(k; j) Then
Cells(m1; 5) = Vol
Cells(m1; 6) = Format(Price(k; j); "0,00")
Cells(m1; 7) = Sheet.Cells(i; 5)
Volume(k; j) = Volume(k; j) - Sheet.Cells(i; 6)
m1 = m1 + 1
Else
If Volume(k; j) = 0 Then j = j + 1
While Vol > Volume(k; j) And Volume(k; j) <> Empty
Cells(m1; 5) = Volume(k; j)
Cells(m1; 6) = Format(Price(k; j); "0,00")
Cells(m1; 7) = Sheet.Cells(i; 5)
Vol = Vol - Volume(k; j)
j = j + 1
m1 = m1 + 1
Wend
If Volume(k; j) <> Empty Then
Cells(m1; 5) = Vol
Cells(m1; 6) = Format(Price(k; j); "0,00")
Cells(m1; 7) = Sheet.Cells(i; 5)
Volume(k; j) = Volume(k; j) - Vol
m1 = m1 + 1
End If
End If
End If
End If
i = i + 1
Wend
no_do:
MagMas(k; 1) = Format(Cells(46; 3); "0,00")
MagMas(k; 2) = Format(Cells(47; 3); "0,00")
MagMas(k; 3) = Format(Cells(48; 3); "0,00")
MagMas(k; 4) = Format(Cells(45; 4); "0,00")
If DialogPrint("Журнал лицевого учета"; 1) Then Exit Sub
End If
Next k
' Формирование журнала оборотов
Worksheets("ЖурналОборотов").Select
Cells(6; 1) = CurDate
Range(Cells(7; 1); Cells(100; 6)).Delete shift:=xlToLeft
m = 7
For k = 1 To BumNum
If BumIndex(k) Then
Cells(m; 1) = CStr(Bum(k)) + "MFTS"
Cells(m; 2) = MagMas(k; 1)
Cells(m; 3) = MagMas(k; 2)
Cells(m; 4) = MagMas(k; 3)
Cells(m; 5) = MagMas(k; 4)
Cells(m; 6) = ComMas(k)
Cells(m; 1).Font.Bold = True
Cells(m; 2).NumberFormat = "0,00"
Cells(m; 3).NumberFormat = "0,00"
Cells(m; 4).NumberFormat = "0,00"
Cells(m; 5).NumberFormat = "0,00"
Cells(m; 6).NumberFormat = "0,00"
m = m + 1
End If
Next k
For i = 2 To 6
sum = 0
For m1 = 7 To m - 1
sum = sum + Cells(m1; i)
Next m1
Cells(m; i) = sum
Cells(m; i).NumberFormat = "0,00"
Next i
Mag(1) = Cells(m; 2)
Mag(2) = Cells(m; 3)
Mag(3) = Cells(m; 4)
Mag(4) = Cells(m; 6)
If Cells(m; 2) > 0 Then Cells(m + 1; 2) = "Дт" + S192
If Cells(m; 2) < 0 Then Cells(m + 1; 2) = "Кт" + S192
If Cells(m; 3) > 0 Then Cells(m + 1; 3) = "Дт" + S904
If Cells(m; 3) < 0 Then Cells(m + 1; 3) = "Кт" + S904
If Cells(m; 4) > 0 Then Cells(m + 1; 4) = "Кт" + S960
If Cells(m; 4) < 0 Then Cells(m + 1; 4) = "Дт" + S970
Cells(m + 1; 6) = "Дт" + S970
Range(Cells(m + 1; 2); Cells(m + 2; 6)).HorizontalAlignment = xlCenter
Range(Cells(m + 1; 1); Cells(m + 1; 6)).Interior.ColorIndex = 15
Cells(m + 2; 6) = "Кт" + S904
Cells(m + 2; 6).Interior.ColorIndex = 15
Range(Cells(7; 1); Cells(m - 1; 6)).Borders(xlRight).Weight = xlThin
Range(Cells(m; 1); Cells(m; 6)).Borders(xlRight).LineStyle = xlDouble
Range(Cells(m; 1); Cells(m; 6)).Borders(xlLeft).LineStyle = xlDouble
Range(Cells(m; 1); Cells(m; 6)).Borders(xlTop).LineStyle = xlDouble
Range(Cells(m; 1); Cells(m; 6)).Borders(xlBottom).LineStyle = xlDouble
Cells(m + 2; 4) = "Подпись ответственного"
Cells(m + 3; 4) = "сотрудника"
Range(Cells(m + 2; 4); Cells(m + 3; 4)).Font.Size = 8
Range(Cells(m + 2; 4); Cells(m + 3; 4)).HorizontalAlignment = xlLeft
Range(Cells(7; 1); Cells(m + 4; 6)).BorderAround Weight:=xlMedium
Range(Cells(m + 2; 3); Cells(m + 4; 3)).Borders(xlRight).Weight = xlThin
Range(Cells(m + 1; 1); Cells(m + 1; 5)).Borders(xlBottom).Weight = xlThin
Cells(m + 2; 6).Borders(xlLeft).Weight = xlThin
Cells(m + 2; 6).Borders(xlBottom).Weight = xlThin
If DialogPrint("ЖурналОборотов"; 1) Then Exit Sub
' печать мемориального ордера
Dim StrS As String
With DialogSheets("ДиалогОперация")
.Show
If .OptionButtons(1).Value = xlOn Then StrS = "Покупка"
If .OptionButtons(2).Value = xlOn Then StrS = "Продажа"
If .OptionButtons(3).Value = xlOn Then StrS = "Погашение"
If .OptionButtons(4).Value = xlOn Then StrS = "Покупка / Продажа"
If .OptionButtons(5).Value = xlOn Then StrS = "Покупка / Погашение"
End With
Worksheets("Ордер").Select
i = CInt(InputBox("Введите номер 1-го ордера"))
If Mag(1) > 0 Then
If Mag(2) < 0 Then
If MemoOrder(i; min(Mag(1); Mag(2)); S192; S904; 0; _
StrS + " РКО за " + CStr(CurDate)) Then Exit Sub
i = i + 1
End If
If Mag(3) > 0 Then
If MemoOrder(i; min(Mag(1); Mag(3)); S192; S960; 0; _
"Доход от продажи РКО за " + CStr(CurDate)) Then Exit Sub
i = i + 1
End If
End If
If Mag(2) > 0 Then
If Mag(1) < 0 Then
If MemoOrder(i; min(Mag(2); Mag(1)); S904; S192; 0; _
StrS + " РКО за " + CStr(CurDate)) Then Exit Sub
i = i + 1
End If
If Mag(3) > 0 Then
If MemoOrder(i; min(Mag(2); Mag(3)); S904; S960; 0; _
"Доход от продажи РКО за " + CStr(CurDate)) Then Exit Sub
i = i + 1
End If
End If
If Mag(3) < 0 Then
If Mag(1) < 0 Then
If MemoOrder(i; min(Mag(3); Mag(1)); SR970; S192; 0; _
"Отрицательная разница от продажи РКО за " + CStr(CurDate)) Then Exit Sub
i = i + 1
End If
If Mag(2) < 0 Then
If MemoOrder(i; min(Mag(3); Mag(2)); SR970; S904; 0; _
"Отрицательная разница от продажи РКО за " + CStr(CurDate)) Then Exit Sub
i = i + 1
End If
End If
If Format(Mag(4)) > 0 Then
If MemoOrder(i; Mag(4); S970; S904; 0; _
"Комиссия ВКБ в т.ч. НДС " + CStr(Format(Mag(4) / 6; "0,00"))) Then Exit Sub
End If
End Sub
'-------------------------------------------- Memo Order
Function MemoOrder(Num; sum As Double; n1; n2; Pos As Integer; Order As String)
Dim i As Integer
Dim Flag As Boolean
Dim Str; Str1 As String
Str1 = ""
Str = CStr(sum)
Str = Format(Str; "000000000000,00")
Flag = False
For i = 1 To Len(Str)
If Mid(Str; i; 1) = "," Then
If CInt(Right(Str; 2)) = 0 Then
Str1 = Str1 + "="
Exit For
Else
Str1 = Str1 + "-"
End If
Else
If Mid(Str; i; 1) <> "0" Then Flag = True
If Mid(Str; i; 1) <> "0" Or Flag Then Str1 = Str1 + Mid(Str; i; 1)
End If
Next i
Cells(3; 6) = Str1
If Pos > 0 Then
If n1 > 6 Then
Cells(5; 6) = Worksheets("Клиенты").Cells(2; n1)
Else
Cells(5; 6) = Worksheets("Клиенты").Cells(Pos; n1)
End If
If n2 > 6 Then
Cells(10; 6) = Worksheets("Клиенты").Cells(2; n2)
Else
Cells(10; 6) = Worksheets("Клиенты").Cells(Pos; n2)
End If
Else
Cells(5; 6) = n1
Cells(10; 6) = n2
End If
Cells(16; 1) = Order
Cells(1; 6) = Num
Range("A1:H24").Copy
Range("A32").Select
ActiveSheet.Paste
If DialogPrint("Ордер"; 2) Then
MemoOrder = True
Else
MemoOrder = False
End If
End Function
'-------------------------------- Печать биржевой информации -------
Sub PrintBirgaInfo()
Dim Sheet As Object
Dim Flag As Boolean
Dim i; n; k; Num As Long
Dim mas(3) As Double
Set Sheet = Worksheets("Биржа")
CurDate = Worksheets("Врем").Cells(1; 4)
Sheets("Биржевая Информация").Select
Cells(3; 10) = CurDate
For i = 1 To 3
mas(i) = 0
Next i
i = 2
n = 7
Range(Cells(n; 1); Cells(n + 100; 17)).Delete shift:=xlToLeft
Flag = True
Do While Sheet.Cells(i; 1) <> Empty
If Sheet.Cells(i; 1) = CurDate Then
Flag = False
Cells(n; 1) = Sheet.Cells(i; 2)
Cells(n; 7) = Sheet.Cells(i; 3)
Cells(n; 9) = Sheet.Cells(i; 4)
Cells(n; 10) = Sheet.Cells(i; 5)
Cells(n; 5).Font.Bold = True
Cells(n; 11) = Sheet.Cells(i; 6)
Cells(n; 11).Font.Bold = True
Cells(n; 12) = Sheet.Cells(i; 7)
Cells(n; 13) = Sheet.Cells(i; 8)
k = 2
While Worksheets("Бумаги").Cells(k; 1) <> Empty
If Worksheets("Бумаги").Cells(k; 1) = Cells(n; 1) Then
Cells(n; 2) = Worksheets("Бумаги").Cells(k; 2)
Cells(n; 3) = Worksheets("Бумаги").Cells(k; 3)
Cells(n; 6) = Worksheets("Бумаги").Cells(k; 4)
End If
k = k + 1
Wend
Cells(n; 2).NumberFormat = "ДД.ММ.ГГ"
Cells(n; 3).NumberFormat = "ДД.ММ.ГГ"
Cells(n; 6).NumberFormat = "# ##0"
Cells(n; 9).NumberFormat = "# ##0"
Range(Cells(n; 10); Cells(n; 17)).NumberFormat = "0,00"
Cells(n; 4) = Cells(3; 10) - Cells(n; 2)
Cells(n; 5) = Cells(n; 3) - Cells(3; 10)
Cells(n; 8) = Cells(n; 9) / Cells(n; 6) * 100
Cells(n; 8).NumberFormat = "0,00"
If Cells(n; 7) <> 0 And Cells(n; 5) <> 0 Then
Cells(n; 14) = (100 / Cells(n; 10) - 1) * 36500 / Cells(n; 5) * 0,85
Cells(n; 15) = (100 / Cells(n; 10) - 1) * 36500 / Cells(n; 5)
Cells(n; 16) = (100 / Cells(n; 11) - 1) * 36500 / Cells(n; 5) * 0,85
Cells(n; 16).Font.Bold = True
Cells(n; 17) = (100 / Cells(n; 11) - 1) * 36500 / Cells(n; 5)
mas(1) = mas(1) + Cells(n; 5) * Cells(n; 9) * Cells(n; 14)
mas(2) = mas(2) + Cells(n; 5) * Cells(n; 9) * Cells(n; 16)
mas(3) = mas(3) + Cells(n; 5) * Cells(n; 9)
End If
n = n + 1
End If
i = i + 1
Loop
If Flag Then
MsgBox "Биржевой информации нет"
Exit Sub
End If
Num = n
Range(Cells(7; 1); Cells(Num - 1; 17)).Borders(xlLeft).Weight = xlThin
Range(Cells(7; 1); Cells(Num - 1; 17)).Borders(xlRight).Weight = xlThin
Range(Cells(7; 1); Cells(Num - 1; 17)).Borders(xlTop).Weight = xlThin
Range(Cells(7; 1); Cells(Num - 1; 17)).Borders(xlBottom).Weight = xlThin
Range(Cells(7; 1); Cells(Num - 1; 17)).BorderAround Weight:=xlMedium
Cells(Num; 1) = "Итого"
Cells(Num; 1).Font.Bold = True
Cells(Num; 1).HorizontalAlignment = xlCenter
Cells(Num; 14) = mas(1) / mas(3)
Cells(Num; 15) = mas(1) / mas(3) / 0,85
Cells(Num; 16) = mas(2) / mas(3)
Cells(Num; 16).Font.Bold = True
Cells(Num; 17) = mas(2) / mas(3) / 0,85
Range(Cells(Num; 14); Cells(Num; 17)).NumberFormat = "0,00"
For i = 1 To 3
mas(i) = 0
Next i
For i = 7 To Num - 1
mas(1) = mas(1) + Cells(i; 6)
mas(2) = mas(2) + Cells(i; 7)
mas(3) = mas(3) + Cells(i; 9)
Next
Cells(Num; 6) = mas(1)
Cells(Num; 6).NumberFormat = "# ##0"
Cells(Num; 7) = mas(2)
Cells(Num; 9) = mas(3)
Cells(Num; 9).NumberFormat = "# ##0"
Cells(Num; 8) = mas(3) / mas(1) * 100
Cells(Num; 8).NumberFormat = "0,00"
Cells(Num; 7).Font.Bold = True
Cells(Num; 9).Font.Bold = True
Range(Cells(Num; 1); Cells(Num; 17)).BorderAround Weight:=xlMedium
Range(Cells(Num; 1); Cells(Num; 17)).Interior.ColorIndex = 15
If DialogPrint("Биржевая Информация"; 1) Then Exit Sub
End Sub
'-------------------------------- Дата -----------------------------
Sub DateChange()
With DialogSheets("ДиалогДата")
.EditBoxes.Text = CurDate
.EditBoxes.InputType = 1
.Show
CurDate = Worksheets("Врем").Cells(1; 4)
If Button = False Then
CurDate = Date
Worksheets("Врем").Cells(1; 4) = CurDate
MsgBox "Дата восстановлена"
Else
If IsDate(.EditBoxes.Text) Then
CurDate = .EditBoxes.Text
MsgBox "Дата изменена"
Worksheets("Врем").Cells(1; 4) = CurDate
Exit Sub
End If
MsgBox "Ошибка при вводе даты"
End If
End With
End Sub
'-------------------------------- Формирование текущей таблицы бумаг ----
Sub FormBum()
Dim L As Object
Dim i; k As Integer
Set L = Worksheets("Бумаги")
CurDate = Worksheets("Врем").Cells(1; 4)
i = 2
k = 1
While L.Cells(i; 1) <> Empty
If L.Cells(i; 2) <= CurDate And L.Cells(i; 3) >= CurDate Then
Worksheets("Врем").Cells(k; 1) = L.Cells(i; 1)
k = k + 1
End If
i = i + 1
Wend
Worksheets("Врем").Cells(1; 2) = k - 1
Set L = Worksheets("Клиенты")
i = 1
While L.Cells(i; 1) <> Empty
i = i + 1
Wend
Worksheets("Врем").Cells(1; 3) = i - 2
End Sub
' ------------------------------- Остатки на бирже --------------------
Sub EditOstBirga(CliNum As Long)
Dim ComBirga; sum; OstBegin As Double
Dim DoFlag As Boolean
Dim Sheet; Sheet1 As Object
Dim i; k; RowNum As Long
Set Sheet = Worksheets("ОстаткиБиржа")
Set Sheet1 = Worksheets("Сделки")
CurDate = Worksheets("Врем").Cells(1; 4)
ComBirga = Worksheets("Инфо").Cells(1; 2)
Sheet.Range("B2").Sort Key1:=Sheet.Range("B2"); Order1:=xlAscending; _
Key2:=Sheet.Range("A2"); Order2:=xlDescending; _
Header:=xlYes; OrderCustom:=1; _
MatchCase:=False; Orientation:=xlTopToBottom
OstBegin = 0
RowNum = 0
k = 2
DoFlag = True
Do While Sheet.Cells(k; 1) <> Empty
If Sheet.Cells(k; 2) = CliNum And DoFlag Then
If Sheet.Cells(k; 1) < CurDate Then
OstBegin = Sheet.Cells(k; 6)
Else
Do While Sheet.Cells(k; 1) <> Empty
If Sheet.Cells(k; 2) <> CliNum Then Exit Do
If Sheet.Cells(k; 1) = CurDate Then
OstBegin = Sheet.Cells(k; 3)
RowNum = k
Exit Do
End If
k = k + 1
Loop
End If
DoFlag = False
End If
k = k + 1
Loop
If RowNum = 0 Then RowNum = k
k = RowNum
sum = 0
i = 2
While Sheet1.Cells(i; 1) <> Empty
If Sheet1.Cells(i; 1) = CurDate And Sheet1.Cells(i; 2) = CliNum Then
If Sheet1.Cells(i; 4) <> Empty Then
sum = sum - _
Sheet1.Cells(i; 4) * Sheet1.Cells(i; 6) * 10000 - _
Format(Sheet1.Cells(i; 4) * Sheet1.Cells(i; 6) * 100 * ComBirga + 0,0001; "0,00")
Else
If Sheet1.Cells(i; 5) = 100 Then ComBirga = 0
sum = sum + _
Sheet1.Cells(i; 5) * Sheet1.Cells(i; 6) * 10000 - _
Format(Sheet1.Cells(i; 5) * Sheet1.Cells(i; 6) * 100 * ComBirga + 0,0001; "0,00")
End If
End If
i = i + 1
Wend
Sheet.Cells(k; 3) = OstBegin
Sheet.Cells(k; 6) = OstBegin + sum + Sheet.Cells(k; 4)
Sheet.Cells(k; 1) = CurDate
Sheet.Cells(k; 2) = CliNum
End Sub
Sub Ok()
Button = True
End Sub
Sub Cancel()
Button = False
End Sub
Sub ПросмотрОтчетов()
Просмотр = True
End Sub
Sub Останов()
ExitVar = True
End Sub
Sub EndOf()
Dim i As Long
i = 2
While Cells(i; 1) <> Empty
i = i + 1
Wend
Cells(i; 1).Select
End Sub
Function DialogPrint(Str As String; Count As Integer)
With DialogSheets("ДиалогПечать")
AgainView:
Просмотр = False
ExitVar = False
Button = False
.Show
If Просмотр Then
Worksheets(Str).PrintPreview
GoTo AgainView
End If
If ExitVar Then
DialogPrint = True
Else
DialogPrint = False
End If
If Button Then ActiveWindow.SelectedSheets.PrintOut copies:=Count
End With
End Function
Function min(a; b)
If Abs(a) > Abs(b) Then
min = Abs(b)
Else
min = Abs(a)
End If
End Function
Приложение № 1.3. Журнал оборотов.
Приложение № 1.4. Журнал лицевого учета.
Приложение № 1.5. Мемориальный ордер.
Приложение № 1.6. Отчет инвестору о совершенных сделках.
Приложение № 1.7. Структура пртфеля в разрезе по бумагам.
Приложение № 1.8. Структура портфеля обобщенная.
Приложение № 1.9. Биржевая информация.
Приложение № 1.10. Еженедельный отчет в депозитарий.
Приложение № 1.11. Ежемесячный отчет в депозитарий.
Приложение № 2. Программа анализа эффективности вложений в РКО.
Приложение 2.1. Текст программы.
Option Explicit
Option Base 1
'*************************** Сортировка *************************
' Процедура сортировки страницы
' Параметры:
' Sheet - лист
' RangeSort - первая ячейка для сортировки
' StrKey1 - сортировка сначала производится по этому столбцу
' StrKey2 - а затем по этому
' StrKey3 - и по этому в последнюю очередь
' OrderType1 - Направление сортировки по столбцу StrKey1
' OrderType2 - Направление сортировки по столбцу StrKey2
' OrderType3 - Направление сортировки по столбцу StrKey3
' Пример использования :
' Call Сортировка(Worksheets("Биржа"); "A2"; "A2"; "B2"; "C2"; xlAscending; xlDescending; xlAscending)
'*****************************************************************
Sub Сортировка(Sheet As Object; RangeSort As String; StrKey1 As String; _
StrKey2 As String; StrKey3 As String; TypeOrder1 As Integer; TypeOrder2 As Integer; TypeOrder3 As Integer)
Sheet.Range(RangeSort).Sort Key1:=Sheet.Range(StrKey1); Order1:=TypeOrder1; Key2:= _
Sheet.Range(StrKey2); Order2:=TypeOrder2; Key3:=Sheet.Range(StrKey3); Order3:= _
TypeOrder3; Header:=xlGuess; OrderCustom:=1; MatchCase:=False _
; Orientation:=xlTopToBottom
End Sub
'******************************* Поиск ***************************
' Функция поиска значения в определенном столбце с определенной позиции вперед/назад
' Параметры:
' Sheet - лист
' Column - колонка для поиска
' Row - начальная строка поиска
' Text - искомое значение
' Direction - направление поиска:
' 1 - вперед
' -1 - назад
' Пример использования :
' MsgBox Поиск(Worksheets("Биржа"); 4; 8; 5; -1)
'*******************************************************************
Function Поиск(Sheet As Object; Column As Integer; Row As Integer; Text; Direction As Integer)
Dim i As Integer
Dim Compare; Compare1
If Direction <> 1 And Direction <> -1 Then
MsgBox "Неверно задано направление поиска"
End
End If
On Error GoTo ErrorFuncFind
i = Row
While Not IsEmpty(Sheet.Cells(i; Column))
If IsDate(Text) Then
Compare = CDate(Sheet.Cells(i; Column))
Compare1 = CDate(Text)
Else
If IsNumeric(Text) Then
Compare = CDbl(Sheet.Cells(i; Column))
Compare1 = CDbl(Text)
Else
Compare = CStr(Sheet.Cells(i; Column))
Compare1 = CStr(Text)
End If
End If
If Compare = Compare1 Then
Поиск = i
Exit Function
End If
i = i + Direction
Wend
Поиск = 0
Exit Function
ErrorFuncFind:
MsgBox "Несовпадение типов данных в вызове" + Chr(13) + "функции Поиск и в искомом столбце." _
+ Chr(13) + Chr(13) + "Данные разных типов в столбце базы" + Chr(13)
End
End Function
Option Explicit
Option Base 1
' ---------------------------- Общая часть -------------------------------------
' внешние параметры
' тип данных для записи информации о бумаге
Type BumRecord
Num As Long ' номер бумаги
DateStart As Date ' дата выпуска
DateEnd As Date 'дата погашения
Volume As Long 'объем выпуска
Present As Boolean
End Type
' тип данных для записи информации о структуре портфеля
Type PortfelRecord
Dates() As Date ' дата покупки
Price() As Single ' цена покупки
Volume() As Long ' количество
StartPos() As Integer ' начальный индекс бумаги в массиве бумаг данной серии
EndPos() As Integer ' конечный индекс бумаги в массиве бумаг данной серии
VolumeAll() As Long ' количество бумаг данной серии в портфеле
End Type
' тип данных для записи информации об индксах портфеля и рынка
Type IndexRecord
Dates As Date
Portfel As Single
Birga As Single
End Type
Const MaxBum = 500 ' максимальное количество бумаг в портфеле одной серии
Const DilerConst = 1000900000 ' константа для выборки портфеля дилера
Dim MaxPeriod As Long ' максимальное количество дней для анализа(можно вычислить как последний день анализа-первый день анализа+1)
Dim Portfel As PortfelRecord ' данные о портфеле
Dim BumInfo() As BumRecord ' данные о бумагах
Dim BumNum As Integer ' количество различных серий бумаг
Dim Index() As IndexRecord ' индексы портфеля и рынка
Dim Revenue() As IndexRecord ' доходность к погашению портфеля и рынка
Dim BirgaInfo() As Single ' текущая биржевая информация по каждой серии
Dim CoefIndex As Long ' индекс коэффициента
Dim RevIndex As Long ' индекс доходности
Dim EvalDate As Date ' дата для расчета
Dim StartDate As Date ' начальная дата для постоения индексов
Dim PortfelPricePred; BirgaPricePred As Single
Dim Analize1; Analize2 As Boolean
'------------------------------- Процедура расчета портфеля (главный модуль)-
Sub АнализПортфель()
Dim Sheet As Object
Dim i; Ind As Integer
Dim SumCell As Long
Dim CurDate As Date
Set Sheet = Worksheets("Бумаги")
BumNum = 0
While Sheet.Cells(BumNum + 2; 1) <> Empty
BumNum = BumNum + 1
Wend
With DialogSheets("ДиалогДата")
.EditBoxes(1).Text = "05.02.97"
.EditBoxes(2).Text = "30.05.97"
.EditBoxes(1).InputType = xlDate
.EditBoxes(2).InputType = xlDate
.Show
StartDate = CDate(.EditBoxes(1).Text)
EvalDate = CDate(.EditBoxes(2).Text)
End With
With DialogSheets("ДиалогВыбор")
again:
.Show
Analize1 = False
Analize2 = False
If .CheckBoxes(1).Value = 1 Then Analize1 = True
If .CheckBoxes(2).Value = 1 Then Analize2 = True
If Not Analize1 And Not Analize2 Then
MsgBox "Выберите тип анализа"
GoTo again
End If
End With
MaxPeriod = EvalDate - StartDate + 1
ReDim Index(MaxPeriod)
ReDim Revenue(MaxPeriod)
Index(1).Portfel = 1
Index(1).Birga = 1
Index(1).Dates = StartDate
ReDim BumInfo(BumNum)
ReDim BirgaInfo(BumNum)
For i = 1 To BumNum
With BumInfo(i)
.Num = Sheet.Cells(i + 1; 1)
.DateStart = Sheet.Cells(i + 1; 2)
.DateEnd = Sheet.Cells(i + 1; 3)
.Volume = Sheet.Cells(i + 1; 4)
End With
Next i
ReDim Portfel.Dates(BumNum; MaxBum)
ReDim Portfel.Price(BumNum; MaxBum)
ReDim Portfel.Volume(BumNum; MaxBum)
ReDim Portfel.StartPos(BumNum)
ReDim Portfel.EndPos(BumNum)
ReDim Portfel.VolumeAll(BumNum)
For i = 1 To BumNum
Portfel.StartPos(i) = 1
Portfel.EndPos(i) = 0
Next i
Set Sheet = Worksheets("Сделки")
Call Сортировка(Worksheets("Сделки"); "A2"; "A2"; "B2"; "D2"; _
xlAscending; xlAscending; xlAscending)
i = 2
CoefIndex = 1
RevIndex = 1
CurDate = StartDate
While Sheet.Cells(i; 1) <> Empty And Sheet.Cells(i; 1) <= EvalDate
If Sheet.Cells(i; 2) = DilerConst Then
Ind = ReturnBum(Sheet.Cells(i; 3))
If Not IsEmpty(Sheet.Cells(i; 4)) Then
Portfel.EndPos(Ind) = Portfel.EndPos(Ind) + 1
Portfel.Dates(Ind; Portfel.EndPos(Ind)) = Sheet.Cells(i; 1)
Portfel.Price(Ind; Portfel.EndPos(Ind)) = Sheet.Cells(i; 4)
Portfel.Volume(Ind; Portfel.EndPos(Ind)) = Sheet.Cells(i; 6)
Portfel.VolumeAll(Ind) = Portfel.VolumeAll(Ind) + Sheet.Cells(i; 6)
Else
SumCell = Sheet.Cells(i; 6)
Portfel.VolumeAll(Ind) = Portfel.VolumeAll(Ind) - Sheet.Cells(i; 6)
While SumCell >= Portfel.Volume(Ind; Portfel.StartPos(Ind)) And SumCell > 0
SumCell = SumCell - Portfel.Volume(Ind; Portfel.StartPos(Ind))
Portfel.StartPos(Ind) = Portfel.StartPos(Ind) + 1
Wend
If SumCell < Portfel.Volume(Ind; Portfel.StartPos(Ind)) Then
Portfel.Volume(Ind; Portfel.StartPos(Ind)) = Portfel.Volume(Ind; Portfel.StartPos(Ind)) - SumCell
End If
End If
End If
' в данном месте можео провести анализ на основе данных о портфеле за текущую дату
' дата текущая - это Worksheets("Сделки").cells(i-1;1)
' т.е. анализ за эту текущую дату(доходность к погашению портфеля, индекс,...)
If StartDate <= Sheet.Cells(i; 1) And Sheet.Cells(i; 1) <> CurDate Then
Call Процедура_анализа(Sheet.Cells(i; 1))
CoefIndex = CoefIndex + 1
RevIndex = RevIndex + 1
CurDate = Sheet.Cells(i; 1)
End If
i = i + 1
Wend
If Analize1 Then
Worksheets("РезультатИндекс").Cells(1; 2) = "Портфель"
Worksheets("РезультатИндекс").Cells(1; 3) = "Рынок"
For i = 1 To CoefIndex - 1
Worksheets("РезультатИндекс").Cells(i + 1; 1) = Index(i).Dates
Worksheets("РезультатИндекс").Cells(i + 1; 2) = Index(i).Portfel
Worksheets("РезультатИндекс").Cells(i + 1; 3) = Index(i).Birga
Next i
Charts("ДиаграммаИндекс").ChartWizard Source:=Sheets("РезультатИндекс").Range( _
"A1:C" + CStr(i)); Gallery:=xlLine; Format:=4; PlotBy:=xlColumns; _
CategoryLabels:=1; SeriesLabels:=1; HasLegend:=1; Title:= _
"Сравнение индекса портфеля и рынка"; CategoryTitle:="дата"; ValueTitle:= _
"индекс"; ExtraTitle:=""
Charts("ДиаграммаИндекс").Select
MsgBox "Диаграмма Индекса"
End If
If Analize2 Then
Worksheets("РезультатДоходность").Cells(1; 2) = "Портфель"
Worksheets("РезультатДоходность").Cells(1; 3) = "Рынок"
For i = 1 To RevIndex - 1
Worksheets("РезультатДоходность").Cells(i + 1; 1) = Revenue(i).Dates
Worksheets("РезультатДоходность").Cells(i + 1; 2) = Revenue(i).Portfel
Worksheets("РезультатДоходность").Cells(i + 1; 3) = Revenue(i).Birga
Next i
Charts("ДиаграммаДоходность").ChartWizard Source:=Sheets("РезультатДоходность").Range( _
"A1:C" + CStr(i)); Gallery:=xlLine; Format:=4; PlotBy:=xlColumns; _
CategoryLabels:=1; SeriesLabels:=1; HasLegend:=1; Title:= _
"Сравнение доходности портфеля и рынка"; CategoryTitle:="дата"; ValueTitle:= _
"доходность"; ExtraTitle:=""
Charts("ДиаграммаДоходность").Select
MsgBox "Диаграмма Доходности"
End If
End Sub
'--------------------- функция возвращает индекс бумаги в массиве BumInfo -------------
Function ReturnBum(bum As Long)
Dim i As Integer
For i = 1 To BumNum
If bum = BumInfo(i).Num Then
ReturnBum = i
Exit Function
End If
Next i
MsgBox "Не найдена бумага в списке бумаг. Занести бумагу в лист Бумаги"
End
End Function
'-------------------- Процедура построения индексов портфеля и рынка -----------------
Sub Процедура_анализа(CurDate As Date)
Dim i; k As Long
Dim Sheet As Object
Dim PortfelPrice; BirgaPrice As Single
Dim BirgaCoef; PortfelCoef As Single
Dim Doh; Volume As Single
Dim Flag As Boolean
Set Sheet = Worksheets("Биржа")
' поиск первой строки начала биржевой информации за текущий день
i = Поиск(Worksheets("Биржа"); 1; 2; CurDate; 1)
If i = 0 Then
'MsgBox "Биржевая информация за " + CStr(CDate(CurDate)) + "не найдена"
'End
CoefIndex = CoefIndex - 1
Exit Sub
End If
' занесение биржевой информации за текущий день
If i <> 0 Then
While Sheet.Cells(i; 1) = CurDate
If Sheet.Cells(i; 6) <> Empty Then
BirgaInfo(ReturnBum(Sheet.Cells(i; 2))) = Sheet.Cells(i; 6)
End If
i = i + 1
Wend
End If
' определение по каждой бумаге обращения на бирже
For i = 1 To BumNum
If BumInfo(i).DateStart <= CurDate And CurDate <= BumInfo(i).DateEnd Then
BumInfo(i).Present = True
Else
BumInfo(i).Present = False
End If
Next i
' если выбран анализ эффективной доходности портфеля и рынка
If Analize2 Then
Doh = 0
Volume = 0
Flag = True
For k = 1 To BumNum
If BumInfo(k).Present Then
For i = Portfel.StartPos(k) To Portfel.EndPos(k)
Flag = False
Doh = Doh + (100 / Portfel.Price(k; i) - 1) * 36500 * Portfel.Volume(k; i)
Volume = Volume + Portfel.Volume(k; i) * (BumInfo(k).DateEnd - Portfel.Dates(k; i))
Next i
End If
Next k
If Flag Then
RevIndex = RevIndex - 1
GoTo Anal1
End If
Revenue(RevIndex).Portfel = Doh / Volume
Revenue(RevIndex).Dates = CurDate
Flag = True
Doh = 0
Volume = 0
For k = 1 To BumNum
If BumInfo(k).Present Then
Flag = False
Doh = Doh + (100 / BirgaInfo(k) - 1) * 36500 * BumInfo(k).Volume
Volume = Volume + BumInfo(k).Volume * (BumInfo(k).DateEnd - CurDate)
End If
Next k
If Flag Then
RevIndex = RevIndex - 1
GoTo Anal1
End If
Revenue(RevIndex).Birga = Doh / Volume
End If
Anal1:
' если выбран анализ индекса портфеля и рынка
If Analize1 Then
' определение стоимости портфеля и биржи по средневзвешенным ценам
PortfelPrice = 0
BirgaPrice = 0
For i = 1 To BumNum
PortfelPrice = PortfelPrice + Portfel.VolumeAll(i) * BirgaInfo(i) * 10000
BirgaPrice = BirgaPrice + BumInfo(i).Volume * BirgaInfo(i) * 10000
Next i
' расчет индексов
If CoefIndex <> 1 Then
' поиск остатков за текущий день
k = Поиск(Worksheets("Остаток"); 1; 2; CurDate; 1)
If k <> 0 Then
PortfelPrice = PortfelPrice + Worksheets("Остаток").Cells(k; 2)
End If
' вычисление коэффициента портфеля
If k <> 0 Then
PortfelCoef = (PortfelPrice - Worksheets("Остаток").Cells(k; 3) _
+ Worksheets("Остаток").Cells(k; 4)) / PortfelPricePred
Else
PortfelCoef = PortfelPrice / PortfelPricePred
End If
PortfelPricePred = PortfelPrice
' определение индекса портфеля за текущий день
Index(CoefIndex).Portfel = Index(CoefIndex - 1).Portfel * PortfelCoef
Index(CoefIndex).Dates = CurDate
BirgaCoef = BirgaPrice
k = Поиск(Worksheets("Бумаги"); 2; 2; CurDate; 1)
If k <> 0 Then
BirgaCoef = BirgaCoef - Worksheets("Бумаги").Cells(k; 4)
End If
k = Поиск(Worksheets("Бумаги"); 3; 2; CurDate; 1)
If k <> 0 Then
BirgaCoef = BirgaCoef + Worksheets("Бумаги").Cells(k; 4)
End If
BirgaCoef = BirgaCoef / BirgaPricePred
BirgaPricePred = BirgaPrice
' определение индекса биржи за текущий день
Index(CoefIndex).Birga = Index(CoefIndex - 1).Birga * BirgaCoef
Else
k = Поиск(Worksheets("Остаток"); 1; 2; CurDate; 1)
If k <> 0 Then
PortfelPrice = PortfelPrice + Worksheets("Остаток").Cells(k; 2)
End If
PortfelPricePred = PortfelPrice
BirgaPricePred = BirgaPrice
End If
End If
End Sub
Sub Cancel()
End
End Sub
Приложение № 2.2. Диаграмма сравнения доходности портфеля и рынка.
Приложение № 2.3. Диаграмма сравнения индекса портфеля и рынка.
Приложение № 3. Входные статистические данные.
Приложение 3.1. Информация о бумагах.
№
Дата выпуска
Дата погашения
Объем выпуска
21019
14.11.96
13.02.97
60 000 000
21020
09.01.97
10.04.97
65 000 000
21021
13.02.97
15.05.97
55 000 000
21022
10.04.97
10.07.97
55 000 000
21023
10.07.97
09.10.97
40 000 000
21024
18.12.97
09.04.98
45 000 000
22002
29.08.96
27.02.97
25 000 000
22003
26.09.96
27.03.97
30 000 000
22004
24.10.96
24.04.97
40 000 000
22005
28.11.96
29.05.97
45 000 000
22006
19.12.96
19.06.97
90 000 000
22007
30.01.97
24.07.97
30 000 000
22008
27.02.97
28.08.97
55 000 000
22009
27.03.97
25.09.97
55 000 000
22010
24.04.97
23.10.97
60 000 000
22011
15.05.97
13.11.97
60 000 000
22012
29.05.97
27.11.97
60 000 000
24001
20.03.97
12.03.98
30 000 000
24002
08.05.97
07.05.98
25 000 000
Приложение 3.2. Информация о сделках.
Дата
№ бумаги
Цена приобр
Цена продажи
Кол-во
02.12.96
22004
92,99
62
02.12.96
22004
93,00
340
04.12.96
22005
77,50
6
05.12.96
22003
85,14
5
19.12.96
22006
80,05
300
19.12.96
22006
80,21
500
19.12.96
22006
80,37
259
01.01.97
22005
92,06
7
01.01.97
21021
0,00
1126
01.01.97
22005
0,00
95
01.01.97
22008
0,00
75
01.01.97
22009
0,00
457
01.01.97
22008
0,00
29
01.01.97
21020
0,00
642
01.01.97
22004
0,00
12
01.01.97
22006
0,00
20
01.01.97
22009
0,00
16
01.01.97
21020
0,00
90
01.01.97
22006
0,00
26
01.01.97
21020
0,00
20
01.01.97
22004
0,00
15
01.01.97
22006
0,00
5
01.01.97
21021
0,00
12
01.01.97
22006
0,00
27
01.01.97
21020
0,00
0
01.01.97
21021
0,00
63
01.01.97
22004
0,00
159
01.01.97
22005
0,00
146
01.01.97
22009
0,00
46
01.01.97
22007
0,00
32
01.01.97
22008
0,00
13
01.01.97
22006
0,00
73
01.01.97
22006
0,00
59
01.01.97
22006
0,00
56
01.01.97
21020
0,00
29
01.01.97
21021
0,00
8
01.01.97
22005
0,00
12
01.01.97
22006
0,00
27
01.01.97
21021
0,00
10
01.01.97
22008
0,00
28
01.01.97
22008
0,00
57
01.01.97
21021
0,00
42
01.01.97
24001
0,00
34
01.01.97
24001
0,00
69
01.01.97
21021
0,00
104
09.01.97
21020
90,93
300
09.01.97
21020
91,03
600
09.01.97
21020
91,24
900
09.01.97
21020
91,35
600
09.01.97
21020
91,50
500
10.01.97
22004
91,54
24
13.01.97
21020
93,65
50
14.01.97
21020
93,22
32
15.01.97
22005
88,51
10
17.01.97
21020
92,50
10
28.01.97
21020
93,40
7
31.01.97
22007
84,19
16
31.01.97
22007
84,20
184
06.02.97
22004
92,80
60
10.02.97
22006
89,00
500
13.02.97
21021
91,20
430
13.02.97
21021
91,30
430
13.02.97
21021
91,33
320
17.02.97
22005
92,25
78
17.02.97
22007
88,42
78
19.02.97
22005
93,00
122
19.02.97
22003
97,55
41
19.02.97
22007
89,39
122
20.02.97
22005
92,60
28
25.02.97
22005
92,01
100
25.02.97
22005
92,03
60
25.02.97
21020
96,00
101
26.02.97
22004
95,10
12
26.02.97
21021
92,50
12
27.02.97
22008
84,04
300
27.02.97
22008
84,10
432
27.02.97
22008
84,22
318
27.02.97
22008
84,09
311
27.02.97
22008
84,22
182
27.02.97
22008
84,42
100
28.02.97
21021
93,23
80
03.03.97
21020
97,30
200
03.03.97
21021
94,00
154
03.03.97
22006
92,50
200
04.03.97
22006
92,40
24
04.03.97
22006
92,52
200
04.03.97
22006
92,53
200
06.03.97
22006
92,63
25
06.03.97
22004
96,45
4
06.03.97
21020
97,53
108
12.03.97
21020
97,70
489
13.03.97
21020
97,50
822
13.03.97
21021
94,00
399
17.03.97
21021
93,67
100
19.03.97
22003
99,19
128
19.03.97
22003
99,20
229
20.03.97
24001
72,00
50
20.03.97
24001
72,15
290
21.03.97
22005
94,20
2
21.03.97
22005
94,25
100
24.03.97
22005
94,25
108
24.03.97
22005
94,39
27
24.03.97
22005
94,40
598
24.03.97
21020
98,40
200
25.03.97
22006
92,10
70
25.03.97
22005
94,05
320
25.03.97
22003
99,78
403
26.03.97
22006
92,00
314
26.03.97
21021
94,45
80
26.03.97
21020
98,10
50
28.03.97
22005
94,15
7
28.03.97
21021
95,10
135
28.03.97
21021
95,19
378
28.03.97
21021
95,20
90
28.03.97
21020
99,07
288
28.03.97
21020
99,01
300
31.03.97
22006
92,92
200
31.03.97
22006
92,93
400
31.03.97
22006
92,94
100
31.03.97
22005
94,50
10
31.03.97
21020
99,10
88
31.03.97
21020
99,11
12
31.03.97
21020
99,12
2
31.03.97
22006
92,94
100
31.03.97
22006
92,93
400
31.03.97
22006
92,92
200
01.04.97
22006
92,70
1
01.04.97
22006
92,91
89
01.04.97
22004
97,72
10
03.04.97
22004
98,00
100
03.04.97
21020
99,28
38
03.04.97
22006
93,06
29
03.04.97
22006
93,23
5
03.04.97
22006
93,31
145
04.04.97
21020
99,30
370
04.04.97
22006
93,32
50
04.04.97
22006
93,37
47
04.04.97
22006
93,39
45
08.04.97
22004
98,35
239
08.04.97
22008
87,50
167
08.04.97
24001
73,15
23
08.04.97
22004
98,35
53
09.04.97
21020
99,80
13
09.04.97
21020
99,86
27
09.04.97
21020
99,87
325
09.04.97
24001
73,20
117
09.04.97
24001
73,25
200
09.04.97
22009
84,86
61
10.04.97
21022
91,50
2101
10.04.97
21020
100,00
1630
10.04.97
21022
91,50
91
10.04.97
21022
91,65
609
10.04.97
21020
100,00
642
10.04.97
21022
91,65
98
10.04.97
21020
100,00
90
10.04.97
21022
91,50
10
10.04.97
21020
100,00
20
10.04.97
21022
91,65
42
10.04.97
21020
100,00
39
10.04.97
21022
91,65
31
10.04.97
21020
100,00
29
10.04.97
21022
91,50
5458
11.04.97
21022
92,40
1
11.04.97
24001
73,50
300
14.04.97
22009
85,50
340
14.04.97
21021
97,25
300
14.04.97
22006
94,53
157
16.04.97
22008
88,40
330
16.04.97
21021
97,80
600
16.04.97
22004
99,60
90
16.04.97
22009
86,39
340
16.04.97
22004
99,60
50
17.04.97
22009
86,50
60
17.04.97
22004
99,64
3
17.04.97
24001
73,80
1
21.04.97
21022
92,45
515
21.04.97
22006
95,30
500
21.04.97
21022
92,38
3
21.04.97
22006
95,30
321
22.04.97
22004
99,90
189
22.04.97
22008
88,72
112
23.04.97
22005
97,20
12
24.04.97
22004
100,00
572
24.04.97
22010
84,35
14
24.04.97
22004
100,00
12
24.04.97
22010
84,32
10
24.04.97
22004
100,00
15
24.04.97
22010
84,32
28
24.04.97
22010
84,35
34
24.04.97
22004
100,00
53
24.04.97
22010
84,28
586
24.04.97
22010
84,32
355
25.04.97
22008
89,89
18
25.04.97
21022
93,55
48
25.04.97
21022
93,49
2
25.04.97
21022
93,50
4
28.04.97
21022
93,50
790
28.04.97
22005
97,68
200
28.04.97
22005
97,70
500
28.04.97
21022
93,50
1008
28.04.97
21022
93,65
982
28.04.97
21022
93,60
80
28.04.97
21022
93,55
468
28.04.97
21022
93,56
67
28.04.97
21022
93,50
1916
28.04.97
21022
93,61
10
28.04.97
21022
93,51
46
29.04.97
21022
94,01
826
29.04.97
22006
96,50
800
29.04.97
21022
94,00
400
29.04.97
21022
94,01
836
29.04.97
21022
94,05
55
29.04.97
21022
94,10
300
29.04.97
21022
94,15
298
06.05.97
21021
99,40
78
06.05.97
21022
94,70
131
06.05.97
22006
97,00
1
06.05.97
22006
96,90
1
06.05.97
22006
96,65
31
06.05.97
22006
96,61
263
06.05.97
22008
91,20
42
06.05.97
22008
90,80
501
12.05.97
21022
0,00
32
12.05.97
22009
0,00
160
14.05.97
21022
95,40
300
14.05.97
21022
95,45
300
14.05.97
21022
95,48
500
15.05.97
22011
86,30
1190
15.05.97
21021
100,00
500
15.05.97
22011
86,35
477
15.05.97
22011
86,41
826
15.05.97
21021
100,00
1126
15.05.97
22011
86,35
13
15.05.97
21021
100,00
12
15.05.97
22011
86,35
63
15.05.97
21021
100,00
63
15.05.97
21021
100,00
8
15.05.97
21021
100,00
10
15.05.97
22011
86,35
48
15.05.97
21021
100,00
42
15.05.97
21021
100,00
104
16.05.97
24001
79,30
50
16.05.97
22011
87,09
60
16.05.97
22011
87,10
90
16.05.97
22011
87,35
353
16.05.97
21022
95,75
355
16.05.97
21022
95,80
145
19.05.97
21022
96,54
50
20.05.97
21022
96,65
13
20.05.97
21022
96,73
44
21.05.97
22005
99,65
1
22.05.97
22011
88,40
92
22.05.97
22011
88,43
17
22.05.97
22011
88,44
391
22.05.97
22011
88,50
1
22.05.97
22011
88,70
350
22.05.97
22005
99,80
500
22.05.97
22005
99,82
252
23.05.97
22011
88,70
224
23.05.97
22005
99,82
119
26.05.97
22011
88,55
129
26.05.97
22011
88,54
26
26.05.97
22011
88,53
410
27.05.97
22011
0,00
791
28.05.97
22011
88,03
2
28.05.97
21022
96,40
10
28.05.97
21022
96,50
12
28.05.97
21022
96,69
100
28.05.97
21022
96,70
45
28.05.97
21022
96,88
144
28.05.97
22008
93,30
25
28.05.97
22011
88,21
50
28.05.97
22011
88,26
20
28.05.97
22011
88,25
100
28.05.97
22011
88,20
48
29.05.97
22012
87,30
108
29.05.97
22005
100,00
95
29.05.97
22012
87,30
8
29.05.97
22005
100,00
7
29.05.97
22012
87,30
64
29.05.97
22005
100,00
57
29.05.97
22005
100,00
12
29.05.97
22012
87,00
573
30.05.97
22007
95,79
73
30.05.97
22006
98,65
82
30.05.97
22012
87,85
50
30.05.97
22012
87,85
13Приложение 3.3. Информация о движениях денежных средств.
Дата
Остаток на конец
Ввод
Вывод
05.02.97
61 746 712,20
06.02.97
481 785 980,60
10.02.97
36 340 980,60
14.02.97
297 257 974,60
17.02.97
294 129 652,00
19.02.97
249 467 440,70
20.02.97
223 513 512,70
25.02.97
20 918 675,30
26.02.97
21 253 187,30
28.02.97
8 953 377,10
03.03.97
532 789 017,10
04.03.97
140 120 741,10
06.03.97
7 640 493,20
12.03.97
484 915 740,20
13.03.97
660 249 230,20
1 000 000 000,00
17.03.97
566 485 560,20
19.03.97
912 000 229,00
700 000 000,00
21.03.97
570 289 860,00
24.03.97
74 813 572,70
25.03.97
8 058 802,70
26.03.97
6 123 432,20
28.03.97
6 838 506,90
31.03.97
97 060 573,30
01.04.97
3 578 284,40
02.04.97
503 578 284,40
500 000 000,00
03.04.97
368 270 852,10
04.04.97
493 442,10
07.04.97
500 493 442,10
500 000 000,00
08.04.97
427 988 436,10
09.04.97
295 022 078,40
11.04.97
684 663,40
14.04.97
1 152 213,40
16.04.97
678 336 327,40
21.04.97
3 004 364,27
675 000 000,00
22.04.97
290 965 631,22
23.04.97
302 620 883,22
24.04.97
2 620 883,22
300 000 000,00
25.04.97
574 620 883,22
28.04.97
5 756 283,52
29.04.97
72 291,57
06.05.97
122 502,22
980 000 000,00
14.05.97
533 285 039,72
516 000 000,00
16.05.97
5 009 715,72
22.05.97
931 583,51
23.05.97
1 584 837,51
26.05.97
1 432 570,33
500 000 000,00
28.05.97
650 729 151,73
500 000 000,00
29.05.97
151 229 151,73
499 500 000,00
30.05.97
296 336,95
Приложение 3.4. Биржевая информация.
Дата
№ бумаги
Цена средневзвешенная
06.01.97
21018
99,643
06.01.97
21019
94,126
06.01.97
22001
98,422
06.01.97
22002
94,880
06.01.97
22003
93,288
06.01.97
22004
90,318
06.01.97
22005
87,458
06.01.97
22006
96,187
08.01.97
21018
99,886
08.01.97
21019
96,830
08.01.97
22001
98,422
08.01.97
22002
95,664
08.01.97
22003
93,032
08.01.97
22004
91,372
08.01.97
22005
88,078
08.01.97
22006
86,150
09.01.97
21018
100,000
09.01.97
21020
90,832
10.01.97
21019
97,123
10.01.97
21020
92,340
10.01.97
22001
99,009
10.01.97
22002
95,907
10.01.97
22003
92,999
10.01.97
22004
90,773
10.01.97
22005
88,050
10.01.97
22006
86,316
13.01.97
21019
97,245
13.01.97
21020
93,147
13.01.97
22001
99,176
13.01.97
22002
96,648
13.01.97
22003
94,013
13.01.97
22004
93,042
13.01.97
22005
89,735
13.01.97
22006
90,704
14.01.97
21019
97,670
14.01.97
21020
93,335
14.01.97
22001
99,343
14.01.97
22002
96,617
14.01.97
22003
94,127
14.01.97
22004
92,800
14.01.97
22005
90,000
14.01.97
22006
86,999
15.01.97
21019
97,693
15.01.97
21020
93,354
15.01.97
22001
99,621
15.01.97
22002
96,500
15.01.97
22003
94,369
15.01.97
22004
91,988
15.01.97
22005
89,289
15.01.97
22006
88,008
16.01.97
21019
97,685
16.01.97
21020
92,831
16.01.97
22001
99,634
16.01.97
22002
96,500
16.01.97
22003
94,325
16.01.97
22004
91,525
16.01.97
22005
89,500
16.01.97
22006
87,936
17.01.97
21019
97,413
17.01.97
21020
92,541
17.01.97
22001
99,680
17.01.97
22002
96,544
17.01.97
22003
92,338
17.01.97
22004
91,715
17.01.97
22005
89,000
17.01.97
22006
87,373
20.01.97
21019
97,650
20.01.97
21020
92,538
20.01.97
22001
99,826
20.01.97
22002
95,996
20.01.97
22003
93,943
20.01.97
22004
91,855
20.01.97
22005
87,862
20.01.97
22006
87,631
21.01.97
21019
97,557
21.01.97
21020
92,463
21.01.97
22001
99,801
21.01.97
22002
96,402
21.01.97
22003
94,097
21.01.97
22004
91,114
21.01.97
22005
88,438
21.01.97
22006
86,820
22.01.97
21019
97,691
22.01.97
21020
92,509
22.01.97
22001
99,861
22.01.97
22002
96,990
22.01.97
22003
94,097
22.01.97
22004
91,349
22.01.97
22005
88,389
22.01.97
22006
86,710
23.01.97
22001
100,000
23.01.97
22006
86,597
24.01.97
21019
98,164
24.01.97
21020
92,854
24.01.97
22002
96,740
24.01.97
22003
94,233
24.01.97
22004
91,920
24.01.97
22005
89,055
24.01.97
22006
87,196
27.01.97
21019
98,620
27.01.97
21020
93,200
27.01.97
22002
97,327
27.01.97
22003
94,658
27.01.97
22004
92,081
27.01.97
22005
89,153
27.01.97
22006
87,163
28.01.97
21019
98,681
28.01.97
21020
93,369
28.01.97
22002
97,412
28.01.97
22003
94,732
28.01.97
22004
92,486
28.01.97
22005
89,617
28.01.97
22006
87,152
29.01.97
21019
98,242
29.01.97
21020
93,041
29.01.97
22002
97,485
29.01.97
22003
94,821
29.01.97
22004
91,200
29.01.97
22005
89,617
29.01.97
22006
87,353
30.01.97
22007
83,554
31.01.97
21019
98,864
31.01.97
21020
93,385
31.01.97
22002
97,485
31.01.97
22003
94,652
31.01.97
22004
91,787
31.01.97
22005
85,900
31.01.97
22006
87,419
31.01.97
22007
84,043
03.02.97
21019
99,326
03.02.97
21020
93,500
03.02.97
22002
97,880
03.02.97
22003
94,829
03.02.97
22004
92,601
03.02.97
22005
89,415
03.02.97
22006
88,276
03.02.97
22007
84,480
04.02.97
21019
99,155
04.02.97
21020
93,831
04.02.97
22002
97,954
04.02.97
22003
95,089
04.02.97
22004
92,484
04.02.97
22005
90,000
04.02.97
22006
88,181
04.02.97
22007
84,612
05.02.97
21019
99,245
05.02.97
21020
94,120
05.02.97
22002
97,954
05.02.97
22003
95,330
05.02.97
22004
92,705
05.02.97
22005
90,182
05.02.97
22006
88,575
05.02.97
22007
84,749
06.02.97
21019
99,502
06.02.97
21020
94,255
06.02.97
22002
98,440
06.02.97
22003
95,631
06.02.97
22004
93,010
06.02.97
22005
90,650
06.02.97
22006
89,112
06.02.97
22007
86,097
07.02.97
21019
99,646
07.02.97
21020
94,650
07.02.97
22002
97,238
07.02.97
22003
95,946
07.02.97
22004
93,249
07.02.97
22005
91,013
07.02.97
22006
89,136
07.02.97
22007
86,035
10.02.97
21019
99,771
10.02.97
21020
94,990
10.02.97
22002
98,667
10.02.97
22003
95,760
10.02.97
22004
93,520
10.02.97
22005
90,591
10.02.97
22006
88,109
10.02.97
22007
86,113
11.02.97
21019
99,842
11.02.97
21020
94,759
11.02.97
22002
98,667
11.02.97
22003
96,000
11.02.97
22004
93,565
11.02.97
22005
90,800
11.02.97
22006
89,259
11.02.97
22007
86,157
12.02.97
21019
99,875
12.02.97
21020
94,844
12.02.97
22002
98,571
12.02.97
22003
96,000
12.02.97
22004
93,678
12.02.97
22005
90,520
12.02.97
22006
89,239
12.02.97
22007
86,558
13.02.97
21019
100,000
13.02.97
21021
91,357
14.02.97
21020
95,057
14.02.97
21021
92,133
14.02.97
22002
99,233
14.02.97
22003
96,400
14.02.97
22004
94,100
14.02.97
22005
91,400
14.02.97
22006
90,053
14.02.97
22007
87,650
17.02.97
21020
95,604
17.02.97
21021
92,377
17.02.97
22002
99,535
17.02.97
22003
96,852
17.02.97
22004
94,484
17.02.97
22005
92,159
17.02.97
22006
90,548
17.02.97
22007
88,149
18.02.97
21020
96,133
18.02.97
21021
92,625
18.02.97
22002
99,700
18.02.97
22003
97,191
18.02.97
22004
94,987
18.02.97
22005
92,690
18.02.97
22006
90,988
18.02.97
22007
88,547
19.02.97
21020
96,364
19.02.97
21021
92,841
19.02.97
22002
99,702
19.02.97
22003
97,195
19.02.97
22004
95,049
19.02.97
22005
92,979
19.02.97
22006
91,236
19.02.97
22007
89,245
20.02.97
21020
96,263
20.02.97
21021
93,056
20.02.97
22002
99,800
20.02.97
22003
97,400
20.02.97
22004
95,370
20.02.97
22005
92,948
20.02.97
22006
90,918
20.02.97
22007
89,336
21.02.97
21020
96,490
21.02.97
21021
93,234
21.02.97
22002
99,800
21.02.97
22003
97,496
21.02.97
22004
95,310
21.02.97
22005
92,643
21.02.97
22006
91,359
21.02.97
22007
88,513
24.02.97
21020
96,071
24.02.97
21021
92,965
24.02.97
22002
99,800
24.02.97
22003
97,500
24.02.97
22004
95,200
24.02.97
22005
92,007
24.02.97
22006
90,456
24.02.97
22007
88,500
25.02.97
21020
96,000
25.02.97
21021
90,057
25.02.97
22002
99,852
25.02.97
22003
97,427
25.02.97
22004
95,454
25.02.97
22005
92,054
25.02.97
22006
90,930
25.02.97
22007
88,199
26.02.97
21020
96,119
26.02.97
21021
92,786
26.02.97
22002
99,883
26.02.97
22003
97,734
26.02.97
22004
95,019
26.02.97
22005
92,299
26.02.97
22006
90,874
26.02.97
22007
88,730
27.02.97
22002
100,000
27.02.97
22008
84,092
28.02.97
21020
96,809
28.02.97
21021
93,293
28.02.97
22003
98,120
28.02.97
22004
95,190
28.02.97
22005
93,100
28.02.97
22006
91,725
28.02.97
22007
88,782
28.02.97
22008
84,956
03.03.97
21020
97,293
03.03.97
21021
94,125
03.03.97
22003
98,350
03.03.97
22004
96,362
03.03.97
22005
93,100
03.03.97
22006
92,266
03.03.97
22007
90,333
03.03.97
22008
86,453
04.03.97
21020
97,348
04.03.97
21021
94,392
04.03.97
22003
98,436
04.03.97
22004
96,124
04.03.97
22005
93,939
04.03.97
22006
92,416
04.03.97
22007
89,930
04.03.97
22008
87,157
05.03.97
21020
97,600
05.03.97
21021
94,421
05.03.97
22003
98,811
05.03.97
22004
96,685
05.03.97
22005
94,343
05.03.97
22006
92,647
05.03.97
22007
89,930
05.03.97
22008
87,016
06.03.97
21020
97,654
06.03.97
21021
94,503
06.03.97
22003
98,962
06.03.97
22004
96,782
06.03.97
22005
94,450
06.03.97
22006
92,646
06.03.97
22007
90,257
06.03.97
22008
86,887
07.03.97
21020
97,636
07.03.97
21021
94,630
07.03.97
22003
99,125
07.03.97
22004
96,903
07.03.97
22005
94,450
07.03.97
22006
92,953
07.03.97
22007
90,257
07.03.97
22008
87,081
11.03.97
21020
96,775
11.03.97
21021
94,860
11.03.97
22003
99,209
11.03.97
22004
96,650
11.03.97
22005
94,500
11.03.97
22006
93,162
11.03.97
22007
90,993
11.03.97
22008
87,317
12.03.97
21020
97,700
12.03.97
21021
94,132
12.03.97
22003
97,682
12.03.97
22004
95,787
12.03.97
22005
94,000
12.03.97
22006
92,513
12.03.97
22007
90,000
12.03.97
22008
87,138
13.03.97
21020
97,490
13.03.97
21021
94,000
13.03.97
22003
99,000
13.03.97
22004
96,064
13.03.97
22005
93,625
13.03.97
22006
92,141
13.03.97
22007
90,000
13.03.97
22008
86,400
14.03.97
21020
97,485
14.03.97
21021
94,946
14.03.97
22003
99,090
14.03.97
22004
96,501
14.03.97
22005
93,602
14.03.97
22006
92,133
14.03.97
22007
89,000
14.03.97
22008
86,731
17.03.97
21020
97,955
17.03.97
21021
92,545
17.03.97
22003
99,010
17.03.97
22004
96,800
17.03.97
22005
93,890
17.03.97
22006
92,423
17.03.97
22007
89,064
17.03.97
22008
87,328
18.03.97
21020
98,024
18.03.97
21021
94,576
18.03.97
22003
99,112
18.03.97
22004
96,576
18.03.97
22005
94,031
18.03.97
22006
92,455
18.03.97
22007
89,064
18.03.97
22008
86,166
19.03.97
21020
98,007
19.03.97
21021
94,668
19.03.97
22003
99,195
19.03.97
22004
96,819
19.03.97
22005
93,877
19.03.97
22006
91,269
19.03.97
22007
88,900
19.03.97
22008
86,649
20.03.97
24001
72,152
21.03.97
21020
98,278
21.03.97
21021
94,772
21.03.97
22003
99,600
21.03.97
22004
97,004
21.03.97
22005
94,285
21.03.97
22006
92,474
21.03.97
22007
88,900
21.03.97
22008
86,200
21.03.97
24001
72,503
24.03.97
21020
98,542
24.03.97
21021
94,855
24.03.97
22003
99,782
24.03.97
22004
97,333
24.03.97
22005
94,290
24.03.97
22006
92,693
24.03.97
22007
89,014
24.03.97
22008
86,303
24.03.97
24001
73,415
25.03.97
21020
98,273
25.03.97
21021
94,770
25.03.97
22003
99,784
25.03.97
22004
97,212
25.03.97
22005
94,182
25.03.97
22006
90,967
25.03.97
22007
88,855
25.03.97
22008
86,255
25.03.97
24001
72,600
26.03.97
21020
98,248
26.03.97
21021
94,563
26.03.97
22003
99,845
26.03.97
22004
97,248
26.03.97
22005
94,264
26.03.97
22006
92,016
26.03.97
22007
88,934
26.03.97
22008
86,300
26.03.97
24001
72,495
27.03.97
22003
100,000
27.03.97
22009
83,778
28.03.97
21020
99,032
28.03.97
21021
95,190
28.03.97
22004
97,329
28.03.97
22005
94,188
28.03.97
22006
92,888
28.03.97
22007
89,682
28.03.97
22008
88,090
28.03.97
22009
84,019
28.03.97
24001
72,997
31.03.97
21020
99,106
31.03.97
21021
95,565
31.03.97
22004
97,543
31.03.97
22005
94,517
31.03.97
22006
92,818
31.03.97
22007
89,682
31.03.97
22008
87,300
31.03.97
22009
84,050
31.03.97
24001
72,900
01.04.97
21020
99,249
01.04.97
21021
95,723
01.04.97
22004
97,727
01.04.97
22005
94,517
01.04.97
22006
92,953
01.04.97
22007
90,000
01.04.97
22008
86,996
01.04.97
22009
84,330
01.04.97
24001
73,000
02.04.97
21020
99,250
02.04.97
21021
95,693
02.04.97
22004
97,963
02.04.97
22005
94,736
02.04.97
22006
93,156
02.04.97
22007
90,990
02.04.97
22008
86,940
02.04.97
22009
84,022
02.04.97
24001
73,000
03.04.97
21020
99,268
03.04.97
21021
95,807
03.04.97
22004
98,022
03.04.97
22005
94,922
03.04.97
22006
93,274
03.04.97
22007
90,558
03.04.97
22008
86,610
03.04.97
22009
83,988
03.04.97
24001
72,952
04.04.97
21020
99,308
04.04.97
21021
95,800
04.04.97
22004
98,072
04.04.97
22005
95,226
04.04.97
22006
93,486
04.04.97
22007
90,893
04.04.97
22008
86,444
04.04.97
22009
84,133
04.04.97
24001
72,857
07.04.97
21020
99,642
07.04.97
21021
95,765
07.04.97
22004
98,337
07.04.97
22005
95,438
07.04.97
22006
93,650
07.04.97
22007
91,200
07.04.97
22008
88,400
07.04.97
22009
84,131
07.04.97
24001
73,053
08.04.97
21020
99,790
08.04.97
21021
96,330
08.04.97
22004
98,380
08.04.97
22005
95,533
08.04.97
22006
93,841
08.04.97
22007
91,200
08.04.97
22008
87,490
08.04.97
22009
84,432
08.04.97
24001
73,006
09.04.97
21020
99,862
09.04.97
21021
96,427
09.04.97
22004
98,455
09.04.97
22005
95,674
09.04.97
22006
93,827
09.04.97
22007
91,038
09.04.97
22008
87,525
09.04.97
22009
85,103
09.04.97
24001
73,208
10.04.97
21020
100,00
10.04.97
21022
91,650
11.04.97
21021
96,963
11.04.97
21022
92,066
11.04.97
22004
98,780
11.04.97
22005
95,861
11.04.97
22006
94,384
11.04.97
22007
91,498
11.04.97
22008
87,907
11.04.97
22009
84,907
11.04.97
24001
73,500
14.04.97
21021
97,091
14.04.97
21022
92,221
14.04.97
22004
99,137
14.04.97
22005
96,461
14.04.97
22006
94,535
14.04.97
22007
91,570
14.04.97
22008
88,076
14.04.97
22009
85,445
14.04.97
24001
73,561
15.04.97
21021
97,503
15.04.97
21022
92,419
15.04.97
22004
99,180
15.04.97
22005
96,521
15.04.97
22006
94,953
15.04.97
22007
91,891
15.04.97
22008
88,044
15.04.97
22009
85,768
15.04.97
24001
73,568
16.04.97
21021
97,762
16.04.97
21022
92,643
16.04.97
22004
99,514
16.04.97
22005
96,747
16.04.97
22006
95,016
16.04.97
22007
92,800
16.04.97
22008
88,395
16.04.97
22009
86,464
16.04.97
24001
73,614
17.04.97
21021
97,699
17.04.97
21022
92,528
17.04.97
22004
99,647
17.04.97
22005
96,600
17.04.97
22006
95,063
17.04.97
22007
92,009
17.04.97
22008
88,789
17.04.97
22009
86,860
17.04.97
24001
73,647
21.04.97
21021
97,836
21.04.97
21022
92,444
21.04.97
22004
99,809
21.04.97
22005
96,810
21.04.97
22006
95,262
21.04.97
22007
92,009
21.04.97
22008
86,911
21.04.97
22009
86,487
21.04.97
24001
73,671
22.04.97
21021
97,894
22.04.97
21022
92,642
22.04.97
22004
99,862
22.04.97
22005
96,854
22.04.97
22006
95,350
22.04.97
22007
92,487
22.04.97
22008
88,720
22.04.97
22009
86,314
22.04.97
24001
73,938
23.04.97
21021
98,091
23.04.97
21022
92,955
23.04.97
22004
99,893
23.04.97
22005
97,196
23.04.97
22006
95,347
23.04.97
22007
92,693
23.04.97
22008
88,859
23.04.97
22009
86,535
23.04.97
24001
74,051
24.04.97
22004
100,000
24.04.97
22010
84,320
25.04.97
21021
98,472
25.04.97
21022
93,593
25.04.97
22005
97,478
25.04.97
22006
95,920
25.04.97
22007
92,693
25.04.97
22008
89,248
25.04.97
22009
87,185
25.04.97
22010
84,823
25.04.97
24001
75,000
28.04.97
21021
98,686
28.04.97
21022
93,569
28.04.97
22005
97,687
28.04.97
22006
96,382
28.04.97
22007
93,300
28.04.97
22008
89,248
28.04.97
22009
88,132
28.04.97
22010
86,361
28.04.97
24001
76,105
29.04.97
21021
98,913
29.04.97
21022
94,045
29.04.97
22005
97,880
29.04.97
22006
96,498
29.04.97
22007
93,800
29.04.97
22008
89,248
29.04.97
22009
88,106
29.04.97
22010
86,366
29.04.97
24001
76,318
30.04.97
21021
99,023
30.04.97
21022
94,968
30.04.97
22005
98,284
30.04.97
22006
96,779
30.04.97
22007
93,800
30.04.97
22008
90,700
30.04.97
22009
89,266
30.04.97
22010
86,498
30.04.97
24001
76,811
04.05.97
21021
99,205
04.05.97
21022
94,962
04.05.97
22005
98,202
04.05.97
22006
96,818
04.05.97
22007
94,351
04.05.97
22008
90,750
04.05.97
22009
88,884
04.05.97
22010
86,817
04.05.97
24001
76,987
05.05.97
21021
99,378
05.05.97
21022
94,962
05.05.97
22005
98,500
05.05.97
22006
96,600
05.05.97
22007
94,290
05.05.97
22008
91,176
05.05.97
22009
88,810
05.05.97
22010
86,953
05.05.97
24001
76,983
06.05.97
21021
99,433
06.05.97
21022
94,700
06.05.97
22005
98,331
06.05.97
22006
96,649
06.05.97
22007
94,290
06.05.97
22008
90,865
06.05.97
22009
89,017
06.05.97
22010
86,915
06.05.97
24001
76,880
07.05.97
21021
97,211
07.05.97
21022
94,820
07.05.97
22005
98,369
07.05.97
22006
96,859
07.05.97
22007
94,377
07.05.97
22008
91,100
07.05.97
22009
89,046
07.05.97
22010
86,797
07.05.97
24001
76,980
08.05.97
24002
73,909
12.05.97
21021
99,765
12.05.97
21022
94,939
12.05.97
22005
98,501
12.05.97
22006
95,704
12.05.97
22007
94,377
12.05.97
22008
91,260
12.05.97
22009
89,035
12.05.97
22010
88,008
12.05.97
24001
77,406
12.05.97
24002
73,923
13.05.97
21021
99,850
13.05.97
21022
95,315
13.05.97
22005
98,694
13.05.97
22006
97,399
13.05.97
22007
94,698
13.05.97
22008
90,403
13.05.97
22009
89,313
13.05.97
22010
87,685
13.05.97
24001
77,422
13.05.97
24002
74,508
14.05.97
21021
99,892
14.05.97
21022
95,445
14.05.97
22005
98,872
14.05.97
22006
97,414
14.05.97
22007
95,000
14.05.97
22008
91,750
14.05.97
22009
89,683
14.05.97
22010
87,630
14.05.97
24001
77,601
14.05.97
24002
74,762
15.05.97
21021
100,000
15.05.97
22011
86,347
16.05.97
21022
96,203
16.05.97
22005
99,396
16.05.97
22006
98,034
16.05.97
22007
95,000
16.05.97
22008
92,360
16.05.97
22009
90,972
16.05.97
22010
88,562
16.05.97
22011
87,236
16.05.97
24001
79,057
16.05.97
24002
75,700
19.05.97
21022
96,549
19.05.97
22005
99,577
19.05.97
22006
98,254
19.05.97
22007
95,650
19.05.97
22008
92,754
19.05.97
22009
91,107
19.05.97
22010
88,993
19.05.97
22011
87,497
19.05.97
24001
79,448
19.05.97
24002
77,016
20.05.97
21022
96,686
20.05.97
22005
99,765
20.05.97
22006
98,239
20.05.97
22007
95,852
20.05.97
22008
93,027
20.05.97
22009
91,487
20.05.97
22010
89,323
20.05.97
22011
87,627
20.05.97
24001
79,926
20.05.97
24002
77,002
21.05.97
21022
96,819
21.05.97
22005
99,650
21.05.97
22006
98,492
21.05.97
22007
95,850
21.05.97
22008
93,298
21.05.97
22009
91,846
21.05.97
22010
89,554
21.05.97
22011
87,971
21.05.97
24001
80,371
21.05.97
24002
77,202
22.05.97
21022
98,222
22.05.97
22005
99,804
22.05.97
22006
98,492
22.05.97
22007
96,143
22.05.97
22008
93,672
22.05.97
22009
92,145
22.05.97
22010
89,949
22.05.97
22011
88,536
22.05.97
24001
81,219
22.05.97
24002
78,777
23.05.97
21022
97,250
23.05.97
22005
99,811
23.05.97
22006
98,629
23.05.97
22007
96,232
23.05.97
22008
92,804
23.05.97
22009
92,625
23.05.97
22010
90,014
23.05.97
22011
88,937
23.05.97
24001
81,434
23.05.97
24002
79,200
26.05.97
21022
96,616
26.05.97
22005
99,803
26.05.97
22006
98,649
26.05.97
22007
96,232
26.05.97
22008
93,498
26.05.97
22009
92,338
26.05.97
22010
89,902
26.05.97
22011
88,581
26.05.97
24001
79,606
26.05.97
24002
79,001
27.05.97
21022
96,645
27.05.97
22005
99,890
27.05.97
22006
98,094
27.05.97
22007
27.05.97
22008
93,545
27.05.97
22009
91,260
27.05.97
22010
89,563
27.05.97
22011
88,897
27.05.97
24001
81,543
27.05.97
24002
78,102
28.05.97
21022
96,287
28.05.97
22005
99,869
28.05.97
22006
98,338
28.05.97
22007
28.05.97
22008
93,475
28.05.97
22009
91,221
28.05.97
22010
89,391
28.05.97
22011
88,233
28.05.97
24001
81,067
28.05.97
24002
78,200
29.05.97
22005
100,000
29.05.97
22012
87,303
30.05.97
21022
96,982
30.05.97
22006
98,667
30.05.97
22007
95,814
30.05.97
22008
93,096
30.05.97
22009
90,537
30.05.97
22010
89,430
30.05.97
22011
88,050
30.05.97
22012
87,858
30.05.97
24001
80,994
30.05.97
24002
77,325