Моделирование и прогнозирование спроса на продукцию предприятия с помощью платформы 1С: Предприятие 8.1

Автор работы: Пользователь скрыл имя, 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

Вложенные файлы: 1 файл

диплом казаковой.doc

— 1.95 Мб (Скачать файл)

     Процедура КонПериодаПриИзменении(Элемент)

           КонПериода = КонецМесяца(КонПериода);

           Если НачПериода = Дата('00010101000000') Тогда

                 НачПериода = НачалоМесяца(ДобавитьМесяц(КонПериода, -24));

           КонецЕсли;

     КонецПроцедуры

     Эта процедура выполняется при изменении  поля «КонецПериода» и в зависимости от выбранного значения периода заполняет дату начала периода выбора данных.

     Функция ПроверкаПолей()

           Если СчетДляАнализа.Пустая() Или НачПериода = Дата('00010101000000') Тогда

                 Возврат Истина;

           Иначе

                 Возврат Ложь;

           КонецЕсли;

     КонецФункции

     Данная  функция служит для проверки заполнения всех полей, если хоть одно поле не заполнено, то функция возвращает значение «Истина», если все поля заполнены, то возвращается значение «Ложь».

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

     Процедура КнопкаСформироватьНажатие(Кнопка)

           Если ПроверкаПолей() Тогда

                 Сообщить("Необходимо заполнить все поля");

                 Возврат;

           КонецЕсли;

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

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

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

           Если Не Организация.Пустая() Тогда

                 УсловиеОрганизация = "Организация = &Организация И ИСТИНА";

           КонецЕсли; 

     В этом месте указывается Дебет  или Кредит выбрал пользователь.

           Если Дебет = 1 Тогда

                 КтДт = "Дт";

           Иначе

                 КтДт = "Кт";

           КонецЕсли; 

     Формирование  текста запроса с помощью переменных «УсловиеОрганизации» и «КтДт». Остальные  параметры запроса указываются в конце запроса с помощью метода запроса «УстановитьПараметр». Параметр «КонПериода» устанавливается с помощью функции «КонецМесяца» т.к. для более достоверного прогноза необходимы движения за полный месяц. 

           Запрос = Новый Запрос(

           "ВЫБРАТЬ РАЗРЕШЕННЫЕ

           | Сумма(Данные.СуммаОборот"+ КтДт + ") КАК Сумма,

           | Данные.Период КАК Период

           |ИЗ

           РегистрБухгалтерии.Хозрасчетный.Обороты(

           |   &НачалоПериода,

           |   &КонецПериода,

           |   Месяц,

           |   Счет В ИЕРАРХИИ (&СчетУчета),

           |   ," + УсловиеОрганизация + ",

           |   ,

           |   ) КАК Данные

           |СГРУППИРОВАТЬ ПО

           | Данные.Период");

           Запрос.УстановитьПараметр("Организация", Организация);

           Запрос.УстановитьПараметр("НачалоПериода", НачПериода);

           Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(КонПериода))

           Запрос.УстановитьПараметр("СчетУчета", СчетДляАнализа); 

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

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

     //Выгрузим  данные в таблицу значений

           ТЗДанные = Запрос.Выполнить().Выгрузить(); 

     Затем проводится проверка на отсутствие результатов с оповещением пользователя.

           Если ТЗДанные.Итог("Сумма") = 0 тогда

                 Сообщить("За выбранный  период нет движений по указанному счету");

                 Возврат;

           КонецЕсли; 

           ТЗРасчет = ТЗДанные.Скопировать();//скопируем  данные для обработки в будущем 
 

     В таблице проставляются значения х.

           ТЗДанные.Колонки.Добавить("Х");//это  икс

           //Проставим иксы

           Для Каждого Стр  Из ТЗДанные Цикл

                 Стр.Х = ТЗДанные.Индекс(Стр)+1;

           КонецЦикла; 

     Вычисляются средние значения х и функции.

           СредХ = 0;

           СредХ = ТЗДанные.Итог("Х")/ТЗДанные.Количество();

           СредФ = 0;

           СредФ = ТЗДанные.Итог("Сумма")/ТЗДанные.Количество(); 

           СумХФ = 0;

           СумХХ2 = 0; 

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

           ТЗДанные.Колонки.Добавить("ХХ");//Для  расчета разницы средних иксов

           ТЗДанные.Колонки.Добавить("ФФ");//для  расчета разницы среднмих функций

           ТЗДанные.Колонки.Добавить("ХХ2");//для  расчета разницы среднмих иксов  в квадрате

           ТЗДанные.Колонки.Добавить("ХФ");//для расчета разницы среднмих функций 

           Для Каждого Стр  из ТЗДанные Цикл //Рассчитаем все значения 

                 Стр.ХХ = Стр.Х - СредХ;

                 Стр.ФФ = Стр.Сумма - СредФ;

                 Стр.ХХ2 = Pow(Стр.Х - СредХ,2);

                 Стр.ХФ = Стр.ХХ * Стр.ФФ; 

           КонецЦикла; 

     Получение аргументов функции y = a+bx.

           Б = Окр(ТЗДанные.Итог("ХФ")/ТЗДанные.Итог("ХХ2"),4);

           А = Окр(СредФ - Б*Средх,4); 
 

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

     //Далее  вычтем из трендовых данных  фактические данные и  найдем  сезонную

           ТЗРасчет = ТЗДанные.Скопировать(,"Период,Х,Сумма");

           ТЗРасчет.Колонки.Добавить("Тренд");

           ТЗРасчет.Колонки.Добавить("Откл"); 

           ТЗСезон = Новый ТаблицаЗначений; //таблица для расчета сезонности

           //Сразу вставим  12 строк

           Для сч = 1 По 12 Цикл

                 ТЗСезон.Колонки.Добавить("а" + сч); //"а"+ для того, чтобы 1С поняла имя колонки

           КонецЦикла;

           ТЗСезон.Колонки.Добавить("Год");

           ТекГод = 0;

           Для Каждого Стр  из ТЗРасчет Цикл 

                 Стр.Тренд = Окр(А + Б*Стр.Х,4);

                 Стр.Откл = Стр.Сумма-Стр.Тренд; 

                 //заполняем таблицу сезонности  

                 Если ТекГод <> Год(Стр.Период) Тогда

                       НовСтр = ТЗСезон.Добавить();

                       ТекГод = Год(Стр.Период);

                 КонецЕсли;

                 Колл = "а" + Месяц(Стр.Период);

                 НовСтр[Колл] = Стр.Откл;

                 НовСтр.Год = Год(Стр.Период);

           КонецЦикла; 
 

     Из  таблицы значений «ТЗСезон» обработанные данные заносятся в массив «МассивСез», который содержит сами данные сезонной компоненты, которые затем будут подставляться в расчет прогнозного значения.

           ВсегоСрСез = 0;

           МассивСез = Новый  Массив;

           //средние сезонных  отклонений

           Для Каждого Кол  Из ТЗСезон.Колонки Цикл

                 Если Кол.Имя = "Год" Тогда Прервать; КонецЕсли;

                 Делитель = ТЗСезон.Количество();

                 Для Каждого Ст Из ТЗСезон Цикл

                       Если Ст[ТЗСезон.Колонки.Индекс(Кол)] = Неопределено Тогда

                             Делитель = делитель - 1;

                       КонецЕсли;

                 КонецЦикла;

                 ВсегоСрСез = ВсегоСрСез + ТЗСезон.Итог(Кол)/Делитель;

                 МассивСез.Добавить(ТЗСезон.Итог(Кол)/Делитель); 

           КонецЦикла; 

           ВсяСрСез = ВсегоСрСез/12;  

           Для Каждого Стр  Из МассивСез Цикл

                 Стр = Стр - ВсяСрСез;

           КонецЦикла; 
 

     После всех необходимых расчетов  имеются готовые данные для получения прогноза – это параметры функции y = a + bx и сезонная компонента. Теперь получим значение функции и прибавим к ней сезонную компоненту.

           //С помощью рассчитанных  значений сезонной компоненты и уравнния получим проноз на месяц вперед

           МесяцДлямассива = Месяц(ТЗДанные[ТЗДанные.Количество()-1].Период);

           ПрогЗнач = Окр(А + Б* (ТЗДанные.Количество()+1) + МассивСез[МесяцДлямассива],4);

           ЭлементыФормы.НадПрогноз.Значение = "Пронозное значение на " + ДобавитьМесяц(ТЗДанные[ТЗДанные.Количество()-1].Период,1) + " составит: " + ПрогЗнач; 
 

     После получения данных добавим их в конец таблицы значений «ТЗВывод» для последующего вывода на экран.

           //Выведем данные  в понятном пользователю виде

           ТЗВывод = ТЗРасчет.Скопировать(,"Период,Сумма,Тренд");

           НовСтр = ТЗВывод.Добавить();

Информация о работе Моделирование и прогнозирование спроса на продукцию предприятия с помощью платформы 1С: Предприятие 8.1