Автор работы: Пользователь скрыл имя, 26 Мая 2012 в 17:34, дипломная работа
Целью дипломного проекта является прогнозирование спроса на продукцию фирмы с помощью статистического анализа и построения экономико-математической модели спроса предприятия, а, так как у некоторых предприятий достаточно обширный список номенклатуры и полноценное прогнозирование займет очень много времени и будет стоить очень дорого, то необходимо создание программы, позволяющей даже неспециалисту строить достаточно точные и достоверные прогнозы спроса на продукцию.
Исходя из цели вытекают следующие задачи:
- дать характеристику методам статистического анализа данных;
- дать характеристику методам экономико-математического моделирования;
Введение 3
ГЛАВА 1. СОВРЕМЕННОЕ СОСТОЯНИЕ ОСНОВНЫХ ПОКАЗАТЕЛЕЙ 7
1.1. Основные показатели 7
1.2. Динамика основных показателей 8
ГЛАВА 2. СТАТИСТИЧЕСКИЙ И МАТЕМАТИЧЕСКИЙ АНАЛИЗ, ПРОГНОЗИРОВАНИЕ СПРОСА НА ПРОДУКЦИЮ ПРЕДПРИЯТИЯ 16
2.1. Проверка существования тенденции временных рядов методом серий, основанным на медиане выборки 17
2.2. Корреляционный анализ данных и уравнение регрессии 26
2.3. Построение математической модели с помощью уравнения множественной регрессии. 28
2.4. Построение прогнозных данных показателей и сравнение с эталонными данными 31
ГЛАВА 3. РЕАЛИЗАЦИЯ ЭКОНОМИКО-МАТЕМАТИЧЕСКИХ МОДЕЛЕЙ И ПРОГНОЗИРОВАНИЯ СПРОСА ПРОДУКЦИИ ПРЕДПРИЯТИЯ НА ПЛАТФОРМЕ 1С: ПРЕДПРИЯТИЕ 8.1 53
3.1. Постановка технического задания 54
3.2. Описание алгоритма расчета 57
3.3. Описание обработки, пользовательская форма, код 59
3.4. Инструкция пользователя 66
Заключение 71
Список использованных источников 73
Приложение 1. 75
Приложение 2 79
Процедура
КонПериодаПриИзменении(
КонПериода = КонецМесяца(КонПериода);
Если НачПериода = Дата('00010101000000') Тогда
НачПериода = НачалоМесяца(ДобавитьМесяц(
КонецЕсли;
КонецПроцедуры
Эта
процедура выполняется при
Функция ПроверкаПолей()
Если
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Данная функция служит для проверки заполнения всех полей, если хоть одно поле не заполнено, то функция возвращает значение «Истина», если все поля заполнены, то возвращается значение «Ложь».
Эта
функция вызывается из процедуры
КнопкаСформироватьНажатие(
Процедура
КнопкаСформироватьНажатие(
Если ПроверкаПолей(
Сообщить("
Возврат;
КонецЕсли;
Поле
«Организация» может оставаться
незаполненным. Это будет необходимо
для вычисления данных, как по отдельным
юридическим лицам, так и по всей базе
в целом.
Выборка данных будет производиться с помощью запроса, в котором будут указаны параметры выборки, а также будут встроены переменные для изменения текста запроса в зависимости от выбора пользователем того или иного параметра.
Здесь выполняется проверка выбора организации. Если организация не заполнена, то выборка производится по всем юридическим лицам в базе.
Если Не Организация.Пустая() Тогда
УсловиеОргани
КонецЕсли;
В этом месте указывается Дебет или Кредит выбрал пользователь.
Если Дебет = 1 Тогда
КтДт = "Дт";
Иначе
КтДт = "Кт";
КонецЕсли;
Формирование
текста запроса с помощью переменных
«УсловиеОрганизации» и «КтДт». Остальные
параметры запроса указываются в конце
запроса с помощью метода запроса «УстановитьПараметр».
Параметр «КонПериода» устанавливается
с помощью функции «КонецМесяца» т.к. для
более достоверного прогноза необходимы
движения за полный месяц.
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Сумма(Данные.
| Данные.Период КАК Период
|ИЗ
|
| &НачалоПериода,
| &КонецПериода,
| Месяц,
| Счет В ИЕРАРХИИ (&СчетУчета),
| ," + УсловиеОрганизация + ",
| ,
| ) КАК Данные
|СГРУППИРОВАТЬ ПО
| Данные.Период");
Запрос.
Запрос.
Запрос.
Запрос.
Для анализа временного ряда будет использоваться уравнение линейной регрессии с выделением сезонной компоненты, так как более сложные уравнения регрессии требуют значительных трудозатрат и не отвечают требованиям простой и бесплатной программы для анализа и прогнозирования.
Сначала данные выгружаются в таблицу значений для последующей обработки.
//Выгрузим данные в таблицу значений
ТЗДанные = Запрос.Выполнить().Выгрузить()
Затем проводится проверка на отсутствие результатов с оповещением пользователя.
Если ТЗДанные.Итог(
Сообщить("За выбранный период нет движений по указанному счету");
Возврат;
КонецЕсли;
ТЗРасчет = ТЗДанные.Скопировать();//
В таблице проставляются значения х.
ТЗДанные.Колонки.
//Проставим иксы
Для Каждого Стр Из ТЗДанные Цикл
Стр.Х = ТЗДанные.Индекс(Стр)+1;
КонецЦикла;
Вычисляются средние значения х и функции.
СредХ = 0;
СредХ = ТЗДанные.Итог("Х")/ТЗДанные.
СредФ = 0;
СредФ = ТЗДанные.Итог("Сумма")/
СумХФ = 0;
СумХХ2 = 0;
В таблицу значений добавляются расчетные колонки и затем происходит расчет.
ТЗДанные.Колонки.
ТЗДанные.Колонки.
ТЗДанные.Колонки.
ТЗДанные.Колонки.
Для Каждого Стр
из ТЗДанные Цикл //Рассчитаем все значения
Стр.ХХ = Стр.Х - СредХ;
Стр.ФФ = Стр.Сумма - СредФ;
Стр.ХХ2 = Pow(Стр.Х - СредХ,2);
Стр.ХФ = Стр.ХХ * Стр.ФФ;
КонецЦикла;
Получение аргументов функции y = a+bx.
Б = Окр(ТЗДанные.Итог("ХФ")/
А = Окр(СредФ - Б*Средх,4);
Следующим этапом является определение сезонной компоненты. С помощью таблицы значений «ТЗРасчет» заполняются трендовые значения, затем рассчитываются отклонения, и во время обработки данных этой таблицы, заполняется другая таблица – «ТЗСезон», которая содержит непосредственно данные по сезонным отклонениям.
//Далее вычтем из трендовых данных фактические данные и найдем сезонную
ТЗРасчет = ТЗДанные.Скопировать(,"Период,
ТЗРасчет.Колонки.
ТЗРасчет.Колонки.
ТЗСезон = Новый ТаблицаЗначений;
//таблица для расчета
//Сразу вставим 12 строк
Для сч = 1 По 12 Цикл
ТЗСезон.
КонецЦикла;
ТЗСезон.Колонки.
ТекГод = 0;
Для Каждого Стр
из ТЗРасчет Цикл
Стр.Тренд = Окр(А + Б*Стр.Х,4);
Стр.Откл = Стр.Сумма-Стр.Тренд;
//заполняем
Если ТекГод <> Год(Стр.Период) Тогда
НовСтр = ТЗСезон.Добавить();
ТекГод = Год(Стр.Период);
КонецЕсли;
Колл = "а" + Месяц(Стр.Период);
НовСтр[Колл] = Стр.Откл;
НовСтр.Год = Год(Стр.Период);
КонецЦикла;
Из таблицы значений «ТЗСезон» обработанные данные заносятся в массив «МассивСез», который содержит сами данные сезонной компоненты, которые затем будут подставляться в расчет прогнозного значения.
ВсегоСрСез = 0;
МассивСез = Новый Массив;
//средние сезонных отклонений
Для Каждого Кол Из ТЗСезон.Колонки Цикл
Если Кол.Имя = "Год" Тогда Прервать; КонецЕсли;
Делитель = ТЗСезон.Количество();
Для Каждого Ст Из ТЗСезон Цикл
Если
Д
КонецЕс
КонецЦикла;
ВсегоСрСез = ВсегоСрСез + ТЗСезон.Итог(Кол)/Делитель;
МассивСез.
КонецЦикла;
ВсяСрСез = ВсегоСрСез/12;
Для Каждого Стр Из МассивСез Цикл
Стр = Стр - ВсяСрСез;
КонецЦикла;
После всех необходимых расчетов имеются готовые данные для получения прогноза – это параметры функции y = a + bx и сезонная компонента. Теперь получим значение функции и прибавим к ней сезонную компоненту.
//С помощью
МесяцДлямассива = Месяц(ТЗДанные[ТЗДанные.
ПрогЗнач = Окр(А + Б* (ТЗДанные.Количество()+1) + МассивСез[МесяцДлямассива],4);
ЭлементыФормы.
После получения данных добавим их в конец таблицы значений «ТЗВывод» для последующего вывода на экран.
//Выведем данные в понятном пользователю виде
ТЗВывод = ТЗРасчет.Скопировать(,"Период,
НовСтр = ТЗВывод.Добавить();