94377

Совершенствование банковского обслуживания физических лиц (на примере АКБ «Мособолбанк» ОАО, г Чебоксары)

Дипломная

Банковское дело и рынок ценных бумаг

Сущность банковского обслуживания физических лиц Показатели, характеризующие эффективность обслуживания физических лиц Нормативно-правовые акты, регулирующие банковское обслуживание физических лиц Зарубежный опыт обслуживания физических лиц Общая характеристика деятельности АКБ «Мособлбанк» ОАО...

Русский

2015-09-11

431.4 KB

27 чел.

Тема дипломной  работы  «Совершенствование банковского обслуживания физических лиц» (на примере АКБ «Мособолбанк» ОАО, г Чебоксары)


СОДЕРЖАНИЕ

ВЕДЕНИЕ……………………………………………………………

6

ГЛАВА 1.

СУЩНОСТЬ, ЦЕЛИ И ЗАДАЧИ БАНКОВСКОГО ОБСЛУЖИВАНИЯ КЛИЕНТОВ-ФИЗИЧЕСКИХ ЛИЦ……….

9

1.1.

Сущность банковского обслуживания физических лиц…………

9

1.2.

Показатели, характеризующие эффективность обслуживания физических лиц……………………………………………………..

16

1.3.

Нормативно-правовые акты, регулирующие банковское обслуживание физических лиц……………………………………

24

1.4.

Зарубежный опыт обслуживания физических лиц………………

29

ГЛАВА 2.

ОЦЕНКА ФИНАНСОВОГО СОСТОЯНИЯ БАНКА И ОРГАНИЗАЦИИ И ОБСЛУЖИВАНИЯ ФИЗИЧЕСКИХ ЛИЦ В АКБ «МОСОБЛБАНК» ОАО………………………………………

38

2.1.

Общая характеристика деятельности АКБ «Мособлбанк» ОАО.

38

2.2.

Анализ финансового состояния АКБ «Мособлбанк» ОАО……

46

2.3.

Оценка эффективности организации обслуживания физических лиц на примере АКБ «Мособлбанк» ОАО………………………

62

2.4.

Информационно-программное обеспечение обслуживания физических лиц в АКБ «Мособлбанк» ОАО……………………

80

ГЛАВА 3.

РАЗРАБОТКА МЕРОПРИЯТИЙ ПО СОВЕРШЕНСТВОВАНИЮ ОРГАНИЗАЦИИ ОБСЛУЖИВАНИЯ ФИЗИЧЕСКИХ ЛИЦ В АКБ «МОСОБЛБАНК» ОАО…………………………………………….

84

3.1.

Мероприятия по совершенствованию организации обслуживания физических лиц в АКБ «Мособлбанк» ОАО…..

84

3.2.

Анализ экономической эффективности предлагаемых мероприятий по совершенствованию организации обслуживания физических лиц в АКБ «Мособлбанк» ОАО…..

87

3.3.

Обеспечение экономической эффективности АКБ «Мособлбанк» ОАО……………………………………………….

90

ЗАКЛЮЧЕНИЕ…………………………………………………….

100

СПИСОК ИСПОЛЬЗОВАНЫХ ИСТОЧНИКОВ……………….

103

ПРИЛОЖЕНИЯ……………………………………………………

106


ВВЕДЕНИЕ

Актуальность выбранной темы исследования обусловлена следующим.

Современные коммерческие банки – банки, непосредственно обслуживающие предприятия и организации, а также население – своих клиентов. Коммерческие банки выступают основным звеном банковской системы. Независимо от формы собственности коммерческие банки являются самостоятельными субъектами экономики. Их отношения с клиентами носят коммерческий характер. Основная цель функционирования коммерческих банков – получение максимальной прибыли.

Согласно банковскому законодательству банк – это кредитная организация, которая имеет право привлекать денежные средства физических и юридических лиц, размещать их от своего имени и за свой счет на условиях возвратности, платности, срочности и осуществлять расчетные операции по поручению клиентов. Таким образом, коммерческие банки осуществляют комплексное обслуживание клиентов, что отличает их от специальных кредитных организаций небанковского типа, выполняющих ограниченный круг финансовых операций и услуг. В отличие от банка кредитные организации производят лишь отдельные банковские операции.

Коммерческие банки выступают прежде всего как специфические кредитные институты, которые, с одной стороны, привлекают временно свободные средства хозяйства; с другой – удовлетворяют за счет этих привлеченных средств разнообразные финансовые потребности предприятий, организаций и населения.

Экономическую основу операций банка по аккумуляции и размещению кредитных ресурсов составляет движение денежных средств как объективного процесса, оказывающего влияние на формирование и использование ссужаемых стоимостей. Организуя этот процесс, коммерческий банк выступает коммерческим предприятием, обеспечивающим выгодное помещение аккумулированных кредитных ресурсов.

Опираясь на мировой опыт, мы можем однозначно утверждать, что розничный банкинг должен быть «многоканальным» – помимо традиционной сети отделений должна существовать сеть устройств самообслуживания и, по крайней мере, один канал удаленного обслуживания (телефон, Интернет, мобильный канал и т.д.). Только в этом случае клиент получает действительно комфортную среду обслуживания, а банк – возможность максимально эффективно выбирать каналы предоставления той или иной услуги. В противном случае обязательно возникнут проблемы, с частью которых столкнулись уже и российские банки. Выдав сто тысяч кредитов, нужно обеспечить достаточно широкий канал приема платежей – иначе ваши отделения не справятся с массой добропорядочных заемщиков. Эмитировав сто тысяч карточек, нужно позаботиться о создании сети банкоматов для круглосуточного обслуживания клиентов.

Наконец, использование нескольких параллельных каналов доставки банковских услуг – самый эффективный способ сокращения издержек банка.

Степень разработанности проблемы. Научной и методической основой дипломной работы послужили законодательные акты, а также работы отечественных и зарубежных ученых по вопросам кредитования физических лиц. Монографии, посвященные потребительскому кредитованию, преимущественно раскрывают особенности банковского обслуживания населения (Ю.А. Бабичева, Г.Н. Белоглазова, А.Н. Иванов, А.А. Казимагомедов, А.Ю. Ковалев, О.И. Лаврушин, Г.С. Панова, Л.И. Рябченко, А.М. Тавасиев, В.А. Черненко, Е.Д. Кемпбелл, Р.Дж. Кемпбелл, Э. Морсман). Высоко оценивая вклад вышеназванных и других авторов, необходимо отметить, что данные работы в основном затрагивают вопросы сущности потребительского кредитования, его видов, проблем организации, а также перспектив развития тех или иных кредитных услуг населению. В периодической печати и в диссертационных исследованиях (В.С. Белоногова, И.Н. Волокитина, Д.А. Ляшов, А.В. Осиповская, П.А. Тележников) освящается в основном процесс развития отдельных видов кредитных услуг физическим лицам и его перспективы.

Таким образом, в свете вышесказанного целью данной анализ текущей деятельности и разработка предложений по улучшению банковского обслуживания физических лиц.

Для достижения поставленной цели в работе решены следующие задачи:

1. рассмотреть теоретические основы организации работы коммерческого банка с физическими лицами;

2. провести анализ деятельности банка в направлении обслуживания физических лиц;

3. рассмотреть направления совершенствования в обслуживании физических лиц

Объект исследования в работе – ОАО «Мособлбанк» Новоюжный».

Предмет исследования в работе – обслуживание физических лиц.

Методы исследования – сравнение, группировка.

Информационной базой исследования выступают книги, стать, монографии по анализу современных тенденций на рынке услуг физическим лицам.

Работа состоит из трех глав. Первая глава носит теоретический характер и посвящена исследованию теоретических основ работы банка с физическими лицами. Вторая глава посвящена анализу процессов обслуживания физических лиц на примере объекта исследования. Третья глава носит рекомендательный характер и направлена на исследование направлений совершенствования работы с физическими лицами и перспектив этого совершенствования.


ГЛАВА 1.

СУЩНОСТЬ, ЦЕЛИ И ЗАДАЧИ  БАНКОВСКОГО ОБСЛУЖИВАНИЯ КЛИЕНТОВ – ФИЗИЧЕСКИХ ЛИЦ

1.1

Сущность банковского обслуживания физических лиц

Банковское обслуживание физических лиц является одним из направлений деятельности коммерческого банка, направленное на удовлетворение потребностей клиента на условии платности, соблюдении банковского законодательства и играет значимую роль в современных социально-экономических системах.

Анализ исследований на тему банковского обслуживания физических лиц позволил сделать следующие выводы:

  1.  современный этап характеризуется тем, что кредитные организации, работающие на рынке банковских услуг, имеют достаточно накопленный опыт работы на различных сегментах финансового рынка, активно развивая потребительское кредитование, расширяя сферу применения банковских карт, активно используя информационно-программные комплексы формирования кредитных историй клиентов, участвуя в развитии системы страхования банковских вкладов физических лиц, внедряя новые технологии и создавая необходимую инфраструктуру для работы с населением;
  2.  положительная динамика показателей, характеризующих банковское обслуживание физических лиц, объясняется, прежде всего, возрастанием доверия населения к банковскому сектору; ростом реальных располагаемых доходов населения; увеличением количества предоставляемых банковских услуг для населения со стороны кредитных организаций;
  3.  развитие отечественного банковского сектора характеризуется высокими темпами роста, усилением конкуренции между коммерческими банками, активизацией коммерческих банков в сфере банковского обслуживания физических лиц;
  4.  позитивное влияние на развитие конкуренции на рынке банковских услуг оказало функционирование системы страхования вкладов. В 2009 году продолжался рост прочих привлеченных банками средств, их объем по сравнению с 2008 годом увеличился на 58,8%, несмотря на кризис;
  5.  опыт комплексного банковского обслуживания клиентов индустриально развитых стран постепенно внедряется отечественными коммерческими банками, которые начинают предоставлять новые услуги, удовлетворяя все более сложные потребности клиентов, что повышает их конкурентоспособность в привлечении кредитных ресурсов и новых клиентов.

Динамика основных параметров развития банковского сектора в Российской Федерации представлена в табл. 1.

Таблица 1

Динамика основных параметров развития банковского сектора в Российской Федерации

Показатель

1.01.04

1.01.05

1.01.06

1.01.07

1.01.08

Активы (пассивы) банковского сектора, млрд. руб.

5 600,7

7 136,9

9 750,3

14 045,6

20 241,1

в% к ВВП

42,3

41,9

45,1

52,2

61,4

Собственные средства (капитал) банковского сектора, млрд. руб.

814,9

946,6

1 241,8

1 692,7

2 671,5

в% к ВВП

6,2

5,6

5,7

6,3

8,1

в% к активам банковского сектора

14,6

13,3

12,7

12,1

13,2

Кредиты и прочие размещенные средства, предоставленные нефинансовым организациям и физическим лицам, включая просроченную задолженность, млрд. руб.

2 684,7

3 887,6

5 454,0

8 031,4

12 288,3

в% к ВВП

20,3

22,8

25,8

29,9

37,3

в% к активам банковского сектора

47,9

54,5

55,9

57,2

60,7

Ценные бумаги, приобретенные банками, млрд. руб.

1 002,2

1 086,9

1 539,4

1 961,4

2 554,7

в% к ВВП

7,6

6,4

7,1

7,3

7,7

в% к активам банковского сектора

17,9

15,2

15,8

14,0

12,6

Вклады физических лиц, млрд. руб.

1 517,8

1 977,2

2 754,6

3 793,5

5 136,8

в% к ВВП

11,5

11,6

12,7

14,1

15,6

в% к пассивам банковского сектора

27,1

27,7

28,3

27,0

25,4

в% к денежным доходам населения

17,1

18,0

19,9

22,0

24,3

Анализ нормативного правового обеспечения банковского обслуживания физических лиц позволил сделать следующие выводы:

  1.  банковское законодательство строго определяет перечень банковских операций, осуществляемых с физическими лицами;
  2.  с целью обеспечения гарантий возврата вкладов и повышения доверия физических лиц к банковской системе в Российской Федерации создана система страхования вкладов, совершенствование которой является приоритетным направлением деятельности Банка России в области развития банковского законодательства;
  3.  банковское законодательство представляет возможным использование физическими лицами широкого перечня видов расчетов.

В обслуживании банками физических лиц важную роль играют многие факторы (табл. 2).

Таблица 2

Факторы, оказывающие влияние на возможность комплексного банковского обслуживания физических лиц

Фактор

Описание

финансовые

конкурентоспособность ценовых условий по предоставляемым банковским продуктам / услугам;

уровень банковской маржи по продукту / услуге, позволяющей сделать ее предоставление экономически эффективным для кредитной организации

правовые

наличие у кредитной организации лицензий и разрешений на проведение операций с физическими лицами;

наличие / отсутствие законодательно установленных ограничений на проведение отдельных операций с физическими лицами;

ограничения на валютные операции и операции межстраногового движения капитала

организационные

наличие широкой сети точек продаж;

удобство расположения точек продаж банка для клиентов банка;

уровень технологий и автоматизации бизнес процессов в области обслуживания клиентов

имиджевые

положительная деловая репутация кредитной организации;

наличие различных маркетинговых мероприятий, направленных на продвижение банковского продукта / услуги целевой аудитории

Для привлечения клиентов очень важно правильно сегментировать клиентскую базу. Ключевые критерии, по которым может быть сегментирована клиентская база кредитной организации, отражены в табл. 3.

Таблица 3

Классификация физических лиц при комплексном банковском обслуживании

Классификационный признак

Вид клиента – физического лица

1. В зависимости от степени заинтересованности физического лица в банковском обслуживании

1.1. Клиенты, осуществляющие разовые операции

1.2. Клиенты, регулярно использующие определенный стандартный набор банковских продуктов

1.3. Клиенты, регулярно использующие стандартный набор банковских продуктов, постоянно предпринимающие шаги по оптимизации собственных финансовых потоков

1.4. Клиенты категории V.I.P.

2. В зависимости от уровня доходов физического лица

2.1. Нижний сегмент. Уровень доходов данных клиентов практически в полном объеме используется на текущее потребление

2.2. Средний сегмент. Уровень доходов данных клиентов позволяет делать сбережения и осуществлять инвестиции с привлечением кредитных средств банка

2.3. Верхний сегмент. Клиенты с высоким уровнем доходов

При работе с клиентами-физическими лицами любой банк неизбежно несет различного рода риски. Ниже приведена классификация банковскиех рисков при комплексном банковском обслуживании физических лиц по отношению к деятельности банка на внешние и внутренние, а также выделены основные факторы, влияющие на уровень рисков при комплексном банковском обслуживании физических лиц (табл. 4).


Таблица 4

Факторы, оказывающие влияние на уровень рисков при комплексном банковском обслуживании физических лиц

Факторы

ЭКОНОМИЧЕСКИЕ

Уровень и динамика инфляции

Уровень доходов населения

Уровень и динамика безработицы

Динамика и волатильность курса национальной валюты по отношению к мировым резервным валютам

Уровень и динамика международных резервов страны

Система налогообложения доходов физических лиц и доходов от операций с физическими лицами

Степень охвата населения банковскими услугами

ПОЛИТИЧЕСКИЕ

Геополитическое положение страны в мировой экономике

Принципы денежно – кредитной, бюджетной, социальной политики государства

Степень поддержки государством банковской системы и основных отраслей экономики

Наличие ограничений на валютные операции и трансграничное движение капитала

ПРАВОВЫЕ

Актуальность законодательной базы в области операций с физическими лицами текущим экономическим реалиям

Наличие институтов, призванных обеспечивать стабильность банковской системы в рамках операций с физическими лицами (система страхования вкладов, бюро кредитных историй)

Степень жесткости норм законодательства, связанных с противодействием легализации доходов, полученных преступным путем и финансированием терроризма

СОЦИАЛЬНЫЕ

Уровень финансовой грамотности населения

Степень дифференциации доходов населения

Степень склонности к потреблению / сбережению

Степень доверия населения к банковской системе страны

Степень доверия населения к национальной валюте

Степень доверия населения к правящей элите страны

В на стоящее время во многих банках получила широкое распространение система комплексного обслуживания. Под такой системой понимается совокупность элементов, находящаяся в отношениях и связях друг с другом на коммерческой основе, и обеспечивающая полное и / или частичное удовлетворение потребностей клиентов банка (физических лиц) в предоставлении банковских продуктов и услуг посредством единой информационной, нормативной и правовой системы.

На развитие системы комплексного банковского обслуживания физических лиц в Российской Федерации оказывают влияние факторы, которые в работе можно сгруппировать на внешние и внутренние (табл. 5);

Таблица 5

Факторы, оказывающее влияние на развитие системы комплексного банковского обслуживания физических лиц

Благоприятные

Неблагоприятные

Внутренние

􀂃накопление опыта комплексного банковского обслуживания физ. лиц

􀂃разработка и реализация новых банковских продуктов и услуг для физ. лиц

􀂃разработка современных методов управления рисками при комплексном обслуживании физ. лиц

􀂃возрастание интереса банков к новым банковским продуктам

􀂃высокие процентные ставки по банковским кредитам

􀂃недостаточно высокие процентные ставки по банковским депозитам

􀂃высокий уровень кредитных рисков

􀂃недостаточная развитость инфраструктуры рынка банковского обслуживания физ. лиц

􀂃низкий уровень информационной прозрачности рынка банковского обслуживания физ. лиц

􀂃дефицит квалифицированных специалистов

􀂃дефицит «длинных денег»

Внешние

􀂃создание системы страхования вкладов граждан

􀂃создание системы бюро кредитных историй

􀂃функционирование и развитие инфраструктуры рынка банковских кредитов

􀂃стабильность экономического развития

􀂃быстрота и адекватность реакции на изменение спроса на банковские услуги со стороны банков

􀂃высокая стоимость кредитных ресурсов

􀂃несовершенство системы нормативно-правового регулирования рынка банковского обслуживания физ. лиц

􀂃недостаточная развитость системы бюро кредитных историй

􀂃отсутствие возможности страхования кредитного риска

􀂃жесткие требования со стороны Центрального банка РФ по отношению к выполнению экономических нормативов

􀂃недостаточно высокий уровень развития банковской системы

􀂃высокие темпы инфляции

􀂃высокое значение ставки рефинансирования Центрального банка РФ

Мурманская область и Северо-Западный регион в целом обладают высоким уровнем экономического развития и соответственно, интересны кредитным организациям с точки зрения ведения банковского бизнеса и открытия филиалов в регионе;

  1.  банки, работающие на рынке банковских услуг для физических лиц могут быть разделены на три группы: петербургские банки, особенностью которых является то, что на данный регион приходится основной объем их бизнеса; московские банки, головной офис которых находится в Москве; филиалы дочерних банков нерезидентов;
  2.  банки, работающие на рынке банковских услуг для физических лиц в зависимости от количества оказываемых банковских услуг могут быть сгруппированы в отдельные группы: первая группа банков – банки, предоставляющие своим клиентам максимальный перечень банковских услуг; вторая группа банков – банки, ведущие более консервативную политику, чем банки первой группы; третья группа банков – банки, перечень услуг которых для физических лиц ограничен;

большинство банков, предоставляя широкий спектр банковских продуктов, способны осуществлять комплексное банковское обслуживание физических лиц, однако это сопровождается жесткой конкуренцией в области продвижения услуг, их ценовых условий, а также уровня качества предлагаемых услуг.

1.2

Показатели, характеризующие эффективность обслуживания физических лиц

В различных странах и даже у разных банков имеются значительные отличия в методике анализа: по набору приемов исследование, объектам анализа, удельному весу отдельных оценочных показателей.

Как бы ни были многообразны факторы, из которых складывается репутация отдельной личности, их можно сгруппировать по принципу принадлежности к определенной сфере деятельности человека:

а) социальной; б) профессиональной; в) имущественной; г) специальной банковской и др.

Рассмотрим несколько методик анализа кредитоспособности.

1 Методика расчета кредитоспособности через определение рейтинга заемщика, применяемая во Франции и Германии – «скоринг-формуляр».

«Скоринг-формуляр» немецкого банка состоит из 12 показателей, по каждому из которых клиенту начисляется большее или меньшее число баллов. Чем больше баллов в итоге наберет клиент, тем выше оценивается его кредитоспособность. Максимальный балл таблицы – 20. Первые 5 показателей относятся к финансовым возможностям клиентов.

Решение банк принимает следующим образом. При набранной заявителем сумме в 81 балл, сотрудник банка принимает положительное решение самостоятельно, при результате от 61 до 80 баллов требуется разрешение вышестоящего лица. При рейтинге ниже 60 баллов в выдаче ссуды клиенту отказывают [17, c. 123].

2 Методика анализа кредитоспособности, применяемая в США.

Методика была разработана в начале 40-х годов Д.Дюраном. Он выделил следующие коэффициенты при начислении баллов:

1.    Возраст: 0,1 балла за каждый год свыше 20 лет (максимум 0,3);

2.    Пол: женщина – 0,4 балла; мужчина – 0 баллов;

3.    Срок проживания: 0,042 балла за каждый год проживания в данной местности (максимум 0,42 балла);

4.    Профессия: 0,55 балла за профессию с низким риском; 0 – за профессию с высоким риском и 0,16 – для других профессий;

5.    Работа в отрасли: 0,21 балла – предприятия общественного пользования, государственные учреждения, банки и брокерские фирмы;

6.    Занятость: 0,059 балла за каждый год работы на данном предприятии (максимум 0,59 балла);

7-9. Финансовые показатели: 0,45 балла за наличие банковского счета; 0,35 – за владение недвижимостью; 0,19 – при наличии полиса страхования жизни.

Исходя из выше перечисленных коэффициентов, Д.Дюран определил границу выдачи ссуды заемщику, которая составила 1,25 балла. Заемщик, набравший более 1,25 балла, считается кредитоспособным; набравшим менее 1,25 балла – неплатежеспособным клиентом банка [17, c.125].

Американские банки сегодня разрабатывают различные подходы для анализа кредитоспособности индивидуальных заемщиков. Причем каждый банк разрабатывает собственную систему оценки кредитоспособности заемщика исходя из конкретных условий сделки, приоритетов в работе банка, его специализации.

В целом можно сказать, что использование балльных систем оценки кредитоспособности заемщиков в зарубежной практике кредитования индивидуальных заемщиков – это наиболее объективный и экономически обоснованный процесс принятия решений. Методы определения кредитоспособности ссудозаемщиков, основанные на бальной системе, получают все большее признание западных банков, которые не жалеют ни времени, ни денег на их разработку.

Перейдем к рассмотрению видов потребительского кредита, которые предоставляют банки в зарубежных странах. Это :

1.    кредит по текущему счету;

2.    учетный кредит;

3.    ломбардный кредит;

4.    ссуды на образование;

5.    ссуды с индивидуальными условиями;

6.    кредит с рассрочкой платежа;

7.    персональные ссуды.

Рассмотрим каждый вид потребительского кредита.

1.Кредит по текущему счету – его называют овердрафтом, формой краткосрочного кредита, предоставление которого осуществляется списанием средств по счету клиента банка (сверх остатка на счете), в результате чего образуется дебетовое сальдо.

В странах, где практикуется такой вид кредита, заключение договора между банком и клиентом на открытие активно-пассивного счета требует хорошего знания материальных условий клиента в течение 6 месяцев.

 Для открытия текущего счета клиент заполняет установленную форму (заявление) и направляет его в банк. Банковский работник анализирует информацию и дает заключение о платежеспособности клиента и целесообразности открытия ему текущего счета с возможностью овердрафта. На основании сделанного заключения об удовлетворительном финансовом положении клиента банк открывает текущий счет и зачисляет на него средства клиента.

Дальнейшая процедура о получении кредита клиентом по текущему счету происходит без согласия клиента и без дополнительного оформления документов на выдачу кредита. Клиент банка имеет возможность использовать кредиты в пределах лимита кредитования по собственному усмотрению. Как правило, кредит выдается в размере 4 – 6 ежемесячных регулярных доходов, т.е. лимит кредитования обычно устанавливается в этих пределах.

Такая форма кредитных услуг распространена в Великобритании, Германии, Канаде, США.

2.Учетный кредит.

Под учетным кредитом понимается кредит, предоставляемый банком предъявителю векселя, путем покупки векселя до наступления срока платежа за минусом дисконта, взимаемого банком при учете векселя.

Учетный кредит предоставляется заемщикам на основе договора об учетном кредите. Сумма и срок учетного кредита определяется предъявленным векселем.

Кредит по учету векселей предоставляется путем записи векселя в день покупки (стоимость векселя в день наступления срока платежа минус дисконт) в кредит текущего счета.

Погашение кредита происходит при наступлении срока платежа путем оплаты векселя лицом, обязанным уплатить по векселю. Если плательщик неплатежеспособен, предъявитель векселя или другие обязанные по векселю лица должны погасить кредит. Таким образом, кредитный риск в данном случае распределяется между несколькими лицами.

3.    Ломбардный кредит.

Под ломбардным кредитом понимается залог легко реализуемого имущества или прав. Такой залог составляет основу ломбардного кредита.

Обеспечением кредита служат драгоценные металлы и товары. Залог является обеспечение возвратности кредита, стоимость залога обычно превышает его сумму.

К важнейшим видам ломбардного кредита, предоставляемого индивидуальным заемщикам, относятся: ломбардный кредит под залог ценных бумаг; товаров;  драгоценных металлов и требований.

Форма ломбардного кредита под залог ценных бумаг, в зарубежной банковской практике, считается наиболее важной. В залог принимаются только ценные бумаги, котирующиеся на фондовой бирже. Ссуды под ценные бумаги предоставляются на условиях до востребования. Сумма кредита составляет от 50 до 90 % их курсовой стоимости.

В соответствии со степенью курсового риска и видом банка в зарубежных странах практикуются различные оценки стоимости залога ценных бумаг.

Обычно залоговая стоимость ценных бумаг колеблется в следующих пределах:

-       для закладных листов (ипотечных облигаций) не опускается ниже 90 % курса;

-       для долговых обязательств (документ, выдаваемый заемщиком кредитору при получении ссуды) с поручением оценивается до 80 % курсовой стоимости;

-       для других долговых обязательств – до 60 %;

-       для акций – от 50 до 70 % их курса [17, c. 142].

Критерием качества ценных бумаг с учетом приемлемости их залога служат возможность быстрой реализации и финансовое состояние выпускающей стороны. В этой связи наиболее высокий рейтинг качества имеют государственные ценные бумаги с быстрой оборачиваемостью.

4.    Ссуды на образование.

Одной из кредитных услуг, предоставляемых банками за рубежом, является ссуда на образование. Это долгосрочные ссуды с низким уровнем банковского процента. Их используют для оплаты обучения детей в школе, колледже, университете. Размер ссуды и другие условия предоставления таких ссуд в разных странах разные. Так в Великобритании минимальный размер ссуды составляет 1 тыс. фунтов стерлингов. Максимальный размер не устанавливается. Заемщику не необходимости получать всю ссуду единовременно. Он может получить средства в течение определенного периода времени – до 10 лет. Срок погашения ссуды может быть установлен в 30 лет, когда финансовое давление на семью ослабевает [17, c. 146].

В США в соответствии с принятым в 1965 г. законом «О высшем образовании» была учреждена Государственная программа гарантированной выдачи ссуд клиентам. Согласно закону заемщики не обязаны начинать погашение ссуды до получения высшего образования. Максимально разрешенной ставкой ссудного процента по этим ссудам были 8 %. Пределы максимальных размеров ежегодной ссуды старшекурсников составляют 2 500 долл. на одного студента и 5 000 долл. на одного выпускника [17, c.148].

5.    Ссуды с индивидуальными условиями.

Этот вид ссуд относительно новая кредитная услуга зарубежных банков, предоставляемая, в основном, для приобретения крупных покупок.

В Великобритании минимальный размер ссуды с индивидуальными условиями составляет 7 500 фунтов стерлингов, а максимальный размер не устанавливается. При выдачи такой ссуды кредитуется 100 % стоимости покупки. Срок погашения ссуды составляет 15 лет [17, c.152].

В США к таким ссудам можно отнести индивидуальные ссуды без обеспечения. Американские банки выдают такие ссуды только лицам, имеющим определенный годовой доход.   Например, крупнейший в США банк «Citicorp» может предоставить необеспеченный кредит в размере от 2 500 до 25 000 долл. на срок от 2-х лет и более только лицам с годовыми доходами от 15 000 долл., в ряде случаев от 20 000 долл.. Типичный же размер обеспеченного кредита, предоставляемого большинством банков, не превышает 2 500 долл., а срок его погашения – до 2-х лет [17, c.158].

6.    Кредит с рассрочкой платежа.

Это преимущественно среднесрочный кредит, служащий для финансирования покупок движимого имущества, в основном товаров длительного пользования.

            В банковской практике зарубежных стран различают три вида кредитов с рассрочкой платежа:

1.    при сделка типа «А» финансовое учреждение предоставляет кредит без посредничества торговой фурмы.

Суда возвращается непосредственно банку. Срок такого кредита составляет от 3 до 12 месяцев [17, c.162].

2.    при сделках типа «В» банк осуществляет финансовое обслуживание клиента в тесном сотрудничестве с торговой фирмой.

Заемщик (покупатель) при приобретении товара вносит только 20-30 % [17, c.163] его стоимости. Остаток покрывается кредитом, предоставляемым банком. Кредитное учреждение и торговая фирма заключают между собой генеральное соглашение о предоставлении кредита с рассрочкой платежа. Это соглашение включает обязательство банка переводить торговой фирме 80 % стоимости покупки. Внесенную клиентом сумму (20 %)  банк сохраняет в качестве обеспечения кредита. После поступления последней выплаты по кредиту он переводит в магазин обеспечение кредита, т.е. первоначальный взнос в 20 %.

3.    при сделках типа «С» используется вексель.

Покупатель вносит от 25 до 40 % [17, c.165] стоимости товара. На каждую равную долю кредита, которую должен погасить заемщик, выставляются векселя, имеющие соответствующие сроки. Их выставителем выступает банк. Он учитывает векселя, в пользу торговой фирмы без вычетов комиссионных платежей, т.к. купленный товар (обеспечение векселя) считается надежной гарантией возврата кредита.

7.    Персональные ссуды.

Зарубежные банки предоставляют персональные ссуды в форме необеспеченного кредита, либо возобновляемого кредита. Возобновляемый кредит позволяет клиенту пользоваться им в рамках заранее определенного размера. Основным преимуществом такого кредита для банка является низкие операционные издержки, связанные с его предоставлением.

Такую суду может получать любой клиент банка, имеющий твердый источник дохода (например, заработную плату). Персональные ссуды предоставляются без оформления кредитного договора. Общая сумма погашения складывается из суммы кредита, процентов за оформление ссуды и процентов за весь период кредита.

Основой предоставления ссуды служат подтверждение об источнике дохода (справка о заработной плате) и его уступка в пользу банка.

Данный вид кредита предоставляют банки Германии, Франции, США, определяя собственные условия выдачи.


1.3

Нормативно-правовые акты, регулирующие банковское обслуживание физических лиц

Банковское обслуживание физических лиц представляет собой комплекс различных финансовых услуг, оказываемых коммерческим банком физическим лицам. Таким образом, банковское обслуживание — это финансовые взаимоотношения кредитной организации и ее клиента — физического лица, имеющие соответствующую правовую основу, в рамках которых клиентом используется широкий спектр банковских продуктов и услуг, предоставляемых кредитной организацией, при взаимной заинтересованности обеих сторон в расширении перечня продуктов и объемов предоставляемых услуг.

 Так за последние годы (2009–2013 гг.) на российском рынке банковских услуг активно развивается потребительское и ипотечное кредитование, расширяется сфера применения банковских карт, возрастают объемы предоставляемых кредитных ресурсов и депозитов, совершенствуется система страхования банковских вкладов физических лиц. Именно поэтому создание системы комплексного банковского обслуживания физических лиц, адекватной современным условиям развития банковского сектора и финансовых рынков, является достаточно актуальной и перспективной.

За период 2002–2010 гг. по статистическим данным Центрального банка РФ объем потребительского кредитования вырос почти в 5,5 раз и составил 14,5% от общего объема банковского кредитования. Объемы розничных депозитов в банках за тот же период увеличились в 2,9 раза. Расширяется охват населения пластиковыми картами: если в первом квартале2001 г. на 100 человек было выпущено 5,2 карты, то в третьем квартале 2009 г.— 21,4.

  Таблица 6

Нормативно-правовая база, регулирующая эмиссию кредитными организациями банковских карт и осуществления расчетов по операциям, совершаемым с их использованием

Наименование нормативно-правового акта

Краткая характеристика

1

2

1. Федеральный закон от 02.12.1990 №395–I «О банках и банковской деятельности»

Статья 6. Деятельность кредитной организации на рынке ценных бумаг.

В соответствии с лицензией Банка России на осуществление банковских операций банк вправе осуществлять выпуск, покупку, продажу, учет, хранение и иные операции с ценными бумагами, выполняющими функции платежного документа, с ценными бумагами, подтверждающими привлечение денежных средств во вклады и на банковские счета, с иными ценными бумагами, осуществление операций с которыми не требует получения специальной лицензии в соответствии с федеральными законами, а также вправе осуществлять доверительное управление указанными ценными бумагами по договору с физическими и юридическими лицами.

3. Федеральный закон от 11.03.1997 №48–ФЗ «О переводном и простом векселе»

Статья 1. В соответствии с международными обязательствами Российской Федерации, вытекающими из ее участия в Конвенции от 7 июня 1930 года, устанавливающей Единообразный закон о переводном и простом векселях, установить, что на территории Российской Федерации применяется Постановление Центрального Исполнительного Комитета и Совета Народных Комиссаров СССР "О введении в действие Положения о переводном и простом векселе" от 7 августа 1937 г. N 104/1341


4. Федеральный закон от 22.04.1996 №39–ФЗ «О рынке ценных бумаг»

Федеральным законом регулируются отношения, возникающие при эмиссии и обращении эмиссионных ценных бумаг

5. Федеральный закон от 23.12.2003 №177–ФЗ «О страховании вкладов физических лиц в банках Российской Федерации»

Федеральный закон устанавливает правовые, финансовые и организационные основы функционирования системы обязательного страхования вкладов физических лиц в банках Российской Федерации

6. Федеральный закон от 26.12.1995 №208–ФЗ «Об акционерных обществах»

В IV главе рассматривается порядок размещения ценных бумаг, их конвертацию и приобретение.

                                                                                                     Окончание табл. 6

1

2

7. Постановление Правительства РФ от 24.09.2012 №968–П О внесении изменений в Генеральные условия эмиссии и обращения облигаций федеральных займов, утвержденные постановлением Правительства Российской Федерации от 15 мая 1995 г. N 458, и признании утратившими силу некоторых актов ПравительстваРФ

Владельцами облигаций федеральных займов могут быть российские и иностранные юридические и физические лица. Владелец облигаций федеральных займов имеет право на получение при их погашении основной суммы долга (номинальной стоимости), а также дохода, если это предусмотрено условиями выпуска, в виде процентов, начисляемых на номинальную стоимость облигаций.

8.Приказ ФСФР России от 04.07.2013 N 13-55/пз-н "Об утверждении Стандартов эмиссии ценных бумаг и регистрации проспектов ценных бумаг" (Зарегистрировано в Минюсте России 30.08.2013 N 29800)

Стандарты подробно регламентируют различные этапы процедуры эмиссии ценных бумаг, от принятия решения об их размещении до государственной регистрации отчета об итогах выпуска.


9. Приказ Федеральной службы по финансовым рынкам от 02.11.2006№ 06–125/пз-н «О минимальной стоимости имущества, составляющего паевой инвестиционный фонд, по достижении которой паевой инвестиционныйфонд является сформированным»

Установить, что содержащаяся в правилах доверительного управления паевым инвестиционным фондом стоимость имущества, составляющего паевой инвестиционный фонд, по достижении которой паевой инвестиционный фонд является сформированным, не может быть менее следующих сумм:

10 млн. рублей - для открытого паевого инвестиционного фонда;

15 млн. рублей - для интервального паевого инвестиционного фонда;

25 млн. рублей - для закрытого паевого инвестиционного фонда

10.Положение о правилах осуществления перевода денежных средств" (утв. Банком России 19.06.2012 N 383-П) (Зарегистрировано в Минюсте России 22.06.2012 N 24667)

Определяет порядок и формы безналичного перевода денежных средств

11. Указания ЦБР от 04.08.2003 №236–П «О порядке предоставления Банком России кредитным организациям кредитов, обеспеченных залогом (блокировкой) ценных бумаг»

Банк России предоставляет Банку кредиты, обеспеченные залогом (блокировкой) ценных бумаг, включенных в Ломбардный список

Не являются нормативными актами следующие акты Банка России: распорядительные акты; акты толкования нормативных актов Банка России и (или) иных нормативных правовых актов РФ в сфере компетенции Банка России, если он непосредственно уполномочен давать толкование указанным нормативно-правовым актам; акты, содержащие исключительно технические форматы и иные технические требования; иные акты, не отвечающие признакам нормативного акта Банка России, указанным в п. 1.2 Положения.

Положение дает классификацию нормативных актов Банка России (указания, положения, инструкции), а также устанавливает порядок их разработки, принятия, регистрации и опубликования. В соответствии с ним нормативные акты Банка России могут издаваться в форме:

· указания, если его содержанием является установление отдельных правил по вопросам, отнесенным к компетенции Банка России;

· положения, если его основным содержанием является установление системно связанных между собой правил по вопросам, отнесенным к компетенции Банка России;

· инструкции, если ее основным содержанием является определение порядка применения положений федеральных законов, иных нормативных правовых актов по вопросам компетенции Банка России (в том числе изданных им в форме его указаний и положений).

