заработок на кликах
Вы еще не зарегестрированы на Uchit.net? Зачем?
Login: Pass:

Анализ эффективности вложений денежных средств в РКО

реферат: Инвестиции

Оцените работу
всего оценок0 общий балл0
Зарегистрируйтесь

Содержание.

                                                                               стр.

Введение.        3

Глава 1. Функционирование рынка РКО.        4

Участники рынка.        4

Процедура торгов.        4

Первичное размещение (аукцион).        4

Вторичные торги.        5

Погашение.        5

Документооборот.        5

Отчеты, предоставляемые биржей.        5

Отчеты, предоставляемые Дилерами.        5

Глава 2. Задачи Дилера на рынке РКО.        7

Ведение бэк-офиса.        7

Оптимизация вложений собственных средств.        7

Управление средствами инвесторов.        7

Исполнение поручений Инвесторов.        8

Анализ эффективности вложений.        8

Глава 3. Задачи формирования и ведения собственного  портфеля облигаций Дилера.        9

Формирование портфеля облигаций.        9

Ликвидность портфеля.        9

Период инвестирования.        9

Инвестирование с целью максимизации дохода.        10

Безрисковое инвестирование.        10

Анализ эффективности вложений денежных средств в РКО.        11

Постановка задачи.        11

Метод решения.        11

Экономическая интерпретация метода.        13

Экономическая интерпретация полученных результатов.        13

Применение результатов исследования для построения методов эффективного управления портфелем облигаций.        14

Заключение.        15

Список литературы.        15

Приложения.        18

Приложение № 1. Программа автоматизации учета РКО.        18

Приложение 1.1. Руководство пользователя.        18

Приложение 1.2. Текст программы.        20

Приложение № 1.3. Журнал оборотов.        63

Приложение № 1.4. Журнал лицевого учета.        64

Приложение № 1.5. Мемориальный ордер.        65

Приложение № 1.6. Отчет инвестору о совершенных сделках.        66

Приложение № 1.7. Структура пртфеля в разрезе по бумагам.        67

Приложение № 1.8. Структура портфеля обобщенная.        68

Приложение № 1.9. Биржевая информация.        69

Приложение № 1.10. Еженедельный отчет в депозитарий.        70

Приложение № 1.11. Ежемесячный отчет в депозитарий.        71

Приложение № 2. Программа анализа эффективности вложений в РКО.        71

Приложение 2.1. Текст программы.        72

Приложение № 2.2. Диаграмма сравнения доходности портфеля и рынка.        81

Приложение № 2.3. Диаграмма сравнения индекса портфеля и рынка.        82

Приложение № 3. Входные статистические данные.        83

Приложение 3.1. Информация о бумагах.        83

Приложение 3.2. Информация о сделках.        84

Приложение 3.3. Информация о движениях денежных средств.        90

Приложение 3.4. Биржевая информация.        92


Введение.


Республиканские краткосрочные бескупонные облигации (РКО) выпускаются Министерством Финансов Республики Татарстан. Рынок РКО существует с 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 серии, обращающихся на рынке


Данный индекс показывает, насколько эффективнее было внутреннее управление портфелем по сравнению с рыночной конъюктурой. Причем, если индекс портфеля меньше индекса рынка, то управление было неэффективным.


  1. Эффективная норма доходности к погашению портфеля и рынка (для оценки внешнего управления).

Показатель строится следующим образом(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