Нормативные акты Банка России вступают в силу со дня их опубликования в официальном издании Банка России - »Вестнике Банка России». Только в отношении нормативных актов Банка России, непосредственно затрагивающих права, свободы или обязанности граждан, действует правило о регистрации их в Министерстве юстиции РФ в порядке, установленном для регистрации актов федеральных министерств и ведомств. Число актов Банка России, регулирующих банковскую деятельность, в настоящее время приближается к 4 000. Количество действующих актов составляет 2 478, в том числе Положений Банка России - 152, Указаний Банка России - 369, и Инструкций Банка России - 39.

По вопросам контрольной и надзорной деятельности Банком России принято всего 1 552 нормативных акта, из них продолжают действовать 792, в том числе Положений Банка России - 109, Указаний Банка России - 33 и Инструкций Банка России - 125. Перечень основных нормативных актов Банка России регулирующих осуществление им контрольных и надзорных полномочий, приведен в библиографии, прилагаемой к настоящей работе. Наиболее важные акты указаны в главах 2 и 3 публикации.

Решения Конституционного Суда РФ (КС РФ) также являются источником регулирования банковской деятельности. Они издаются в письменной форме, имеют нормативное значение, рассчитаны на неоднократное применение. Постановление КС РФ по конкретному делу распространяется не только на участников конституционного спора, в связи с которым оно было принято, но и на неограниченный круг лиц.

Среди актов КС РФ, содержащих нормы, регулирующие банковскую деятельность, в качестве примера можно привести постановление КС РФ от 23 декабря 1997 года «По делу о проверке конституционности пункта 2 статьи 855 ГК РФ и части 6 статьи 15 Закона РФ «Об основах налоговой системы в Российской Федерации» в связи с запросом Президиума Верховного Суда РФ; а также Определение КС РФ от 14 декабря 2000 года по запросу Верховного Суда РФ о проверке конституционности части 3 статьи 75 Закона о Банке России.

В заключение следует отметить, что среди иных источников, регулирующих банковскую деятельность, следует также назвать правовые обычаи (банковскую практику), нормативные договоры (например, межгосударственные и межбанковские), а также локальные акты, принимаемые органами управления кредитных организаций по вопросам регулирования внутренних отношений в банках, порядка учета, хранения и использования ценностей, регистрации счетов, осуществления делопроизводства и т.п.

1.4

Зарубежный опыт обслуживания физических лиц

Хотя виды потребительских кредитов во Франции различны, они имеют ряд общих характеристик:

- их сумма не должна превышать 21,5 тыс. евро;

- они должны предоставляться на срок не менее 3 месяцев;

- их могут предоставлять банки, иные кредитные учреждения и крупные торговые сети.[23, С. 377].

Главными видами кредитов являются следующие:

1 Персональные кредиты, которые выдаются лицам, получающие доходы или имеющим значительные сбережения. Банки конкурируют между собой, предлагая кредиты под более низкие проценты, чем у других банков.

Например, один из банков в конце 2010 г. Предлагал кредиты по номинальной ставке в 3,9% годовых, исключая расходы на страхование и ведение досье. Между тем издержки составление и ведение досье составляют 50 евро при сумме кредита до 4,5 тыс. евро и 100 евро при более высокой сумме. С учетом этих расходов общая реальная ставка по кредитам на сумму до 4,5 тыс. евро составляла 6,34% и на сумму от 4,5 до 21,5 тыс. евро - 4.29%.

Обычно французы предпочитают получать персональные кредиты, сумма которых в 2010 г. достигла почти 50 млрд. евро, а их доля в общей сумме потребительских кредитов составила 46% [23, С. 377].

2 Целевые кредиты в отличие от персональных выдаются на определенные цели: приобретение нового автомобиля, оплата досуга (путешествий) и т.д. При этом цель и условия использования кредита четко зафиксированы в соответствующем контракте. Если контракт не соблюдается, то кредит автоматически аннулируется. В последнее время, по оценкам французских специалистов, доля банков в предоставлении таких кредитов уменьшается, их все чаще предоставляют фирмы, торгующие автомобилями или организующие досуг и путешествия.

3 Возобновляемые (револьверные) кредиты, этот вид кредитования появился во Франции с начала 1900-х годов и продолжает развиваться, несмотря на то, что процентные ставки по нему достигли 15-20%. Использование револьверного кредита, который восстанавливается после каждого погашения и может использоваться по усмотрению заемщика, может отрицательно воздействовать на его финансовое положение: в досье всех должников, внесенных в национальную картотеку неплательщиков, есть данные о получении ими револьверных кредитов.

4 Кредиты по картам, с помощью которых ведутся расчеты во многих крупных магазинах, являются разновидностью возобновляемых кредитов. Кредиты по таким картам предоставляются под более высокие проценты. Годовая оплата банковской карты у ведущих французских банков колеблется от 12,5 до 35 евро. Некоторые банки за первый год использования карты не взимают никакой платы, а у ряда кредитных учреждений карты являются бесплатными.

5 Беспроцентные кредиты, рекламу о которых запрещено размещать за пределами банка. Такой кредит предлагается покупателям нового или значительно обновленного жилья. При его предоставлении в расчет принимается уровень налогооблагаемого дохода заемщика в предшествующем году.

Быстро растет объем долгосрочных кредитов на приобретение жилья: в 2009-2010 гг. доля полученных населением займов на срок свыше 20 лет в общем объеме кредитов, выданных по фиксированным процентам, возросла с 6 до 26%. Получателями таких кредитов являются в основном молодые люди. Рекордным по числу сделок приобретения квартир на вторичном рынке стал 2010 г.: по оценкам, их число составило 620-640 тыс. Это во многом объясняет доступность кредитов на эти цели, номинальные процентные ставки по которым, как правило, не превышают 5% [23, С.370].

Что касается кредита на образование, в Германии опыт банковского кредитования студентов практически отсутствует. Поскольку молодые люди, получающие высшее образование, имеют, как правило, небольшие доходы и часто не могут дать надежных гарантий по кредиту, то многим здешним банкам кредитование студентов без поручительства государства кажется слишком рискованным.

Данные об уровне годовых процентных ставок (без учета расходов на страхование) по различным видам кредитов, предлагавшимся в указанный период французскими банками и иными кредитными учреждениями, представлены в таблице 7.

Таблица 7 Годовые процентные ставки по различным видам кредитов, в (%) [23,С. 379].

Банки и иные кредитные учреждения

Вид кредита

Револьверные

На покупку автомобиля

На досуг

Персональный

BNP Paribas

12,24- 21,25

6,04- 9,81

Нет

6,04- 9,81

BRED

10,75- 13,75

Нет

Нет

3,90

CCF

12,39- 15,39

6,2- 6,86

Нет

6,60-7,29

Cetelem

16,74

5,5

9,96

9,96

Cofidils

16,81- 19,78

8,21

Нет

5,85- 9,90

Credit agricole

11,74-16,32

4,15

6,65

Нет

Credit lyonnails

10,47- 16,74

Нет

Нет

4,63

EGG

4,9

Нет

Нет

7,9

Societe generale

10,43- 15,80

Нет

Нет

4,5

Sofinko

13,89

6,31- 9,96

Нет

6,25- 9,91

По классификации западных специалистов, скоринг бывает двух типов: 1) так называемый application (для оценки кредитоспособности аппликантов) применяется в том случае, когда нужно сразу исключить ненадежных заемщиков; 2) поведенческий, используемый для прогнозирования вероятности дефолта заемщика и потерь банка по этой причине. В первом случае скоринговая карта разбивается на три зоны: «белую», «черную» и «серую». И если с первыми двумя все ясно и решения по клиентам принимаются автоматически, то с «серой» зоной немного сложнее, поскольку здесь требуются дополнительные методы проверки клиентов и принятие по ним решений. Второй тип скоринга позволяет не только прогнозировать будущие дефолты, но и классифицировать «плохие долги». Рассмотрим использование скорингового метода на примерах немецкого и французского банков. Модель первого включает определение рейтинга клиента по следующим 12 показателям (см. Приложение В).

Правила принятия окончательного решения следующие: если претендент набирает 81 балл, то работник банка принимает положительное решение самостоятельно, если набрано от 61 до 80 баллов, то требуется решение вышестоящего менеджера. При рейтинге ниже 60 баллов кредит не будет выдан.

Другой подход в реализации скорингового метода оценки кредитоспособности физического лица применяет французский банк. Параметры его модели таковы.

При этом если потенциальный заемщик набрал в сумме более 510 баллов, то банк выдает ему кредит, если набрано 380 - 509 баллов, то дополнительно рассматриваются условия кредитования. При наборе менее 380 баллов заявителю будет отказано. Являясь достаточно технологичным, этот метод скоринга применяют в банках, реализующих крупные программы потребительского кредитования с использованием банковских карт.

Скоринговые модели обладают как преимуществами, так и недостатками. В числе их преимуществ можно отметить:

- быструю обработку кредитных заявок и оперативность принятие решений;

- снижение уровня операционных расходов банка на основе унификации процедур оценки заемщиков;

- отсутствие необходимости длительного обучения персонала.

Недостатком скоринговых схем оценки кредитоспособности физических лиц является следующие - большая вероятность ошибки при определении кредитоспособности потенциального заемщика.

В конце 2001 г. Во Франции был принят закон о неотложных мерах в области реформ экономического и финансового характера, который обязал банки публиковать данные о тарифах по каждой услуге, включенной в пакет, за 3 месяца до введения этого тарифа в действие. Однако получить сопоставимые данные о размере таких тарифов пока очень трудно. Клиенты часто используют всего половину услуг, включенных в их соглашение с банком, и не знают реальной стоимости этих услуг. Поэтому Французская ассоциация банковских клиентов выступает за то, что бы банки предоставляли детальные данные о своих тарифах и издержках, что позволит клиентам сравнивать их реальный уровень в различных банках, а банкам - конкурировать за клиентов.

За последние годы стратегия французских банков существенно изменилась, они стали брать плату практически за все свои операции, за исключением чекового обслуживания. В рассматриваемый период услуги французских банков были самыми дорогими в Западной Европе.

В последние годы во Франции также быстро развивается ипотечное кредитование населения. Ипотечные кредиты предоставляются, как правило, на 20 лет по фиксированным и переменным процентным ставкам. Предоставляя ипотечные кредиты, банки получают доход не только в форме процентов по этим кредитам, но и форме комиссионных по страховым контрактам на случай смерти и инвалидности клиента. Кроме того, помимо ипотечного кредита банк может предложить своему клиенту и другие услуги.

Можно сделать вывод, что банковский сектор Франции находится в процессе преобразований. Наиболее существенными из таких преобразований можно представить следующим образом:

1 Модернизация банковских филиалов;

2 Интеграция каналов сбыта;

3 Стратегия приближения к клиенту;

4 Адаптация сберегательных банков к современным условиям.

Рассмотрим подробнее.

В течение десятилетий европейские банки процветали, не заботясь о расширении предлагаемых розничных продуктов и услуг. Но эта самоуспокоенность стала быстро снижаться при вступлении розничного банковского рынка в стадию зрелости, снижении спроса потребителей и росте издержек на содержание морально и физически устаревших филиалов.

Первая задача исследования состояла в том, чтобы понять, как банки могут модернизировать филиалы и повысить качество обслуживания. Эксперты установили, что ключевую роль здесь играют 5 элементов качества:

1 персонал и менеджеры;

2 инновации и дизайн;

3 эффективность основных продуктов обслуживания;

4 интеграция каналов обслуживания;

5 системы и процедуры, используемые для изменения качества обслуживания.

Вторая задача исследования заключается в изучении взаимозависимости между качеством обслуживания и эффективностью бизнеса.

Интеграция каналов сбыта. Розничные банки давно обещают своим клиентам обеспечить многоканальный доступ к их счетам, но до сих пор такую возможность имеют только ограниченная группа обеспеченных людей.

В последнее время ситуация меняется. Во-первых, качество обслуживания снова вышло на первый план, поскольку исчезли «легкие» пути снижения затрат и стали сокращаться выгоды экономии на масштабе в результате внутристрановых слияний банков. Лидеры банковского бизнеса начали рассматривать степень удовлетворенности и лояльности потребителей как главную движущую силу своих будущих инвестиций.

Во-вторых, возросло осознание того, что более широкие и качественные контакты с потребителями преобразуются в более полное чувство удовлетворения потребителей и верность их своему банку.

В-третьих, появились новые телекоммуникационные технологии, которые дали возможность поддерживать более эффективные контакты с потребителями как в рамках одного канала сбыта, так и в рамках многоканального обслуживания.

Однако не все банки понимают критическое значение телекоммуникационных технологий. Одни только недавно освоили традиционные телефонные каналы облуживания; другие вложили средства в разные каналы и сети, стараясь при этом сохранять их независимость друг от друга.

Характерным примером стратегии приближения к клиенту является опыт Rabobank group (Нидерланды), крупнейшего в Европе Интернет-банка. В основе такого успеха - стратегия и маркетинговая концепция банка, именуемая Raboх (продажа в магазинах банковских Интернет-услуг в «упаковке», аналогично той, в которой продаются компьютерные игры), и обучение клиентов.

В современную эпоху глобализации присутствие финансовых учреждений на местных рынках и близость к потребителям приобретают все большее значение. Для стратегии Адаптации сберегательных банков к современным требованиям характерна следующая особенность - социальная ответственность за развитие местных сообществ.

Немецкие специалисты обратили внимание на проблемы, которые ставят перед банками демографические процессы, в частности интенсивное старение населения Германии. Отмечается, что в этих условиях банкам приходится разрабатывать новые продукты, искать оптимальные каналы сбыта своих услуг, применять новые методы маркетинга, а также разрабатывать перспективную кадровую политику.

Увеличение продолжительности жизни и снижение рождаемости в Германии ведут к некоторому снижению численности населения при одновременном значительном его старении. Это непосредственно влияет на отрасли, которые испытывают на себе положительное или отрицательное воздействие демографических изменений, в том числе на банковскую деятельность.

Банковская деятельность находится в особом положении в силу нематериальности банковских продуктов. Поэтому применительно к большинству финансовых продуктов отмеченные ранее соображения не имеют решающего значения. Есть, однако, и продукты, непосредственно отражающие рассматриваемые демографические тенденции. Например, договор ренты - пенсионер продает свою недвижимую собственность банку и получает от него пожизненное содержание. Такие финансовые продукты должны отличаться точным оформлением и четкой детализацией. В Великобритании и США этот вид продуктов уже достаточно развит и успешно функционирует, в Германии он пока не развит, клиенты к нему не готовы.

Другим подобным направлением может быть целенаправленное изменение структуры сбережений (инвестиций) пожилых людей, чтобы, к примеру, заблаговременно, до наступления пенсионного возраста, переключиться на более надежные (менее рискованные) продукты.

Наличие разнообразных финансовых продуктов для обеспечения в старости в свою очередь потребует от банков развития консультационных систем, которые бы обеспечивали отдельным клиентам выбор, соответствующий их потребностям. Результатом консультации должна быть конкретная рекомендация определенных продуктов.

Банки начинают предлагать продукты обеспечения в старости и корпоративным клиентам.

При этом следует по возможности точно предвидеть, чем именно в будущем (например, в 2020 г.) пожилые клиенты будут отличаться от нынешних.

Словом, каждый банк должен озаботиться разработкой специальной программы привлечения к себе на обслуживание людей старшего поколения.

Следовательно, кадровая стратегия банков должна быть заблаговременно сориентирована на неблагоприятные демографические изменения. Это может означать, что нужно, в частности: инновационно управлять здоровьем сотрудников и эффективным использованием рабочего времени; более активно вкладывать деньги в обучение собственных молодых кадров; прилагать усилия в целях увеличения притока квалифицированных специалистов, а для этого заботиться о привлекательности банка как работодателя; использовать возможность привлечения молодых кадров из стран Центральной и Восточной Европы.


ГЛАВА 2.

ОЦЕНКА ФИНАНСОВОГО СОСТОЯНИЯ БАНКА И ОРГАНИЗАЦИИ ОБСЛУЖИВАНИЯ ФИЗИЧЕСКИХ ЛИЦ В АКБ «МОСОБЛБАНК» ОАО

2.1

Общая характеристика деятельности  АКБ «Мособлбанк» (ОАО)

Акционерный коммерческий банк Московский областной банк открытое акционерное общество (Генеральная лицензия на осуществление банковских операций № 1751 от 17.09.2012 года) создан в 1992 году и успешно работает на рынке более 20 лет. АКБ МОСОБЛБАНК ОАО официально аккредитован при Государственной корпорации «Агентство по страхованию вкладов». АКБ МОСОБЛБАНК ОАО входит в Ассоциацию региональных банков «Россия», Ассоциацию Российских банков и Ассоциацию банков Северо-Запада, является членом Московской Международной Валютной Ассоциации (ММВА), Торгово-промышленной палаты Российской Федерации и Национального платежного совета. 

Сегодня в 66 регионах России успешно работают около 600 структурных подразделений МОСОБЛБАНКа, расположенных в 300 городах и городских поселениях. Открыты филиалы в Ростове-на-Дону, Самаре, Астрахани, Архангельске, Нижнем Новгороде, Омске, Тюмени, Якутске, Грозном, Кемерово, Владивостоке. Подразделения Банка есть в каждом федеральном округе России, почти в каждом районе Московской области и каждом административном округе Москвы. Продолжается открытие подразделений во Владимирской, Тверской, Ростовской, Астраханской, Архангельской и других областях России. 

1 сентября 2010 года МОСОБЛБАНК был принят в систему страхования вкладов (ССВ № 883) и на протяжении нескольких лет удерживает высокие показатели по привлечению вкладов физических лиц. 

Банк предоставляет полный спектр банковских услуг высокого качества, как для физических, так и для юридических лиц. Частным клиентам предложен большой выбор депозитных программ, разнообразные формы денежных переводов, обслуживание банковских карт международных платежных систем. Придерживаясь политики поддержки социально незащищенных слоев населения и понимая сложность текущей экономической ситуации, в банке были отменены все комиссии за проведение социально значимых платежей и социальной ипотеки. 

Банк располагает около 1 тыс. банкоматов, более 700 платежных терминалов и почти 4 тыс. POS-терминалов. В МОСОБЛБАНКе действует собственный процессинговый центр, Банк является принципиальным членом международной платежной системы MasterCard и ассоциированным членом международной платежной системы Visa, что позволяет эмитировать собственные банковские карты и обслуживать транзакции, как по собственным банковским картам, так и по банковским картам, выпущенным сторонними банками. 

Корпоративную клиентуру привлекает качественное обслуживание текущих и расчетных счетов, а также возможность эффективного размещения свободных ресурсов. Кредитная политика банка позволяет его клиентам развивать свой бизнес и создавать новые рабочие места в регионах. 

Задача МОСОБЛБАНКа в любой точке его присутствия состоит в развитии экономики этого региона – будь то город, поселок, село или районный центр. Поддержка малого и среднего бизнеса в регионах, поддержка местных администраций и предприятий жилищно-коммунального хозяйства – приоритеты Банка в области банковского бизнеса.

В МОСОБЛБАНКе по всей стране работают около 8 тыс. человек. 

Акционерами Банка являются: 

– 97,94% - ОАО «РФК»; 

– 2,06% - миноритарные акционеры АКБ МОСОБЛБАНК ОАО (из них физические лица в количестве более 36 500 чел.). 

Миссия Банка. Удобность, надежность и доступность для населения, содействие развитию малого и среднего предпринимательства, солидность и высококлассность Банка-партнера для корпоративных клиентов, обеспечение стабильности финансового состояния и высокая эффективность проводимых операций.

Стратегия развития Банка основана на идеи построения многофилиальной кредитной организации с четкой специализацией бизнеса. Приоритетным направлением деятельности является расчетно-кассовое обслуживание юридических и физических лиц, предоставление им наиболее расширенного спектра банковских услуг, построение полноценного сетевого Банка. В рамках данного документа определены позиции АКБ МОСОБЛБАНК ОАО на настоящий момент, рассмотрены ключевые макроэкономические тенденции и факторы внешней среды, способные оказать влияние на дальнейшее развитие Банка, а также определены миссия, стратегические цели и задачи на ближайшие годы.

Основные стратегические цели Банка

  1.  Открытие сети отделений и филиалов в российских регионах, превращение Банка в многофилиальное финансовое учреждение.
  2.  Сохранение заметного присутствия в сегменте корпоративных клиентов.
  3.  Укрепление позиций в области банковского обслуживания физических лиц.
  4.  Активное развитие сотрудничества с финансовыми институтами и ипотечными системами.
  5.  Формирование диверсифицированной и устойчивой ресурсной базы.
  6.  Существенное увеличение капитализации Банка.
  7.  Внедрение международных стандартов банковской деятельности.

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

Конечным итогом должно стать создание современного технологичного Банка, который будет обладать разветвленной сетью точек обслуживания, оказывать высококлассные услуги клиентам и пользоваться серьезным авторитетом на рынке.

Для реализации стратегии поставлены следующие задачи:

  1.  повышение роли пассивов, привлекаемых от юридических и физических лиц, в формировании устойчивой ресурсной базы;
  2.  привлечение средств российских кредитных организаций в целях диверсификации ресурсной базы;
  3.  привлечение стратегического партнера;
  4.  мобилизация внутренних источников.

Для решения поставленных задач планируется:

  1.  проведение комплекса мероприятий, направленных на существенное увеличение точек обслуживания как в Московском регионе, так и в других городах России;
  2.  развитие линеек конкурентоспособных банковских продуктов;
  3.  внедрение и постоянное совершенствование прогрессивных банковских технологий;
  4.  организация системного управления качеством услуг, оказываемых Банком;
  5.  развитие операций с малым бизнесом, обеспечение полноты спектра услуг, оказываемых субъектам малого предпринимательства;
  6.  обеспечение прироста ресурсной базы.

Для реализации стратегии Банк уже осуществил ряд шагов:

открыто около 600 структурных подразделений по всей России, из них:

  1.  116 структурных подразделения в Москве;
  2.  130 структурных подразделений в Подмосковье;
  3.  26 филиалов в регионах;
  4.  1 представительство за рубежом. 

Структура Банка ориентирована на выполнение поставленных целей и имеет ярко выраженную региональную направленность. Взаимодействуя с администрациями ряда областей и регионов, где действуют или планируется открытие новых филиалов и представительств, владельцы и менеджеры приступили к активной реструктуризации и расширению бизнеса кредитной организации.

Участие банка в высокодоходных на сегодняшний день проектно-строительных программах даёт выгодно и с минимальными рисками разместить средства клиентов. Подлинное развитие банковского дела начинается с того момента, когда к функциям хранения средств прибавляется совершение кредитных операций. Таким образом, привлечение средств населения и свободных ресурсов предприятий, их перераспределение через кредитные программы нашего Банка, дают возможность развития предприятий и удовлетворения насущных потребностей населения в денежных средствах.

Среди предложенных МОСОБЛБАНКом депозитных продуктов для физических лиц – срочные вклады. Отличительная особенность линейки вкладов Банка – это простота условий, высокая процентная ставка, возможность досрочного изъятия средств с частичным сохранением процентов, выплата процентов на карту или наличными.

Дополнительный офис  АКБ «Мособлбанк»  по адресу Чувашская Республика, г. Чебоксары, ул. Комсомола, д. 34/8.

Филиал № 19 АКБ МОСОБЛБАНК ОАО в г. Чебоксары начал свою работу по обслуживанию Клиентов 22 декабря 2011 г. Филиал № 19 МОСОБЛБАНКа предлагает комплекс качественных банковских услуг для физических лиц: оплата всех видов платежей (в т.ч. коммунальных), денежные переводы, размещение денежных средств во вклады (свидетельство страхования вкладов № 883), валютно-обменные операции, кредитные продукты (в т.ч. ипотечное кредитование, автокредитование, потребительское кредитование). 

Филиал оказывает комплексное обслуживание юридических лиц, а именно расчетно-кассовое обслуживание, размещение сводных денежных средств в депозиты и векселя МОСОБЛБАНКа, все виды кредитования юридических лиц, представление услуг факторингового финансирования, банковские карты и зарплатные проекты. 

Рис. 1 Структура активов Мособлбанк

Рис. 2 Динамика объемов выданных Мособлбанк

кредитов (на начало года)

Рис. 3 Структура пассивов Мособлбанк

Рис.4 Структура доходов и расходов Мособлбанк  по источникам образования

Филиал № 19 АКБ МОСОБЛБАНК ОАО придерживается гибкой политики в отношении каждого клиента и готов предложить оптимальное решение по взаимовыгодному партнерству. 

Органами управления Банка являются:

  1.  Общее собрание акционеров Банка.

Высшим органом управления Банка является Общее собрание акционеров Банка. Банк ежегодно проводит годовое Общее собрание акционеров Банка. В случае если все голосующие акции Банка принадлежат одному акционеру, решения по вопросам, относящимся К компетенции Общего собрания акционеров Банка, принимаются этим акционером единолично и оформляются письменно.

  1.  Совет директоров Банка.

Совет директоров Банка осуществляет общее руководство деятельностью Банка, за исключением решения вопросов, отнесенных к компетенции Общего собрания акционеров Банка.

  1.  коллегиальный исполнительный орган - Правление Банка.

Правление Банка является постоянно действующим коллегиальным исполнительным органом, члены которого назначаются на неопределенный срок, и действует на основании Устава и Положения о Правлении, утверждаемого Общим собранием акционеров Банка.

  1.  единоличный исполнительный орган - Председатель Правления Банка.

Оперативное руководство деятельностью Банка осуществляет Председатель Правления Банка, который является единоличным исполнительным органом, избирается на должность большинством голосов членов Совета директоров Банка на неопределенный срок до его переизбрания по решению Совета директоров Банка. Председателем Правления Банка может быть избран акционер (представитель акционера) Банка, либо любое другое лицо, обладающее, по мнению большинства членов Совета директоров Банка, необходимыми профессиональными качествами и опытом. (рис 5.)

Общее собрание акционеров банка

Совет директоров Банка

Правление банка

Председатель Правления

Ревизионная комиссия

Служба внутреннего контроля

Отделы и департаменты банка

Рис.5. Организационно-правовая структура ОАО «Мособлбанк»

Надзор за Филиалом осуществляет Национальный банк Чувашской Республики Центрального Банка Российской Федерации. 

2.2

Анализ финансового состояния АКБ «Мособлбанк» ОАО

Важнейшими источниками общего обзора результатов деятельности банка являются данные бухгалтерской и статистической отчетности.
Экспресс-анализ предполагает быструю оценку организации(банка) на основе некоторой унифицированной системы показателей и достаточно нетрудоемкой методики, которая включает следующие оценки и характеристики.

Необходимо дать общую характеристику ОАО Мособлбанк  охарактеризовать его по виду собственности, типу и объему производства, отраслевой специализации, мощности, численности персонала, общему финансовому результату деятельности.

Оценка ликвидности предприятия – анализ возможности для предприятия покрыть все его финансовые обязательства.

Расчет коэффициентов ликвидности приведен в таблице 8.

Таблица 8

Показатели ликвидности Мособлбанк  по состоянию на 31 декабря  2011-2013 гг.

Показатели

На 31.12.10 г.

На 31.12.11 г.

На 31.12.12 г.

Изменение (+,-)

Темп изменения, %

2012/
2011

2013/
2012

2012/
2011

2013/
2012

1.Денежные средства, тыс.руб.

9

35

305

26

270

В 4 раза

В 9 раз

2.Краткосрочные финансовые вложения

38

31

31

-7

0

81,58

100,00

3. Дебиторская задолженность, тыс. руб.

2882

273

3154

-2609

2881

9,47

В 11 раз

4.Оборотные активы, тыс. руб.

17771

23174

39102

5403

15928

130,40

168,73

5.Краткосрочные обязательства, тыс. руб.

12771

16056

17550

3285

1494

125,72

109,30

6.Коэффициент абсолютной ликвидности

0,004

0,004

0,019

-

0,015

111,69

В 5 раз

7.Коэффициент срочной ликвидности

0,23

0,02

0,20

-0,21

0,18

8,47

В 10 раз

8.Коэффициент текущей ликвидности

1,39

1,44

2,23

0,05

0,78

103,72

154,37

Коэффициент абсолютной ликвидности равен отношению денежных средств и финансовых вложений к краткосрочным обязательствам, его оптимальное значение 0,1 - 0,7 показывает, какая часть текущей краткосрочной задолженности организация может погасить в ближайшее время за счет денежных средств и приравненных к ним краткосрочных финансовых вложений.2

Проанализировав таблицу 1 можно заметить, что по коэффициенту абсолютной ликвидности наблюдается достаточно большой разброс в значение. При этом предприятие в 2011 и 2012 году могло обеспечить 0,4 % своих срочных обязательств, в 2013 году происходит увеличение на 1,5 %, и составляет 1,9 %, это увеличение обусловлено значительным увеличением суммы денежных средств в 9 раз.

Коэффициент срочной ликвидности, равный отношению ликвидных средств первого и второго класса к задолженности, отражает прогнозируемые платежные возможности предприятия при условии своевременного проведения расчетов с дебиторами. Оптимальное значение коэффициента считается равным 0,7-0,8. Коэффициент срочной ликвидности показывает, какая часть краткосрочных обязательств организации может быть немедленно погашена за счет денежных средств, ценных бумаг и дебиторской задолженности. 3

Коэффициент срочной ликвидности, как показывает таблица, за все анализируемые периоды не соответствовал нормативному значению. Это показывает, что при привлечении дебиторской задолженности предприятие не полностью покрывало свою задолженность.

Database error in antiplagiat.ru:

Invalid SQL: 1284

SELECT varname, value, datatype FROM setting;

MySQL Error   : MySQL server has gone away

Error Number  : 2006

Script        : http://antiplagiat.ru

Referrer      : http://www.antiplagiat.ru/Cabinet/Cabinet.aspx?folderId=33483538346

IP Address    : 127.0.0.1

Username      : an_User

Classname     : vap_Database

MySQL Version :

Database Error: Unable to connect to the database:Could not connect to MySQL

Error 1018: Неправильный синтаксис около "%.*ls". Если имелась в виду часть табличной подсказки, то для этого теперь необходимо использовать ключевое слово A WITH и круглые скобки. Правильный синтаксис см. в электронной документации по SQL Server.

Database Error: Unable to connect to the database:Could not connect to database

SQL Server Error 1019: Недопустимый список столбцов после имени объекта в инструкции GRANT/REVOKE.

MySQL Error : Illegal mix of collations (cp1251_bin,IMPLICIT) and (latin1_bin,IMPLICIT) for operation '='

Error Number : 1267

Code errors:

Include php errors  require('includes/application_top.php');

if (!tep_session_is_registered('customer_id')) { $navigation->set_snapshot();

tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));

require(DIR_WS_LANGUAGES. $language. '/'. FILENAME_ACCOUNT);

$breadcrumb->add(NAVBAR_TITLE, tep_href_link(FILENAME_ACCOUNT, '', 'SSL'));?><html <?php echo HTML_PARAMS; ?>><head> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>"><title><?php echo TITLE; ?></title> <base href="<?php echo (($request_type == 'SSL') ? HTTPS_SERVER: HTTP_SERVER). DIR_WS_CATALOG; ?>">

<link rel="stylesheet" type="text/css" href="stylesheet.css"> <script language="javascript"><!function rowOverEffect(object) { if (object.className == 'moduleRow') object.className = 'moduleRowOver';

} function rowOutEffect(object) { if (object.className == 'moduleRowOver') object.className = 'moduleRow';//--></script> </head> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0"> <!-- header //--> <?php require(DIR_WS_INCLUDES. 'header.php'); ?>

<!-- header_eof //--> <!-- body //--> <table border="0" width="100%" cellspacing="3" cellpadding="3"> <tr> <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2"> <!-- left_navigation //--> <?php require(DIR_WS_INCLUDES. 'column_left.php'); ?>

<!-- left_navigation_eof //--> </table></td> <!-- body_text //--> <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td class="pageHeading"><?php echo HEADING_TITLE; ?></td> <td class="pageHeading" align="right"><?php echo tep_image(DIR_WS_IMAGES. 'table_background_account.gif', HEADING_TITLE, HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td> </tr> </table></td> </tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td> <?php if ($messageStack->size('account') > 0) { <td><?php echo $messageStack->output('account'); ?></td> if (tep_count_customer_orders() > 0) { <td><table border="0" cellspacing="0" cellpadding="2"> <td class="main"><b><?php echo OVERVIEW_TITLE; ?></b></td> <td class="main"><?php echo '<a href="'. tep_href_link(FILENAME_ACCOUNT_HISTORY, '', 'SSL'). '"><u>'. OVERVIEW_SHOW_ALL_ORDERS. '</u></a>'; ?></td> <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox"> <tr class="infoBoxContents"> <td><table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr> <td class="main" align="center" valign="top" width="130"><?php echo '<b>'. OVERVIEW_PREVIOUS_ORDERS. '</b><br>'. tep_image(DIR_WS_IMAGES. 'arrow_south_east.gif'); ?></td> <td><table border="0" width="100%" cellspacing="0" cellpadding="2"> $orders_query = tep_db_query("select o.orders_id, o.date_purchased, o.delivery_name, o.delivery_country, o.billing_name, o.billing_country, ot.text as order_total, s.orders_status_name from ". TABLE_ORDERS. " o, ". TABLE_ORDERS_TOTAL. " ot, ". TABLE_ORDERS_STATUS. " s where o.customers_id = '". (int)$customer_id. "' and o.orders_id = ot.orders_id and ot.class = 'ot_total' and o.orders_status = s.orders_status_id and s.language_id = '". (int)$languages_id. "' and s.public_flag = '1' order by orders_id desc limit 3");

while ($orders = tep_db_fetch_array($orders_query)) { if (tep_not_null($orders['delivery_name'])) { $order_name = $orders['delivery_name'];

$order_country = $orders['delivery_country'];

} else { $order_name = $orders['billing_name'];

$order_country = $orders['billing_country'];

<tr class="moduleRow" onMouseOver="rowOverEffect(this)" onMouseOut="rowOutEffect(this)" onClick="document.location.href='<?php echo tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id='. $orders['orders_id'], 'SSL'); ?>'">

<td class="main" width="80"><?php echo tep_date_short($orders['date_purchased']); ?></td> <td class="main"><?php echo '#'. $orders['orders_id']; ?></td> <td class="main"><?php echo tep_output_string_protected($order_name). ', '. $order_country; ?></td> <td class="main"><?php echo $orders['orders_status_name']; ?></td> <td class="main" align="right"><?php echo $orders['order_total']; ?></td> <td class="main" align="right"><?php echo '<a href="'. tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id='. $orders['orders_id'], 'SSL'). '">'. tep_image_button('small_view.gif', SMALL_IMAGE_BUTTON_VIEW). '</a>'; ?></td> </tr> </table></td> <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> </tr> </table></td> <td><table border="0" width="100%" cellspacing="0" cellpadding="2"> <td class="main"><b><?php echo MY_ACCOUNT_TITLE; ?></b></td> <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> <td width="60"><?php echo tep_image(DIR_WS_IMAGES. 'account_personal.gif'); ?></td> <tr> <td class="main"><?php echo tep_image(DIR_WS_IMAGES. 'arrow_green.gif'). ' <a href="'. tep_href_link(FILENAME_ACCOUNT_EDIT, '', 'SSL'). '">'. MY_ACCOUNT_INFORMATION. '</a>'; ?></td> <td class="main"><?php echo tep_image(DIR_WS_IMAGES. 'arrow_green.gif'). ' <a href="'. tep_href_link(FILENAME_ADDRESS_BOOK, '', 'SSL'). '">'. MY_ACCOUNT_ADDRESS_BOOK. '</a>'; ?></td> <td class="main"><?php echo tep_image(DIR_WS_IMAGES. 'arrow_green.gif'). ' <a href="'. tep_href_link(FILENAME_ACCOUNT_PASSWORD, '', 'SSL'). '">'. MY_ACCOUNT_PASSWORD. '</a>'; ?></td> <td width="10" align="right"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> <td class="main"><b><?php echo MY_ORDERS_TITLE; ?></b></td> <td width="60"><?php echo tep_image(DIR_WS_IMAGES. 'account_orders.gif'); ?></td> <td class="main"><?php echo tep_image(DIR_WS_IMAGES. 'arrow_green.gif'). ' <a href="'. tep_href_link(FILENAME_ACCOUNT_HISTORY, '', 'SSL'). '">'. MY_ORDERS_VIEW. '</a>'; ?></td> <td class="main"><b><?php echo EMAIL_NOTIFICATIONS_TITLE; ?></b></td> <td width="60"><?php echo tep_image(DIR_WS_IMAGES. 'account_notifications.gif'); ?></td> <td class="main"><?php echo tep_image(DIR_WS_IMAGES. 'arrow_green.gif'). ' <a href="'. tep_href_link(FILENAME_ACCOUNT_NEWSLETTERS, '', 'SSL'). '">'. EMAIL_NOTIFICATIONS_NEWSLETTERS. '</a>'; ?></td> <td class="main"><?php echo tep_image(DIR_WS_IMAGES. 'arrow_green.gif'). ' <a href="'. tep_href_link(FILENAME_ACCOUNT_NOTIFICATIONS, '', 'SSL'). '">'. EMAIL_NOTIFICATIONS_PRODUCTS. '</a>'; ?></td> <!-- body_text_eof //--> <!-- right_navigation //--> <?php require(DIR_WS_INCLUDES. 'column_right.php'); ?><!-- right_navigation_eof //--> </tr> </table> <!-- body_eof //--> <!-- footer //--> <?php require(DIR_WS_INCLUDES. 'footer.php'); ?>

$type = (isset($HTTP_GET_VARS['type']) ? $HTTP_GET_VARS['type']: '');

$banner_extension = tep_banner_image_extension();// check if the graphs directory exists $dir_ok = false;if (function_exists('imagecreate') && tep_not_null($banner_extension)) { if (is_dir(DIR_WS_IMAGES. 'graphs')) { if (is_writeable(DIR_WS_IMAGES. 'graphs')) { $dir_ok = true;

$messageStack->add(ERROR_GRAPHS_DIRECTORY_NOT_WRITEABLE, 'error');

} else { $messageStack->add(ERROR_GRAPHS_DIRECTORY_DOES_NOT_EXIST, 'error');

$banner_query = tep_db_query("select banners_title from ". TABLE_BANNERS. " where banners_id = '". (int)$HTTP_GET_VARS['bID']. "'");

$banner = tep_db_fetch_array($banner_query);$years_array = array();

$years_query = tep_db_query("select distinct year(banners_history_date) as banner_year from ". TABLE_BANNERS_HISTORY. " where banners_id = '". (int)$HTTP_GET_VARS['bID']. "'");

while ($years = tep_db_fetch_array($years_query)) { $years_array[] = array('id' => $years['banner_year'], 'text' => $years['banner_year']);

$months_array = array();for ($i=1; $i<13; $i++) { $months_array[] = array('id' => $i, 'text' => strftime('%B', mktime(0,0,0,$i)));

$type_array = array(array('id' => 'daily', 'text' => STATISTICS_TYPE_DAILY), array('id' => 'monthly', 'text' => STATISTICS_TYPE_MONTHLY), array('id' => 'yearly', 'text' => STATISTICS_TYPE_YEARLY));

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <link rel="stylesheet" type="text/css" href="includes/stylesheet.css"> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF"> <table border="0" width="100%" cellspacing="2" cellpadding="2"> <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft"> <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2"> <td width="100%"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr><?php echo tep_draw_form('year', FILENAME_BANNER_STATISTICS, '', 'get'); ?>

<td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', '1', HEADING_IMAGE_HEIGHT); ?></td> <td class="main" align="right"><?php echo TITLE_TYPE. ' '. tep_draw_pull_down_menu('type', $type_array, (tep_not_null($type) ? $type: 'daily'), 'onChange="this.form.submit();"'); ?><noscript><input type="submit" value="GO"></noscript><br> switch ($type) { case 'yearly': break;case 'monthly':

echo TITLE_YEAR. ' '. tep_draw_pull_down_menu('year', $years_array, (isset($HTTP_GET_VARS['year']) ? $HTTP_GET_VARS['year']: date('Y')), 'onChange="this.form.submit();"'). '<noscript><input type="submit" value="GO"></noscript>';

break;default:case 'daily':echo TITLE_MONTH. ' '. tep_draw_pull_down_menu('month', $months_array, (isset($HTTP_GET_VARS['month']) ? $HTTP_GET_VARS['month']: date('n')), 'onChange="this.form.submit();"'). '<noscript><input type="submit" value="GO"></noscript><br>'. TITLE_YEAR. ' '. tep_draw_pull_down_menu('year', $years_array, (isset($HTTP_GET_VARS['year']) ? $HTTP_GET_VARS['year']: date('Y')), 'onChange="this.form.submit();"'). '<noscript><input type="submit" value="GO"></noscript>';

</td> <?php echo tep_draw_hidden_field('page', $HTTP_GET_VARS['page']). tep_draw_hidden_field('bID', $HTTP_GET_VARS['bID']). tep_hide_session_id(); ?></form></tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> <td align="center"> if (function_exists('imagecreate') && ($dir_ok == true) && tep_not_null($banner_extension)) { $banner_id = (int)$HTTP_GET_VARS['bID'];

switch ($type) { case 'yearly':

include(DIR_WS_INCLUDES. 'graphs/banner_yearly.php');

echo tep_image(DIR_WS_IMAGES. 'graphs/banner_yearly-'. $banner_id. '.'. $banner_extension);

break;

case 'monthly':include(DIR_WS_INCLUDES. 'graphs/banner_monthly.php');

echo tep_image(DIR_WS_IMAGES. 'graphs/banner_monthly-'. $banner_id. '.'. $banner_extension);

default:case 'daily':include(DIR_WS_INCLUDES. 'graphs/banner_daily.php');

echo tep_image(DIR_WS_IMAGES. 'graphs/banner_daily-'. $banner_id. '.'. $banner_extension);

<table border="0" width="600" cellspacing="0" cellpadding="2"> <tr class="dataTableHeadingRow"> <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_SOURCE; ?></td> <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_VIEWS; ?></td> <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_CLICKS; ?></td> </tr> for ($i=0, $n=sizeof($stats); $i<$n; $i++) { echo ' <tr class="dataTableRow">'. "\n".

' <td class="dataTableContent">'. $stats[$i][0]. '</td>'. "\n".

' <td class="dataTableContent" align="right">'. number_format($stats[$i][1]). '</td>'. "\n".

' <td class="dataTableContent" align="right">'. number_format($stats[$i][2]). '</td>'. "\n".

' </tr>'. "\n";</table> } else { include(DIR_WS_FUNCTIONS. 'html_graphs.php');

echo tep_banner_graph_yearly($HTTP_GET_VARS['bID']);echo tep_banner_graph_monthly($HTTP_GET_VARS['bID']);echo tep_banner_graph_daily($HTTP_GET_VARS['bID']);

</td> <td class="main" align="right"><?php echo '<a href="'. tep_href_link(FILENAME_BANNER_MANAGER, 'page='. $HTTP_GET_VARS['page']. '&bID='. $HTTP_GET_VARS['bID']). '">'. tep_image_button('button_back.gif', IMAGE_BACK). '</a>'; ?></td> $action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action']: '');

if (tep_not_null($action)) { switch ($action) { case 'save':$configuration_value = tep_db_prepare_input($HTTP_POST_VARS['configuration_value']);

$cID = tep_db_prepare_input($HTTP_GET_VARS['cID']);

tep_db_query("update ". TABLE_CONFIGURATION. " set configuration_value = '". tep_db_input($configuration_value). "', last_modified = now() where configuration_id = '". (int)$cID. "'");

tep_redirect(tep_href_link(FILENAME_CONFIGURATION, 'gID='. $HTTP_GET_VARS['gID']. '&cID='. $cID));

$gID = (isset($HTTP_GET_VARS['gID'])) ? $HTTP_GET_VARS['gID']: 1;

$cfg_group_query = tep_db_query("select configuration_group_title from ". TABLE_CONFIGURATION_GROUP. " where configuration_group_id = '". (int)$gID. "'");

$cfg_group = tep_db_fetch_array($cfg_group_query);

<script language="javascript" src="includes/general.js"></script> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF" onload="SetFocus();">

<td class="pageHeading"><?php echo $cfg_group['configuration_group_title']; ?></td> <td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td> <td valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr class="dataTableHeadingRow"> <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_CONFIGURATION_TITLE; ?></td> <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_CONFIGURATION_VALUE; ?></td> <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_ACTION; ?>&nbsp;</td> $configuration_query = tep_db_query("select configuration_id, configuration_title, configuration_value, use_function from ". TABLE_CONFIGURATION. " where configuration_group_id = '". (int)$gID. "' order by sort_order");

while ($configuration = tep_db_fetch_array($configuration_query)) { if (tep_not_null($configuration['use_function'])) { $use_function = $configuration['use_function'];

if (ereg('->', $use_function)) { $class_method = explode('->', $use_function);

if (!is_object(${$class_method[0]})) { include(DIR_WS_CLASSES. $class_method[0]. '.php');

${$class_method[0]} = new $class_method[0]();

$cfgValue = tep_call_function($class_method[1], $configuration['configuration_value'], ${$class_method[0]});

$cfgValue = tep_call_function($use_function, $configuration['configuration_value']);

$cfgValue = $configuration['configuration_value'];

if ((!isset($HTTP_GET_VARS['cID']) || (isset($HTTP_GET_VARS['cID']) && ($HTTP_GET_VARS['cID'] == $configuration['configuration_id']))) && !isset($cInfo) && (substr($action, 0, 3) != 'new')) { $cfg_extra_query = tep_db_query("select configuration_key, configuration_description, date_added, last_modified, use_function, set_function from ". TABLE_CONFIGURATION. " where configuration_id = '". (int)$configuration['configuration_id']. "'");

$cfg_extra = tep_db_fetch_array($cfg_extra_query);$cInfo_array = array_merge($configuration, $cfg_extra);$cInfo = new objectInfo($cInfo_array);

if ( (isset($cInfo) && is_object($cInfo)) && ($configuration['configuration_id'] == $cInfo->configuration_id) ) { echo ' <tr id="defaultSelected" class="dataTableRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\''. tep_href_link(FILENAME_CONFIGURATION, 'gID='. $HTTP_GET_VARS['gID']. '&cID='. $cInfo->configuration_id. '&action=edit'). '\'">'. "\n";

echo ' <tr class="dataTableRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\''. tep_href_link(FILENAME_CONFIGURATION, 'gID='. $HTTP_GET_VARS['gID']. '&cID='. $configuration['configuration_id']). '\'">'. "\n";

<td class="dataTableContent"><?php echo $configuration['configuration_title']; ?></td> <td class="dataTableContent"><?php echo htmlspecialchars($cfgValue); ?></td> <td class="dataTableContent" align="right"><?php if ( (isset($cInfo) && is_object($cInfo)) && ($configuration['configuration_id'] == $cInfo->configuration_id) ) { echo tep_image(DIR_WS_IMAGES. 'icon_arrow_right.gif', ''); } else { echo '<a href="'. tep_href_link(FILENAME_CONFIGURATION, 'gID='. $HTTP_GET_VARS['gID']. '&cID='. $configuration['configuration_id']). '">'. tep_image(DIR_WS_IMAGES. 'icon_info.gif', IMAGE_ICON_INFO). '</a>'; } ?>&nbsp;</td> $heading = array();

$contents = array();switch ($action) { case 'edit':$heading[] = array('text' => '<b>'. $cInfo->configuration_title. '</b>');

if ($cInfo->set_function) { eval('$value_field = '. $cInfo->set_function. '"'. htmlspecialchars($cInfo->configuration_value). '");');

$value_field = tep_draw_input_field('configuration_value', $cInfo->configuration_value);

$contents = array('form' => tep_draw_form('configuration', FILENAME_CONFIGURATION, 'gID='. $HTTP_GET_VARS['gID']. '&cID='. $cInfo->configuration_id. '&action=save'));

$contents[] = array('text' => TEXT_INFO_EDIT_INTRO);$contents[] = array('text' => '<br><b>'. $cInfo->configuration_title. '</b><br>'. $cInfo->configuration_description. '<br>'. $value_field);

$contents[] = array('align' => 'center', 'text' => '<br>'. tep_image_submit('button_update.gif', IMAGE_UPDATE). '&nbsp;<a href="'. tep_href_link(FILENAME_CONFIGURATION, 'gID='. $HTTP_GET_VARS['gID']. '&cID='. $cInfo->configuration_id). '">'. tep_image_button('button_cancel.gif', IMAGE_CANCEL). '</a>');if (isset($cInfo) && is_object($cInfo)) { $heading[] = array('text' => '<b>'. $cInfo->configuration_title. '</b>');$contents[] = array('align' => 'center', 'text' => '<a href="'. tep_href_link(FILENAME_CONFIGURATION, 'gID='. $HTTP_GET_VARS['gID']. '&cID='. $cInfo->configuration_id. '&action=edit'). '">'. tep_image_button('button_edit.gif', IMAGE_EDIT). '</a>');

$contents[] = array('text' => '<br>'. $cInfo->configuration_description);

$contents[] = array('text' => '<br>'. TEXT_INFO_DATE_ADDED. ' '. tep_date_short($cInfo->date_added));

if (tep_not_null($cInfo->last_modified)) $contents[] = array('text' => TEXT_INFO_LAST_MODIFIED. ' '. tep_date_short($cInfo->last_modified));

case 'insert':$tax_zone_id = tep_db_prepare_input($HTTP_POST_VARS['tax_zone_id']);

$tax_class_id = tep_db_prepare_input($HTTP_POST_VARS['tax_class_id']);

$tax_rate = tep_db_prepare_input($HTTP_POST_VARS['tax_rate']);

$tax_description = tep_db_prepare_input($HTTP_POST_VARS['tax_description']);

$tax_priority = tep_db_prepare_input($HTTP_POST_VARS['tax_priority']);

tep_db_query("insert into ". TABLE_TAX_RATES. " (tax_zone_id, tax_class_id, tax_rate, tax_description, tax_priority, date_added) values ('". (int)$tax_zone_id. "', '". (int)$tax_class_id. "', '". tep_db_input($tax_rate). "', '". tep_db_input($tax_description). "', '". tep_db_input($tax_priority). "', now())");tep_redirect(tep_href_link(FILENAME_TAX_RATES));

$tax_rates_id = tep_db_prepare_input($HTTP_GET_VARS['tID']);

tep_db_query("update ". TABLE_TAX_RATES. " set tax_rates_id = '". (int)$tax_rates_id. "', tax_zone_id = '". (int)$tax_zone_id. "', tax_class_id = '". (int)$tax_class_id. "', tax_rate = '". tep_db_input($tax_rate). "', tax_description = '". tep_db_input($tax_description). "', tax_priority = '". tep_db_input($tax_priority). "', last_modified = now() where tax_rates_id = '". (int)$tax_rates_id. "'");

tep_redirect(tep_href_link(FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']. '&tID='. $tax_rates_id));case 'deleteconfirm':tep_db_query("delete from ". TABLE_TAX_RATES. " where tax_rates_id = '". (int)$tax_rates_id. "'");

tep_redirect(tep_href_link(FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']));

<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_TAX_RATE_PRIORITY; ?></td> <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_TAX_CLASS_TITLE; ?></td> <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_ZONE; ?></td> <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_TAX_RATE; ?></td> $rates_query_raw = "select r.tax_rates_id, z.geo_zone_id, z.geo_zone_name, tc.tax_class_title, tc.tax_class_id, r.tax_priority, r.tax_rate, r.tax_description, r.date_added, r.last_modified from ". TABLE_TAX_CLASS. " tc, ". TABLE_TAX_RATES. " r left join ". TABLE_GEO_ZONES. " z on r.tax_zone_id = z.geo_zone_id where r.tax_class_id = tc.tax_class_id";

$rates_split = new splitPageResults($HTTP_GET_VARS['page'], MAX_DISPLAY_SEARCH_RESULTS, $rates_query_raw, $rates_query_numrows);$rates_query = tep_db_query($rates_query_raw);

while ($rates = tep_db_fetch_array($rates_query)) { if ((!isset($HTTP_GET_VARS['tID']) || (isset($HTTP_GET_VARS['tID']) && ($HTTP_GET_VARS['tID'] == $rates['tax_rates_id']))) && !isset($trInfo) && (substr($action, 0, 3) != 'new')) { $trInfo = new objectInfo($rates);

if (isset($trInfo) && is_object($trInfo) && ($rates['tax_rates_id'] == $trInfo->tax_rates_id)) { echo ' <tr id="defaultSelected" class="dataTableRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\''. tep_href_link(FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']. '&tID='. $trInfo->tax_rates_id. '&action=edit'). '\'">'. "\n";

echo ' <tr class="dataTableRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\''. tep_href_link(FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']. '&tID='. $rates['tax_rates_id']). '\'">'. "\n";

<td class="dataTableContent"><?php echo $rates['tax_priority']; ?></td> <td class="dataTableContent"><?php echo $rates['tax_class_title']; ?></td> <td class="dataTableContent"><?php echo $rates['geo_zone_name']; ?></td> <td class="dataTableContent"><?php echo tep_display_tax_value($rates['tax_rate']); ?>%</td> <td class="dataTableContent" align="right"><?php if (isset($trInfo) && is_object($trInfo) && ($rates['tax_rates_id'] == $trInfo->tax_rates_id)) { echo tep_image(DIR_WS_IMAGES. 'icon_arrow_right.gif', ''); } else { echo '<a href="'. tep_href_link(FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']. '&tID='. $rates['tax_rates_id']). '">'. tep_image(DIR_WS_IMAGES. 'icon_info.gif', IMAGE_ICON_INFO). '</a>'; } ?>&nbsp;</td> <td colspan="5"><table border="0" width="100%" cellspacing="0" cellpadding="2"> <td class="smallText" valign="top"><?php echo $rates_split->display_count($rates_query_numrows, MAX_DISPLAY_SEARCH_RESULTS, $HTTP_GET_VARS['page'], TEXT_DISPLAY_NUMBER_OF_TAX_RATES); ?></td> <td class="smallText" align="right"><?php echo $rates_split->display_links($rates_query_numrows, MAX_DISPLAY_SEARCH_RESULTS, MAX_DISPLAY_PAGE_LINKS, $HTTP_GET_VARS['page']); ?></td> if (empty($action)) { <td colspan="5" align="right"><?php echo '<a href="'. tep_href_link(FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']. '&action=new'). '">'. tep_image_button('button_new_tax_rate.gif', IMAGE_NEW_TAX_RATE). '</a>'; ?></td> case 'new':

$heading[] = array('text' => '<b>'. TEXT_INFO_HEADING_NEW_TAX_RATE. '</b>');

$contents = array('form' => tep_draw_form('rates', FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']. '&action=insert'));$contents[] = array('text' => TEXT_INFO_INSERT_INTRO);

$contents[] = array('text' => '<br>'. TEXT_INFO_CLASS_TITLE. '<br>'. tep_tax_classes_pull_down('name="tax_class_id" style="font-size:10px"'));

$contents[] = array('text' => '<br>'. TEXT_INFO_ZONE_NAME. '<br>'. ep_geo_zones_pull_down('name="tax_zone_id" style="font-size:10px"'));$contents[] = array('text' => '<br>'. TEXT_INFO_TAX_RATE. '<br>'. tep_draw_input_field('tax_rate'));

$contents[] = array('text' => '<br>'. TEXT_INFO_RATE_DESCRIPTION. '<br>'. tep_draw_input_field('tax_description'));$contents[] = array('text' => '<br>'. TEXT_INFO_TAX_RATE_PRIORITY. '<br>'. tep_draw_input_field('tax_priority'));

$contents[] = array('align' => 'center', 'text' => '<br>'. tep_image_submit('button_insert.gif', IMAGE_INSERT). '&nbsp;<a href="'. tep_href_link(FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']). '">'. tep_image_button('button_cancel.gif', IMAGE_CANCEL). '</a>');

$heading[] = array('text' => '<b>'. TEXT_INFO_HEADING_EDIT_TAX_RATE. '</b>');

$contents = array('form' => tep_draw_form('rates', FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']. '&tID='. $trInfo->tax_rates_id. '&action=save'));

$contents[] = array('text' => '<br>'. TEXT_INFO_CLASS_TITLE. '<br>'. tep_tax_classes_pull_down('name="tax_class_id" style="font-size:10px"', $trInfo->tax_class_id));

$contents[] = array('text' => '<br>'. TEXT_INFO_ZONE_NAME. '<br>'. tep_geo_zones_pull_down('name="tax_zone_id" style="font-size:10px"', $trInfo->geo_zone_id));

$contents[] = array('text' => '<br>'. TEXT_INFO_TAX_RATE. '<br>'. tep_draw_input_field('tax_rate', $trInfo->tax_rate));$contents[] = array('text' => '<br>'. TEXT_INFO_RATE_DESCRIPTION. '<br>'. tep_draw_input_field('tax_description', $trInfo->tax_description));

$contents[] = array('text' => '<br>'. TEXT_INFO_TAX_RATE_PRIORITY. '<br>'. tep_draw_input_field('tax_priority', $trInfo->tax_priority));

$contents[] = array('align' => 'center', 'text' => '<br>'. tep_image_submit('button_update.gif', IMAGE_UPDATE). '&nbsp;<a href="'. tep_href_link(FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']. '&tID='. $trInfo->tax_rates_id). '">'. tep_image_button('button_cancel.gif', IMAGE_CANCEL). '</a>');case 'delete':

$heading[] = array('text' => '<b>'. TEXT_INFO_HEADING_DELETE_TAX_RATE. '</b>');

$contents = array('form' => tep_draw_form('rates', FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']. '&tID='. $trInfo->tax_rates_id. '&action=deleteconfirm'));

$contents[] = array('text' => TEXT_INFO_DELETE_INTRO);$contents[] = array('text' => '<br><b>'. $trInfo->tax_class_title. ' '. number_format($trInfo->tax_rate, TAX_DECIMAL_PLACES). '%</b>');

$contents[] = array('align' => 'center', 'text' => '<br>'. tep_image_submit('button_delete.gif', IMAGE_DELETE). '&nbsp;<a href="'. tep_href_link(FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']. '&tID='. $trInfo->tax_rates_id). '">'. tep_image_button('button_cancel.gif', IMAGE_CANCEL). '</a>');

if (is_object($trInfo)) { $heading[] = array('text' => '<b>'. $trInfo->tax_class_title. '</b>');

$contents[] = array('align' => 'center', 'text' => '<a href="'. tep_href_link(FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']. '&tID='. $trInfo->tax_rates_id. '&action=edit'). '">'. tep_image_button('button_edit.gif', IMAGE_EDIT). '</a> <a href="'. tep_href_link(FILENAME_TAX_RATES, 'page='. $HTTP_GET_VARS['page']. '&tID='. $trInfo->tax_rates_id. '&action=delete'). '">'. tep_image_button('button_delete.gif', IMAGE_DELETE). '</a>');

$contents[] = array('text' => '<br>'. TEXT_INFO_DATE_ADDED. ' '. tep_date_short($trInfo->date_added));

$contents[] = array('text' => ''. TEXT_INFO_LAST_MODIFIED. ' '. tep_date_short($trInfo->last_modified));

$contents[] = array('text' => '<br>'. TEXT_INFO_RATE_DESCRIPTION. '<br>'. $trInfo->tax_description);

define('OSC_CATALOG_SESSION_ID', 'osCsid');function tep_create_random_value($length, $type = 'mixed') { if ( ($type != 'mixed') && ($type != 'chars') && ($type != 'digits')) return false;

$rand_value = '';while (strlen($rand_value) < $length) { if ($type == 'digits') { $char = tep_rand(0,9);

$char = chr(tep_rand(0,255));if ($type == 'mixed') { if (eregi('^[a-z0-9]$', $char)) $rand_value.= $char;

} elseif ($type == 'chars') { if (eregi('^[a-z]$', $char)) $rand_value.= $char;

} elseif ($type == 'digits') { if (ereg('^[0-9]$', $char)) $rand_value.= $char;

return $rand_value;// Module already installed if (defined('MODULE_PAYMENT_SOFORTUEBERWEISUNG_DIRECT_STATUS') && (MODULE_PAYMENT_SOFORTUEBERWEISUNG_DIRECT_STATUS == 'True')) { die('Modul bereits installiert<br><a href="'. tep_href_link(FILENAME_MODULES, 'set=payment&module=sofortueberweisung_direct', 'SSL'). '">zurьck zum ShopAdmin</a>');

$parameter = array();$parameter['install'] = 'sofortueberweisung_direct';

$parameter['action'] = 'install';$parameter['input_passwort'] = tep_create_random_value(12);

$parameter['bna_passwort'] = tep_create_random_value(12);$parameter['cnt_passwort'] = tep_create_random_value(12);$get_parameter = '';$x = 0;while(list($key,$value) = each($parameter)) { if (empty($value)) continue;

if ($x > 0) $get_parameter.= "&";$get_parameter.= $key. "=". urlencode($value);

$x++;$backlink = tep_href_link('ext/modules/payment/sofortueberweisung/install.php', $get_parameter);$html_abortlink = tep_catalog_href_link('checkout_payment.php', 'payment_error=sofortueberweisung_direct&'. OSC_CATALOG_SESSION_ID. '=-KUNDEN_VAR_2-','SSL', false, false);$header_redir_url = tep_catalog_href_link('checkout_process.php', OSC_CATALOG_SESSION_ID. '=-KUNDEN_VAR_2-&sovar3=-KUNDEN_VAR_3-&sovar4=-KUNDEN_VAR_3_MD5_PASS-&betrag_integer=-BETRAG_INTEGER-','SSL', false, false);

$alert_http_url = ep_catalog_href_link('ext/modules/payment/sofortueberweisung/callback.php','','SSL', false, false);

if (isset($HTTP_GET_VARS['action']) && ($HTTP_GET_VARS['action'] == 'install')) { $file_extension = substr($PHP_SELF, strrpos($PHP_SELF, '.'));$class = 'sofortueberweisung_direct';

if (file_exists(DIR_FS_CATALOG_MODULES. 'payment/sofortueberweisung_direct'. $file_extension)) { include(DIR_FS_CATALOG_MODULES. 'payment/sofortueberweisung_direct'. $file_extension);

$module = new $class;$module->install();tep_redirect(tep_href_link(FILENAME_MODULES, 'set=payment&module=sofortueberweisung_direct', 'SSL'));<html> <link rel="stylesheet" type="text/css" href="https://www.sofortueberweisung.de/cms/modul/style.css"> <script type="text/javascript"> function init() {  if(false) {   document.getElementById('table1').style.display = '';

 document.getElementById('table2').style.display = '';   document.getElementById('table3').style.display = '';   document.getElementById('table4').style.display = '';ocument.getElementById('table5').style.display = '';  document.getElementById('table6').style.display = '';function toggleTableById(id) { if(document.getElementById(id).style.display == 'none')  document.getElementById(id).style.display = ''; else   document.getElementById(id).style.display = 'none';function giveValue(value,name0, name1, name2, name3, name4) {  if(name0 != '') document.getElementsByName(name0)[0].value = value;

if(name1 != '') document.getElementsByName(name1)[0].value = value; if(name2 != '') document.getElementsByName(name2)[0].value = value; if(name3 != '') ocument.getElementsByName(name3)[0].value = value; if(name4 != '') document.getElementsByName(name4)[0].value = value;function checkChar(string, validChars) { for (var pos = 0; pos < string.length; pos++) { if (validChars.indexOf(string.charAt(pos)) == -1) { return false;

return true;function submitForm() {  var is_error=false;

var wert, wert1, wert2; wert = document.getElementById('sammel_input_project_name').value;

if(!is_error) if(wert == '') {alert('Bitte Projektnamen eintragen'); is_error=true;}  wert = document.getElementById('sammel_input_name').value;

if(!is_error) if(wert == '') {alert('Bitte Namen eintragen'); is_error=true;}  wert = document.getElementById('sammel_input_firma').value;

if(!is_error) if(wert == '') {alert('Bitte Firma eintragen'); is_error=true;}  wert = document.getElementById('sammel_input_strasse').value;

if(!is_error) if(wert == '') {alert('Bitte Strasse eintragen'); is_error=true;}  wert = document.getElementById('sammel_input_plz').value;

if(!is_error) if(!checkChar(wert,'0123456789') || wert == '' || (wert.length!=5 && wert.length!=4)) {alert('PLZ muss aus 4 oder 5 Ziffern bestehen'); is_error=true;}  wert = document.getElementById('sammel_input_ort').value;

if(!is_error) if(wert == '') {alert('Bitte Ort eintragen'); is_error=true;}  wert = document.getElementById('sammel_input_land').value;

if(!is_error) if(wert == '') {alert('Bitte Land eintragen'); is_error=true;}  wert = document.getElementById('sammel_input_konto_inhaber').value;

if(!is_error) if(wert == '') {alert('Bitte Kontoinhaber eintragen'); is_error=true;}  wert = document.getElementById('sammel_input_kontonummer').value;

if(!is_error) if(!checkChar(wert,'0123456789') || wert == '') {alert('Kontonummer darf nur aus Ziffern bestehen'); is_error=true;}  wert = document.getElementById('sammel_input_blz').value;

if(!is_error) if(!checkChar(wert,'0123456789') || wert == '' || wert.length!=8) {alert('BLZ muss aus 8 Ziffern bestehen'); is_error=true;}  wert = document.getElementById('sammel_input_bank').value;

if(!is_error) if(wert == '') {alert('Bitte Bankname eintragen'); is_error=true;}  wert = document.getElementById('sammel_input_homepage').value;

if(!is_error) if(wert == '') {alert('Bitte Homepage eintragen'); is_error=true;}  wert = document.getElementById('sammel_input_email').value;

if(!is_error) if(wert == '') {alert('Bitte Email-Adresse eintragen'); is_error=true;}  //if(!is_error) if(document.getElementById('sammel_input_ustid').value == '' && document.getElementById('sammel_input_steuernummer').value == '') {alert('Bitte alle Pflichtfelder ausfьllen'); is_error=true;}  wert1 = document.getElementById('sammel_input_telefon').value;

wert2 = document.getElementById('sammel_input_mobil').value;

if(!is_error) if(wert1 == '' && wert2 == '') {alert('Es muss mindestens ein telefonischer Kontakt angegeben sein'); is_error=true;} // adjust Backlink document.getElementsByName('user[backlink]')[0].value += '&konto_inhaber=' + escape(document.getElementById('sammel_input_konto_inhaber').value);

document.getElementsByName('user[backlink]')[0].value += '&konto_nr=' + escape(document.getElementById('sammel_input_kontonummer').value);

document.getElementsByName('user[backlink]')[0].value += '&konto_blz=' + escape(document.getElementById('sammel_input_blz').value);

document.getElementsByName('user[backlink]')[0].value += '&konto_bank=' + escape(document.getElementById('sammel_input_bank').value);

if(!is_error) document.getElementById('form').submit();

</script> <style> input {Font-family:tahoma,arial,verdana; font-size:11px; color:#666666; background-color:#FFFFFF; border:1px solid #808080;} select {Font-family:tahoma,arial,verdana; font-size:11px; color:#666666; background-color:#FFFFFF; border:1px solid #808080;} </style> <body background="https://www.sofortueberweisung.de/cms/design/kachel.gif" leftmargin="0" topmargin="5" marginwidth="0" marginheight="0" onload="javascript:init()"> <form method="post" action="https://www.sofort-ueberweisung.de/createnew.php" id="form"> <table align="center" width="970" height="205" border="0" cellpadding="0" cellspacing="0"> <td> <img src="https://www.sofortueberweisung.de/grafik/head_image.gif" /> </td>   <img src="https://www.sofortueberweisung.de/cms/p.gif" width=5 height=5 alt="" border=0 vspace=0 hspace=0>  </td> <table align="center" width="970" border="0" cellpadding="0" cellspacing="0">   <tr>    <td><img src="https://www.sofortueberweisung.de/cms/design/content_01.gif" width="190" height="10" alt="" border=0 vspace=0 hspace=0></td>    <td><img src="https://www.sofortueberweisung.de/cms/design/content_02.gif" width="212" height="10" alt="" border=0 vspace=0 hspace=0></td>    <td align="right"><img src="https://www.sofortueberweisung.de/cms/design/content_03.gif" width="568" height="10" alt="" border=0 vspace=0 hspace=0></td>   </tr>   </table> <td bgcolor="white">  <table width="100%" border="0">   <tr>   <td width="50%"> <table border="0" cellpadding="2" cellspacing="0" style="padding-left: 20px;">

 <tr><td>Projektname*</td><td><input id="sammel_input_project_name" size="40" type="text" value="<?php echo STORE_NAME; ?>" onkeyup="javascript:giveValue(this.value,'project[projekt_name]', '', '', '', '')"></td></tr>   <tr><td>Projektbeschreibung</td><td><input size="40" type="text" onkeyup="javascript:giveValue(this.value,'project[projekt_beschreibung]', '', '', '', '' )"></td></tr> <tr><td colspan="2"><hr /></td></tr>   <tr><td>Anrede</td><td><input size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[r_anrede]','user[anspr_anrede]','project[anrede]', '', '')"></td></tr>   <tr><td>Name*</td><td><input id="sammel_input_name" value="<?php echo STORE_OWNER; ?>" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[r_name]','user[anspr_name]','project[name]', '', '')">   <tr><td>Firma*</td><td><input id="sammel_input_firma" size="40" type="text" value="<?php echo STORE_NAME; ?>" onkeyup="javascript:giveValue(this.value,'user[firma]','user[r_firma]','project[firma]', '', '')"></td></tr>   <tr><td>Rechtsform</td><td>     <select onchange="javascript:giveValue(this.value,'user[rechtsform]', '', '', '', '')">      <option value="">Bitte auswдhlen...</option>      <option value="AG" >AG</option>  <option value="AG & Co. OHG" >AG & Co. OHG</option>     <option value="ARGE" >ARGE</option> <option value="e.G." >e.G.</option>      <option value="e.K." >e.K.</option>      <option value="e.V." >e.V.</option>      <option value="GbR" >GbR</option>      <option value="GmbH" >GmbH</option>      <option value="GmbH & Co. KG" >GmbH & Co. KG</option>      <option value="GmbH & Co. OHG" >GmbH & Co. OHG</option>      <option value="KG" >KG</option>      <option value="KGaA" >KGaA</option>      <option value="OHG" >OHG</option>      <option value="Selbststдndig" >Selbststдndig</option>      <option value="VvAG" >VvAG</option>      <option value="Sonstige" >Sonstige</option>     </select>   <tr><td>Strasse*</td><td><input id="sammel_input_strasse" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[strasse]','user[r_strasse]','project[strasse]', '', '')"></td></tr>   <tr><td>PLZ*</td><td><input maxlength="5" id="sammel_input_plz" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[plz]','user[r_plz]','project[plz]', '', '')"></td></tr>   <tr><td>Ort*</td><td><input id="sammel_input_ort" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[ort]','user[r_ort]','project[ort]', '', '')"></td></tr>   <tr><td>Land*</td><td><input id="sammel_input_land" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[land]','user[r_land]','project[land]', '', '')"></td></tr>   <tr><td>Telefon+</td><td><input id="sammel_input_telefon" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[telefon]','user[anspr_fon]','project[telefon]', '', '')"></td></tr>   <tr><td>Mobil+</td><td><input id="sammel_input_mobil" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[anspr_mobil]', '', '', '', '')"></td></tr>   <tr><td>Telefax</td><td><input size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[anspr_fax]','project[telefax]','user[telefax]', '', '')"></td></tr> <tr><td colspan="2"><hr /></td></tr>     <tr><td colspan="2"><b>Konto auf welches die Zahlungseingдnge gutgeschrieben werden:</b></td></tr>   <tr><td>Konto Inhaber*</td><td><input id="sammel_input_konto_inhaber" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[elv_konto_inhaber]', 'project[an_konto_inhaber]', '', '', '')"></td></tr>   <tr><td>Kontonummer*</td><td><input maxlength="15" id="sammel_input_kontonummer" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[elv_konto_nr]', 'project[an_konto_nr]', '', '', '')"></td></tr>   <tr><td>Bankleitzahl*</td><td><input maxlength="8" id="sammel_input_blz" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[elv_konto_blz]', 'project[an_konto_blz]', '', '', '')"></td></tr>   <tr><td>Name der Bank*</td><td><input id="sammel_input_bank" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[elv_konto_bank]', 'project[an_konto_bank]', '', '', '')"></td></tr> <tr><td colspan="2"><b>Hiermit beauftrage ich Sie, die fдlligen <a href="https://www.sofortueberweisung.de/cms/index.php?plink=tarife&l=1&fs=" target="_blank">Betrдge</a> per Lastschrift von meinem Konto einzuziehen.</b></td></tr>   <tr><td>Ustid</td><td><input id="sammel_input_ustid" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[ustid]', '', '', '', '')"></td></tr>   <tr><td>Steuernr</td><td><input id="sammel_input_steuernummer" size="40" type="text" onkeyup="javascript:giveValue(this.value,'user[steuernr]', '', '', '', '')"></td></tr>   <tr><td>Homepage*</td><td><input id="sammel_input_homepage" size="40" type="text" value="<?php echo tep_catalog_href_link();?>" onkeyup="javascript:giveValue(this.value,'project[homepage]','user[homepage]', '', '', '')"></td></tr>   <tr><td>Email*</td><td><input id="sammel_input_email" size="40" type="text" value="<?php echo STORE_OWNER_EMAIL_ADDRESS; ?>" onkeyup="javascript:giveValue(this.value,'user[r_email]','user[anspr_email]','project[email]','user[email]','alert[alert_email_adresse]')"></td></tr>     <tr><td>Email-Benachrichtigungen bei Zahlungseingдngen aktivieren:</td>     <td><input type="radio" name="sammel_input_email_flag" value="1" CHECKED onfocus="javascript:giveValue(this.value,'alert[alert_email_status]', '', '', '', '')"> Ja <input type="radio" name="sammel_input_email_flag" value="0" onfocus="javascript:giveValue(this.value,'alert[alert_email_status]', '', '', '', '')"> Nein</td>     </tr>   <tr>   <td colspan="2">   <input type="button" name="Absenden" value="Absenden" onclick="javascript:submitForm()"><br><b>Nach der Registrierung des Projekts bei Sofortьberweisung, unbedingt dem Link zurьck zum Shop folgen!</b>    </td>   </tr>   </table>   </td>   <td valign="top" align="left"> <table border="0" cellspacing="0">    <tr><td><a href="#" onclick="javascript:toggleTableById('table2')"><u>Alternative Rechnungsanschrift</u></a></td></tr>    <tr><td>    <table border="0" cellspacing="0" id="table2" style="display:none"> <tr><td>Anrede</td><td><input size="40" type="text" name="user[r_anrede]" value=""></td></tr> <tr><td>Firma</td><td><input size="40" type="text" name="user[r_firma]" value="<?php echo STORE_NAME; ?>"></td></tr> <tr><td>Name</td><td><input size="40" type="text" name="user[r_name]" value=""></td></tr> <tr><td>Strasse</td><td><input size="40" type="text" name="user[r_strasse]" value=""></td></tr> <tr><td>Plz</td><td><input size="40" type="text" name="user[r_plz]" value=""></td></tr> <tr><td>Ort</td><td><input size="40" type="text" name="user[r_ort]" value=""></td></tr> <tr><td>Land</td><td><input size="40" type="text" name="user[r_land]" value=""></td></tr> <tr><td>Email</td><td><input size="40" type="text" name="user[r_email]" value="<?php echo STORE_OWNER_EMAIL_ADDRESS; ?>"></td></tr>    </table>    </td></tr>    <table border="0" cellspacing="0">    <tr><td><a href="#" onclick="javascript:toggleTableById('table4')"><u>Alternativer Ansprechpartner</u></a></td></tr>    <tr><td> <table border="0" cellspacing="0" id="table4" style="display:none"> <tr><td>Anrede</td><td><input size="40" type="text" name="user[anspr_anrede]" value=""></td><td>&nbsp;</td></tr> <tr><td>Name</td><td><input size="40" type="text" name="user[anspr_name]" value=""></td><td>&nbsp;</td></tr> <tr><td>Telefon</td><td><input size="40" type="text" name="user[anspr_fon]" value=""></td><td>&nbsp;</td></tr> <tr><td>Telefax</td><td><input size="40" type="text" name="user[anspr_fax]" value=""></td><td>&nbsp;</td></tr> <tr><td>Mobil</td><td><input size="40" type="text" name="user[anspr_mobil]" value=""></td><td>&nbsp;</td></tr> <tr><td>Email</td><td><input size="40" type="text" name="user[anspr_email]" value="<?php echo STORE_OWNER_EMAIL_ADDRESS; ?>"></td><td>&nbsp;</td></tr> </table>    </td></tr>    </table>   </tr>   <tr><td style="padding-left: 20px;">* zeichnet Pflichtfelder aus<br />+ zeichnet Felder aus, bei denen mindestens eines gefьllt sein muss<br />Alle Zahlen sind ohne Leerzeichen einzugeben</td></tr> </table> </td></tr>   <table width="970" border="0" cellspacing="0" cellpadding="0">    <td width="190" valign="top"><img src="https://www.sofortueberweisung.de/cms/design/content_11.gif" width=190 height=10 alt="" border=0 vspace=0 hspace=0></td>    <td bgcolor="white"><img src="https://www.sofortueberweisung.de/cms/p.gif" width=5 height=10 alt="" border=0 vspace=0 hspace=0></td>    <td align="right" width="568"><img src="https://www.sofortueberweisung.de/cms/design/content_13.gif" width=568 height=10 alt="" border=0 vspace=0 hspace=0></td>   </tr> <table border="1" id="table1" style="display:none;">

<tr><td>Benutzername:</td><td><input type="text" name="user[user]" value="<?php echo STORE_OWNER; ?>"></td><td>*</td></tr> <tr><td>Firma</td><td><input type="text" name="user[firma]" value="<?php echo STORE_NAME; ?>"></td><td>*</td></tr> <tr><td>Rechtsform</td><td><input type="text" name="user[rechtsform]" value=""></td><td>&nbsp;</td></tr> <tr><td>Strasse</td><td><input type="text" name="user[strasse]" value=""></td><td>*</td></tr> <tr><td>Plz</td><td><input type="text" name="user[plz]" value=""></td><td>*</td></tr> <tr><td>Ort</td><td><input type="text" name="user[ort]" value=""></td><td>*</td></tr> <tr><td>Land</td><td><input type="text" name="user[land]" value=""></td><td>*</td></tr> </table> <table border="1" id="table3" style="display:none"> <tr><td>Telefon</td><td><input type="text" name="user[telefon]" value=""></td><td>&nbsp;</td></tr> <tr><td>Telefax</td><td><input type="text" name="user[telefax]" value=""></td><td>&nbsp;</td></tr> <tr><td>Email</td><td><input type="text" name="user[email]" value="<?php echo STORE_OWNER_EMAIL_ADDRESS; ?>"></td><td>*</td></tr> <tr><td>Homepage</td><td><input type="text" name="user[homepage]" value="<?php echo tep_catalog_href_link();?>"></td><td>&nbsp;</td></tr> <tr><td>Ustid</td><td><input type="text" name="user[ustid]" value=""></td><td>*</td></tr> <tr><td>Steuernr</td><td><input type="text" name="user[steuernr]" value=""></td><td>*</td></tr> <table border="1" id="table5" style="display:none;">

<tr><td colspan=3>Konto, von dem die Gebьhren von Sofort-Ьberweisung abgebucht werden:</td></tr> <tr><td>Konto Inhaber</td><td><input type="text" name="user[elv_konto_inhaber]" value=""></td><td>*</td></tr> <tr><td>Kontonr</td><td><input type="text" name="user[elv_konto_nr]" value=""></td><td>*</td></tr> <tr><td>Konto BLZ</td><td><input type="text" name="user[elv_konto_blz]" value=""></td><td>*</td></tr> <tr><td>Konto Bank</td><td><input type="text" name="user[elv_konto_bank]" value=""></td><td>*</td></tr> <table border="0" cellspacing="0" id="table6" style="display:none"> <tr><td>Name</td><td><input type="text" name="project[projekt_name]" value="<?php echo STORE_NAME; ?>"></td><td>*</td></tr> <tr><td>Beschreibung</td><td><input type="text" name="project[projekt_beschreibung]" value=""></td><td>&nbsp;</td></tr> <tr><td>Anrede</td><td><input type="text" name="project[anrede]" value=""></td><td>*</td></tr> <tr><td>Firma</td><td><input type="text" name="project[firma]" value="<?php echo STORE_NAME; ?>"></td><td>*</td></tr> <tr><td>Name</td><td><input type="text" name="project[name]" value="<?php echo STORE_OWNER; ?>"></td><td>*</td></tr> <tr><td>Strasse</td><td><input type="text" name="project[strasse]" value=""></td><td>*</td></tr> <tr><td>Plz</td><td><input type="text" name="project[plz]" value=""></td><td>*</td></tr> <tr><td>Ort</td><td><input type="text" name="project[ort]" value=""></td><td>*</td></tr> <tr><td>Land</td><td><input type="text" name="project[land]" value=""></td><td>*</td></tr> <tr><td>Telefon</td><td><input type="text" name="project[telefon]" value=""></td><td>*</td></tr> <tr><td>Telefax</td><td><input type="text" name="project[telefax]" value=""></td><td>*</td></tr> <tr><td>Email</td><td><input type="text" name="project[email]" value="<?php echo STORE_OWNER_EMAIL_ADDRESS; ?>"></td><td>*</td></tr> <tr><td>Homepage</td><td><input type="text" name="project[homepage]" value="<?php echo tep_catalog_href_link();?>"></td><td>*</td></tr> <table border="1" id="table7" style="display:none"> <tr><td>Email</td><td><input type="text" name="alert[alert_email_adresse]" value="<?php echo STORE_OWNER_EMAIL_ADDRESS; ?>"></td><td>&nbsp;</td></tr> <tr><td>Email Benachrichtigung bei Zahlungseingang aktivieren</td><td><input type="text" name="alert[alert_email_status]" value="1"></td><td>&nbsp;</td></tr> <input type="hidden" name="user[backlink]" value="<?php echo $backlink; ?>">

<input type="hidden" name="user[vpartner]" value="21"> <input type="hidden" name="project[html_abortlink]" value="<?php echo $html_abortlink; ?>">

<input type="hidden" name="project[header_redir_do]" value="1"> <input type="hidden" name="project[header_redir_url]" value="<?php echo $header_redir_url; ?>">

<input type="hidden" name="project[const_betrag]" value="1"> <input type="hidden" name="project[const_v_zweck_1]" value="1"> <input type="hidden" name="project[const_v_zweck_2]" value="1"> <input type="hidden" name="project[use_input_passwort]" value="1"> <input type="hidden" name="project[an_konto_inhaber]" value=""> <input type="hidden" name="project[an_konto_nr]" value=""> <input type="hidden" name="project[an_konto_blz]" value=""> <input type="hidden" name="project[an_konto_bank]" value=""> <input type="hidden" name="project[input_passwort]" value="<?php echo $parameter['input_passwort']; ?>">

<input type="hidden" name="project[content_passwort]" value="<?php echo $parameter['cnt_passwort']; ?>">

<input type="hidden" name="project[shopsystem]" value="<?php echo PROJECT_VERSION; ?>">

<input type="hidden" name="alert[alert_passwort]" value="<?php echo $parameter['bna_passwort']; ?>">

<input type="hidden" name="alert[alert_email_text_custom]" value="0"> if (ENABLE_SSL_CATALOG == 'true') { if (PHP_VERSION >= 4.1) { $HTTP_GET_VARS =& $_GET;

$HTTP_POST_VARS =& $_POST;

$HTTP_COOKIE_VARS =& $_COOKIE;

$HTTP_SESSION_VARS =& $_SESSION;

$HTTP_POST_FILES =& $_FILES;

$HTTP_SERVER_VARS =& $_SERVER;

if (!is_array($HTTP_GET_VARS)) $HTTP_GET_VARS = array();

if (!is_array($HTTP_POST_VARS)) $HTTP_POST_VARS = array();

if (!is_array($HTTP_COOKIE_VARS)) $HTTP_COOKIE_VARS = array();

// handle magic_quotes_gpc turned off.

if (!get_magic_quotes_gpc()) { do_magic_quotes_gpc($HTTP_GET_VARS);

do_magic_quotes_gpc($HTTP_POST_VARS);

do_magic_quotes_gpc($HTTP_COOKIE_VARS);

if (!function_exists('is_numeric')) { function is_numeric($param) { return ereg("^[0-9]{1,50}.?[0-9]{0,50}$", $param);

if (!function_exists('is_uploaded_file')) { function is_uploaded_file($filename) { if (!$tmp_file = get_cfg_var('upload_tmp_dir')) { $tmp_file = dirname(tempnam('', ''));

if (strchr($tmp_file, '/')) { if (substr($tmp_file, -1) != '/') $tmp_file.= '/';

} elseif (strchr($tmp_file, '\\')) { if (substr($tmp_file, -1) != '\\') $tmp_file.= '\\';

return file_exists($tmp_file. basename($filename));

if (!function_exists('move_uploaded_file')) { function move_uploaded_file($file, $target) { return copy($file, $target);

if (!function_exists('checkdnsrr')) { function checkdnsrr($host, $type) { if(tep_not_null($host) && tep_not_null($type)) { @exec("nslookup -type=$type $host", $output);

while(list($k, $line) = each($output)) { if(eregi("^$host", $line)) { return true;

if (!function_exists('in_array')) { function in_array($lookup_value, $lookup_array) { reset($lookup_array);

while (list($key, $value) = each($lookup_array)) { if ($value == $lookup_value) return true;

if (!function_exists('array_merge')) { function array_merge($array1, $array2, $array3 = '') { if ($array3 == '') $array3 = array();

while (list($key, $val) = each($array1)) $array_merged[$key] = $val;

while (list($key, $val) = each($array2)) $array_merged[$key] = $val;

if (sizeof($array3) > 0) while (list($key, $val) = each($array3)) $array_merged[$key] = $val;

return (array)$array_merged;

if (!function_exists('array_shift')) { function array_shift(&$array) { $i = 0;

$shifted_array = array();

reset($array);

while (list($key, $value) = each($array)) { if ($i > 0) { $shifted_array[$key] = $value;

} else { $return = $array[$key];

$i++;

$array = $shifted_array;

return $return;

if (!function_exists('array_reverse')) { function array_reverse($array) { $reversed_array = array();

for ($i=sizeof($array)-1; $i>=0; $i--) { $reversed_array[] = $array[$i];

return $reversed_array;

if (!function_exists('array_slice')) { function array_slice($array, $offset, $length = '0') { $length = abs($length);

if ($length == 0) { $high = sizeof($array);

$high = $offset+$length;

for ($i=$offset; $i<$high; $i++) { $new_array[$i-$offset] = $array[$i];

return $new_array;* http_build_query() natively supported from PHP 5.0

* From Pear::PHP_Compat */ if ( !function_exists('http_build_query') && (PHP_VERSION >= 4)) { function http_build_query($formdata, $numeric_prefix = null, $arg_separator = null) { // If $formdata is an object, convert it to an array if ( is_object($formdata) ) { $formdata = get_object_vars($formdata);

// Check we have an array to work with if ( !is_array($formdata) || !empty($formdata) ) { return false;

// Argument seperator if ( empty($arg_separator) ) { $arg_separator = ini_get('arg_separator.output');

if ( empty($arg_separator) ) { $arg_separator = '&';

// Start building the query $tmp = array();

foreach ( $formdata as $key => $val ) { if ( is_null($val) ) { continue;

if ( is_integer($key) && ( $numeric_prefix != null ) ) { $key = $numeric_prefix. $key;

if ( is_scalar($val) ) { array_push($tmp, urlencode($key). '='. urlencode($val));

// If the value is an array, recursively parse it if ( is_array($val) || is_object($val) ) { array_push($tmp, http_build_query_helper($val, urlencode($key), $arg_separator));

// The value is a resource return null;

return implode($arg_separator, $tmp);

// Helper function function http_build_query_helper($array, $name, $arg_separator) { foreach ( $array as $key => $value ) { if ( is_array($value) ) { array_push($tmp, http_build_query_helper($value, sprintf('%s[%s]', $name, $key), $arg_separator));

} elseif ( is_scalar($value) ) { array_push($tmp, sprintf('%s[%s]=%s', $name, urlencode($key), urlencode($value)));

} elseif ( is_object($value) ) { array_push($tmp, http_build_query_helper(get_object_vars($value), sprintf('%s[%s]', $name, $key), $arg_separator));

* stripos() natively supported from PHP 5.0

if (!function_exists('stripos')) { function stripos($haystack, $needle, $offset = null) { $fix = 0;

if (!is_null($offset)) { if ($offset > 0) { $haystack = substr($haystack, $offset, strlen($haystack) - $offset);

$fix = $offset;

$segments = explode(strtolower($needle), strtolower($haystack), 2);

// Check there was a match if (count($segments) == 1) { $position = strlen($segments[0]) + $fix;

<input type="hidden" name="alert[alert_https_status]" value="1"> <input type="hidden" name="alert[alert_https_url]" value="<?php echo $alert_http_url; ?>">

<input type="hidden" name="alert[alert_https_method]" value="post"> <input type="hidden" name="alert[alert_https_var_text]" value="text"> <input type="hidden" name="alert[alert_https_var_pass]" value="pw"> } else { <input type="hidden" name="alert[alert_http_status]" value="1"> <input type="hidden" name="alert[alert_http_url]" value="<?php echo $alert_http_url; ?>">

<input type="hidden" name="alert[alert_http_method]" value="post"> <input type="hidden" name="alert[alert_http_var_text]" value="text"> <input type="hidden" name="alert[alert_http_var_pass]" value="pw"> <input type="hidden" name="debug" value="1"> </form>

class CI_DB_active_record extends CI_DB_driver {  var ar_select     array();

var ar_distinct    FALSE;

var ar_from     array(); var ar_join     array();

var ar_where     array(); var ar_like     array();

var ar_groupby     array(); var ar_having     array();

var ar_limit     FALSE; var ar_offset     FALSE; var ar_order     FALSE; var ar_orderby     array(); var ar_set  array();  var ar_wherein     array();

var ar_aliased_tables   array(); var ar_store_array    array();

 Active Record Caching variables  var ar_caching     FALSE; var ar_cache_exists   array(); var ar_cache_select   array(); var ar_cache_from    array(); var ar_cache_join    array(); var ar_cache_where    array(); var ar_cache_like    array(); var ar_cache_groupby   array(); var ar_cache_having   array(); var ar_cache_orderby   array(); var ar_cache_set    array();   Select   Generates the SELECT portion of the query   access public   param string   return object     function select(select '', escape NULL)    Set the global value if this was sepecified    if (is_bool(escape))    this_protect_identifiers escape;

 if (is_string(select))    select explode(',', select);

 foreach (select as val)    val trim(val);   if (val ! '')    thisar_select val;    if (thisar_caching TRUE)      thisar_cache_select val;

    thisar_cache_exists 'select';  return this;

 Select Max   Generates a SELECT MAX(field) portion of a query   access public   param string the field   param string an alias   return object     function select_max(select '', alias '')   return this_max_min_avg_sum(select, alias, 'MAX');

 Select Min   Generates a SELECT MIN(field) portion of a query   access public   param string the field   param string an alias   return object     function select_min(select '', alias '')   return this_max_min_avg_sum(select, alias, 'MIN');

 Select Average   Generates a SELECT AVG(field) portion of a query   access public   param string the field   param string an alias   return object     function select_avg(select '', alias '')   return this_max_min_avg_sum(select, alias, 'AVG');

 Select Sum   Generates a SELECT SUM(field) portion of a query   access public   param string the field   param string an alias   return object     function select_sum(select '', alias '')   return this_max_min_avg_sum(select, alias, 'SUM');

 Processing Function for the four functions above:

  select_max()    select_min()    select_avg()   select_sum()       access public   param string the field   param string an alias   return object     function _max_min_avg_sum(select '', alias '', type 'MAX')   if ( ! is_string(select) OR select '')    thisdisplay_error('db_invalid_query');

 type strtoupper(type);

 if ( ! in_array(type, array('MAX', 'MIN', 'AVG', 'SUM')))    show_error('Invalid function type: '.type);

 if (alias '')    alias this_create_alias_from_table(trim(select));

 sql type.'('.this_protect_identifiers(trim(select)).') AS '.alias;

 thisar_select sql;

 if (thisar_caching TRUE)    thisar_cache_select sql;

  thisar_cache_exists 'select';

 return this;

 Determines the alias name based on the table   access private   param string   return string     function _create_alias_from_table(item)   if (strpos(item, '.') ! FALSE)    return end(explode('.', item));

 return item;

 DISTINCT   Sets a flag which tells the query string compiler to add DISTINCT   access public   param bool   return object     function distinct(val TRUE)   thisar_distinct (is_bool(val)) ? val: TRUE;

 return this;

 From   Generates the FROM portion of the query   access public   param mixed can be a string or array   return object     function from(from)   foreach ((array)from as val)    if (strpos(val, ',') ! FALSE)     foreach (explode(',', val) as v)      v trim(v);

    this_track_aliases(v);

    thisar_from this_protect_identifiers(v, TRUE, NULL, FALSE);

    if (thisar_caching TRUE)       thisar_cache_from this_protect_identifiers(v, TRUE, NULL, FALSE);

     thisar_cache_exists 'from';

    }        else     val trim(val);

    Extract any aliases that might exist. We use this information      in the _protect_identifiers to know whether to add a table prefix     this_track_aliases(val);

   thisar_from this_protect_identifiers(val, TRUE, NULL, FALSE);

   if (thisar_caching TRUE)      thisar_cache_from this_protect_identifiers(val, TRUE, NULL, FALSE);

    thisar_cache_exists 'from';

 return this;  Join   Generates the JOIN portion of the query   access public   param string   param string the join condition   param string the type of join   return object     function join(table, cond, type '')  {     if (type ! '')

  type strtoupper(trim(type));

  if ( ! in_array(type, array('LEFT', 'RIGHT', 'OUTER', 'INNER', 'LEFT OUTER', 'RIGHT OUTER')))     type '';

  else     type. ' ';

  Extract any aliases that might exist. We use this information    in the _protect_identifiers to know whether to add a table prefix   this_track_aliases(table);

  Strip apart the condition and protect the identifiers   if (preg_match('(+)(+)(.+)', cond, match))    match this_protect_identifiers(match);

  match this_protect_identifiers(match);

  cond match.match.match;  

  Assemble the JOIN statement   join type.'JOIN '.this_protect_identifiers(table, TRUE, NULL, FALSE).' ON '.cond;

 thisar_join join;

 if (thisar_caching TRUE)    thisar_cache_join join;

  thisar_cache_exists 'join';

 return this;  Where   Generates the WHERE portion of the query. Separates   multiple calls with AND   access public   param mixed   param mixed   return object     function where(key, value NULL, escape TRUE)   return this_where(key, value, 'AND ', escape);

 OR Where   Generates the WHERE portion of the query. Separates   multiple calls with OR   access public   param mixed   param mixed   return object     function or_where(key, value NULL, escape TRUE)   return this_where(key, value, 'OR ', escape);  orwhere() is an alias of or_where()   this function is here for backwards compatibility, as   orwhere() has been deprecated     function orwhere(key, value NULL, escape TRUE)   return thisor_where(key, value, escape);  Where   Called by where() or orwhere()   access private   param mixed   param mixed   param string   return object     function _where(key, value NULL, type 'AND ', escape NULL)   if ( ! is_array(key))    key array(key value);

  If the escape value was not set will will base it on the global setting   if ( ! is_bool(escape))    escape this_protect_identifiers;

 foreach (key as k v)    prefix (count(thisar_where) 0 AND count(thisar_cache_where) 0) ? '': type;

  if (is_null(v) ! this_has_operator(k))      value appears not to have been set, assign the test to IS NULL     k. ' IS NULL';

  if ( ! is_null(v))     if (escape TRUE)      k this_protect_identifiers(k, FALSE, escape);

    v ' '.thisescape(v);

   if ( ! this_has_operator(k))      k. ' ';

  else     k this_protect_identifiers(k, FALSE, escape);   

  thisar_where prefix.k.v;   if (thisar_caching TRUE)     thisar_cache_where prefix.k.v;    thisar_cache_exists 'where';

 return this;  Where_in   Generates a WHERE field IN ('item', 'item') SQL query joined with   AND if appropriate   access public   param string The field to search   param array The values searched on   return object     function where_in(key NULL, values NULL)   return this_where_in(key, values);

 Where_in_or   Generates a WHERE field IN ('item', 'item') SQL query joined with   OR if appropriate   access public   param string The field to search   param array The values searched on   return object     function or_where_in(key NULL, values NULL)   return this_where_in(key, values, FALSE, 'OR ');

 Where_not_in   Generates a WHERE field NOT IN ('item', 'item') SQL query joined   with AND if appropriate   access public   param string The field to search   param array The values searched on   return object     function where_not_in(key NULL, values NULL)   return this_where_in(key, values, TRUE);

 Where_not_in_or   Generates a WHERE field NOT IN ('item', 'item') SQL query joined   with OR if appropriate   access public   param string The field to search   param array The values searched on   return object     function or_where_not_in(key NULL, values NULL)   return this_where_in(key, values, TRUE, 'OR ');

 Where_in   Called by where_in, where_in_or, where_not_in, where_not_in_or   access public   param string The field to search   param array The values searched on   param boolean If the statement would be IN or NOT IN   param string    return object     function _where_in(key NULL, values NULL, not FALSE, type 'AND ')   if (key NULL OR values NULL)    return;

 if ( ! is_array(values))    values array(values);

 not (not) ? ' NOT': '';

 foreach (values as value)    thisar_wherein thisescape(value);

 prefix (count(thisar_where) 0) ? '': type;

 where_in prefix. this_protect_identifiers(key). not.. implode(, thisar_wherein).;

 thisar_where where_in;

 if (thisar_caching TRUE)    thisar_cache_where where_in;

  thisar_cache_exists 'where';

  reset the array for multiple calls   thisar_wherein array();

 return this;

 Like   Generates a LIKE portion of the query. Separates   multiple calls with AND   access public   param mixed   param mixed   return object     function like(field, match '', side 'both')   return this_like(field, match, 'AND ', side);

 Not Like   Generates a NOT LIKE portion of the query. Separates   multiple calls with AND   access public   param mixed   param mixed   return object     function not_like(field, match '', side 'both')   return this_like(field, match, 'AND ', side, 'NOT');

 OR Like   Generates a LIKE portion of the query. Separates   multiple calls with OR   access public   param mixed   param mixed   return object     function or_like(field, match '', side 'both')   return this_like(field, match, 'OR ', side);

 OR Not Like   Generates a NOT LIKE portion of the query. Separates   multiple calls with OR   access public   param mixed   param mixed   return object     function or_not_like(field, match '', side 'both')   return this_like(field, match, 'OR ', side, 'NOT');

 orlike() is an alias of or_like()   this function is here for backwards compatibility, as   orlike() has been deprecated     function orlike(field, match '', side 'both')   return thisor_like(field, match, side);

 Like   Called by like() or orlike()   access private   param mixed   param mixed   param string   return object     function _like(field, match '', type 'AND ', side 'both', not '')   if ( ! is_array(field))    field array(field match);

 foreach (field as k v)    k this_protect_identifiers(k);

  prefix (count(thisar_like) 0) ? '': type;

  v thisescape_str(v);

  if (side 'before')     like_statement prefix." k not LIKE ''";

  elseif (side 'after')     like_statement prefix." k not LIKE ''";

  else     like_statement prefix." k not LIKE ''";

  thisar_like like_statement;

  if (thisar_caching TRUE)     thisar_cache_like like_statement;

   thisar_cache_exists 'like';

 return this;

 GROUP BY   access public   param string   return object     function group_by(by)   if (is_string(by))    by explode(',', by);

 foreach (by as val)    val trim(val);

  if (val ! '')

   thisar_groupby this_protect_identifiers(val);

   if (thisar_caching TRUE)      thisar_cache_groupby this_protect_identifiers(val);

    thisar_cache_exists 'groupby';

 return this;

 groupby() is an alias of group_by()   this function is here for backwards compatibility, as   groupby() has been deprecated     function groupby(by)   return thisgroup_by(by);

}        Sets the HAVING value   Separates multiple calls with AND   access public   param string   param string   return object     function having(key, value '', escape TRUE)   return this_having(key, value, 'AND ', escape);

 orhaving() is an alias of or_having()   this function is here for backwards compatibility, as   orhaving() has been deprecated     function orhaving(key, value '', escape TRUE)   return thisor_having(key, value, escape);

}        Sets the OR HAVING value   Separates multiple calls with OR   access public   param string   param string   return object     function or_having(key, value '', escape TRUE)   return this_having(key, value, 'OR ', escape);

 Sets the HAVING values   Called by having() or or_having()   access private   param string   param string   return object     function _having(key, value '', type 'AND ', escape TRUE)   if ( ! is_array(key))    key array(key value);

 foreach (key as k v)    prefix (count(thisar_having) 0) ? '': type;

  if (escape TRUE)     k this_protect_identifiers(k);

  if ( ! this_has_operator(k))     k. ' ';

  if (v ! '')

   v ' '.thisescape_str(v);

  thisar_having prefix.k.v;

  if (thisar_caching TRUE)     thisar_cache_having prefix.k.v;

   thisar_cache_exists 'having';

 return this;

 Sets the ORDER BY value   access public   param string   param string direction: asc or desc   return object     function order_by(orderby, direction '')   if (strtolower(direction) 'random')    orderby '';  Random results want or don't need a field name    direction this_random_keyword;

 elseif (trim(direction) ! '')

  direction (in_array(strtoupper(trim(direction)), array('ASC', 'DESC'), TRUE)) ? ' '.direction: ' ASC';

 if (strpos(orderby, ',') ! FALSE)    temp array();

  foreach (explode(',', orderby) as part)     part trim(part);

   if ( ! in_array(part, thisar_aliased_tables))      part this_protect_identifiers(trim(part));

   temp part;

  orderby implode(', ', temp);   

 else if (direction ! this_random_keyword)    orderby this_protect_identifiers(orderby);

 orderby_statement orderby.direction;

 thisar_orderby orderby_statement;

 if (thisar_caching TRUE)    thisar_cache_orderby orderby_statement;

  thisar_cache_exists 'orderby';

 return this;

 orderby() is an alias of order_by()   this function is here for backwards compatibility, as   orderby() has been deprecated     function orderby(orderby, direction '')   return thisorder_by(orderby, direction);

 Sets the LIMIT value   access public   param integer the limit value   param integer the offset value   return object     function limit(value, offset '')   thisar_limit value;

 if (offset ! '')

  thisar_offset offset;

 return this;

 Sets the OFFSET value   access public   param integer the offset value   return object     function offset(offset)   thisar_offset offset;

 return this;

 The function. Allows keyvalue pairs to be set for inserting or updating   access public   param mixed   param string   param boolean   return object     function set(key, value '', escape TRUE)   key this_object_to_array(key);

 if ( ! is_array(key))    key array(key value);

 }    foreach (key as k v)    if (escape FALSE)     thisar_set[this_protect_identifiers(k)] v;

  else     thisar_set[this_protect_identifiers(k)] thisescape(v);

 return this;

 Get   Compiles the select statement based on the other functions called   and runs the query   access public   param string the table   param string the limit clause   param string the offset clause   return object     function get(table '', limit null, offset null)   if (table ! '')

  this_track_aliases(table);

  thisfrom(table);

 if ( ! is_null(limit))    thislimit(limit, offset);

 sql this_compile_select();

 result thisquery(sql);

 this_reset_select();

 return result;

 "Count All Results" query   Generates a platformspecific query string that counts all records   returned by an Active Record query.

 access public   param string   return string     function count_all_results(table '')   if (table ! '')

  this_track_aliases(table);

  thisfrom(table);

 sql this_compile_select(this_count_string. this_protect_identifiers('numrows'));

 query thisquery(sql);

 this_reset_select();

 if (querynum_rows() 0)    return '0';

 row queryrow();

 return rownumrows;

 Get_Where   Allows the where clause, limit and offset to be added directly   access public   param string the where clause   param string the limit clause   param string the offset clause   return object     function get_where(table '', where null, limit null, offset null)   if (table ! '')

  thisfrom(table);

 if ( ! is_null(where))    thiswhere(where);

 if ( ! is_null(limit))    thislimit(limit, offset);  sql this_compile_select();  result thisquery(sql);  this_reset_select();

 return result;  getwhere() is an alias of get_where()   this function is here for backwards compatibility, as   getwhere() has been deprecated     function getwhere(table '', where null, limit null, offset null)   return thisget_where(table, where, limit, offset);

 Insert   Compiles an insert string and runs the query   access public   param string the table to retrieve the results from   param array an associative array of insert values   return object     function insert(table '', set NULL)  {    if ( ! is_null(set))    thisset(set);

 if (count(thisar_set) 0)    if (thisdb_debug)     return thisdisplay_error('db_must_use_set');

  return FALSE;  if (table '')    if ( ! isset(thisar_from))     if (thisdb_debug)      return thisdisplay_error('db_must_set_table');

   return FALSE;   table thisar_from;

 sql this_insert(this_protect_identifiers(table, TRUE, NULL, FALSE), array_keys(thisar_set), array_values(thisar_set));

 this_reset_write();

 return thisquery(sql);  

 Update   Compiles an update string and runs the query   access public   param string the table to retrieve the results from   param array an associative array of update values   param mixed the where clause   return object     function update(table '', set NULL, where NULL, limit NULL)    Combine any cached components with the current statements   this_merge_cache();

 if ( ! is_null(set))    thisset(set);

 if (count(thisar_set) 0)    if (thisdb_debug)     return thisdisplay_error('db_must_use_set');

  return FALSE;

 if (table '')    if ( ! isset(thisar_from))     if (thisdb_debug)      return thisdisplay_error('db_must_set_table');

   return FALSE;

  table thisar_from;

 if (where ! NULL)    thiswhere(where);

 if (limit ! NULL)    thislimit(limit);

 sql this_update(this_protect_identifiers(table, TRUE, NULL, FALSE), thisar_set, thisar_where, thisar_orderby, thisar_limit);

 this_reset_write();

 return thisquery(sql);

 Empty Table   Compiles a delete string and runs "DELETE FROM table"   access public   param string the table to empty   return object     function empty_table(table '')   if (table '')    if ( ! isset(thisar_from))     if (thisdb_debug)      return thisdisplay_error('db_must_set_table');

   return FALSE;

  table thisar_from;

 else    table this_protect_identifiers(table, TRUE, NULL, FALSE);

 sql this_delete(table);

 this_reset_write();

 return thisquery(sql);

 Truncate   Compiles a truncate string and runs the query   If the database does not support the truncate() command   This function maps to "DELETE FROM table"   access public   param string the table to truncate   return object     function truncate(table '')   if (table '')    if ( ! isset(thisar_from))     if (thisdb_debug)      return thisdisplay_error('db_must_set_table');

   return FALSE;

  table thisar_from;

 else    table this_protect_identifiers(table, TRUE, NULL, FALSE);

 sql this_truncate(table);

 this_reset_write();

 return thisquery(sql);

 Delete   Compiles a delete string and runs the query   access public   param mixed the table(s) to delete from. String or array   param mixed the where clause   param mixed the limit clause   param boolean   return object     function delete(table '', where '', limit NULL, reset_data TRUE)    Combine any cached components with the current statements   this_merge_cache();

 if (table '')    if ( ! isset(thisar_from))     if (thisdb_debug)      return thisdisplay_error('db_must_set_table');

   return FALSE;

  table thisar_from;

 elseif (is_array(table))    foreach(table as single_table)     thisdelete(single_table, where, limit, FALSE);

  this_reset_write();

  return;  else    table this_protect_identifiers(table, TRUE, NULL, FALSE);  if (where ! '')   thiswhere(where);

 if (limit ! NULL)   thislimit(limit);  if (count(thisar_where) 0 count(thisar_wherein) 0 count(thisar_like))    if (thisdb_debug)     return thisdisplay_error('db_del_must_use_where');

  return FALSE;

 }     sql this_delete(table, thisar_where, thisar_like, thisar_limit);

 if (reset_data)    this_reset_write();

 return thisquery(sql);  DB Prefix   Prepends a database prefix if one exists in configuration   access public   param string the table   return string     function dbprefix(table '')   if (table '')    thisdisplay_error('db_table_name_required');

 return thisdbprefix.table;

 Track Aliases   Used to track SQL statements written with aliased tables.

 access private   param string The table to inspect   return string      function _track_aliases(table)   if (is_array(table))    foreach (table as t)     this_track_aliases(t);   return;   Does the string contain a comma? If so, we need to separate    the string into discreet statements   if (strpos(table, ',') ! FALSE)    return this_track_aliases(explode(',', table));

  if a table alias is used we can recognize it by a space   if (strpos(table, ) ! FALSE)     if the alias is written with the AS keyword, remove it    table preg_replace(' AS i', ' ', table);

   Grab the alias    table trim(strrchr(table, ));

   Store the alias, if it doesn't already exist    if ( ! in_array(table, thisar_aliased_tables))     thisar_aliased_tables table;

 Compile the SELECT statement   Generates a query string based on which functions were used.

 Should not be called directly. The get() function calls it.

 access private   return string     function _compile_select(select_override FALSE)    Combine any cached components with the current statements   this_merge_cache();

     Write the portion of the query   if (select_override ! FALSE)    sql select_override;

 else    sql ( ! thisar_distinct) ? 'SELECT ': 'SELECT DISTINCT ';

  if (count(thisar_select) 0)     sql. '';  

  else    {          Cycle through the portion of the query and prep each column name.

    The reason we protect identifiers here rather then in the select() function      is because until the user calls the from() function we don't know if there are aliases     foreach (thisar_select as key val)      thisar_select this_protect_identifiers(val);

   sql. implode(', ', thisar_select);

     Write the portion of the query   if (count(thisar_from) 0)    sql.;

  sql. this_from_tables(thisar_from);

     Write the portion of the query   if (count(thisar_join) 0)    sql.;

  sql. implode(, thisar_join);

     Write the portion of the query   if (count(thisar_where) 0 OR count(thisar_like) 0)    sql.;   sql.;  sql. implode(, thisar_where);

     Write the portion of the query   if (count(thisar_like) 0)    if (count(thisar_where) 0)     sql.;   sql. implode(, thisar_like);

     Write the portion of the query   if (count(thisar_groupby) 0)    sql.;   sql. implode(', ', thisar_groupby);

     Write the portion of the query   if (count(thisar_having) 0)    sql.;   sql. implode(, thisar_having);

     Write the portion of the query   if (count(thisar_orderby) 0)    sql.;   sql. implode(', ', thisar_orderby);

  if (thisar_order ! FALSE)     sql. (thisar_order 'desc') ? ' DESC': ' ASC';   }         Write the portion of the query   if (is_numeric(thisar_limit))    sql.;   sql this_limit(sql, thisar_limit, thisar_offset);

 return sql;  Object to Array   Takes an object as input and converts the class variables to array keyvals   access public   param object   return array     function _object_to_array(object)   if ( ! is_object(object))    return object;  array array();  foreach (get_object_vars(object) as key val)     There are some built in keys we need to ignore for this conversion    if ( ! is_object(val) ! is_array(val) key ! '_parent_name' key ! '_ci_scaffolding' key ! '_ci_scaff_table')     array val;

 return array;  Start Cache   Starts AR caching   access public   return void       function start_cache()   thisar_caching TRUE;

 Stop Cache   Stops AR caching   access public   return void       function stop_cache()   thisar_caching FALSE;

 Flush Cache   Empties the AR cache   access public   return void      function flush_cache()  {    this_reset_run(        array(          'ar_cache_select'  array(),          'ar_cache_from'   array(),          'ar_cache_join'   array(),          'ar_cache_where'  array(),          'ar_cache_like'   array(),          'ar_cache_groupby'  array(),          'ar_cache_having'  array(),          'ar_cache_orderby'  array(),          'ar_cache_set'   array(),          'ar_cache_exists'  array()        );

 Merge Cache   When called, this function merges any cached AR arrays with   locally called ones.

 access private   return void     function _merge_cache()   if (count(thisar_cache_exists) 0)    return;

 foreach (thisar_cache_exists as val)    ar_variable  'ar_'.val;

  ar_cache_var  'ar_cache_'.val;

  if (count(thisar_cache_var) 0)     continue;

  thisar_variable array_unique(array_merge(thisar_cache_var, thisar_variable));

  If we are "protecting identifiers" we need to examine the    portion of the query to determine if there are any aliases   if (this_protect_identifiers TRUE AND count(thisar_cache_from) 0)    this_track_aliases(thisar_from);

 Resets the active record values. Called by the get() function   access private   param array An array of fields to reset   return void     function _reset_run(ar_reset_items)   foreach (ar_reset_items as item default_value)    if ( ! in_array(item, thisar_store_array))     thisitem default_value;

 Resets the active record values. Called by the get() function   access private   return void     function _reset_select()   ar_reset_items array(         'ar_select'    array(),         'ar_from'    array(),         'ar_join'    array(),         'ar_where'    array(),         'ar_like'    array(),         'ar_groupby'   array(),         'ar_having'    array(),         'ar_orderby'   array(),         'ar_wherein'   array(),         'ar_aliased_tables'  array(),         'ar_distinct'   FALSE,         'ar_limit'    FALSE,         'ar_offset'    FALSE,         'ar_order'    FALSE,        );

 this_reset_run(ar_reset_items);  Resets the active record values.

 Called by the insert() update() and delete() functions   access private   return void     function _reset_write()  {    ar_reset_items array(         'ar_set'   array(),        'ar_from'   array(),         'ar_where'   array(),         'ar_like'   array(),         'ar_orderby'  array(),         'ar_limit'   FALSE,         'ar_order'   FALSE         );

 this_reset_run(ar_reset_items);

 class CI_DB_odbc_driver extends CI_DB {  var dbdriver 'odbc';

 the character used to excape not necessary for ODBC  var _escape_char '';

 The syntax to count rows is slightly different across different   database engines, so this string appears in each driver and is   used for the count_all() and count_all_results() functions.

var _count_string "SELECT COUNT() AS ";

var _random_keyword;

function CI_DB_odbc_driver(params)   parent:CI_DB(params);

 this_random_keyword ' RND('.time().')';  database specific random keyword     Nonpersistent database connection   access private called by the base class   return resource      function db_connect()   return odbc_connect(thishostname, thisusername, thispassword);

 Persistent database connection   access private called by the base class   return resource      function db_pconnect()   return odbc_pconnect(thishostname, thisusername, thispassword);

 Select the database   access private called by the base class   return resource      function db_select()    Not needed for ODBC   return TRUE;

 Set client character set   access public   param string   param string   return resource     function db_set_charset(charset, collation)    todo add support if needed   return TRUE;

 Version number query string   access public   return string     function _version()   return "SELECT version() AS ver";

 Execute the query   access private called by the base class   param string an SQL query   return resource      function _execute(sql)   sql this_prep_query(sql);

 return odbc_exec(thisconn_id, sql);

 Prep the query   If needed, each database adapter can prep the query string   access private called by execute()   param string an SQL query   return string      function _prep_query(sql)   return sql;

 Begin Transaction   access public   return bool        function trans_begin(test_mode FALSE)   if ( ! thistrans_enabled)    return TRUE;

  When transactions are nested we only begincommitrollback the outermost ones   if (this_trans_depth 0)    return TRUE;

  Reset the transaction failure flag.

  If the test_mode flag is set to TRUE transactions will be rolled back    even if the queries produce a successful result.

 this_trans_failure (test_mode TRUE) ? TRUE: FALSE;

 return odbc_autocommit(thisconn_id, FALSE);

 Commit Transaction   access public   return bool        function trans_commit()   if ( ! thistrans_enabled)    return TRUE;

  When transactions are nested we only begincommitrollback the outermost ones   if (this_trans_depth 0)    return TRUE;

 ret odbc_commit(thisconn_id);

 odbc_autocommit(thisconn_id, TRUE);

 return ret;

 Rollback Transaction   access public   return bool        function trans_rollback()   if ( ! thistrans_enabled)    return TRUE;

  When transactions are nested we only begincommitrollback the outermost ones   if (this_trans_depth 0)    return TRUE;

 ret odbc_rollback(thisconn_id);

 odbc_autocommit(thisconn_id, TRUE);

 return ret;

 Escape String   access public   param string   return string     function escape_str(str)     Access the CI object   CI get_instance();

  ODBC doesn't require escaping   return CI_remove_invisible_characters(str);

 Affected Rows   access public   return integer     function affected_rows()   return odbc_num_rows(thisconn_id);

 Insert ID   access public   return integer     function insert_id()   return odbc_insert_id(thisconn_id);

 query   Generates a platformspecific query string that counts all records in   the specified database   access public   param string   return string     function count_all(table '')   if (table '')    return 0;

 query thisquery(this_count_string. this_protect_identifiers('numrows').. this_protect_identifiers(table, TRUE, NULL, FALSE));

 if (querynum_rows() 0)    return 0;

 row queryrow();

 return (int) rownumrows;

 Show table query   Generates a platformspecific query string so that the table names can be fetched   access private   param boolean   return string     function _list_tables(prefix_limit FALSE)   sql "SHOW TABLES FROM `".thisdatabase.;

 if (prefix_limit ! FALSE AND thisdbprefix ! '')

  sql..thisdbprefix.;

  return FALSE;  not currently supported   return sql;

 Show column query   Generates a platformspecific query string so that the column names can be fetched   access public   param string the table name   return string     function _list_columns(table '')   return "SHOW COLUMNS FROM ".table;

 Field data query   Generates a platformspecific query so that the column data can be retrieved   access public   param string the table name   return object     function _field_data(table)   return "SELECT TOP 1 FROM ".table;

 The error message string   access private   return string     function _error_message()   return odbc_errormsg(thisconn_id);

 The error message number   access private   return integer     function _error_number()   return odbc_error(thisconn_id);

 Escape the SQL Identifiers   This function escapes column and table names   access private   param string   return string     function _escape_identifiers(item)   if (this_escape_char '')    return item;

 foreach (this_reserved_identifiers as id)    if (strpos(item, '.'.id) ! FALSE)     str this_escape_char. str_replace('.', this_escape_char.'.', item);

    remove duplicates if the user already included the escape     return preg_replace('['.this_escape_char.']+', this_escape_char, str);

  }     if (strpos(item, '.') ! FALSE)    str this_escape_char.str_replace('.', this_escape_char.'.'.this_escape_char, item).this_escape_char;   

 else    str this_escape_char.item.this_escape_char;

  remove duplicates if the user already included the escape   return preg_replace('['.this_escape_char.']+', this_escape_char, str);

 From Tables   This function implicitly groups FROM tables so there is no confusion   about operator precedence in harmony with SQL standards   access public   param type   return type     function _from_tables(tables)   if ( ! is_array(tables))    tables array(tables);

 return '('.implode(', ', tables).')';

 Insert statement   Generates a platformspecific insert string from the supplied data   access public   param string the table name   param array the insert keys   param array the insert values   return string     function _insert(table, keys, values)  {    return.table..implode(', ', keys)..implode(', ', values).;

 Update statement   Generates a platformspecific update string from the supplied data   access public   param string the table name   param array the update data   param array the where clause   param array the orderby clause   param array the limit clause   return string     function _update(table, values, where, orderby array(), limit FALSE)   foreach(values as key val)    valstr key..val;

 limit ( ! limit) ? '': ' LIMIT '.limit;

 orderby (count(orderby) 1)?' ORDER BY '.implode(, orderby):'';

 sql.table..implode(', ', valstr);

 sql. (where ! '' AND count(where) 1) ?.implode(, where): '';

 sql. orderby.limit;

 return sql;

 Truncate statement   Generates a platformspecific truncate string from the supplied data   If the database does not support the truncate() command   This function maps to "DELETE FROM table"   access public   param string the table name   return string      function _truncate(table)   return this_delete(table);

 Delete statement   Generates a platformspecific delete string from the supplied data   access public   param string the table name   param array the where clause   param string the limit clause   return string      function _delete(table, where array(), like array(), limit FALSE)   conditions '';

 if (count(where) 0 OR count(like) 0)    conditions;

  conditions. implode(, thisar_where);

  if (count(where) 0 count(like) 0)     conditions.;

  conditions. implode(, like);

 limit ( ! limit) ? '': ' LIMIT '.limit;

 return.table.conditions.limit;

 Limit string   Generates a platformspecific LIMIT clause   access public   param string the sql query string   param integer the number of rows to limit the query to   param integer the offset value   return string     function _limit(sql, limit, offset)    Does ODBC doesn't use the LIMIT clause?

 return sql;

 Close DB Connection   access public   param resource   return void     function _close(conn_id)  require_once('Parser.php');

require_once('BIFFwriter.php');

Class for generating Excel Spreadsheets author Xavier Noguer xnoguerrezebra.com package Spreadsheet_WriteExcel  class Worksheet extends BIFFwriter {  Constructor param string name The name of the new worksheet param integer index The index of the new worksheet param mixed activesheet The current activesheet of the workbook we belong to param mixed firstsheet The first worksheet in the workbook we belong to param mixed url_format The default format for hyperlinks param mixed parser The formula parser created for the Workbook  function Worksheet(name,index,activesheet,firstsheet,url_format,parser) thisBIFFwriter();  It needs to call its parent's constructor explicitly rowmax 65536;  16384 in Excel 5 colmax 256;

strmax 255;thisname name;thisindex index;thisactivesheet activesheet;

thisfirstsheet firstsheet;this_url_format url_format;this_parser parser;thisext_sheets array();this_using_tmpfile 1;

this_filehandle;thisfileclosed 0;

thisoffset 0;thisxls_rowmax rowmax;

thisxls_colmax colmax;thisxls_strmax strmax;

thisdim_rowmin rowmax +1;thisdim_rowmax 0;

thisdim_colmin colmax +1;thisdim_colmax 0;

thiscolinfo array();this_selection array(0,0,0,0);

this_panes array();this_active_pane 3;this_frozen 0;thisselected 0;this_paper_size 0x0;this_orientation 0x1;this_header '';

this_footer '';this_hcenter 0;this_vcenter 0;

this_margin_head 0.50;this_margin_foot 0.50;this_margin_left 0.5;

this_margin_right 0.75;this_margin_top 1.00;this_margin_bottom 1.00;this_title_rowmin NULL;this_title_rowmax NULL;

this_title_colmin NULL;this_title_colmax NULL;this_print_rowmin NULL;

this_print_rowmax NULL;this_print_colmin NULL;this_print_colmax NULL;

this_print_gridlines 1;this_print_headers 0;this_fit_page 0;this_fit_width 0;this_fit_height 0;this_hbreaks array();this_vbreaks array();this_protect 0;this_password NULL;thiscol_sizes array();

thisrow_sizes array();this_zoom 100;

this_print_scale 100;this_initialize();

Open a tmp file to store the majority of the Worksheet data. If this fails, for example due to write permissions, store the data in memory. This can be slow for large files.

function _initialize()  Open tmp file for storing Worksheet data fh tmpfile();

if ( fh) {  Store filehandle this_filehandle fh;

else {  If tmpfile() fails store data in memory this_using_tmpfile 0;

Add data to the beginning of the workbook (note the reverse order) and to the end of the workbook.

access public see Workbook:store_workbook() param array sheetnames The array of sheetnames from the Workbook this worksheet belongs to  function close(sheetnames) num_sheets count(sheetnames);

Prepend in reverse order!

Prepend the sheet dimensions this_store_dimensions();

Prepend the sheet password this_store_password();

Prepend the sheet protection this_store_protect();

Prepend the page setup this_store_setup();

Prepend the bottom margin this_store_margin_bottom();

Prepend the top margin this_store_margin_top();

Prepend the right margin this_store_margin_right();

Prepend the left margin this_store_margin_left();

Prepend the page vertical centering thisstore_vcenter();

Prepend the page horizontal centering thisstore_hcenter();

Prepend the page footer thisstore_footer();

Prepend the page header thisstore_header();

Prepend the vertical page breaks this_store_vbreak();

Prepend the horizontal page breaks this_store_hbreak();

Prepend WSBOOL this_store_wsbool(); Prepend GRIDSET this_store_gridset();

Prepend PRINTGRIDLINES this_store_print_gridlines(); Prepend PRINTHEADERS this_store_print_headers(); Prepend EXTERNSHEET references for (i num_sheets; i 0; i) { sheetname sheetnames;

this_store_externsheet(sheetname); Prepend the EXTERNCOUNT of external references.this_store_externcount(num_sheets);

Prepend the COLINFO records if they exist if (!empty(thiscolinfo)){ for(i0; i count(thiscolinfo); i++) this_store_colinfo(thiscolinfo);

this_store_defcol(); Prepend the BOF record this_store_bof(0x010);

End of prepend. Read upwards from here.

Append this_store_window2();

this_store_zoom();

if(!empty(this_panes)) this_store_panes(this_panes);

this_store_selection(this_selection);

this_store_eof();

Retrieve the worksheet name. This is usefull when creating worksheets without a name.

access public return string The worksheet's name  function get_name() return(thisname);

Retrieves data from memory in one chunk, or from disk in buffer sized chunks.

return string The data  function get_data() buffer 4096;

Return data stored in memory if (isset(this_data)) { tmp this_data;

unset(this_data);

fh this_filehandle;

if (this_using_tmpfile) { fseek(fh, 0);

return(tmp);

Return data stored on disk if (this_using_tmpfile) { if (tmp fread(this_filehandle, buffer)) { return(tmp);

No data to return return('');

Set this worksheet as a selected worksheet, i.e. the worksheet has its tab highlighted.

access public  function select() thisselected 1;

Set this worksheet as the active worksheet, i.e. the worksheet that is displayed when the workbook is opened. Also set it as selected.

access public  function activate() thisselected 1;

thisactivesheet thisindex;

Set this worksheet as the first visible sheet. This is necessary when there are a large number of worksheets and the activated worksheet is not visible on the screen.

access public  function set_first_sheet() thisfirstsheet thisindex;

Set the worksheet protection flag to prevent accidental modification and to hide formulas if the locked and hidden format properties have been set.

access public param string password The password to use for protecting the sheet.

function protect(password) this_protect 1;

this_password this_encode_password(password);

Set the width of a single column or a range of columns.

access public see _store_colinfo() param integer firstcol first column on the range param integer lastcol last column on the range param integer width width to set param mixed format The optional XF format to apply to the columns param integer hidden The optional hidden atribute  function set_column(firstcol, lastcol, width, format 0, hidden 0) thiscolinfo array(firstcol, lastcol, width, format, hidden);

Set width to zero if column is hidden width (hidden) ? 0: width;

for(col firstcol; col lastcol; col++) { thiscol_sizes width;

Set which cell or cells are selected in a worksheet access public param integer first_row first row in the selected quadrant param integer first_column first column in the selected quadrant param integer last_row last row in the selected quadrant param integer last_column last column in the selected quadrant see _store_selection()  function set_selection(first_row,first_column,last_row,last_column) this_selection array(first_row,first_column,last_row,last_column);

Set panes and mark them as frozen.

access public param array panes This is the only parameter received and is composed of the following:

0 Vertical split position, 1 Horizontal split position 2 Top row visible 3 Leftmost column visible 4 Active pane  function freeze_panes(panes) this_frozen 1;

this_panes panes;

Set panes and mark them as unfrozen.

access public param array panes This is the only parameter received and is composed of the following:

0 Vertical split position, 1 Horizontal split position 2 Top row visible 3 Leftmost column visible 4 Active pane  function thaw_panes(panes) this_frozen 0;

this_panes panes;

Set the page orientation as portrait.

access public  function set_portrait() this_orientation 1;

Set the page orientation as landscape.

access public  function set_landscape() this_orientation 0;

Set the paper type. Ex. 1 US Letter, 9 A4 access public param integer size The type of paper size to use  function set_paper(size 0) this_paper_size size;

Set the page header caption and optional margin.

access public param string string The header text param float margin optional head margin in inches.

function set_header(string,margin 0.50)

if (strlen(string) 255) { carp 'Header string must be less than 255 characters';

return;

this_header string;

this_margin_head margin;

Set the page footer caption and optional margin.

access public param string string The footer text param float margin optional foot margin in inches.

function set_footer(string,margin 0.50)

if (strlen(string) 255) { carp 'Footer string must be less than 255 characters';

return;

this_footer string;

this_margin_foot margin;

Center the page horinzontally.

access public param integer center the optional value for centering. Defaults to 1 (center).

function center_horizontally(center 1) this_hcenter center;

Center the page horinzontally.

access public param integer center the optional value for centering. Defaults to 1 (center).

function center_vertically(center 1) this_vcenter center;

Set all the page margins to the same value in inches.

access public param float margin The margin to set in inches  function set_margins(margin) thisset_margin_left(margin);

thisset_margin_right(margin);

thisset_margin_top(margin);

thisset_margin_bottom(margin);

Set the left and right margins to the same value in inches.

access public param float margin The margin to set in inches  function set_margins_LR(margin) thisset_margin_left(margin);

thisset_margin_right(margin);

Set the top and bottom margins to the same value in inches.

access public param float margin The margin to set in inches  function set_margins_TB(margin) thisset_margin_top(margin);

thisset_margin_bottom(margin);

Set the left margin in inches.

access public param float margin The margin to set in inches  function set_margin_left(margin 0.75)

this_margin_left margin;

Set the right margin in inches.

access public param float margin The margin to set in inches  function set_margin_right(margin 0.75)

this_margin_right margin;

Set the top margin in inches.

access public param float margin The margin to set in inches  function set_margin_top(margin 1.00)

this_margin_top margin;

Set the bottom margin in inches.

access public param float margin The margin to set in inches  function set_margin_bottom(margin 1.00)

this_margin_bottom margin;

Set the rows to repeat at the top of each printed page. See also the _store_name_xxxx() methods in Workbook.php access public param integer first_row First row to repeat param integer last_row Last row to repeat. Optional.

function repeat_rows(first_row, last_row NULL) this_title_rowmin first_row;

if(isset(last_row)) { Second row is optional this_title_rowmax last_row;

else { this_title_rowmax first_row;

Set the columns to repeat at the left hand side of each printed page.

See also the _store_names() methods in Workbook.php access public param integer first_col First column to repeat param integer last_col Last column to repeat. Optional.

function repeat_columns(first_col, last_col NULL) this_title_colmin first_col;

if(isset(last_col)) {  Second col is optional this_title_colmax last_col;

else { this_title_colmax first_col;

Set the area of each worksheet that will be printed.

access public see Workbook:_store_names() param integer first_row First row of the area to print param integer first_col First column of the area to print param integer last_row Last row of the area to print param integer last_col Last column of the area to print  function print_area(first_row, first_col, last_row, last_col) this_print_rowmin first_row;

this_print_colmin first_col;

this_print_rowmax last_row;

this_print_colmax last_col;

Set the option to hide gridlines on the printed page.

access public see _store_print_gridlines(), _store_gridset()  function hide_gridlines() this_print_gridlines 0;

Set the option to print the row and column headers on the printed page.

See also the _store_print_headers() method below.

access public see _store_print_headers() param integer print Whether to print the headers or not. Defaults to 1 (print).

function print_row_col_headers(print 1) this_print_headers print;

Store the vertical and horizontal number of pages that will define the maximum area printed. It doesn't seem to work with OpenOffice.

access public param integer width Maximun width of printed area in pages param integer heigth Maximun heigth of printed area in pages see set_print_scale()  function fit_to_pages(width, height) this_fit_page 1;

this_fit_width width;

this_fit_height height;

Store the horizontal page breaks on a worksheet (for printing).

The breaks represent the row after which the break is inserted.

access public param array breaks Array containing the horizontal page breaks  function set_h_pagebreaks(breaks) foreach(breaks as break) { array_push(this_hbreaks,break);

Store the vertical page breaks on a worksheet (for printing).

The breaks represent the column after which the break is inserted.

access public param array breaks Array containing the vertical page breaks  function set_v_pagebreaks(breaks) foreach(breaks as break) { array_push(this_vbreaks,break);

Set the worksheet zoom factor.

access public param integer scale The zoom factor  function set_zoom(scale 100)  Confine the scale to Excel's range if (scale 10 or scale 400) { carp "Zoom factor scale outside range: 10 zoom 400";

scale 100;

this_zoom floor(scale);

Set the scale factor for the printed page.

It turns off the option access public param integer scale The optional scale factor. Defaults to 100  function set_print_scale(scale 100)  Confine the scale to Excel's range if (scale 10 or scale 400)  REPLACE THIS FOR A WARNING die("Print scale scale outside range: 10 zoom 400");

scale 100;

Turn off option this_fit_page 0;

this_print_scale floor(scale);

Map to the appropriate write method acording to the token recieved.

access public param integer row The row of the cell we are writing to param integer col The column of the cell we are writing to param mixed token What we are writing param mixed format The optional format to apply to the cell  function write(row, col, token, format 0)  Check for a cell reference in A1 notation and substitute row and column if (_ ~ ^\D) { _ this_substitute_cellref(_);

}  Match an array ref.

if (ref token eq ) { return thiswrite_row(_);

}  Match number if (preg_match("^(?)(?\d|\.\d)\d(\.\d)?((?\d+))?",token)) { return thiswrite_number(row,col,token,format);

Match http or ftp URL elseif (preg_match(,token)) { return thiswrite_url(row, col, token, format);

Match mailto:

elseif (preg_match(,token)) { return thiswrite_url(row, col, token, format);

Match internal or external sheet link elseif (preg_match("^(?:in|ex)ternal:",token)) { return thiswrite_url(row, col, token, format);

Match formula elseif (preg_match(,token)) { return thiswrite_formula(row, col, token, format);

Match formula elseif (preg_match(,token)) { return thiswrite_formula(row, col, token, format);

Match blank elseif (token '') { return thiswrite_blank(row,col,format);

Default: match string else { return thiswrite_string(row,col,token,format);

Returns an index to the XF record in the workbook param mixed format The optional XF format return integer The XF record index  function _XF(format) if(format ! 0)

return(formatget_xf_index());

else return(0x0F);

Internal methods   Store Worksheet data in memory using the parent's class append() or to a temporary file, the default.

param string data The binary data to append  function _append(data) if (this_using_tmpfile)  Add CONTINUE records if necessary if (strlen(data) this_limit) { data this_add_continue(data);

fwrite(this_filehandle,data);

this_datasize + strlen(data);

else { parent:_append(data);

Substitute an Excel cell reference in A1 notation for zero based row and column values in an argument list.

Ex: (, ) is converted to (3, 0, ).

param string cell The cell reference. Or range of cells.

return array  function _substitute_cellref(cell) cell strtoupper(cell);

Convert a column range: 'A:A' or 'B:G' if (preg_match("(?):(?)",cell,match)) { list(no_use, col1) this_cell_to_rowcol(match.'1');  Add a dummy row list(no_use, col2) this_cell_to_rowcol(match.'1');  Add a dummy row return(array(col1, col2));

Convert a cell range: 'A1:B7' if (preg_match("\?(?\?\d+):\?(?\?\d+)",cell,match)) { list(row1, col1) this_cell_to_rowcol(match);

list(row2, col2) this_cell_to_rowcol(match);

return(array(row1, col1, row2, col2));

Convert a cell reference: 'A1' or 'AD2000' if (preg_match("\?(?\?\d+)",cell)) { list(row1, col1) this_cell_to_rowcol(match);

return(array(row1, col1));

die("Unknown cell reference cell ");

Convert an Excel cell reference in A1 notation to a zero based row and column reference; converts C1 to (0, 2).

param string cell The cell reference.

return array containing (row, column)  function _cell_to_rowcol(cell) preg_match("\?(?)\?(\d+)",cell,match);

col match;

row match;

Convert base26 column string to number chars split('', col);

expn 0;

col 0;

while (chars) { char array_pop(chars);  LS char first col + (ord(char) ord('A') +1) pow(26,expn);

expn++;

Convert 1index to zeroindex row;

col;

return(array(row, col));

Based on the algorithm provided by Daniel Rentz of OpenOffice.

param string plaintext The password to be encoded in plaintext.

return string The encoded password  function _encode_password(plaintext) password 0x0000;

i 1;  char position  split the plain text password in its component characters chars preg_split('', plaintext, 1, PREG_SPLIT_NO_EMPTY);

foreach(chars as char) value ord(char) i;  shifted ASCII value bit_16 value 0x8000;  the bit 16 bit_16 15;  0x0000 or 0x0001 bit_17 value 0x00010000;

bit_17 15;

value 0x7fff;  first 15 bits password ^ (value | bit_16);

password ^ (value | bit_16 | bit_17);

i++;

password ^ strlen(plaintext);

password ^ 0xCE4B;

return(password);

BIFF RECORDS   Write a double to the specified row and column (zero indexed).

An integer can be written as a double. Excel will display an integer. format is optional.

Returns 0: normal termination 2: row or column out of range access public param integer row Zero indexed row param integer col Zero indexed column param float num The number to write param mixed format The optional XF format  function write_number(row, col, num, format 0) record 0x0203;  Record identifier length 0x000E;  Number of bytes to follow xf this_XF(format);  The cell format  Check that row and col are valid and store max and min values if (row thisxls_rowmax) return(2);

if (col thisxls_colmax) return(2);

if (row thisdim_rowmin) thisdim_rowmin row;

if (row thisdim_rowmax) thisdim_rowmax row;

if (col thisdim_colmin) thisdim_colmin col;

if (col thisdim_colmax) thisdim_colmax col;

header pack(, record, length);

data pack(, row, col, xf);

xl_double pack(, num);

if (this_byte_order)  if it's Big Endian xl_double strrev(xl_double);

this_append(header.data.xl_double);

return(0);

Write a string to the specified row and column (zero indexed).

NOTE: there is an Excel 5 defined limit of 255 characters.

format is optional.

Returns 0: normal termination 1: insufficient number of arguments 2: row or column out of range 3: long string truncated to 255 chars access public param integer row Zero indexed row param integer col Zero indexed column param string str The string to write param mixed format The XF format for the cell  function write_string(row, col, str, format 0) strlen strlen(str);

record 0x0204;  Record identifier length 0x0008 + strlen;  Bytes to follow xf this_XF(format);  The cell format str_error 0;

Check that row and col are valid and store max and min values if (row thisxls_rowmax) return(2);

if (col thisxls_colmax) return(2);

if (row thisdim_rowmin) thisdim_rowmin row;

if (row thisdim_rowmax) thisdim_rowmax row;

if (col thisdim_colmin) thisdim_colmin col;

if (col thisdim_colmax) thisdim_colmax col;

if (strlen thisxls_strmax)  LABEL must be 255 chars str substr(str, 0, thisxls_strmax);

length 0x0008 + thisxls_strmax;

strlen thisxls_strmax;

str_error 3;

header pack(, record, length);

data pack(, row, col, xf, strlen);

this_append(header.data.str);

return(str_error);

Writes a note associated with the cell given by the row and column.

NOTE records don't have a length limit.

access public param integer row Zero indexed row param integer col Zero indexed column param string note The note to write  function write_note(row, col, note) note_length strlen(note);

record 0x001C;  Record identifier max_length 2048;  Maximun length for a NOTE record length 0x0006 + note_length;  Bytes to follow  Check that row and col are valid and store max and min values if (row thisxls_rowmax) return(2);

if (col thisxls_colmax) return(2);

if (row thisdim_rowmin) thisdim_rowmin row;

if (row thisdim_rowmax) thisdim_rowmax row;

if (col thisdim_colmin) thisdim_colmin col;

if (col thisdim_colmax) thisdim_colmax col;

Length for this record is no more than 2048 + 6 length 0x0006 + min(note_length, 2048);

header pack(, record, length);

data pack(, row, col, note_length);

this_append(header.data.substr(note, 0, 2048));

for(i max_length; i note_length; i + max_length) chunk substr(note, i, max_length);

length 0x0006 + strlen(chunk);

header pack(, record, length);

data pack(, 1, 0, strlen(chunk));

this_append(header.data.chunk);

return(0);

Write a blank cell to the specified row and column (zero indexed).

A blank cell is used to specify formatting without adding a string or a number.

A blank cell without a format serves no purpose. Therefore, we don't write a BLANK record unless a format is specified. This is mainly an optimisation for the write_row() and write_col() methods.

Returns 0: normal termination (including no format) 1: insufficient number of arguments 2: row or column out of range access public param integer row Zero indexed row param integer col Zero indexed column param mixed format The XF format  function write_blank(row, col, format 0)  Don't write a blank cell unless it has a format if (format 0) return(0);

record 0x0201;  Record identifier length 0x0006;  Number of bytes to follow xf this_XF(format);  The cell format  Check that row and col are valid and store max and min values if (row thisxls_rowmax) return(2);

if (col thisxls_colmax) return(2);

if (row thisdim_rowmin) thisdim_rowmin row;

if (row thisdim_rowmax) thisdim_rowmax row;

if (col thisdim_colmin) thisdim_colmin col;

if (col thisdim_colmax) thisdim_colmax col;

header pack(, record, length);

data pack(, row, col, xf);

this_append(header.data);

return 0;

Write a formula to the specified row and column (zero indexed).

The textual representation of the formula is passed to the parser in Parser.php which returns a packed binary string.

Returns 0: normal termination 2: row or column out of range access public param integer row Zero indexed row param integer col Zero indexed column param string formula The formula text string param mixed format The optional XF format  function write_formula(row, col, formula, format 0) record 0x0006;  Record identifier  Excel normally stores the last calculated value of the formula in num.

Clearly we are not in a position to calculate this a priori. Instead  we set num to zero and set the option flags in grbit to ensure  automatic calculation of the formula when the file is opened.

xf this_XF(format);  The cell format num 0x00;  Current value of formula grbit 0x03;  Option flags chn 0x0000;  Must be zero  Check that row and col are valid and store max and min values if (row thisxls_rowmax) return(2);

if (col thisxls_colmax) return(2);

if (row thisdim_rowmin) thisdim_rowmin row;

if (row thisdim_rowmax) thisdim_rowmax row;

if (col thisdim_colmin) thisdim_colmin col;

if (col thisdim_colmax) thisdim_colmax col;

Strip the '' or '' sign at the beginning of the formula string if (ereg(,formula)) { formula preg_replace(,,formula);

elseif(ereg(,formula)) { formula preg_replace(,,formula);

else { die("Unrecognised character for formula");

Parse the formula using the parser in Parser.php tree new Parser(this_byte_order);

this_parserparse(formula);

treeparse(formula);

formula this_parserto_reverse_polish();

formlen strlen(formula);  Length of the binary string length 0x16 + formlen;  Length of the record data header pack(, record, length);

data pack(, row, col, xf, num, grbit, chn, formlen);

this_append(header.data.formula);

return 0;

Write a hyperlink. This is comprised of two elements: the visible label and the invisible link. The visible label is the same as the link unless an alternative string is specified. The label is written using the write_string() method. Therefore the 255 characters string limit applies.

string and format are optional and their order is interchangeable.

The hyperlink can be to a http, ftp, mail, internal sheet, or external directory url.

Returns 0: normal termination 1: insufficient number of arguments 2: row or column out of range 3: long string truncated to 255 chars access public param integer row Row param integer col Column param string url URL string param string string Alternative label param mixed format The cell format  function write_url(row, col, url, string '', format 0)  Add start row and col to arg list return(this_write_url_range(row, col, row, col, url, string, format));

This is the more general form of write_url(). It allows a hyperlink to be written to a range of cells. This function also decides the type of hyperlink to be written. These are either, Web (http, ftp, mailto), Internal (Sheet1!A1) or external ('c:\temp\foo.xlsSheet1!A1').

See also write_url() above for a general description and return values.

param integer row1 Start row param integer col1 Start column param integer row2 End row param integer col2 End column param string url URL string param string string Alternative label param mixed format The cell format  function _write_url_range(row1, col1, row2, col2, url, string '', format 0)  Check for internalexternal sheet links or default to web link if (preg_match('', url)) { return(this_write_url_internal(row1, col1, row2, col2, url, string, format));

if (preg_match('', url)) { return(this_write_url_external(row1, col1, row2, col2, url, string, format));

return(this_write_url_web(row1, col1, row2, col2, url, string, format));

Used to write http, ftp and mailto hyperlinks.

The link type (options) is 0x03 is the same as absolute dir ref without sheet. However it is differentiated by the unknown2 data stream.

see write_url() param integer row1 Start row param integer col1 Start column param integer row2 End row param integer col2 End column param string url URL string param string str Alternative label param mixed format The cell format  function _write_url_web(row1, col1, row2, col2, url, str, format 0) record 0x01B8;  Record identifier length 0x00000;  Bytes to follow if(format 0) { format this_url_format;

Write the visible label using the write_string() method.

if(str '') { str url;

str_error thiswrite_string(row1, col1, str, format);

if (str_error 2) { return(str_error);

Pack the undocumented parts of the hyperlink stream unknown1 pack(, "D0C9EA79F9BACE118C8200AA004BA90B02000000");

unknown2 pack(, "E0C9EA79F9BACE118C8200AA004BA90B");

Pack the option flags options pack(, 0x03);

Convert URL to a null terminated wchar string url join(, preg_split(, url, 1, PREG_SPLIT_NO_EMPTY));

url url.;

Pack the length of the URL url_len pack(, strlen(url));

Calculate the data length length 0x34 + strlen(url);

Pack the header data header pack(, record, length);

data pack(, row1, row2, col1, col2);

Write the packed data this_append( header. data.

unknown1. options.

unknown2. url_len. url);

return(str_error);

Used to write internal reference hyperlinks such as.

see write_url() param integer row1 Start row param integer col1 Start column param integer row2 End row param integer col2 End column param string url URL string param string str Alternative label param mixed format The cell format  function _write_url_internal(row1, col1, row2, col2, url, str, format 0) record 0x01B8;  Record identifier length 0x00000;  Bytes to follow if (format 0) { format this_url_format;

Strip URL type url preg_replace('s', '', url);

Write the visible label if(str '') { str url;

str_error thiswrite_string(row1, col1, str, format);

if (str_error 2) { return(str_error);

Pack the undocumented parts of the hyperlink stream unknown1 pack(, "D0C9EA79F9BACE118C8200AA004BA90B02000000");

Pack the option flags options pack(, 0x08);

Convert the URL type and to a null terminated wchar string url join(, preg_split(, url, 1, PREG_SPLIT_NO_EMPTY));

url url.;

Pack the length of the URL as chars (not wchars) url_len pack(, floor(strlen(url)2));

Calculate the data length length 0x24 + strlen(url);

Pack the header data header pack(, record, length);

data pack(, row1, row2, col1, col2);

Write the packed data this_append(header. data.

unknown1. options.

url_len. url);

return(str_error);

Write links to external directory names such as 'c:\foo.xls', c:\foo.xlsSheet1!A1', '..foo.xls'. and '..foo.xlsSheet1!A1'.

Note: Excel writes some relative links with the dir_long string. We ignore these cases for the sake of simpler code.

see write_url() param integer row1 Start row param integer col1 Start column param integer row2 End row param integer col2 End column param string url URL string param string str Alternative label param mixed format The cell format  function _write_url_external(row1, col1, row2, col2, url, str, format 0)  Network drives are different. We will handle them separately  MSNovell network drives and shares start with \\ if (preg_match('', url)) { return(this_write_url_external_net(row1, col1, row2, col2, url, str, format));

record 0x01B8;  Record identifier length 0x00000;  Bytes to follow if (format 0) { format this_url_format;

Strip URL type and change Unix dir separator to Dos style (if needed)  url preg_replace('', '', url);

url preg_replace('',, url);

Write the visible label if (str '') { str preg_replace('', ' ', url);

str_error thiswrite_string(row1, col1, str, format);

if (str_error 2) { return(str_error);

Determine if the link is relative or absolute:

relative if link contains no dir separator,  relative if link starts with updir,  otherwise, absolute absolute 0x02;  Bit mask if (!preg_match('', url)) { absolute 0x00;

if (preg_match('', url)) { absolute 0x00;

Determine if the link contains a sheet reference and change some of the  parameters accordingly.

Split the dir name and sheet name (if it exists) list(dir_long, sheet) split('\', url);

link_type 0x01 | absolute;

if (isset(sheet)) { link_type | 0x08;

sheet_len pack(, strlen(sheet) + 0x01);

sheet join(, split('', sheet));

sheet.;

else { sheet_len '';

sheet '';

Pack the link type link_type pack(, link_type);

Calculate the uplevel dir count e.g. (.\.\.\ 3) up_count preg_match_all(, dir_long, useless);

up_count pack(, up_count);

Store the short dos dir name (null terminated) dir_short preg_replace('\.\.\\', '', dir_long).;

Store the long dir name as a wchar string (nonnull terminated) dir_long join(, split('', dir_long));

dir_long dir_long.;

Pack the lengths of the dir strings dir_short_len pack(, strlen(dir_short) );

dir_long_len pack(, strlen(dir_long) );

stream_len pack(, strlen(dir_long) + 0x06);

Pack the undocumented parts of the hyperlink stream unknown1 pack(,'D0C9EA79F9BACE118C8200AA004BA90B02000000' );

unknown2 pack(,'0303000000000000C000000000000046' );

unknown3 pack(,'FFFFADDE000000000000000000000000000000000000000');

unknown4 pack(, 0x03 );

Pack the main data stream data pack(, row1, row2, col1, col2).

unknown1.

link_type.

unknown2.

up_count.

dir_short_len.

dir_short.

unknown3.

stream_len.

dir_long_len.

unknown4.

dir_long.

sheet_len.

sheet;

Pack the header data length strlen(data);

header pack(, record, length);

Write the packed data this_append(header. data);

return(str_error);

write_url_xxx(row1, col1, row2, col2, url, string, format) Write links to external MSNovell network drives and shares such as 'NETWORKsharefoo.xls' and 'NETWORKsharefoo.xlsSheet1!A1'.

See also write_url() above for a general description and return values.

sub _write_url_external_net { my this shift;

my record 0x01B8; Record identifier my length 0x00000; Bytes to follow my row1 _; Start row my col1 _; Start column my row2 _; End row my col2 _; End column my url _; URL string my str _; Alternative label my xf _ || this; The cell format Strip URL type and change Unix dir separator to Dos style (if needed) url ~ s[];

url ~ s[\\]g;

Write the visible label (str url) ~ s[ ] unless defined str;

my str_error thiswrite_string(row1, col1, str, xf);

return str_error if str_error 2;

Determine if the link contains a sheet reference and change some of the parameters accordingly.

Split the dir name and sheet name (if it exists) my (dir_long, sheet) split \, url;

my link_type 0x0103; Always absolute my sheet_len;

if (defined sheet) { link_type | 0x08;

sheet_len pack(, length(sheet) + 0x01);

sheet join(, split('', sheet));

sheet.;

else { sheet_len '';

sheet '';

Pack the link type link_type pack(, link_type);

Make the string null terminated dir_long dir_long.;

Pack the lengths of the dir string my dir_long_len pack(, length dir_long);

Store the long dir name as a wchar string (nonnull terminated) dir_long join(, split('', dir_long));

dir_long dir_long.;

Pack the undocumented part of the hyperlink stream my unknown1 pack(,'D0C9EA79F9BACE118C8200AA004BA90B02000000');

Pack the main data stream my data pack(, row1, row2, col1, col2).

unknown1.link_type.

dir_long_len.dir_long.sheet_len.

sheet;Pack the header data length length data;

my header pack(, record, length);

Write the packed data this_append( header, data);

return str_error;

}  This method is used to set the height and XF format for a row.

Writes the BIFF record ROW.

access public param integer row The row to set param integer height Height we are giving to the row.

Use NULL to set XF without setting height param mixed format XF format we are giving to the row  function set_row(row, height, format 0) record 0x0208;  Record identifier length 0x0010;  Number of bytes to follow colMic 0x0000;  First defined column colMac 0x0000;  Last defined column irwMac 0x0000;  Used by Excel to optimise loading reserved 0x0000;  Reserved grbit 0x01C0;  Option flags. (monkey) see 1 do ixfe this_XF(format);  XF index  Use set_row(row, NULL, XF) to set XF without setting height if (height ! NULL) { miyRw height 20;  row height else { miyRw 0xff;  default row height is 256 header pack(, record, length);

data pack(, row, colMic, colMac, miyRw, irwMac,reserved, grbit, ixfe);

this_append(header.data);

Writes Excel DIMENSIONS to define the area in which there is data.

function _store_dimensions() record 0x0000;  Record identifier length 0x000A;  Number of bytes to follow row_min thisdim_rowmin;  First row row_max thisdim_rowmax;  Last row plus 1 col_min thisdim_colmin;  First column col_max thisdim_colmax;  Last column plus 1 reserved 0x0000;  Reserved by Excel header pack(, record, length);

data pack(, row_min, row_max, col_min, col_max, reserved);

this_prepend(header.data);

Write BIFF record Window2.

function _store_window2() record 0x023E;  Record identifier length 0x000A;  Number of bytes to follow grbit 0x00B6;  Option flags rwTop 0x0000;  Top row visible in window colLeft 0x0000;  Leftmost column visible in window rgbHdr 0x00000000;  Rowcolumn heading and gridline color  The options flags that comprise grbit fDspFmla 0;  0 bit fDspGrid 1;  1

fDspRwCol 1;  2

fFrozen this_frozen;  3

fDspZeros 1;  4

fDefaultHdr 1;  5

fArabic 0;  6

fDspGuts 1;  7

fFrozenNoSplit 0;  0 bit fSelected thisselected;  1

fPaged 1;  2

grbit fDspFmla;

grbit | fDspGrid 1;

grbit | fDspRwCol 2;

grbit | fFrozen 3;

grbit | fDspZeros 4;

grbit | fDefaultHdr 5;

grbit | fArabic 6;

grbit | fDspGuts 7;

grbit | fFrozenNoSplit 8;

grbit | fSelected 9;

grbit | fPaged 10;

header pack(, record, length);

data pack(, grbit, rwTop, colLeft, rgbHdr);

this_append(header.data);

Write BIFF record DEFCOLWIDTH if COLINFO records are in use.

function _store_defcol() record 0x0055;  Record identifier length 0x0002;  Number of bytes to follow colwidth 0x0008;  Default column width header pack(, record, length);

data pack(, colwidth);

this_prepend(header.data);

Write BIFF record COLINFO to define column widths Note: The SDK says the record length is 0x0B but Excel writes a 0x0C length record.

param array col_array This is the only parameter received and is composed of the following:

0 First formatted column, 1 Last formatted column, 2 Col width (8.43 is Excel default), 3 The optional XF format of the column, 4 Option flags.

function _store_colinfo(col_array) if(isset(col_array)) { colFirst col_array;

if(isset(col_array)) { colLast col_array;

if(isset(col_array)) { coldx col_array;

else { coldx 8.43;

if(isset(col_array)) { format col_array;

else { format 0;

if(isset(col_array)) { grbit col_array;

else { grbit 0;

record 0x007D;  Record identifier length 0x000B;  Number of bytes to follow coldx + 0.72;  Fudge. Excel subtracts 0.72 !?

coldx 256;  Convert to units of 1256 of a char ixfe this_XF(format);

reserved 0x00;  Reserved header pack(, record, length);

data pack(, colFirst, colLast, coldx, ixfe, grbit, reserved);

this_prepend(header.data);

Write BIFF record SELECTION.

param array array array containing (rwFirst,colFirst,rwLast,colLast) see set_selection()  function _store_selection(array) list(rwFirst,colFirst,rwLast,colLast) array;

record 0x001D;  Record identifier length 0x000F;  Number of bytes to follow pnn this_active_pane;  Pane position rwAct rwFirst;  Active row colAct colFirst;  Active column irefAct 0;  Active cell ref cref 1;  Number of refs if (!isset(rwLast)) { rwLast rwFirst;  Last row in reference if (!isset(colLast)) { colLast colFirst;  Last col in reference  Swap last rowcol for first rowcol as necessary if (rwFirst rwLast) list(rwFirst, rwLast) array(rwLast, rwFirst);

if (colFirst colLast) list(colFirst, colLast) array(colLast, colFirst);

header pack(, record, length);

data pack(, pnn, rwAct, colAct, irefAct, cref, rwFirst, rwLast, colFirst, colLast);

this_append(header.data);

Write BIFF record EXTERNCOUNT to indicate the number of external sheet references in a worksheet.

Excel only stores references to external sheets that are used in formulas.

For simplicity we store references to all the sheets in the workbook regardless of whether they are used or not. This reduces the overall complexity and eliminates the need for a two way dialogue between the formula parser the worksheet objects.

param integer count The number of external sheet references in this worksheet  function _store_externcount(count) record 0x0016;  Record identifier length 0x0002;  Number of bytes to follow header pack(, record, length);

data pack(, count);

this_prepend(header.data);

Writes the Excel BIFF EXTERNSHEET record. These references are used by formulas. A formula references a sheet name via an index. Since we store a reference to all of the external worksheets the EXTERNSHEET index is the same as the worksheet index.

param string sheetname The name of a external worksheet  function _store_externsheet(sheetname) record 0x0017;  Record identifier  References to the current sheet are encoded differently to references to  external sheets.

if (thisname sheetname) { sheetname '';

length 0x02;  The following 2 bytes cch 1;  The following byte rgch 0x02;  Self reference else { length 0x02 + strlen(sheetname);

cch strlen(sheetname);

rgch 0x03;  Reference to a sheet in the current workbook header pack(, record, length);

data pack(, cch, rgch);

this_prepend(header.data.sheetname);

Writes the Excel BIFF PANE record.

The panes can either be frozen or thawed (unfrozen).

Frozen panes are specified in terms of an integer number of rows and columns.

Thawed panes are specified in terms of Excel's units for rows and columns.

param array panes This is the only parameter received and is composed of the following:

0 Vertical split position, 1 Horizontal split position 2 Top row visible 3 Leftmost column visible 4 Active pane  function _store_panes(panes) y panes;

x panes;

rwTop panes;

colLeft panes;

if(count(panes) 4) {  if Active pane was received pnnAct panes;

else { pnnAct NULL;

record 0x0041;  Record identifier length 0x000A;  Number of bytes to follow  Code specific to frozen or thawed panes.

if (this_frozen) {  Set default values for rwTop and colLeft if(!isset(rwTop)) { rwTop y;

if(!isset(colLeft)) { colLeft x;

else {  Set default values for rwTop and colLeft if(!isset(rwTop)) { rwTop 0;

if(!isset(colLeft)) { colLeft 0;

Convert Excel's row and column units to the internal units.

The default row height is 12.75

The default column width is 8.43

The following slope and intersection values were interpolated.

y 20y + 255;

x 113.879x + 390;

Determine which pane should be active. There is also the undocumented  option to override this should it be necessary: may be removed later.

if (!isset(pnnAct)) if (x ! 0 and y ! 0)

pnnAct 0;  Bottom right if (x ! 0 and y 0) pnnAct 1;  Top right if (x 0 and y ! 0)

pnnAct 2;  Bottom left if (x 0 and y 0) pnnAct 3;  Top left this_active_pane pnnAct;  Used in _store_selection header pack(, record, length);

data pack(, x, y, rwTop, colLeft, pnnAct);

this_append(header.data);

Store the page setup SETUP BIFF record.

function _store_setup() record 0x00A1;  Record identifier length 0x0022;  Number of bytes to follow iPaperSize this_paper_size;  Paper size iScale this_print_scale;  Print scaling factor iPageStart 0x01;  Starting page number iFitWidth this_fit_width;  Fit to number of pages wide iFitHeight this_fit_height;  Fit to number of pages high grbit 0x00;  Option flags iRes 0x0258;  Print resolution iVRes 0x0258;  Vertical print resolution numHdr this_margin_head;  Header Margin numFtr this_margin_foot;  Footer Margin iCopies 0x01;  Number of copies fLeftToRight 0x0;  Print over then down fLandscape this_orientation;  Page orientation fNoPls 0x0;  Setup not read from printer fNoColor 0x0;  Print black and white fDraft 0x0;  Print draft quality fNotes 0x0;  Print notes fNoOrient 0x0;  Orientation not set fUsePage 0x0;  Use custom starting page grbit fLeftToRight;

grbit | fLandscape 1;

grbit | fNoPls 2;

grbit | fNoColor 3;

grbit | fDraft 4;

grbit | fNotes 5;

grbit | fNoOrient 6;

grbit | fUsePage 7;

numHdr pack(, numHdr);

numFtr pack(, numFtr);

if (this_byte_order)  if it's Big Endian numHdr strrev(numHdr);

numFtr strrev(numFtr);

header pack(, record, length);

data1 pack(, iPaperSize, iScale, iPageStart, iFitWidth, iFitHeight, grbit, iRes, iVRes);

data2 numHdr.numFtr;

data3 pack(, iCopies);

this_prepend(header.data1.data2.data3);

Store the header caption BIFF record.

function store_header() record 0x0014;  Record identifier str this_header;  header string cch strlen(str);  Length of header string length 1 + cch;  Bytes to follow header pack(, record, length);

data pack(, cch);

this_append(header.data.str);

Store the footer caption BIFF record.

function store_footer() record 0x0015;  Record identifier str this_footer;  Footer string cch strlen(str);  Length of footer string length 1 + cch;  Bytes to follow header pack(, record, length);

data pack(, cch);

this_append(header.data.str);

Store the horizontal centering HCENTER BIFF record.

function store_hcenter() record 0x0083;  Record identifier length 0x0002;  Bytes to follow fHCenter this_hcenter;  Horizontal centering header pack(, record, length);

data pack(, fHCenter);

this_append(header.data);

Store the vertical centering VCENTER BIFF record.

function store_vcenter() record 0x0084;  Record identifier length 0x0002;  Bytes to follow fVCenter this_vcenter;  Horizontal centering header pack(, record, length);

data pack(, fVCenter);

this_append(header.data);

Store the LEFTMARGIN BIFF record.

function _store_margin_left() record 0x0026;  Record identifier length 0x0008;  Bytes to follow margin this_margin_left;  Margin in inches header pack(, record, length);

data pack(, margin);

if (this_byte_order)  if it's Big Endian { data strrev(data);

this_append(header.data);

Store the RIGHTMARGIN BIFF record.

function _store_margin_right() record 0x0027;  Record identifier length 0x0008;  Bytes to follow margin this_margin_right;  Margin in inches header pack(, record, length);

data pack(, margin);

if (this_byte_order)  if it's Big Endian { data strrev(data);

this_append(header.data);

Store the TOPMARGIN BIFF record.

function _store_margin_top() record 0x0028;  Record identifier length 0x0008;  Bytes to follow margin this_margin_top;  Margin in inches header pack(, record, length);

data pack(, margin);

if (this_byte_order)  if it's Big Endian { data strrev(data);

this_append(header.data);

Store the BOTTOMMARGIN BIFF record.

function _store_margin_bottom() record 0x0029;  Record identifier length 0x0008;  Bytes to follow margin this_margin_bottom;  Margin in inches header pack(, record, length);

data pack(, margin);

if (this_byte_order)  if it's Big Endian { data strrev(data);

this_append(header.data);

This is an Excel972000 method. It is required to perform more complicated merging than the normal set_align('merge'). It merges the area given by its arguments.

access public param integer first_row First row of the area to merge param integer first_col First column of the area to merge param integer last_row Last row of the area to merge param integer last_col Last column of the area to merge  function merge_cells(first_row, first_col, last_row, last_col) record 0x00E5;  Record identifier length 0x000A;  Bytes to follow cref 1;  Number of refs  Swap last rowcol for first rowcol as necessary if (first_row last_row) { list(first_row, last_row) array(last_row, first_row);

if (first_col last_col) { list(first_col, last_col) array(last_col, first_col);

header pack(, record, length);

data pack(, cref, first_row, last_row, first_col, last_col);

this_append(header.data);

Write the PRINTHEADERS BIFF record.

function _store_print_headers() record 0x002a;  Record identifier length 0x0002;  Bytes to follow fPrintRwCol this_print_headers;  Boolean flag header pack(, record, length);

data pack(, fPrintRwCol);

this_prepend(header.data);

Write the PRINTGRIDLINES BIFF record. Must be used in conjunction with the GRIDSET record.

function _store_print_gridlines() record 0x002b;  Record identifier length 0x0002;  Bytes to follow fPrintGrid this_print_gridlines;  Boolean flag header pack(, record, length);

data pack(, fPrintGrid);

this_prepend(header.data);

Write the GRIDSET BIFF record. Must be used in conjunction with the PRINTGRIDLINES record.

function _store_gridset() record 0x0082;  Record identifier length 0x0002;  Bytes to follow fGridSet !(this_print_gridlines);  Boolean flag header pack(, record, length);

data pack(, fGridSet);

this_prepend(header.data);

Write the WSBOOL BIFF record, mainly for fittopage. Used in conjunction with the SETUP record.

function _store_wsbool() record 0x0081;  Record identifier length 0x0002;  Bytes to follow  The only option that is of interest is the flag for fit to page. So we  set all the options in one go.

if (this_fit_page) { grbit 0x05c1;

else { grbit 0x04c1;

header pack(, record, length);

data pack(, grbit);

this_prepend(header.data);

Write the HORIZONTALPAGEBREAKS BIFF record.

function _store_hbreak()  Return if the user hasn't specified pagebreaks if(empty(this_hbreaks)) { return;

Sort and filter array of page breaks breaks this_hbreaks;

sort(breaks,SORT_NUMERIC);

if(breaks 0) {  don't use first break if it's 0 array_shift(breaks);

record 0x001b;  Record identifier cbrk count(breaks);  Number of page breaks length (cbrk + 1) 2;  Bytes to follow header pack(, record, length);

data pack(, cbrk);

Append each page break foreach(breaks as break) { data. pack(, break);

this_prepend(header.data);

Write the VERTICALPAGEBREAKS BIFF record.

function _store_vbreak()  Return if the user hasn't specified pagebreaks if(empty(this_vbreaks)) { return;

1000 vertical pagebreaks appears to be an internal Excel 5 limit.

It is slightly higher in Excel 97200, approx. 1026

breaks array_slice(this_vbreaks,0,1000);

Sort and filter array of page breaks sort(breaks,SORT_NUMERIC);

if(breaks 0) {  don't use first break if it's 0 array_shift(breaks);

record 0x001a;  Record identifier cbrk count(breaks);  Number of page breaks length (cbrk + 1) 2;  Bytes to follow header pack(, record, length);

data pack(, cbrk);

Append each page break foreach (breaks as break) { data. pack(, break);

this_prepend(header.data);

Set the Biff PROTECT record to indicate that the worksheet is protected.

function _store_protect()  Exit unless sheet protection has been specified if(this_protect 0) { return;

record 0x0012;  Record identifier length 0x0002;  Bytes to follow fLock this_protect;  Worksheet is protected header pack(, record, length);

data pack(, fLock);

this_prepend(header.data);

Write the worksheet PASSWORD record.

function _store_password()  Exit unless sheet protection and password have been specified if((this_protect 0) or (!isset(this_password))) { return;

record 0x0013;  Record identifier length 0x0002;  Bytes to follow wPassword this_password;  Encoded password header pack(, record, length);

data pack(, wPassword);

this_prepend(header.data);

Insert a 24bit bitmap image in a worksheet. The main record required is IMDATA but it must be proceeded by a OBJ record to define its position.

access public param integer row The row we are going to insert the bitmap into param integer col The column we are going to insert the bitmap into param string bitmap The bitmap filename param integer x The horizontal position (offset) of the image inside the cell.

param integer y The vertical position (offset) of the image inside the cell.

param integer scale_x The horizontal scale param integer scale_y The vertical scale  function insert_bitmap(row, col, bitmap, x 0, y 0, scale_x 1, scale_y 1) list(width, height, size, data) this_process_bitmap(bitmap);

Scale the frame of the image.

width scale_x;

height scale_y;

Calculate the vertices of the image and write the OBJ record this_position_image(col, row, x, y, width, height);

Write the IMDATA record to store the bitmap data record 0x007f;

length 8 + size;

cf 0x09;

env 0x01;

lcb size;

header pack(, record, length, cf, env, lcb);

this_append(header.data);

Calculate the vertices that define the position of the image as required by the OBJ record.

+++

| A | B | ++++ | |(x1,y1) | | | 1 |(A1)._______|______ | | | | | | | | | | | ++| BITMAP |+ | | | | | | 2 | |______________. | | | | (B2)| | | | (x2,y2)| + +++ Example of a bitmap that covers some of the area from cell A1 to cell B2.

Based on the width and height of the bitmap we need to calculate 8 vars:

col_start, row_start, col_end, row_end, x1, y1, x2, y2.

The width and height of the cells are also variable and have to be taken into account.

The values of col_start and row_start are passed in from the calling function. The values of col_end and row_end are calculated by subtracting the width and height of the bitmap from the width and height of the underlying cells.

The vertices are expressed as a percentage of the underlying cell width as follows (rhs values are in pixels):

x1 X  W 1024 y1 Y  H 256 x2 (X1)  W 1024 y2 (Y1)  H 256 Where: X is distance from the left side of the underlying cell Y is distance from the top of the underlying cell W is the width of the cell H is the height of the cell note the SDK incorrectly states that the height should be expressed as a percentage of 1024.

param integer col_start Col containing upper left corner of object param integer row_start Row containing top left corner of object param integer x1 Distance to left side of object param integer y1 Distance to top of object param integer width Width of image frame param integer height Height of image frame  function _position_image(col_start, row_start, x1, y1, width, height)  Initialise end cell to the same as the start cell col_end col_start;  Col containing lower right corner of object row_end row_start;  Row containing bottom right corner of object  Zero the specified offset if greater than the cell dimensions if (x1 thissize_col(col_start)) x1 0;

if (y1 thissize_row(row_start)) y1 0;

width width + x1 1;

height height + y1 1;

Subtract the underlying cell widths to find the end cell of the image while (width thissize_col(col_end)) { width thissize_col(col_end);

col_end++;

Subtract the underlying cell heights to find the end cell of the image while (height thissize_row(row_end)) { height thissize_row(row_end);

row_end++;

Bitmap isn't allowed to start or finish in a hidden cell, i.e. a cell  with zero eight or width.

if (thissize_col(col_start) 0) return;

if (thissize_col(col_end) 0) return;

if (thissize_row(row_start) 0) return;

if (thissize_row(row_end) 0) return;

Convert the pixel values to the percentage value expected by Excel x1 x1  thissize_col(col_start) 1024;

y1 y1  thissize_row(row_start) 256;

x2 width  thissize_col(col_end) 1024;  Distance to right side of object y2 height  thissize_row(row_end) 256;  Distance to bottom of object this_store_obj_picture( col_start, x1, row_start, y1, col_end, x2, row_end, y2 );

Convert the width of a cell from user's units to pixels. By interpolation the relationship is: y 7x +5. If the width hasn't been set by the user we use the default value. If the col is hidden we use a value of zero.

param integer col The column return integer The width in pixels  function size_col(col)  Look up the cell value to see if it has been changed if (isset(thiscol_sizes)) { if (thiscol_sizes 0) { return(0);

else { return(floor(7 thiscol_sizes + 5));

else { return(64);

Convert the height of a cell from user's units to pixels. By interpolation the relationship is: y 43x. If the height hasn't been set by the user we use the default value. If the row is hidden we use a value of zero. (Not possible to hide row yet).

param integer row The row return integer The width in pixels  function size_row(row)  Look up the cell value to see if it has been changed if (isset(thisrow_sizes)) { if (thisrow_sizes 0) { return(0);

else { return(floor(43 thisrow_sizes));

else { return(17);

Store the OBJ record that precedes an IMDATA record. This could be generalise to support other Excel objects.

param integer colL Column containing upper left corner of object param integer dxL Distance from left side of cell param integer rwT Row containing top left corner of object param integer dyT Distance from top of cell param integer colR Column containing lower right corner of object param integer dxR Distance from right of cell param integer rwB Row containing bottom right corner of object param integer dyB Distance from bottom of cell  function _store_obj_picture(colL,dxL,rwT,dyT,colR,dxR,rwB,dyB) record 0x005d;  Record identifier length 0x003c;  Bytes to follow cObj 0x0001;  Count of objects in file (set to 1) OT 0x0008;  Object type. 8 Picture id 0x0001;  Object ID grbit 0x0614;  Option flags cbMacro 0x0000;  Length of FMLA structure Reserved1 0x0000;  Reserved Reserved2 0x0000;  Reserved icvBack 0x09;  Background colour icvFore 0x09;  Foreground colour fls 0x00;  Fill pattern fAuto 0x00;  Automatic fill icv 0x08;  Line colour lns 0xff;  Line style lnw 0x01;  Line weight fAutoB 0x00;  Automatic border frs 0x0000;  Frame style cf 0x0009;  Image format, 9 bitmap Reserved3 0x0000;  Reserved cbPictFmla 0x0000;  Length of FMLA structure Reserved4 0x0000;  Reserved grbit2 0x0001;  Option flags Reserved5 0x0000;  Reserved header pack(, record, length);

data pack(, cObj);

data. pack(, OT);

data. pack(, id);

data. pack(, grbit);

data. pack(, colL);

data. pack(, dxL);

data. pack(, rwT);

data. pack(, dyT);

data. pack(, colR);

data. pack(, dxR);

data. pack(, rwB);

data. pack(, dyB);

data. pack(, cbMacro);

data. pack(, Reserved1);

data. pack(, Reserved2);

data. pack(, icvBack);

data. pack(, icvFore);

data. pack(, fls);

data. pack(, fAuto);

data. pack(, icv);

data. pack(, lns);

data. pack(, lnw);

data. pack(, fAutoB);

data. pack(, frs);

data. pack(, cf);

data. pack(, Reserved3);

data. pack(, cbPictFmla);

data. pack(, Reserved4);

data. pack(, grbit2);

data. pack(, Reserved5);

this_append(header.data);

Convert a 24 bit bitmap into the modified internal format used by Windows.

This is described in BITMAPCOREHEADER and BITMAPCOREINFO structures in the MSDN library.

param string bitmap The bitmap to process return array Array with data and properties of the bitmap  function _process_bitmap(bitmap)  Open file.

bmp_fd fopen(bitmap,);

if (!bmp_fd) { die("Couldn't import bitmap");

Slurp the file into a string.

data fread(bmp_fd, filesize(bitmap));

Check that the file is big enough to be a bitmap.

if (strlen(data) 0x36) { die("bitmap doesn't contain enough data.\n");

The first 2 bytes are used to identify the bitmap.

identity unpack(, data);

if (identity ! ) { die("bitmap doesn't appear to be a valid bitmap image.\n");

Remove bitmap data: ID.

data substr(data, 2);

Read and remove the bitmap size. This is more reliable than reading  the data size at offset 0x22.

size_array unpack(, substr(data, 0, 4));

size size_array;

data substr(data, 4);

size 0x36;  Subtract size of bitmap header.

size + 0x0C;  Add size of BIFF header.

Remove bitmap data: reserved, offset, header length.

data substr(data, 12);

Read and remove the bitmap width and height. Verify the sizes.

width_and_height unpack(, substr(data, 0, 8));

width width_and_height;

height width_and_height;

data substr(data, 8);

if (width 0xFFFF) { die("bitmap: largest image width supported is 65k.\n");

if (height 0xFFFF) { die("bitmap: largest image height supported is 65k.\n");

Read and remove the bitmap planes and bpp data. Verify them.

planes_and_bitcount unpack(, substr(data, 0, 4));

data substr(data, 4);

if (planes_and_bitcount ! 24) {  Bitcount die("bitmap isn't a 24bit true color bitmap.\n");

if (planes_and_bitcount ! 1) { die("bitmap: only 1 plane supported in bitmap image.\n");

Read and remove the bitmap compression. Verify compression.

compression unpack(, substr(data, 0, 4));

data substr(data, 4);

compression 0;

if (compression ! 0) { die("bitmap: compression not supported in bitmap image.\n");

Remove bitmap data: data size, hres, vres, colours, imp. colours.

data substr(data, 20);

Add the BITMAPCOREHEADER data header pack(, 0x000c, width, height, 0x01, 0x18);

data header. data;

return (array(width, height, size, data));

Store the window zoom factor. This should be a reduced fraction but for simplicity we will store all fractions with a numerator of 100.

function _store_zoom()  If scale is 100 we don't need to write a record if (this_zoom 100) { return;

record 0x00A0;  Record identifier length 0x0004;  Bytes to follow header pack(, record, length);

data pack(, this_zoom, 100);

this_append(header.data);

Коэффициент текущий ликвидности – это отношение текущих активов к краткосрочным обязательствам. Показывает, какую часть текущих обязательств по кредитам и расчетам можно погасить, мобилизовав все оборотные средства, то есть показывает платежные возможности предприятия, оцениваемые при условии не только своевременных расчетов с дебиторами и благоприятной реализации готовой продукции, но и продажи в случае нужды прочих элементов материальных оборотных средств. Уровень коэффициента зависит от отрасли производства, длительности производственного цикла, структуры запасов и затрат и ряда других факторов, но нормальным все же считается равное 2. Если его значение ниже 1, то это означает отсутствие способности к выполнению краткосрочных обязательств из текущих активов. Слишком высокое значение (3) также нежелательно т.к. это свидетельствует о неэффективном использовании ресурсов, выражающемся в зависимости оборачиваемости средств, вложенных в производственные запасы и оборотные средства.4

Т. е., платежеспособность предприятия в 2013 году находится в достаточно хорошем состоянии не опускаясь ниже минимального значения. Мособлбанк  своими текущими активами покрывает свои обязательства.

Деловая активность предприятия в финансовом аспекте проявляется прежде всего в скорости оборота его средств. Рентабельность предприятия отражает степень прибыльности его деятельности. Анализ деловой активности и рентабельности заключается в исследовании уровней и динамики разнообразных финансовых коэффициентов оборачиваемости и рентабельности, которые являются относительными показателями финансовых результатов деятельности предприятия.

Коэффициенты деловой активности позволяют проанализировать, на сколько эффективно предприятие использует свои средства. Коэффициенты могут выражаться в днях, а также в количестве оборотов того либо иного ресурса предприятия за анализируемый период.5


Таблица 9

Коэффициенты деловой активности предприятия Мособлбанк  за 2011-2013 гг.

Показатели

Ед.

изм.

Годы

Изменение

(+,-)

2011 г.

2012 г.

2013 г.

2012/

2011

2013/

2012

Фондоотдача

руб.

90,88

132,37

87,05

41,50

-45,32

Оборачиваемость средств в расчетах

оборот

24,53

49,53

125,87

25,00

76,34

Оборачиваемость запасов

оборот

5,05

7,97

7,98

2,91

0,01

Период оборачиваемости запасов

дни

72,23

45,82

45,74

-26,41

-0,08

Оборачиваемость дебиторской задолженности

дни

14,88

7,37

2,90

-7,51

-4,47

Оборачиваемость собственного капитала

оборот

14,74

21,05

13,97

6,31

-7,08

Продолжительность операционного цикла

дни

87,11

53,19

48,64

-33,92

-4,55

Продолжительность финансового цикла

дни

165,91

91,11

77,40

-74,80

-13,71

Показатель фондоотдачи характеризует количество выручки от реализации, приходящейся на рубль основных фондов. Формула расчета показателя фондоотдачи выглядит следующим образом:

                                                                         (1)

где ВР - выручка от реализации, ОС - среднегодовая стоимость основных средств

Данный показатель составил в Мособлбанк  по данным 2013 года 87,05 руб., что ниже показателя предыдущего года на 45,32 руб. То есть на 1 рубль, вложенных в основные средства, приходится 87,05 рубля выручки.

Увеличение оборачиваемости средств в расчетах на предприятии Мособлбанк  в 2013 году характеризуется как положительная тенденция, когда снижение оборачиваемости может говорить либо о снижении объема продаж, либо о снижении спроса на продукцию, либо же об росте дебиторской задолженности.

Формула расчета оборачиваемости средств в расчетах выглядит следующим образом:

                                                                     (2)

где ВР - выручка от реализации, ДЗ - средняя величина дебиторской задолженности

Данный показатель рассчитывается в оборотах. Если для анализа необходимо получить значение показателя в днях, то 365 дней необходимо разделить количество оборотов.

Оборачиваемость запасов - показатель, характеризующий скорость потребления или реализации сырья или запасов.

Формула его расчета выглядит так:

                                                                                (3)

где, ВР - выручка от реализации, ЗЗ - средняя стоимость запасов и затрат.6

Если полученный коэффициент слишком высок (по сравнению с предыдущим периодом или со средними данными), это может указывать на недостаточность запасов.

Если же коэффициент слишком низок, то это может означать, что товарные запасы велики или не пользуются спросом. Например, коэффициент, равный 3,

На Мособлбанк  имеется тенденция к увеличению данного коэффициента, в 2013 году он равен 7,98, это означает, что данный товар или группа товаров в течение месяца оборачивается около 8 раз.

Оборачиваемость кредиторской задолженности - показатель, связывающий сумму денег, которую организация должна вернуть кредиторам (в основном, поставщикам) к определенному сроку, и текущую величину закупок либо приобретенных у кредиторов товаров/услуг. Как правило, данный показатель бывает выражен в календарных днях, характеризующих средний срок оплаты за товары и/или услуги, приобретенные в кредит.

Формула оборачиваемости кредиторской задолженности (в днях) представлена ниже:

                                                                             (4)

где КЗ - средняя кредиторская задолженность * интервал анализа, СР - себестоимость реализации, либо выручка от реализации.

Высокая доля кредиторской задолженности снижает финансовую устойчивость и платежеспособность организации, однако кредиторская задолженность, если эта задолженность поставщикам и подрядчикам "дает" предприятию возможность пользоваться "бесплатными" деньгами на время ее существования.7

На Мособлбанк  данный показатель снижается в течении рассматриваемых периодов и на конец 2013 года составляет 28,76 дней. Скорость оборота собственного капитала отражает активность использования денежных средств.

Низкое значение этого показателя свидетельствует о бездействии части собственных средств. Увеличение оборачиваемости говорит о том, что собственные средства предприятия вводятся в оборот

Формула расчета показателя выглядит так:

                                                                         (5)

Операционный цикл равен времени между закупкой сырья и материалов или товаров и получением выручки от реализации продукции.

                            (6)

На Мособлбанк  при снижении операционного цикла при прочих равных условиях снижается время между закупкой сырья и полочением выручки, вследствие чего растет рентабельность. Соответственно снижение данного показателя в днях благоприятно характеризует деятельность организации

Финансовый цикл - начинается с момента оплаты поставщикам материалов (погашение кредиторской задолженности), заканчивается в момент получения денег от покупателей за отгруженную продукцию (погашение дебиторской задолженности).

                                                               (7)

где ОЦпрод - продолжительность операционного цикла (в днях), Об кз - Оборачиваемость кредиторской задолженности (в днях).

Продолжительность финансового цикла на Мособлбанк  в течении анализируемых периодов снижается и в 2013 году составляет 77,4 дней.

Показатели финансовой устойчивости Мособлбанк  представлены в таблице 10.8


Таблица 10

Показатели финансовой устойчивости Мособлбанк  по состоянию на 31 декабря 2011-2013 гг.

Показатели

Норма

На 31.12.10 г.

На 31.12.11 г.

На

31.12.12 г.

Изменение (+,-)

2012/2011

2013/2012

1.Коэффициент финансовой независимости (автономии) (стр.1300/стр.1700)

Ка  =   собственный капитал

         итого баланса нетто

0,4-0,6

0,307

0,345

0,578

0,038

0,233

2.Коэффициент соотношения заемных и собственных средств (капитализации) (стр.1400+1500/стр.1300)

Кз =   обязательства организации

собственные средства

 1,5

2,256

1,896

0,731

-0,360

-1,166

3.Коэффициент маневренности собственного капитала (стр.1300 + стр. 1400 - стр.1100 / стр. 1300)

                                       собственные оборотные

Км =               ______средства_________

                источники собственных средств

 0,1

0,863

0,826

0,844

-0,037

0,018

4. Коэффициент обеспеченности собственными оборотными средствами (стр.1300 + стр. 1400 - стр.1100/стр.1200)

                                       собственные оборотные

Косс =     _____ средства______

                                       оборотные активы

 0,1

0,277

0,303

0,536

0,027

0,233

5.Коэффициент соотношения собственных и привлеченных средств (финансирования) (стр. 1300/стр. 1400+1500)

Кзс =   собственный капитал

           привлеченный капитал

 0,7

0,443

0,527

1,369

0,084

0,841

6. Коэффициент финансовой устойчивости (стр.1300+1400/ стр.1700)

Кн =  Собственный капитал + долгосрочные обязательства

                                  валюта баланса-нетто

>0,6

0,311

0,349

0,592

0,037

0,243

Коэффициент автономии, характеризующий долю собственников организации в общей сумме средств, авансируемых в ее деятельность в организации в 2011 году составлял 0,307, а в 2012 – 0,345, в 2013 году происходит увеличение до 0,578. Так значение показателя соответсвует нормативному, это говорит о финансовой устойчивости, стабильности и независимости от внешних кредиторов положения предприятия.

Коэффициент соотношения заемных и собственных средств, который показывает, какая величина средств, авансируемых в деятельность организации финансируется за счет привлеченных источников на начало 2012 года составил 2,256 , на конец 2012 года – 1,896, а в 2013 году 0,731. За 2011 и 2012 гг. показатели превышают 1,5, что говорит о финансовой неустойчивости, а в 2013 году не превышает.9

Коэффициент маневренности, оказывающий какая часть собственного капитала используется для финансирования текущей деятельности, то есть, вложена в оборотные средства, а какая часть капитализирована в 2011 году составлял 0,863, что соответствует нормативному значению, в 2012 – 0,826, то есть соответствует нормативу, и в 2013 году снижается и составляет 0,844.  

Коэффициент обеспеченности оборотных активов собственными оборотными средствами на протяжении всех анализируемых периодов выше нормы в 2011 году – 0,2,77, в 2012 году – 0,303, а в 2013 году – 0,536. Коэффициент показывает, какая часть оборотных активов финансируется за счет собственных источников.

Коэффициент соотношения собственных и привлеченных средств показывает, какая часть деятельности организации финансируется за счет собственных средств и этот показатель на предприятии Мособлбанк  в 2013 году выше нормы.

Коэффициент финансовой устойчивости в 2011 и 2012 году составляет около 0,3, а в 2013 году коэффициент увеличивается до 0,592, коэффициент показывает какая часть активов, финансируется за счет устойчивых источников.

Далее рассмотрим рентабельность предприятия Мособлбанк  таблица 11.

  Таблица 11

Показатели рентабельности на Мособлбанк  за 2011-2013 гг.

Показатели

2011 г.

2012 г.

2013 г.

Изменение(+,-)

Темп роста, %

2012/ 2011

2013/
2012

2012/ 2011

2013/
2012

Прибыль от продаж

7269

3642

3000

-3627

-642

50,10

82,37

Прибыль до налогообложения

7224

3541

2952

-3683

-589

49,02

83,37

Чистая прибыль

5696

2816

1767

-2880

-1049

49,44

62,75

Себестоимость продукции

56201

138759

213269

82558

74510

В 2,5 раза

153,70

Выручка от продаж

67166

149517

232865

82351

83348

В 2 раз

155,74

Среднегодовая стоимость активов

17622

21602

33813

3980

12211

122,59

156,53

Среднегодовая стоимость капитала

5411

7104

16671

1693

9567

131,28

В 2 раза

Рентабельность продукции, %

12,93

2,62

1,41

-10,31

-1,22

х

х

Рентабельность продаж, %

10,82

2,44

1,29

-8,39

-1,15

х

х

Рентабельность активов, %

41,00

16,39

8,73

-24,60

-7,66

х

х

Рентабельность собственного капитала, %

1,05

0,40

0,11

-0,66

-0,29

х

х

Из табл. 11 видно, что на протяжении не всех рассматриваемых периодов прибыль от продаж снижается, так в 2012 году по сравнению с 20110 годом прибыль уменьшилась на 3627 тыс. руб. (50 %), а в 2013 году на 642 тыс. руб. (на 18 %). Себестоимость продукции повышается, так в 2012 году по сравнению с 2011 годом она увеличилась на  82558 тыс. руб., или в 2,5 раза, а за 2013 год увеличилась на 74510 тыс. руб. (на 53,7 %). Выручка от продаж за 2012 год увеличилась на 82351 тыс.руб. (в 2 раза), а за 2013 год увеличилась на 83348 тыс. руб. (на 55,74 %).

Рентабельность продукции, характеризующая сколько приходится прибыли на каждый рубль затрат на Мособлбанк  за анализируемые периоды снижается, и в 2013 году составляет 1,41 %, то есть с каждого рубля вложенного в продукцию получено 1,41 руб. прибыли.

Рентабельность продаж показывает, сколько получено прибыли с каждого рубля реализованной продукции. На Мособлбанк  рентабельность продаж снижается, и в 2013 году составила 1,29.

Рентабельность активов, показывающая доходность используемого имущества уменьшилась за 2012 год на 24,6, а за 2013 год на 7,66. Рентабельность собственного капитала, характеризующая прибыльность используемых собственных средств снизилась в 2012 году на 0,66 %, а в 2013 году уменьшилась на 0,29 % по сравнению с 2012 годом.10

В таблице 12 приведены доходов и расходов на примере условных данных.

Таблица 12

Доходы и расходы ОАО «Мособлбанк» на 2014 г.

Факт 2013 г.

Кварталы

План 2014 г.

I

II

III

IV

Продажа

232865

65230

66420

67850

68420

267920

Плюс: запасы сырья на начало периода

0

0

0

0

0

Минус: запасы сырья на конец периода

0

0

0

0

0

Затраты на основные материалы

58769

59854

61160

61673

241455

Затраты на оплату труда основных рабочих

1054

1058

1062

1071

4245

Общепроизводственные расходы

21

24

26

27

98

Плюс: стоимость запасов готовой продукции

Плюс: на начало периода

35595

Минус: на конец периода

32181

Себестоимость продаж

59844

60936

62248

62771

245798

Валовая прибыль

5386

5484

5602

5649

22122

Коммерческие расходы

420

422

428

431

1701

Управленческие расходы

3985

4035

4062

4074

16156

Прибыль от прочей реализации

0

0

0

0

0

Планируемая прибыль от основной деятельности

981

1027

1112

1144

4265

11

В таблице 13 приведен бюджет движения денежных средств ОАО «Мособлбанк».

Таблица 13

Бюджет движения денежных средств ОАО «Мособлбанк» на 2014 год

Факт 2013 г.

Кварталы

План 2014 г.

I

II

III

IV

Остаток на начало периода

305

Поступления денежных средств:

Выручка от продажи (продукции, товаров, услуг)

65230

66420

67850

68420

267920

Авансы от покупателей (заказчиков)

0

0

0

0

0

Итого поступление средств

65230

66420

67850

68420

267920

Платежи:

закупки основных материалов

58769

59854

61160

61673

241455

оплата труда производственных работников

1054

1058

1062

1071

4245

общепроизводственные расходы

21

24

26

27

98

коммерческие расходы

420

422

428

431

1701

управленческие расходы

3985

4035

4062

4074

16156

расчеты с бюджетом (налог на прибыль)

196

205

222

228

851

прочие выплаты

Итого платежей

64445

65598

66960

67504

264506

Чистый денежный поток (разница поступления и выплат денежных средств)

785

822

890

916

3414

Остаток на конец периода

3719

12

Объемы дебиторской и кредиторской задолженностей можно определить исходя из информации о сроках поступлений и выплат, которые используются при составлении бюджета движения денежных средств.

Таблица 14

Прогнозный баланс ОАО «Мособлбанк» на 2014 г.

Факт 2013 г.

Кварталы

План 2014 г.

I

II

III

IV

АКТИВЫ

Текущие активы

42971

12942

13041

12854

13492

40795

Банк и касса (конечное сальдо)

305

135

152

167

189

643

Дебиторы (счета к получению)

3154

952

1023

850

860

3685

Материальные запасы

35595

7960

8021

8043

8157

32181

Прочие

48

52

55

59

62

62

Основные средства

3768

3723

3667

3600

4082

4082

Нематериальные активы

0

0

0

0

0

0

Минус: Износ по основным и нематериальным активам

45

56

67

78

90

90

Прочие активы

101

120

123

135

142

142

ПАССИВЫ

Текущая задолженность

42971

25604

25253

25359

25692

40795

Краткосрочные долги к уплате

0

0

0

0

0

0

Предстоящие выплаты по долгосрочным кредитам

0

0

0

0

0

0

Кредиторы (счета за сырье и пр.)

17550

4120

3850

4012

4498

16480

Проценты по кредитам к уплате

0

0

0

0

0

Налоги и платежи в бюджет

593

196

205

222

228

851

Долгосрочная задолженность

Прочие долгосрочные обязательства

592

453

326

185

0

Собственный капитал

Уставный капитал

20100

20100

20100

20100

20100

20100

Нераспределенная прибыль

4779

981

1027

1112

1144

4265

13

Используя информацию бюджетов рассчитаем приведенные коэффициенты в планируемом периоде.

Таблица 15

Показатели рентабельности ОАО «Мособлбанк» в планируемом периоде

Показатели

2013 г.

2014 г. (план)

Изменение

(+,-)

Рентабельность продукции

1,41

1,74

0,33

Рентабельность продаж

1,29

1,59

0,30

Рентабельность активов

8,24

8,37

0,13

Рентабельность собственного капитала

16,25

17,54

-1,71

Показатели рентабельности  ОАО «Мособлбанк» в планируемом периоде увеличиваются по сравнению с предыдущем периодом, что говорит о повышении эффективности деятельности предприятия.

Таблица 16

Показатели деловой активности ОАО «Мособлбанк» в планируемом периоде

Показатели

Ед. изм.

2013 г.

2014 г. (план)

Изменение

(+,-)

Фондоотдача

Руб.

87,05

68,26

-18,79

Оборачиваемость средств в расчетах

Оборот

125,87

78,35

-47,52

Оборачиваемость запасов

Оборот

7,98

7,91

-0,07

Оборачиваемость кредиторской задолженности

Дни

28,76

25,27

-3,49

Оборачиваемость собственного капитала

Оборот

13,97

10,90

-3,07

Продолжительность операционного цикла

Дни

48,64

50,83

2,18

Продолжительность финансового цикла

Дни

77,40

25,56

-51,84

Как следует из таблицы 16 фондоотдача ОАО «Мособлбанк» в планируемом периоде снижается и составляет 68,26 руб., что на 18 руб. ниже показателя 2013 года.

Оборачиваемость средств в расчетах и оборачиваемость запасов измеряемых в оборотах в планируемом году снижается.

Продолжительность финансового цикла сокращается с 77 дней в 2013 году до 25 дней в 2014 году.

Далее оценим ликвидность ОАО «Мособлбанк» в планируемом году.

Таблица 17

Показатели ликвидности ОАО «Мособлбанк» в планируемом периоде

Показатели

2013 г.

2014 г. (план)

Изменение

(+,-)

Коэффициент абсолютной ликвидности

0,02

0,04

0,02

Коэффициент срочной ликвидности

0,20

0,27

0,07

Коэффициент текущей ликвидности

2,23

2,22

- 0,01

Как видим из таблицы 17, показатели ликвидности на ОАО «Мособлбанк» улучшаются по сравнению с предыдущим годом и соответствуют нормативным значениям.

Оценим финансовую устойчивость ОАО «Мособлбанк» в планируемом периоде.

Таблица 18

Коэффициенты финансовой устойчивости ОАО «Мособлбанк» в планируемом периоде

Показатели

Норма

2013 г.

2014 г. (план)

Изменение

1.Коэффициент финансовой независимости (автономии)

0,4-0,6

0,578

0,596

0,018

2.Коэффициент соотношения заемных и собственных средств (капитализации)

< 1,5

0,731

0,678

-0,053

3.Коэффициент маневренности собственного капитала

> 0,1

0,844

0,832

-0,012

4.Коэффициент обеспеченности собственными оборотными средствами

> 0,1

0,536

0,553

0,017

5.Коэффициент соотношения собственных и привлеченных средств (финансирования)

> 0,7

1,369

1,475

0,106

6. Коэффициент финансовой устойчивости

>0,6

0,592

0,596

0,004

Как следует из таблицы 18 финансовая устойчивость ОАО «Мособлбанк» в планируемом периоде улучшается по сравнению с прошлым годом.

Таким образом, эффективность деятельности ОАО «Мособлбанк» в планируемом периоде должна улучшиться об этом свидетельствует  повышение показателей рентабельности в планируемом году, рассчитанных по данным бюджета доходов и расходов. Хотя не все коэффициенты деловой активности будут иметь тенденцию к увеличению. Ликвидность и финансовая устойчивость предприятия в планируемом периоде улучшается.14

2.3

Оценка эффективности организации обслуживания физических лиц на примере АКБ «Мособлбанк»  ОАО

«Правила кредитования физических лиц ОАО «Мособлбанк» и его филиалами» от 30.07.2003 г. № 442-2-н являются основным нормативным документом ОАО «Мособлбанк»  по кредитованию физических лиц. Правила определяют общий порядок кредитования. Особенности предоставления отдельных видов кредита, оформление кредитной документации, объектов, условий и сроков кредитования устанавливаются дополнительно нормативными документами ОАО «Мособлбанк» .

Проведение операций по кредитованию возложено на следующих сотрудников отделений ОАО «Мособлбанк» :

  1.  на кредитного работника, менеджера – заполнение анкеты заемщика, прием документов от заемщика, их рассмотрение и составление заключения, привлечение других служб к рассмотрению документов, оформление кредитных документов, сопровождение кредитного договора, принятие своевременных мер к возврату просроченной задолженности;
  2.  на работника бухгалтерии – ведение лицевых счетов заемщиков и начисление процентов и неустоек, перечисление средств, своевременное вынесение на счета просроченных ссуд неуплаченных сумм и информирование кредитного работника о не поступлении платежа в установленный срок;
  3.  на операционного работника – проведение непосредственных операций по выдаче наличных денег, приему платежей в счет погашения кредита и т.п.

ОАО «Мособлбанк»  осуществляет выдачу кредитов населению в пределах, имеющихся у него ресурсов. Кредиты предоставляются в рублях и в иностранной валюте. Учреждения ОАО «Мособлбанк» осуществляют выдачу кредитов гражданам России, имеющим постоянную регистрацию (прописку) на территории РФ и постоянный доход. Исключение составляют военнослужащие, имеющие временную прописку.

Оформление кредитов населению в рублях осуществляется в любом учреждении ОАО «Мособлбанк» .

Выдача кредитов производится на основе заключаемых кредитных договоров между банком и индивидуальным заемщиком. За пользование кредитом заемщик уплачивает банку проценты. Уплата процентов производится ежемесячно, одновременно с погашением основного долга, начиная с 1-го числа месяца, следующего за месяцем заключения кредитного договора (если договор заключается в конце месяца, допускается устанавливать в договоре начало погашения кредита и уплаты процентов на месяц позже). Величина процентной ставки устанавливается комитетом ОАО «Мособлбанк» по процентным ставкам и лимитам. При установлении новой процентной ставки в действующие договоры вносятся изменения.

При обращении клиента в ОАО «Мособлбанк»  за получением кредита уполномоченный сотрудник кредитующего подразделения (далее - кредитный менеджер) выясняет у клиента цель, на которую направлен кредит, разъясняет ему условия и порядок предоставления кредита, знакомит с перечнем документов, необходимых для получения кредита.

Срок рассмотрения вопроса о предоставлении кредита зависит от вида кредита и его суммы, но не должен превышать от момента предоставления полного пакета документов до принятия решения 7 календарных дней.

Для получения кредита Заемщик предоставляет в банк:

  1.  заявление – анкету;
  2.  копия паспорта (разворот с фотографией, прописка, семейное положение, дети);
  3.  копия трудовой книжки, заверенная предприятием;
  4.  документы, подтверждающие финансовое состояние Заемщика и его Поручителя (в случае необходимости);

Далее кредитный инспектор производит проверку предоставленных клиентом документов и сведений, указанных в документах и анкете; определяет платежеспособность клиента и максимально возможный размер кредита.

При проверке сведений кредитный инспектор выясняет с помощью единой базы данных кредитную историю Заемщика и размер задолженности по ранее полученным кредитам; направляет запросы в учреждения ОАО «Мособлбанк» , предоставляющие ему ранее кредиты; при необходимости направляет запросы в другие организации. После одобрения первоначальной заявки программой, кредитующее подразделение направляет пакет документов юридической службе и службе безопасности Банка.

Служба безопасности проводит проверку паспортных данных (данных удостоверения личности), места жительства, места работы Заемщика и сведений, указанных в анкете.

По результатам проверки и анализа документов юридическая служба и служба безопасности составляют письменные заключения, которые передаются в кредитующее подразделение. При положительном заключении следующей процедурой является расчет платежеспособности заемщика.

Платежеспособность Заемщика определяется следующим образом:

Р = Дч*К*t , где

Дч – среднемесячный доход (чистый) за 6 месяцев за вычетом всех обязательных платежей;

К – коэффициент в зависимости от величины Дч;

К = 0,3 при Дч до 30000 рублей,

К = 0,5 при Дч в эквиваленте от 30000 до 60000 рублей,

К = 0,6 при Дч в эквиваленте свыше 60000 рублей;

t – срок кредитования ( в мес.).

Далее величина максимального размера кредита уточняется с учетом благонадежности Заемщика и остатка задолженности по другим кредитам.

Кредитный инспектор составляет письменное заключение о целесообразности выдачи кредита (отказа в выдаче) и согласовывает с Заемщиком условия предоставления кредита.

Заключение кредитного эксперта, зарезервированное руководителем кредитующего подразделения, заключения других служб Банка и дочернего предприятия прилагаются к пакету документов Заемщика.

О принятом решении кредитный инспектор сообщает клиенту, делает соответствующую отметку в журнале регистрации заявлений и на заявлении клиента и помещает пакет документов в дело отказов в выдаче кредитов. Причина отказа в выдаче кредита Заемщику не указывается.

Основными документами, которые составляются при положительном решении, являются: кредитный договор, график погашения кредита и договор срочного обязательства оформляется также в зависимости от вида обеспечения:

  1.  договор поручительства
  2.  договор залога
  3.  другие документы согласно Регламентам ОАО «Мособлбанк» о предоставлении отдельных видов кредитов.

При подписании всех необходимых документов, Заемщику выдается кредит в соответствии с условиями кредитного договора, как наличными деньгами, так и безналичном порядке путем:

  1.  зачисления на счет Заемщика по вкладу до востребования;
  2.  зачисления на счет пластиковой карточки Заемщика;
  3.  оплаты счетов торговых и других организаций.

На сегодняшний день ОАО «Мособлбанк»  является крупнейшим оператором на рынке кредитования физических лиц. Имея богатый опыт в обслуживании массового клиента, и, стремясь наиболее полно удовлетворить потребности заемщиков, ОАО «Мособлбанк»  предлагает физическим лицам 4 основных направления по кредитам.

По срокам возврата ссуды банка подразделяют на долгосрочные и краткосрочные.

Предоставляемые населению кредиты различаются по цели кредитования, виду обеспечения, способу предоставления, срокам возврата, величине процентной ставки, субъектам и объектам кредитования, также имеют особые условия предоставления.

Кредиты населению предполагают различные виды обеспечения возврата кредита. При оформлении договора по кредитной сделке учреждения ОАО «Мособлбанк» принимают:

1). Поручительства граждан РФ, имеющих постоянный источник дохода;

2). Поручительства платежеспособных предприятий и организаций – клиентов ОАО «Мособлбанк» ;

3). Залог объектов недвижимости, транспортных средств и другого высоколиквидного имущества.

ОАО «Мособлбанк»  осуществляет кредитование физических лиц по следующим видам кредитов:

Первый вид кредитования – это кредиты наличными, которые включают следующие направления: отличный кредит наличными, отличный кредит наличными промо, кредит свои люди, кредит семейный, экспресс-кредит, кредит деловым людям.

Отличный кредит: Сумма кредита 76 000 - 750 000 рублей включительно, срок кредита от 1 до 60 месяцев. Процентная ставка зависит от срока: срок кредита 1-12 мес., базовая ставка: 23,9% (ставка может быть увеличена до: 25,9%, 27,9%).Срок кредита 13-24 мес. - базовая ставка: 27,9% (ставка может быть увеличена до: 29,9%, 31,9%), срок кредита 25-60 мес. - базовая ставка: 31,9% (ставка может быть увеличена до: 33,9%, 35,9%). Поручительства не требуется.

Отличный кредит промо: Сумма кредита 50 000 - 150 000 рублей включительно, срок кредита от 1 до 6 месяцев, процентная ставка кредита сроком 1-3 мес.- 11,9%, 4-6 мес.- 14,9%. Поручительства не требуется.

Кредит «Свои люди»: Специальное льготное предложение для клиентов Банка - добросовестных заемщиков и вкладчиков, имеющих историю размещения вклада не менее 4 месяцев. Сумма кредита 15 000 - 750 000 рублей включительно, срок кредита до 5 лет.

Процентная ставка: срок кредита 1-12 мес., то базовая ставка 21,9% (ставка может быть увеличена до: 23,9%, 25,9%); срок кредита 13-60 мес., базовая ставка: 25,9% (ставка может быть увеличена до: 29,9%, 31,9%). Поручительства не требуется.

Кредит "Семейный": Сумма кредита 15 000 - 200 000 рублей включительно, срок кредитования 48 месяцев. Процентная ставка при сроке кредита 1 - 12 мес., базовая ставка: 23,9% (ставка может быть увеличена до: 25,9%, 27,9%), срок кредита 13 - 24 мес., то базовая ставка 27,9% (ставка может быть увеличена до: 29,9%, 31,9%), срок кредита 25 - 48 мес., то базовая ставка: 31,9% (ставка может быть увеличена до: 33,9%, 35,9%). Требуется поручительство физического лица, соответствующего требованиям Банка и состоящего в зарегистрированном браке с Заемщиком, либо являющегося родителем или совершеннолетним ребенком Заемщика.

Экспресс-Кредит: Специальное предложение - кредит за 15 минут всего по двум документам. Сумма кредита 15 000 - 75 000 рублей. Срок кредита 1-36 мес. Процентная ставка: 1-12 мес. , то базовая ставка: 35,9% (ставка может быть увеличена до: 41,9%, 47,9%), 13-36 мес., то базовая ставка: 47,9% (ставка может быть увеличена до: 53,9%, 59,9%). Поручительства не требуется.

Кредит деловым людям: Срок кредита 1-60 месяцев, сумма кредита15 000 - 750 000 рублей. Сумма кредита для учредителей /акционеров организаций, индивидуальных предпринимателей, нотариусов 15 000 - 400 000 рублей. Процентная ставка при сроке кредита 1-12 мес. базовая ставка: 27,9% (ставка может быть увеличена до 29,9%; 31,9%), срок кредита 13-60 мес. , то базовая ставка: 31,9% (ставка может быть увеличена до 33,9%; 35,9%).

Сумма кредита для учредителей /акционеров организаций, которые находятся на РКО в Банке 15 000 - 750 000 рублей. При сроке кредита 1-12 мес., базовая ставка 25,9% (ставка может быть увеличена до 27,9%; 29,9%), срок кредита 13-60 мес. базовая ставка: 29,9% (ставка может быть увеличена до 31,9%; 33,9%).

Второй вид кредитования – это автокредиты.

Автокредит "Купи авто за 10%": Кредит на новые автомобили иностранного и отечественного производства с минимальным первоначальным взносом 10% , время рассмотрения - 1 день; решение о выдаче кредита действительно в течение 60 календарных дней; выбор даты внесения ежемесячного платежа, в сумму кредита могут быть включены страховые премии; валюта кредита Рубли РФ, Доллары США, Евро. Срок кредита до 5 лет.

Ежемесячная плата по кредиту (проценты, начисляемые на остаток ссудной задолженности), % годовых при сроке кредита до 1 года включительно 12%, при сроке от 1 года до 3 лет включительно 14% годовых, срок от 3 до 5 лет включительно 15% , срок до 5 лет включительно 11% годовых.

Минимальный первоначальный взнос 10% от суммы кредита. Минимальная сумма кредита 60 000 рублей РФ или эквивалент в долларах США/евро по курсу ЦБ РФ. Максимальная сумма кредита на автомобили иностранного производства – 800 000 рублей РФ, на автомобили отечественного производства – 450 000 рублей РФ или эквивалент в долларах США/евро по курсу.

Обязательным условием данного кредитования является поручительство.

Автокредит "Классика": Кредит на приобретение автомобиля иностранного и отечественного производства в салоне любого официального дилера или неофициального дилера, прошедшего проверку ОАО «Мособлбанк» . Срок кредита 5 лет. Процентная ставка в зависимости от срока: до 1 года включительно - 9,9 % годовых, от 1 года до 3 лет включительно - 13,5 %, от 3 до 5 лет - 14,5% годовых, до 5 лет – 10,5%.

На автомобили иностранного производства – 1 500 000 рублей РФ, на автомобили отечественного производства – 450 000 рублей РФ или эквивалент в долларах США/евро по курсу ЦБ РФ. Поручительства не требуется, но требуется обязательное подтверждение дохода в виде справки 2- НДФЛ.

Автокредит "Премиум": Программа действует для новых автомобилей иностранного производства стоимостью от 800 000 рублей РФ Срок кредита до 5 лет. Процентная ставка: срок до 1 года 9,9% годовых, от 1 года до 3 лет – 13% годовых, от 3 до 5 лет – 14%, до 5 лет – 9% годовых.

Максимальная сумма кредита на автомобили иностранного производства - 2 млн. рублей РФ или эквивалент в долларах США/евро по курсу ЦБ РФ.

Третий вид кредитования – ипотека. Цель ипотечного кредита – покупка квартиры или жилого дома с земельным участком (правами аренды земельного участка). Срок кредита - от 1 года до 30 лет. Минимальная сумма кредита - 10 000 долларов США, 7 000 евро, 10 000 швейцарских франков, 300 000 рублей РФ. Единовременная плата по кредиту - 1% от суммы кредита. Валюта кредита на покупку квартиры/дома: доллары США, евро, швейцарские франки, рубли РФ.

Процентная ставка в зависимости от срока: от 1 до 10 лет - 13,5% годовых, сроком от 10 до 20 лет - 14,5%, от 20 до 30 лет - 15,5% годовых.

Основное обеспечение: ипотека (залог) покупаемого жилого помещения и/или имеющегося жилого помещения (квартира или жилой дом с земельным участком/с правами аренды земельного участка). Дополнительное обеспечение: поручительство супруга, если он не является созаемщиком.

Четвертый вид страхования – кредиты в магазинах или потребительский кредит. Если вы хотите приобрести товар, но не хватает средств, тогда вам нужен потребительский кредит. Его оформляют представители банка в торговых центрах, ставки, срок и минимальный платеж определяется банком в зависимости от приобретаемого товара и самого торгового центра.15

Кредитование физических лиц одна из самых доходных операций банка, направленная на размещение собственных и привлеченных средств банка. Кредитные операции наиболее полно отражают цель банковской деятельности - получение прибыли, т. е. доходное размещение собственных и привлеченных средств.

Размещаются средства от имени банка, но самому банку его основные ресурсы – привлеченные средства не принадлежат, что предопределяет высокий риск и ответственность за проведение активных операций.

Необходимость рационального распределения рисков для предотвращения возможных убытков делает невозможным вложения средств лишь в высокодоходные операции, предполагает использование разнообразных с позиции риска и доходности операций. Кредиты клиентам – это ссудная задолженность по всем заемщикам банка и отличается высокой доходностью и высоким риском.

В определении стратегии и тактики банка в области кредитования ведущее значение принадлежит кредитной политике.

Кредитная политика является общим инструментом организации кредитной деятельности банка и представляет собой совокупность основополагающих базисных принципов и направлений, реализуемых в построении кредитных взаимоотношений между банком и заемщиком.

Целью кредитной политики является извлечение прибыли в условиях эффективного управления ресурсами банковской деятельности при соблюдении требований законодательства.

Изучение кредитных вложений позволяет оценить обоснованность принятой банком кредитной политики и степень ее реализации исходя из фактического состояния кредитного портфеля, выявить наиболее сомнительные и рисковые операции, направления для кредитного менеджмента. Поэтому для предоставления кредита обязательно составляется меморандум, в том числе и по кредитам для физических лиц. Меморандум – это детальное описание клиента – описании заемщика, кредитная история клиента (анализ), заключение по анализу, обеспечение кредита, оценка кредитных рисков, риск невозможности использования обеспечения, финансовые риски.

Кредитный меморандум является единственным унифицированным документом к любому кредитному проекту и содержит следующие основные разделы:

  1.  Преамбула.

В ней должна содержаться следующая информация – кем и когда подготовлен Кредитный меморандум и с чьего одобрения выносится на рассмотрение Кредитного комитета, суть выносимого вопроса, изложение просьбы клиента и решение по данному вопросу Кредитного комитета Филиала с приложением копии данного решения. То есть, какую сумму и на какой срок хочет взять заемщик.

  1.  Описание заемщика.

В разделе должна содержаться следующая информация:

  1.  полное наименование заемщика, статус, адрес, семейное положение;
  2.  основные виды доходы заемщика за предшествующий финансовый год;
  3.  средняя заработная плата за прошедший финансовый год;
  4.  характер взаимоотношений с банком, кредитная история в банке.
  5.  Анализ финансового состояния заемщика

В разделе должна содержаться следующая информация, полученная на основе доходов Заемщика:

  1.  структура доходов и расходов;
  2.  наличие задолженности по кредитам, полученным в других банках с указанием целей, на которые эти кредиты направлены;
  3.  сумма остатка долга по другим кредитам и срок погашения данных кредитов.
  4.  Описание проекта

В разделе содержится описание кредитного проекта, под который напрашивается кредит, с указанием цели и конкретных направлений использования кредитных ресурсов.

  1.  Обеспечение кредита

В данном разделе должен быть дан анализ предполагаемого обеспечения кредита с точки зрения его ликвидности, надежности, достаточности для покрытия кредитных рисков по сделке, отражен порядок оформления прав Банка на обеспечение и, в случае необходимости, механизм реализации прав Банка в случае ненадлежащего исполнения заемщиком своих обязательств (залог движимого и недвижимого имущества, поручительства третьих лиц).

  1.  Оценка кредитных рисков

В разделе должны быть отражены разнонаправленные повышающие и понижающие кредитные риски по кредитному проекту.

  1.  Условия предоставления кредита

В данном разделе должны быть отражены основные стоимостные условия предоставления кредита, форма предоставления кредита, предполагаемое обеспечение, график использования и график погашения кредита, необходимые предварительные условия использования кредита и обязательства заемщика по кредитному договору,

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

В заключение должна быть четко сформулирована просьба по предлагаемому кредитному проекту вниманию кредитного комитета.

Лидером рейтинга по кредитованию физических лиц, без учета ипотеки, в 2014 году стал «Сбербанк», объем выданных кредитов которого достиг 485,7 млрд. рублей, а прирост за год составил 9,76%. Второе место с отрицательной динамикой в 13,38% занимает «Русский Стандарт», выдавший кредитов на 193,3 млрд. рублей. ВТБ Банк занимает третье место за 2014 год с наибольшим приростом из всех банков, который составил 192,68%. Четвертое место занимает Альфа – Банк с суммой выдачи 61,3 млрд. рублей, но отрицательным приростом в -10,9%. ОАО «Мособлбанк»  занял пятое место с положительной динамикой в 57,17% и выдал 55,7 млрд. рублей.

Основным локомотивом рынка остается автокредитование, также все большее распространение получает кредит в виде пластиковых кредитных карт. По данным ЦБ России в 2014 году объем выданных кредитов физическим лицам достиг 3,6 трлн. рублей, показав рост всего на 50,37%. По данным агентства РБК рейтинг его рост за 2014 год составил 70%, а объем рынка достиг 578 млрд. рублей. При этом по данным участников рынка, около 40-45% всех проданных автомобилей было приобретено в России в кредит. Лидером по объему кредитов, выданных на покупку автомобиля за 2014 год, стал «Сбербанк России», он выдал более 58,9 млн. рублей, а его рост составил 1018,43%. На втором месте Альфа Банк, выдавший за 2014 год 34,0 млн. рублей. Прирост данного банка по автокредитованию составил 48,97%. ОАО «Мособлбанк»  занимает третье место в автокредитовании, объем выданных им кредитов возрос на 82,61% и достиг 26,4 млн. рублей. Такой высокий прирост объясняется выгодными предложениями Банка по автокредитам, невысокими процентными ставками и небольшими суммами первого взноса за автомобиль.

Для наглядности представлено в рисунке 6.

Рис. 6. Банки, по объемам выданных кредитов физическим лицам в 2014 году (без учета ипотеки), в млрд. рублей

Проведем анализ динамики предоставленных сумм кредитов физическим лицам за 2012 – 2014 года  «ОАО «Мособлбанк» ». Анализ динамики предоставленных сумм кредита показывает, что по сравнению с 2012 годом в 2013 году произошел рост выдачи кредитов на 21,94%, или на 622 млн. рублей, но в 2014 году рост суммы выданных кредитов физическим лицам также произошел, но всего на 8,8% или на 305 млн. рублей. Это связано с открытием еще больше числа филиалов других банков и внедрению на рынок кредитных карт. По количеству операций кредитования произошло увеличение на 536 единиц в 2013 году и на 78 единиц в 2014 году. Это свидетельствует о том, что ОАО «Мособлбанк»  меняет политику предоставления кредитов частным клиентам и больше уделяет внимание платежеспособности заемщика.

Рис. 7. Банки, по объемам выданных автокредитов в 2014 году, в млн. рублей


Таблица 19

Динамика по предоставленным суммам кредитов физическим лицам за 2012 – 2014 года, в млн. рублей

Кредиты, предоставленные физическим лицам

На срок от 91 до 180 дней

На срок от 181 дня до 1 года

На срок от 1 года до 3 лет

На срок свыше 3 лет

Кредиты, предоставленные при недостатке средств на депозитном счете (опердрафт)

ИТОГО

1

2

3

4

5

6

7

Суммы, выданные в 2012 году

105,4

582,9

624,4

215,3

103,08

283,7

Количество в 2012 году

4

639

1481

3012

72

5208

Суммы, выданные в 2013 году

217,7

632,4

659,5

273,5

123,15

345,9

Количество в 2013 году

5

791

1649

3218

82

5744

Суммы, выданные в 2014

319,2

697,2

363,9

305,6

119,3

376,4

Количество в 2014 году

2

871

1274

3595

80

5822

Абсолютное отклонение 2012 – 2013 года

112,2

494,7

351,5

582,0

200,7

622,4

Абсолютное отклонение 2013 – 2014 года

-185,7

647,6

-226,4

321,0

-383,3

304,7

Темп прироста 2012 – 2013 года, %

106,52

8,48

5,63

27,03

19,47

21,94

Темп прироста 2013 – 2014 года, %

- 85,33

10,24

-3,43

11,74

-3,11

8,81

Также можно отметить, что в 2013 году по сравнению с 2012 годом произошло увеличение по всем срокам выдачи кредита. В 2014 году возросли суммы кредитов долгосрочных на 11,7% или 321 млн. рублей, что в количестве операций увеличение на 378 единиц и снизились краткосрочные на 85% или 186 тыс. рублей, по количеству операций кредитования снижение на 375 единиц. Это говорит о том, что население стало кредитоваться на более длительные сроки, то есть 3 и более лет. По удельному весу большую долю в исследуемых годах занимают кредиты сроком свыше 3 лет в общей сумме выданных кредитов 79% в 2013 и 81,2% в 2012 году. По сравнению с 2013 годом, в 2014 году происходит резкое увеличение процентных ставок, но по сравнению с другими банками они остаются ниже.

Рассмотрим субъекты кредитования «ОАО «Мособлбанк» ».

Таблица 20

Анализ субъектов кредитования за 2012 – 2014 года, в млн. рублей

Показатели

Физические лица

ООО, ОАО, ЗАО

Индивидуальные предприниматели

ИТОГО

2012 год

1560,2

907,7

368,8

2836,7

Удельный вес 2012, %

0,55

0,32

0,13

100,00

2013 год

1971,7

968,5

518,9

3459,1

Удельный вес, 2013, %

0,57

0,28

0,15

100,00

2014 год

2258,3

828,03

677,5

3763,8

Удельный вес 2014, %

0,6

0,22

0,18

100,00

Абсолютное отклонение 2012 – 2013 года

411,5

60,8

150,1

622,4

Абсолютное отклонение 2013 – 2014 года

286,6

-140,5

158,6

304,7

Из анализа субъектов кредитования видно, что доля кредитования физических лиц в общем объеме кредитов, выдаваемых филиалом "Первомайский" ОАО «Мособлбанк» , в 2012 году составляет 1560 тысяч рублей, удельный вес составляет 0,55% из общей доли кредитов. По сравнению с 2012 годом в 2013 году доля кредитования физических лиц увеличивается на 411 тысяч рублей, то есть на 0,02%. За 2014 – 2013 год сумма кредитования физических лиц увеличилась на 286 тысяч рублей. Доля кредитования ООО, ЗАО И ОАО с годами уменьшается, если в 2012 году она составляла 0,32%, в 2013 году – 0,28, то в 2014 году – 0,22. Зато доля кредитования индивидуальных предпринимателей увеличивается, по сравнению с 2012 годом в 2014 году произошло увеличение на 0,03%. Можно сделать вывод, что субъекты как ООО, ЗАО И ОАО, и индивидуальные предприниматели начали приобретать одинаковое доверие и платежеспособность, так как удельный вес в группе с годами равняется.

Рис. 8. Субъекты кредитования за 2012 – 2014 года, в млн. рублей

Проведем анализ предоставляемых видов кредитов отделении «ОАО «Мособлбанк» ».

Таблица 21

Анализ видов предоставляемых кредитов за 2012 – 2014 года, в млн. рублей

Показатели

Кредиты в магазине

Кредиты наличными

Автокредит

Ипотека

ИТОГО

2012 год

496,4

669,5

1466,6

204,2

2836,7

Удельный вес 2012, %

17,5

23,6

51,7

7,2

100,00

2013 год

736,8

712,6

1847,2

162,6

3459,1

Удельный вес 2013, %

21,3

20,6

53,4

4,7

100,00

2014 год

733,9

956,0

1953,4

120,4

3763,8

Удельный вес 2014, %

19,5

25,4

51,9

3,2

100,00

Темп роста 2012 – 2013, %

148

106

126

80

122

Темп роста 2013 – 2014, %

99

134

106

74

109

Анализ видов предоставленных кредитов показывает, что доля ипотечного кредитования в основной массе кредитов ежегодно снижается, так как ОАО «Мособлбанк»  меняет свою политику кредитования и начинает уделять внимание другим видам. В 2012 году удельный вес ипотеки составлял 7,2%, а уже в 2014 году 3,2%, то есть за три года произошло снижение удельного веса на 4%. Доля автокредитования занимает наибольшую часть, более 50% ежегодно, так как было сказано ранее, что автокредитование является самым популярным банковским продуктом. Кредиты, выдаваемые наличными, и кредиты, выдаваемые в магазине, занимают почти равную долю, меняющуюся ежегодно не более чем на 4% и в среднем составляют по 20% каждая.

Рис. 9. Виды предоставляемых кредитов за 2012 – 2014 года, в млн. рублей

Подводя итоги второй главы, можно сделать вывод – кредитование физических лиц для ОАО «Мособлбанк» одна из самых значимых операций в плане получения прибыли и привлечения клиентов. На сегодняшний день ОАО «Мособлбанк»  является одним из распространенных банков, предоставляющих кредиты на наиболее выгодных условиях, особенно в части потребительского кредитования.

Но, для каждой организации важно постоянное развитие и совершенствование, именно поэтому необходимо определить направления совершенствования кредитных операций, провести их структурно- динамический анализ, провести маркетинговые исследования, что будет сделано в следующей главе.

2.4

Информационно-программное обеспечение обслуживания физических лиц в АКБ «Мособлбанк» ОАО

Информационно - программное обеспечение предназначено для автоматизации деятельности банков и других финансовых институтов по ведению счетов клиентов – физических лиц и выполнению операций по счетам.

Система может использоваться: В банках в качестве системы класса Сберегательная касса; В банках в качестве системы класса Сберегательная касса; В эмиссионных центрах платёжных систем на базе пластиковых карт для регистрации и ведения базы данных клиентов – держателей карт и их счетов, операций со счетами клиентов, а также управления выданными клиентам пластиковыми картами и учёта платёжных операций по пластиковым картам клиентов; В эмиссионных центрах платёжных систем на базе пластиковых карт для регистрации и ведения базы данных клиентов – держателей карт и их счетов, операций со счетами клиентов, а также управления выданными клиентам пластиковыми картами и учёта платёжных операций по пластиковым картам клиентов; В функционально сокращённом виде – в эмиссионных центрах систем на базе пластиковых карт различного функционального назначения (например, дисконтных) для ведения базы данных клиентов, управления выданными клиентам пластиковыми картами и учёту операций по картам.

В функционально сокращённом виде – в эмиссионных центрах систем на базе пластиковых карт различного функционального назначения (например, дисконтных) для ведения базы данных клиентов, управления выданными клиентам пластиковыми картами и учёту операций по картам.

Регистрация и ведение базы данных клиентов – физических лиц и их счетов, в том числе валютных; Регистрация и ведение базы данных клиентов – физических лиц и их счетов, в том числе валютных; Полный набор операций с наличными и безналичными средствами, хранимыми на счетах физических лиц, включая оплату коммунальных платежей и безналичный перевод средств; Полный набор операций с наличными и безналичными средствами, хранимыми на счетах физических лиц, включая оплату коммунальных платежей и безналичный перевод средств; Управление номенклатурой возможных операций в зависимости от вида счета (например, блокировка частичного снятия средств со срочного вклада); Управление номенклатурой возможных операций в зависимости от вида счета (например, блокировка частичного снятия средств со срочного вклада); Настройка дисциплины начисления процентов по счетам, позволяющую учитывать произвольные комбинации следующих факторов: Настройка дисциплины начисления процентов по счетам, позволяющую учитывать произвольные комбинации следующих факторов: переменная величина неснимаемого остатка счета; переменная величина неснимаемого остатка счета; вариация процентной ставки в зависимости от суммы на счету; вариация процентной ставки в зависимости от суммы на счету; любая дисциплина начисления процентов (простые, с капитализацией, с перечислением начисленных процентов на другой счет); любая дисциплина начисления процентов (простые, с капитализацией, с перечислением начисленных процентов на другой счет); любая периодичность начисления процентов с возможностью задержки зачисления на счет; любая периодичность начисления процентов с возможностью задержки зачисления на счет; любой сценарий жизни счета, например срочный счет по истечении действия переходит в счет до востребования; любой сценарий жизни счета, например срочный счет по истечении действия переходит в счет до востребования.

Полное управление параметрами выполнения всех операций (например, удержание комиссии за операцию) с генерацией соответствующих плану счетов организации бухгалтерских проводок; Полное управление параметрами выполнения всех операций (например, удержание комиссии за операцию) с генерацией соответствующих плану счетов организации бухгалтерских проводок; Получение как стандартного набора банковских отчетов и журналов, так и возможность включения новых отчетов; Получение как стандартного набора банковских отчетов и журналов, так и возможность включения новых отчетов; Ведение Сберегательных книжек; для зарплатных проектов - автоматическое зачисление средств на счета по ведомости; Ведение Сберегательных книжек; для зарплатных проектов - автоматическое зачисление средств на счета по ведомости; Интеграцию с существующими бухгалтерскими (банковскими) системами путем экспорта (и последующего импорта) генерируемых системой проводок в виде, пригодном для автоматизированной обработки (пакетный режим), либо автоматически по мере генерации - при наличии общего информационного пространства или коммуникационных средств (оперативный режим); Интеграцию с существующими бухгалтерскими (банковскими) системами путем экспорта (и последующего импорта) генерируемых системой проводок в виде, пригодном для автоматизированной обработки (пакетный режим), либо автоматически по мере генерации - при наличии общего информационного пространства или коммуникационных средств (оперативный режим); Управление пластиковыми картами клиентов (регистрация, состояния, стоп- лист и пр.); Управление параметрами обслуживания пластиковых карт клиентов (лимиты и пр.); Управление пластиковыми картами клиентов (регистрация, состояния, стоп- лист и пр.);


 

ГЛАВА 3.

 РАЗРАБОТКА МЕРОПРИЯТИЙ ПО СОВЕРШЕНСТВОВАНИЮ ОРГАНИЗАЦИИ ОБСЛУЖИВАНИЯ ФИЗИЧЕСКИХ ЛИЦ В АКБ «МОСОБЛБАНК» ОАО

3.1

Мероприятия по совершенствованию организации обслуживания физических лиц  в АКБ «Мособлбанк» ОАО

В 2011 году, как и в предыдущие годы, основным направлением депозитной политики явилось привлечение во вклады свободных денежных средств населения.

В итоге финансово-хозяйственной деятельности рентабельность ОАО «Мособлбанк» составила (отношение прибыли к общей сумме активов) на конец 2010 года 0.04% против 1,3% на конец 2010 года.

Значительное снижение рентабельности отделения объясняется темпами снижения суммы прибыли по сравнению с темпами роста активов. Активы увеличились по отношению к прошлому году в 1,2 раза, а сумма прибыли снизилась в 26.2 раза.

В 2010 году работа отделения проводилась по четырем основным направлениям: по кредитованию, по валютно-обменным операциям, по ценным бумагам (ОГСЗ, ОФЗ и негосударственным ценным бумагам).

Основной целью работы ОАО «Мособлбанк» в отчетном году в условиях стремительного снижения ставки рефинансирования ЦБ РФ явилось обеспечение эффективной работы и получения положительного финансового результата.

В соответствии с кредитной политикой в приоритетном порядке кредитовались производственные программы. Доля кредитов, направленных в сферу производства, составила 60%.

На начало 2011 г. в общей сумме кредитных вложений коммерческих банков на краткосрочные ссуды (без межбанковских кредитов) приходилось 84,2%, на долгосрочные и среднесрочные кредиты – 15,8%.

Преобладание краткосрочных кредитов в общей массе кредитных вложений на современном этапе связано с ориентацией коммерческих банков на получение прибыли и размещение средств в пределах коротких сроков в силу экономической нестабильности в стране, инфляционных процессов.

Поставленные цели и задачи требуют принятия маркетинговой политики банка, отвечающей предпочтениями и потребностям целевых групп существующих и потенциальных клиентов. Активная адресная продажа продуктов и услуг предусматривает определенные приоритеты в продуктовой политике, а также оптимизацию форм и методов продаж. Форма предложения должна быть удобна, доступна и привлекательна, качество – отвечать требованиям клиента, цена – соответствовать рыночному уровню и обеспечивать необходимую рентабельность.

С каждым клиентом Сбербанк должен стремиться к установлению долгосрочных партнерских отношений. С этой целью банк должен прогнозировать развитие потребностей клиентов, появление новых направлений банковского бизнеса, разрабатывать и предлагать полный спектр банковских продуктов и услуг.

Основными направлениями политики продажи банковских продуктов и услуг является: обеспечение потребностей массовой клиентуры в сбережении, накоплении и заимствовании средств, проведение расчетов, ведение бизнеса, предоставление стандартного набора конкурентно способных продуктов и услуг.

Повышение эффективности продаж массовых услуг и продуктов предполагает: стандартизацию и унификацию предлагаемых продуктов, включая комплекс организационных, информационных, финансовых процедур, объединенных единой технологией обслуживания клиента, в целях снижения трудозатрат и повышения качества обслуживания; управление продуктовым рядом, включая выделение перечня базовых услуг и продуктов универсального банка и замещение неэффективных продуктов и услуг, не пользующихся устойчивым спросом; проведение стандартной тарифной политики массовых продаж банковских продуктов и услуг.

Банк должен стремиться интегрировать отдельные банковские операции и предлагать комплексные решения своим клиентам, позволяющие учитывать весь спектр индивидуальных потребностей. Стимулирование комплексных продаж пакетов банковских продуктов позволит увеличить объемы комиссионных доходов банка за счет роста продаж. Снижение стоимости комплексного продукта для клиента по сравнению с розничной ценой на отдельные продукты и услуги будет способствовать интеграции клиента в более тесное многопрофильное сотрудничество с банком.

Банку следует разрабатывать системные подходы к рекламной политике, сделать ее эффективным инструментом формирования клиентской базы. Каждое конкурентное преимущество банка, каждый новый продукт, предлагаемый к продаже, должны быть известны и понятны клиентам, легко сравнимы и выгодно отличаться от предложений конкурентов.

Реализуя принцип прозрачности, банк должен расширять сотрудничество со средствами массовой информации по распространению достоверных сведений о нем; существенно увеличивать объем представляемой информации, улучшить информирование клиентов о стандартах фирменного обслуживания, условиях предлагаемых продуктов и услуг, технологических возможностях банка.


3.2.

Анализ экономической эффективности предлагаемых мероприятий по совершенствованию организации обслуживания физических лиц АКБ «Мособлбанк» ОАО

Выполнение миссии Банка и реализация сценария «модернизации» требует существенной перестройки модели ведения бизнеса, формирования качественно новой технологической базы, изменения менталитета сотрудников и внедрения новых управленческих и мотивационных механизмов.

Для достижения этих целей дальнейшее развитие Банка будет сфокусировано на четырех основных направлениях (или основных «темах») преобразований, которые предполагают значимые изменения во всех областях его деятельности.

Принципиально важным направлением развития Банка станет максимальная ориентация на клиента и, в этом смысле, превращение Сбербанка в «сервисную» компанию. Это значит, что Банк будет стремиться удовлетворить максимальный объем потребностей в финансовых услугах каждого своего клиента и тем самым максимизировать свои доходы от каждого набора клиентских отношений. Это также означает, что качество и глубина взаимоотношений с клиентом, а также навыки и возможности Банка в области продаж и обслуживания, которые обеспечат поддержание и развитие этих отношений станут важной основой конкурентного преимущества Банка.

С практической точки зрения, для того, чтобы ориентация на клиента не осталась лозунгом, Банк существенным образом изменит очень многие элементы своей работы, начиная от логики продуктового предложения и создания внутри банка выделенной вертикали продаж и обслуживания в рознице, и заканчивая новой моделью клиентской работы в корпоративном блоке и изменением процессов и процедур в бэк и мидл офисе.

Реализация выбранного сценария «модернизации» предполагает комплексную перестройку процессов и систем и их перевод на новую «промышленную» основу. Подобная «индустриализация» систем и процессов в Банке повысит уровень управляемости и масштабируемости, снизит затраты, повысит качество обслуживания клиентов и позволит Банку более эффективно управлять кредитными и другими видами рисков. Построение промышленных систем и процессов во многих случаях подразумевает консолидацию или централизацию функций как инструмент повышения управляемости и снижения затрат, а также пересмотр многих основных процессов, большую формализацию методик работы (например, оценку рисков) и построение современных систем электронного документооборота, способных работать в масштабах всего банка. Это также потребует существенного развития информационных систем.

В результате используемые системы не только смогут «справляться» с масштабом операций банка, но позволят Банку сделать масштаб своих операций важнейшим источником формирования конкурентных преимуществ. Наиболее очевидные проявления этих изменений связаны с планами консолидации бэк и мидл офисных функций, а также с построением новых систем управления кредитными рисками. Однако эти изменения также весьма значимо затронут и бизнес – подразделения банка, в частности, в контексте построения систем управления взаимоотношениями с клиентами и поддержки клиентской работы в корпоративном и розничном бизнесе.

«Индустриализация» позволит повысить эффективность, управляемость и качество, принципиально и «разово» меняя логику работы систем и процессов «сверху – вниз». Руководство Банка глубоко убеждено, что этого недостаточно для выполнения стратегических целей и миссии банка. Важнейшим элементом стратегии развития Банка является внедрение идеологии постоянного совершенствования и развития на всех уровнях и во всех частях организации.

Задача, которую ставит перед собой Банк – сделать эффективность и качество делом каждого сотрудника в каждом подразделении, вовлечь как рядовых сотрудников, так и руководителей Банка в каждодневный процесс улучшения его работы, дать сотрудникам почувствовать себя активными участниками процесса развития Банка, а не просто пассивными исполнителями. Для достижения этого третьим направлением изменений станет формализация Производственной Системы Сбербанка (ПСС) как новой идеологии управления Банком.

Разрабатываемый на базе технологий Lean, этот подход предполагает интегрированную работу по оптимизации и рационализации деятельности по всем направлениям «снизу-вверх», создание в Банке систематической способности к обновлению и самосовершенствованию, а также изменение менталитета и ценностных установок сотрудников. Первым направлением работы Банка, которое будет затронуто этим процессом, станет организация работы розничных отделений и внутренних структурных подразделений (ВСП), однако, поэтапно ПСС получит повсеместное распространение.

Осознавая важность и приоритет российского рынка банковских услуг для развития бизнеса, Банк ставит перед собой задачу стать значимым участником мировой финансовой системы, поэтому выделяет развитие операций на международных рынках как одно из приоритетных направлений. При этом Банк понимает, что развитие его международного присутствия и повышение его значимости (не только с точки зрения размера, но и степени участия в мировом финансовом секторе) будет достаточно медленным и постепенным процессом. Это еще больше подчеркивает необходимость того, чтобы первые шаги на пути Lean – системный подход к определению и сокращению потерь в различных сферах деятельности. Основан (с поправками на специфику сервисных отраслей) на подходах к оптимизации и управлению производственными процессами, впервые предложенных компанией Тойота. Особенностью данного подхода является комплексное сочетание инструментов оптимизации процессов, поддерживающих постоянное совершенствование деятельности управленческих механизмов и систем, а также изменения менталитета и подходов к своей работе сотрудников банка. Одно из основных понятий «Кайзен» («кай» – изменение, «зен» – хорошо): идеология маленьких, почти незаметных, но постоянных (непрерывных) изменений к лучшему – непрерывное совершенствование производственных процессов.

3.3

Обеспечение экономической безопасности АКБ «Мособлбанк» ОАО

 

На сегодняшний день банки предлагают достаточно широкий спектр услуг, при этом главной задачей становится повышение доступности предоставляемых банковских продуктов. Многие банки развивают филиальную сеть (особенно в крупных городах), однако есть и другой способ – предоставление услуг банка через альтернативные каналы.

В современном «банковском» сленге появилось новое понятие «альтернативные каналы продаж банковских товаров и предоставления банковских услуг». Обычно, под альтернативными каналами подразумеваются любые автоматизированные и технологические средства позволяющие совершить банковскую операцию без посещения клиентом офиса банка, при этом обеспечивающие снижение издержек банка и / или увеличение скорости и географии обслуживания клиентов. К альтернативным каналам предоставления банковских услуг можно отнести банкоматы, электронные терминалы, услуги мобильного банка, интернет-банкинга, услуги call-центров банка. Интерес к предоставлению банковских услуг через альтернативные каналы неуклонно растет как со стороны банков, так и со стороны клиентов.

Так в Сбербанке России альтернативные каналы рассматриваются как один из способов снижения издержек и увеличения производительности своей сбытовой сети.

Большинство альтернативных каналов предоставления банковских услуг связано с использованием банковских карт. По оценке аналитиков компании J'son & Partners, в 2009 году количество банковских карт, эмитированных в России, превысило 120 млн. штук – примерно по две карты на каждого работающего жителя. Сегодня, по оценкам специалистов, по банковской карте совершаются 25–30% операций по выдаче денежны средств и приему платежей. С помощью банковских карт предоставляются следующие услуги:

1. Экспресс кредитование физических лиц. Для этого используются «Кредитные карты». Кредит по кредитной карте можно рассматривать как «Кредитную линию для физического лица».

2. Операции пополнения и снятия наличных с бессрочного депозита. «Дебетовая карта» + банкоматы с функцией приема наличных.

3. Эмиссия и обслуживание платежных средств.

Возникает вопрос, чем же вызван повышенный интерес менеджеров банка к развитию альтернативных каналов, внедряя новые дополнительные возможности для клиентов.

Исследуя альтернативные каналы предоставления банковских услуг, выделим основные преимущества их использования. По нашему мнению альтернативные каналы позволяют:

  1.  Снизить издержки, ведь по определению «альтернативные каналы» подразумевают применение автоматизированных систем в процессе предоставления банковских услуг. При правильном выборе автоматизированных средств банку предоставляется возможность существенно снизить издержки различного типа. Например, результаты исследования компании NCR свидетельствуют о том, что более чем в половине случаев посещение отделения банка клиентом обусловлено необходимостью внесения наличных на счет или снятие со счета. Эти операции трудоемки, отнимают у банковских сотрудников много времени и, в конечном счете, требуют от банка серьезных расходов. Применение кредитной организацией банкоматов с функцией приема наличных (cash-in) позволяет автоматизировать данный процесс.
  2.  Увеличить скорость обслуживания. Применение электронной обработки информации во время производства банковских услуг позволяет увеличить скорость обслуживания. А технологии, основанные на электронном документообороте, дают банкам возможность не только увеличить скорость обслуживания, но и снизить издержки связанные с бумажным документооборотом.
  3.  Избавиться от ручного труда и связанных с ним ошибок основанных на человеческом факторе.
  4.  Повысить привлекательность банковских услуг.

5. Увеличить географию предоставления банковских услуг. Отсутствие необходимости в посещении офиса банка, применение возможностей Интернета и мобильных устройств, предоставляют банку практически безграничные возможности по расширению географии оказания банковских услуг. Клиент банка может воспользоваться его услугами из любой точки Земного шара.

Указанные преимущества могут оказаться решающим фактором в конкурентной борьбе.

Появление альтернативных каналов предоставления банковских услуг, несомненно, повлияло и на маркетинг. Более того, изменились стратегии и подходы, изменились каналы продаж и реклама. Например, появлении банковских карт и применение «зарплатных проектов» позволили не только продавать банковские карты, но и на их основе предоставлять держателям карт услуги потребительского кредитования, при этом скорость оформления кредита многократно возросла. Бесспорно появление нового канала сбыта банковских услуг повлияло и на маркетинговую стратегию банка, появились новые площадки для размещения рекламы, причем нетрадиционные методы размещения рекламы позволили сократить затраты и повысить эффективность. Хоте – лось бы отметить появление контекстной интернет рекламы, которая стремительным темпом вошла в нашу жизнь.

Когда люди пользуются Интернетом, особенно когда они пользуются поисковыми системами, такими как Google, Яндекс, Yahoo, они обычно ищут ответы на свои вопросы или пытаются удовлетворить свои потребности в информации по определенной тематике. Пользователь Интернета изначально готов воспринимать рек ламные сообщения. Поэтому Интернет-реклама является более эффективной. Более того, на наш взгляд, контекстная интернет-реклама намного дешевле, чем традиционные теле, радио и печатная реклама.

Еще один важный аргумент, в том что, альтернативные каналы (включая банкоматы, системы банковского обслуживания через Интернет и все чаще – системы мобильного банкинга) позволили банкам вступить в диалог выходящий за пределы офиса банка. Результаты исследования, проведенного консалтинговой компании ей Aite Group, говорят, о том, что переход к новым формам обслуживания продолжится и в будущем.

Хотя считается, что отделения играют для банков ключевую роль во взаимодействии с клиентами «лицом к лицу», предоставление услуг через них обходится дороже, чем через альтернативные каналы обслуживания.

Несмотря на то, что время, проводимое клиентом в отделении банка, представляет собой прекрасную возможность для укрепления взаимоотношений, зачастую персоналу банка не до этого. Это связано с тем, что работнику банка приходится выполнять множество рутинных операций, руководствуясь сотнями инструкций. Если взглянуть на эти операции и задуматься над причиной, почему каждая банковская операция исполняется именно так, а не по другому, то становится понятным, что большинство «телодвижений» сотрудники банка делают для того, что бы исключить человеческий фактор и обеспечить необходимый уровень безопасности.

На основе сказанного, приходим к выводу, что внедрение альтернативных каналов предоставления банковских услуг позволит избавиться от многих механических ошибок, а исключение человека-исполнителя из многих этапов совершения банковских операций позволит снизить операционные риски и издержки.

Таким образом, появление альтернативных каналов предоставления банковских услуг, несомненно, открывают для банковского бизнеса огромные перспективы. Именно создание различных вариантов предоставления банковских услуг частным лицам и расширение альтернативных каналов их сбыта будут необходимым шагом к повышению эффективности бизнеса банка. Это объясняет необходимость, построения четкой структуры альтернативных каналов предоставления банковских услуг и становится актуальным и необходимым условием для успешного функционирования банка.

В условиях кризиса дистанционные каналы обслуживания и продвижения банковских продуктов не теряют актуальности, наоборот, позволяют кредитной организации найти лучших клиентов, показав им доступность, удобство и привлекательность услуг интернет-банкинга.

По данным банка HSBC, в 2007 г. Всемирную сеть использовали 23% клиентов кредитных организаций, а в 2008 г. количество активных пользователей интернет-банкинга достигло уже 49%. В США около 70% потребителей банковских услуг стали контролировать свои финансовые ресурсы с помощью интернет-технологий значительно чаще, чем в предыдущие годы. Численность европейцев, имеющих доступ к банковским услугам через Интернет, возросла за последние годы почти в 2 раза. По прогнозам аналитиков Deutsche Bank, к 2020 г. от 50 до 60% жителей континента будут осуществлять онлайновые платежи. К этим показателям уже сейчас приблизились Швеция, Дания и ряд других европейских стран.

В России ситуация иная, несмотря на достаточно высокий уровень сервиса и широту предлагаемых услуг. По оценкам специалистов Альфа-Банка, услугами интернет-банкинга пользуется всего 1% населения, т.е. не более 1,5 млн человек. В основном это жители двух российских столиц и некоторых крупных городов.

Клиенты российских банков начинают понимать, насколько системы дистанционного банковского обслуживания (ДБО) удобны и как при этом экономится время. Так, согласно одному из последних исследований компании Profi Online Research, более 47% опрошенных выделяют обязательное наличие интернет-банкинга среди основных характеристик при принятии решения о выборе кредитной организации. Для сравнения: только 2% респондентов при этом ориентируются на низкие тарифы или бесплатное обслуживание.

По данным Фонда «Общественное мнение» на конец 2008 г., в России 24% населения, или 27,1 млн человек, являются активными (не реже 1 раза в неделю) пользователями Интернета. С учетом того, что уже сейчас в ряде крупных банков около 20% клиентов пользуются интернет-сервисами, можно прогнозировать, что в ближайшие годы их численность может увеличиться по всей банковской системе в 5–8 раз, т.е. на несколько миллионов человек.

Выделяют две основные причины, способствующие развитию систем дистанционного банковского обслуживания в России:

  1.  возрастающий уровень конкуренции в розничном финансовом секторе (в результате банки вынуждены искать новые источники удержания и роста клиентской базы, к которым можно отнести региональную экспансию, внедрение новых продуктов, технологий и новых каналов продаж);
  2.  экстенсивный рост потребностей банковских клиентов в новых продуктах, более качественном сервисе (в том числе в услугах, которые могут сэкономить время потребителей).

При этом слабую компьютерную и финансовую грамотность населения и невысокую степень использования Интернета ошибочно относить к причинам, сдерживающим развитие дистанционного взаимодействия банков и граждан. Истинные причины необходимо искать в следующих факторах:

  1.  низкая культура безналичных способов оплаты товаров и услуг;
  2.  недостаточный уровень взаимодействия банков и граждан, в том числе при реализации маркетинговых исследований и рекламных акций;
  3.  невысокая мотивация персонала кредитных организаций в продвижении систем дистанционного банковского обслуживания;
  4.  отсутствие у банков общей стратегии развития онлайн-проектов;
  5.  недостаточное количество получателей онлайн-платежей (большая часть их представлена федеральными операторами, хотя существует огромный рынок локальных получателей, в частности в сфере ЖКХ, которые вынуждены организовывать собственные сети по приему платежей в регионах);
  6.  низкий уровень заинтересованности клиентов в системах ДБО (зачастую из-за банального незнания, какие возможности может предоставлять финансовое учреждение в банковском обслуживании вне своего офиса).

Почему специалистам в области банковского маркетинга и продвижения финансовых продуктов необходимо обратить внимание на ДБО именно сейчас, когда кризисные явления серьезно затронули финансовую сферу? Для ответа на этот вопрос нужно понять, что происходит в банковской сфере во время кризиса.

Во-первых, происходит оптимизация бизнеса, в том числе путем переоценки центров прибыли и болезненных процедур по сокращению персонала. Значительно возрастает роль качества автоматизации бизнес-процессов, связанных прежде всего с обслуживанием нынешних и привлечением новых клиентов. При этом применяются два основных подхода: процессный – автоматизация рабочих мест и проектный – автоматизация бизнеса.

Для оперативного получения качественных результатов достаточно процессного подхода – он позволяет сократить издержки по сопровождению продуктов и услуг, добиться ускорения и / или улучшения качества обслуживания на определенных участках. А для получения синергетического эффекта от комплекса бизнес-процессов, применяемых в привлечении и обслуживании клиентов, в частности в области ДБО, более эффективен проектный подход. Он снижает операционные риски и оптимизирует бизнес-процессы.

Во-вторых, кризис – это передел рынка клиентов. Соответственно, у банков появляется возможность значительно расширить клиентскую базу. Не последнюю роль в качестве инструмента по привлечению и удержанию клиентов опять же могут сыграть системы ДБО.

В настоящее время в ОАО «Мособлбанк» активно ведется работа по подключению клиентов к услуге «Сбербанк-онлайн»

Сбербанк ОнЛ@йн – это автоматизированная система обслуживания клиентов Сбербанка России через Интернет. С помощью Сбербанка ОнЛ@йн клиент может управлять своими счетами и совершать платежные операции через сеть Интернет.

В рамках услуги Сбербанк ОнЛ@йн можно совершить следующие операции:

По вкладам:

  1.  перевести денежные средств со счета вклада на свой счет вклада / счет карты или на счет вклада / счет карты другого клиента, открытый в Сбербанке России или в другой кредитной организации;
  2.  совершить платеж в рублях со счета вклада, открытого в рублях, в бюджет и государственные внебюджетные фонды, в пользу юридических лиц (индивидуальных предпринимателей);
  3.  погасить кредит;
  4.  оформить / изменить / отменить длительное поручение по счету вклада на перечисление средств на счета физических лиц и в счёт погашения задолженности по кредитному договору;
  5.  приостановить операции по счету вклада в связи с утратой сберкнижки;
  6.  получить информацию о текущем размере остатка средств на счете вклада;
  7.  получить выписку по счету вклада;
  8.  получить информацию о максимальном размере суммы, которую можно снять со счета вклада без нарушения условий договора.

По картам:

  1.  перевести денежные средства со счета карты на счет карты Сбербанка России;
  2.  перевести денежные средств со счета карты на свой счет вклада или счет вклада другого клиента, открытый в Сбербанке России или в другой кредитной организации;
  3.  совершить платеж в рублях со счета карты биллинговым получателям (оплата услуг операторов сотовой связи, оплата за ЖКУ и пр.), а также другим получателям;
  4.  погасить кредит;
  5.  оформить / изменить / отменить длительное поручение по счету карты на перечисление средств на счета физических и юридических лиц (платежей), а также в счёт погашения задолженности по кредитному договору;
  6.  приостановить действие карты;
  7.  получить информацию о лимите доступных средств по карте и о десяти последних операциях по карте;
  8.  запросить отчет по счету карты на адрес электронной почты (E-mail);

Так же клиент может:

  1.  получить информацию о кредитах в Сбербанке России (размере остатка срочной и просроченной задолженности, процентах по кредиту и сумме текущего платежа на определенную дату);
  2.  получить информацию по услуге Мобильный банк;
  3.  создать шаблоны платежей и переводов со счетов вкладов и карт;
  4.  получить информацию об остатке и выписку по обезличенному металлическому счету (при наличии договора банковского обслуживания).
  5.  подготовить и распечатать платежный документ


ЗАКЛЮЧЕНИЕ

Макроэкономические тенденции последних лет привели к серьезным изменениям как в экономике России в целом, так и в банковском бизнесе в частности. Усиление конкуренции на рынке розничных банковских услуг, с одной стороны, и уменьшение доходности банковских инструментов, характерных для инфляционной экономики, с другой стороны, предъявляет более жесткие требования к качеству банковских продуктов.

Стало насущной необходимостью решение следующих задач с помощью введения в обращение финансовых инструментов, обладающих следующими показателями:

  1.  обеспечение увеличения объема дешевых привлеченных ресурсов и рост процентных доходов банка;
  2.  увеличение объема непроцентных доходов за счет комиссионного
  3.  вознаграждения за обслуживание счетов и проведение операций;
  4.  предоставление расширенного клиентского сервиса;
  5.  возможность оперативного управления ресурсами в целях улучшения ликвидности.

Данные задачи способна решить система открытия широкого спектра вкладов и система ведения счетов с использованием банковских карт. Так как вклады – это основная составляющая «ресурсов» банка, при помощи которых банки развиваются и преуспевают.

Увеличение разнообразия видов вкладов, сроков хранения позволит банку увеличить объем дешевых привлеченных ресурсов.

Работа с карточными счетами дает возможность осуществить выход на такой перспективный сектор рынка, как перечисление заработной платы, стипендий, пенсий и социальных выплат на банковские счета физических лиц.

Организация зарплатных проектов позволяет не только привлечь в банк дополнительные ресурсы, изымаемые до этого в виде денежной наличности со счетов юридических лиц, но и решать ряд смежных экономических задач:

  1.  уравновесить величину двух денежных потоков;
  2.  уменьшить отток из банка средств;
  3.  обеспечить возникновение предпосылок для формирования у держателей банковских карт отложенного спроса на наличные денежные средства, за счет развития филиальной сети и сети точек сбыта (предприятий торговли и сервиса).

Для привлечения клиентов ОАО «Мособлбанк» Новоюжный» России выпускает международные пластиковые карты VISA (Classic, Gold, Business), Visa Electron (платежная система VISA International) и Eurocard/MasterCard (Mass, Gold, Business), Maestro (платежная система MasterCard International).

В первую очередь карты предназначены для безналичной оплаты товаров и услуг в предприятиях торговли и сервиса, как на территории Мурманской области, так и на территории всей' России и за рубежом. Причем все операции, совершенные в торгово-сервисных точках, производятся без взимания комиссии. Также карты предназначены для получения наличных денежных средств в учреждениях банков, а также сети банкоматов по территории России и во всем мире. Преимущество пластиковых карт Сбербанка – это обширная филиальная сеть по всей России (практически в любом городе имеется филиал, принимающий к обслуживанию пластиковые карты). Причем на территории Северо-Западного Банка Сбербанка России снятие наличных денег производится без взимания комиссии (Мурманская, Новгородская области, Карельский банк, Санкт-Петербургский банк, Калининградская область и Псковский Банк). На территории других областей (других территориальных банков Сбербанка России) – комиссия составляет 0,75%. В нашем отделении имеется справочник ПВН и банкоматов по всей России (Сбербанк), с указанием адреса и телефона.

Анализ деятельности ОАО «Мособлбанк» Новоюжный» позволил выявить следующие моменты. При анализе устойчивости привлеченных средств во вклады было установлено, что вклады в основном привлекаются на короткий срок.

Поэтому, в целях привлечения ресурсов для своей деятельности ОАО «Мособлбанк» Новоюжный» важно разработать стратегию политики исходя из целей и задач, закрепленных в уставе, для получения максимальной прибыли и сохранения банковской ликвидности. Политика банка в области сбережений населения нацелена на сохранение лидирующего положения в этом секторе финансового рынка, путем совершенствования действующих и внедрения новых видов вкладов и депозитов.

В своей дальнейшей деятельности ОАО «Мособлбанк» Новоюжный» следует вести работу по следующим направлениям:

  1.  активное развитие операций по перечислению всех видов доходов граждан во вклады.
  2.  провести целенаправленную работу по привлечению на обслуживание новых физических лиц.
  3.  для повышения устойчивости средств во вкладах, предлагать новые услуги и пропагандировать уже имеющиеся.
  4.  повысить качество обслуживания населения: разгрузить филиалы банка в платежные дни, путем открытия дополнительных рабочих окон; увеличения числа банкоматов, терминалов.
  5.  активизировать рекламную деятельность банка.


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

экономический банк обслужи

  1.  Гражданский кодекс Российской Федерации (часть вторая)» №14-ФЗ (ред. от 17.07.2009) // Собрание законодательства РФ», 29.01.1996, №5, ст. 410,
  2.  Федеральный закон от 02.12.1990 №395–1 «О банках и банковской деятельности» (ред. от 15.02.2010) // Собрание законодательства РФ», 05.02.1996, №6, ст. 492,
  3.  Федеральный закон от 10.07.2012 №86-ФЗ «О Центральном банке Российской Федерации (Банке России) "(ред. от 25.11.2009) // Собрание законодательства РФ», 15.07.2012, №28, ст. 2790.
  4.  Агарков М.М. Основы банкового права. Курс лекций. – М., 1929. – С. 36 –38.
  5.  Банковское дело: Учебник /Под ред. проф. В.И. Колесникова, Л.П. Кроливецкой. – М.: Финансы и статистика, -1995. – 480 с.
  6.  Банковское дело / Под ред. О.И. Лаврушина. – 2 – е изд., перераб. и доп. – М.: Финансы и статистика, 2012. -464 с.: ил.
  7.  Банки и банковское дело / Под ред. И.Т. Балобанова. – СПб.: ПИТЕР, 2011. – 204 с.: ил. – (Серия Учебники для вузов)
  8.  Ефимова Л.Г. Банковское право: Учебник. – М.: Издательство БЕК, 1994. – 340 с.
  9.  Киселев Ю. Договор банковского счета // Финансовая газета. – 1996. – №26.
  10.  Маркова О.М. Коммерческие банк и их операции. – М.: Банки и биржи, ЮНИТИ, 1995. – 288 с.
  11.  Общая теория денег и кредита: Учебник для вузов/ Под ред. Е.Ф. Жукова – 2-е изд., перераб. и доп. – М.: Банки и биржи, ЮНИТИ, 1999. -359 с.
  12.  Райзберг Б.А. Курс экономики: Учебник. – М., 1997
  13.  Рид Э. Коммерческие банки. Перевод с английского В. Лукашевича и др.; Под общ. Ред. В. Лукашевича. – М., 1983 – с. 269.
  14.  Стратегия развития банковской системы России. Аналитическое обозрение центра комплексных исследований и маркетинга. Выпуск 2.96 (16) (Экономика)
  15.  Сбербанк России: надежность и динамизм / Казьмин А.И. // Деньги и кредит. – 2010. – №6. – С. 14 – 19.
  16.  Курочкин, А.В. Особенности формирования ресурсной базы коммерческих банков в современных условиях / А.В. Курочкин // Финансы и кредит. – 2010.– №4. – С. 32–34.
  17.  Курочкин, А.В. Критерии оптимальности структуры источников ресурсной базы коммерческого банка / А.В. Курочкин // Финансы и кредит. – 2010. – №9.–С. 7–11.
  18.  Курочкин, А.В. Основы управления ресурсами коммерческого банка в современных условиях / А.В. Курочкин // Финансы и кредит. – 2010.– №5. – С. 6–9.
  19.  Напетова, И.А. Анализ финансово хозяйственной деятельности: учеб. метод. пособие / И.А. Напетова. – М.: Форум – Инфра. – 2013. – 128 с.
  20.  Панова, Г.С. Анализ финансового состояния коммерческого банка / Г.С. Панова. – М.: Финансы и статистика, 2003. – 254 с.
  21.  Пещанская, И.В. Организация деятельности коммерческого банка: учебное пособие / И.В. Пещанская. – М.: ИНФРА-М, 2011. – 320 с.
  22.  Маркелов, К. Конкуренция технологий: пластиковые карточки / К. Маркелов // Мир ПК. – 2010. – №10. – С. 104–114
  23.  Масленченков, В.С. Мониторинг финансовой деятельности банка на основе моделирования его баланса и идентификации традиционных банковских рисков / В.С. Масленченков // Банковское дело. – 2012. – №2. – С. 35
  24.  Радковская, Н.П. Методологические подходы к управлению прибылью коммерческого банка/ Н.П. Радковская // Финансы и кредит. – 2013. – №1 (205). – С. 36.
  25.  Усоскин, В.М. Современный коммерческий банк. Управление и операции / В.М. Усоскин. – М: Вазар-Ферро, 2013. – 387 с.
  26.  Финансы, денежное обращение, кредит: краткий курс лекций / под ред. Ф.М. Шолопаева. – М.: Юрайт-Издат, 2012. – 280 с.
  27.  Юровицкий В. Банки в среде электронных денег / В. Юровицкий // Банковское дело. – 2010. – №5. – С. 16–21.
  28.  Официальный сайт Центрального банка РФ: [Электронный ресурс]: Режимдоступа: www.cbr.ru
  29.   Официальный сайт АКБ «Мособлбанк» ОАО: [Электронный ресурс]: Режимдоступа: http://mosoblbank.ru/
  30.   Официальный сайт «КонсультантПлюс»: [Электронный ресурс]:Режимдоступа:www.consultant.ru

2 Савицкая, Г. В. Методика комплексного анализа хозяйственной деятельности: учебное пособие / Г. В. Савицкая. – Москва: Инфра-М, 2012. – 383 с.

3 Управление финансовыми ресурсами / И. А. Бланк. – Москва: Омега-Л: Эльга, 2011. – 768 с.

4 Савицкая, Г. В. Экономический анализ: учебник / Г. В. Савицкая. – Москва: Инфра-М, 2011. – 647 с.

5 Пласкова, Н. С. Экономический анализ: стратегический и текущий аспекты, российская и зарубежная практика / Н. С. Пласкова. – Москва: Эксмо, 2010. – 702 с.

6 Управление финансовыми ресурсами / И. А. Бланк. – Москва: Омега-Л: Эльга, 2011. – 768 с.

7 Анализ хозяйственной деятельности в промышленности: учебное пособие / [Л. Л. Ермолович и др.]. – Минск: Современная школа, 2010. – 800 с.

8 Управление финансовыми ресурсами / И. А. Бланк. – Москва: Омега-Л: Эльга, 2011. – 768 с.

9 Управление финансовыми ресурсами / И. А. Бланк. – Москва: Омега-Л: Эльга, 2011. – 768 с.

10 Управление финансовыми ресурсами / И. А. Бланк. – Москва: Омега-Л: Эльга, 2011. – 768 с.

11 Управление финансовыми ресурсами / И. А. Бланк. – Москва: Омега-Л: Эльга, 2011. – 768 с.

12 Управление финансовыми ресурсами / И. А. Бланк. – Москва: Омега-Л: Эльга, 2011. – 768 с.

13 Управление финансовыми ресурсами / И. А. Бланк. – Москва: Омега-Л: Эльга, 2011. – 768 с.

14 Управление финансовыми ресурсами / И. А. Бланк. – Москва: Омега-Л: Эльга, 2011. – 768 с.

15 См.: http://www.otpbank.ru.retail/mortgage/ (дата обращения 21.04.2013).