Разработка экономической информационной системы материальных оборотных активов

Характеристика объекта исследования. Понятие и значение оборотных фондов. Организация управления экономической информационной системы учета материальных оборотных активов предприятия. Создание MRP системы и автоматизация расчетов по стоимости запасов.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 15.08.2010
Размер файла 929,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

-

-

0

28

Сдача проекта

3

29

Обучение пользователей

1

3

2

30

Сдача проекта

0.75

1.5

1

31

Разработка ЭИС учёта МОАП завершена

-

-

0

Примечания:
1. В таблице 2.2 все временные параметры указаны в рабочих днях.
2. При установке временных параметров работ я исходила из того, что график работы стандартный, то есть 5 дней в неделю по 8 часов в день.
3. Жирным шрифтом выделены общие этапы. Их продолжительность рассчитывается как сумма подэтапов.
4. Коды этапов пронумерованы исходя из их порядковых номеров в диаграмме Ганта

Рис 2.4 Диаграмма Ганта

2.3.2 Установление исходных временных оценок

При разработке ЭИС, временные оценки работ приходится устанавливать в условиях полной неопределенности, из-за отсутствия объективных норм продолжительности. В этих случаях невозможно точно предвидеть ход выполнения работ, установить необходимое число исполнителей и т.п. В таких условиях для оценки продолжительности каждой работы применяется вероятностный метод, который позволяет учесть степень неопределенности работы путём распределения вероятности её выполнения в намеченный срок.

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

1) Устанавливается оптимистическая оценка времени выполнения работы. Это такое минимальное время (указано в колонке «Время min» табл.2.2), которое будет при самом благоприятном стечении обстоятельств.

2) Устанавливается также максимальное (указано в колонке «Время max» табл.2.2) время работы или пессимистическое, которое имеет место при самом неблагоприятном стечении обстоятельств. Это время характеризуется большим, чем обычно числом неудач, срывов и т.п.

3) Математические исследования позволяют на основе ряда допущений получить весьма простую зависимость для статического усреднения времени, в результате чего получается расчетное ожидаемое время (То), которое и вводится в сетевой график.

То=

где То - ожидаемое время, день;

Тmin - минимальное время, при самом благоприятном стечении обстоятельств, день;

Тmax - максимальное время работы или пессимистическое, которое имеет место при самом неблагоприятном стечении обстоятельств, день.

Для работы 2:

То.0-1 = (3*0,75 + 2*1,5)/5=1 день

По аналогии находим ожидаемое время для всех видов работ и заносим в графу «Время вероятное» (табл.2.2)

2.4 Расчет затрат на разработку ЭИС

Таблица 2.3
Смета затрат на разработку ЭИС

№ п/п

Статьи затрат

Величина затрат, руб.

1

Основная заработная плата разработчиков

32800

2

Отчисления на социальные нужды

8528

3

Расходы на содержание и эксплуатацию оборудования (ЭВМ)

32760

4

Прочие затраты

7408,8

Итог:

81496,8

Пояснения к расчёту статей затрат.
1 статья «Основная заработная плата разработчиков» (таблица 2.3).

Таблица 2.4

Численность и загрузка разработчиков ЭИС

Должность

Коды работ, выполняемых данным разработчиком.

Суммарное время занятости разработчика, часы.

Руководитель группы

2; 3; 5; 6; 13; 14; 22; 26; 30;

104

Программист

3; 4; 5; 9; 10; 11; 12; 13; 14; 17; 18; 19; 20; 21; 22; 24; 25; 26; 29; 30

280

Итого:

384

Таблица 2.5
Расчёт основной заработной платы разработчиков ЭИС

Должность

Время занятости, часы

Стоимость 1 часа работы, руб.

Затраты на зарплату разработчика, руб.

Руководитель группы

104

100

10400

Программист

280

80

22400

Итого:

32800

2 статья «Отчисления на социальные нужды» (единый социальный налог) принимается в размере 26% от суммы основной зарплаты разработчиков ЭИС.
Отчисления на социальные нужды =
3 статья «Расходы на содержание и эксплуатацию ЭВК (Электронный Вычислительные Комплекс)»:
Таблица 2.6
Расходы на содержание ЭВК

Название этапа

Время использования ЭВК (дни)

Время использования ЭВК (часы)

Стоимость 1 машино-часа работы ЭВК

Итог по этапам (руб.)

Анализ

9

72

90 (руб.)

6480

Решение поставленной задачи

6

48

4320

Программирование

23

164

14760

Тестирование

7

56

5040

Сдача проекта

3

24

2160

Итог:

48

384

32760

Пояснения:
1. Время использования ЭВК (дни) - берётся исходя из перечня работ и их расположения на диаграмме Ганта
2. Время использования ЭВК (часы) = Время использования ЭВК (дни) * 8
3. Стоимость 1 машино-часа работы ЭВК рассчитана в пункте 3.4.2
4. Итог по этапам (руб.) = Время использования ЭВК (часы) * Стоимость 1 машино-часа работы ЭВК
4 статья «Прочие затраты». Прочие затраты включают канцелярские и почтово-телеграфные расходы, расходы на служебные командировки, охрану труда, транспорт и другие затраты, связанные с содержанием административно-управленческого персонала. Их можно принять в размере 30% от суммы статей 1-3 сметы затрат.
Прочие затраты =

2.5 Экономическое обоснование создания ЭИС исследования рынка сбыта продукции

При определении экономической эффективности сопоставляются технико-экономические показатели, двух вариантов. В качестве базы для сравнения принимаются показатели неавтоматизированной работы. Перечислим выбранные варианты:

1. Использование неавтоматизированной работы

2. Использование самостоятельно разработанного программного продукта

2.5.1 Теория технико-экономического обоснования создания ЭИС

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

Основным показателем экономической эффективности ЭИС, является снижение затрат на проектирование.

Экономия от снижения затрат определяется как:

где

-- себестоимость неавтоматизированного проектирования;

-- то же с помощью ЭИС;

-- годовой объём проектирования (имеется в виду количество обращений к разработанной ЭИС в течение года).

Расчёт себестоимости проектирования ведётся следующим образом:

где

Т1-- фактические затраты времени без использования ЭИС, час (4 часа);

ТЭВМ -- тоже использованием ЭИС, час (0,5 часа);

С -- стоимость 1 часа работы экономиста, руб./час.

Смч -- работа ПЭВМ с установленной ЭИС

где

Фот -- годовой фонд оплаты труда экономиста с отчислениями на социальные нужды;

Тг -- годовой фонд времени работы, час.

где

Кдоп -- коэффициент дополнительной заработной платы (можно принять 0,25);

Кс -- коэффициент отчислений на социальные нужды (0,356);

Зср -- среднемесячная зарплата одного работника;

Ч-- численность персонала, обслуживающего ЭВМ;

12-- число месяцев в году.

3 ам -- годовые амортизационные отчисления

где

Фрд -- число рабочих дней в году; (240)

Тсм -- продолжительность смены; (8 ч)

Фпп -- число предпраздничных дней; (6)

Тск -- сокращение рабочей смены в предпраздничный день (1 час);

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

2.5.2 Первый вариант

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

Исходя из этого предприятие встаёт перед выбором:

1. Наём большого количества специалистов для оперативного мониторинга рынка и как следствие большие затраты на оплату труда

2. При найме меньшего количества работников возрастает риск значительного снижения оперативности работы подразделения.

Несмотря на указанные недостатки рассчитаем основные технико-экономические показатели эффективности этого варианта.

Для расчёта стоимости 1 часа работы специалиста определим Фот и Тг

Тогда стоимости 1 часа работы равна:

Исходя из этого рассчитаем себестоимость неавтоматизированного проектирования

2.5.3 Второй вариант

Проведём расчёт технико-экономических показателей эффективности варианта 2. Для расчета себестоимости определим стоимость 1 машино-часа работы ЭВМ

где

3 эксп. -- годовые затраты на эксплуатацию ЭВМ;

Т пол -- годовой фонд полезной работы ЭВМ:

где

Ф -- число часов ежесуточной работы ЭВМ; (8 ч)

Т ном -- число рабочих дней в году; (240)

Т проф -- годовые затраты времени на профилактические ремонтные работы (принимаются в размере 15 % от Т ном). (36)

где

3зп -- основная и дополнительная заработная плата персонала, обслуживающего ЭВМ с отчислениями на социальные нужды:

где

Кдоп -- коэффициент дополнительной заработной платы (можно принять 0,25);

Кс -- коэффициент отчислений на социальные нужды (0,26);

Зср -- среднемесячная зарплата одного работника; (7500)

Ч-- численность персонала, обслуживающего ЭВМ; (1)

12-- число месяцев в году.

3 ам -- годовые амортизационные отчисления:

где

а -- норма амортизационных отчислений для вычислительной техники (можно принять 0,2)

К -- стоимость ЭВМ = 21000 руб.

Зм -- затраты на материалы (можно принять в размере 2 % от К). = 420 руб.

Зр -- затраты на текущий ремонт ЭВМ (можно принять б размере 5 % от К). =1050 руб.

Зпр-- прочие затраты (можно принять в размере 30 % от К). = 6300 руб.

Тогда

При этом себестоимость работы при использовании этого варианта составит:

Вывод: Сравнив себестоимости рассмотренных вариантов видно, что 2-ой вариант (использование ЭИС) выгоднее первого (неавтоматизированная работа). Экономия при этом составит:

при этом разработка ЭИС окупится менее чем за полтора года:

При расчете не учитывалась экономия от снижения затрат на хранение запасов. То есть здесь приведён максимальный срок окупаемости.

3 Технологический раздел

3.1 Описание программной среды

Для написания программного кода использовалась среда программирования Visual Basic 6.0. Её использование обусловлено широкими возможностями применения для стандартных компонентов MS Office, так как практически все они имеют встроенный редактор кода Visual Basic. Использование средств разработки приложений одного производителя значительно упрощает весь процесс разработки программного обеспечения (ПО). Кроме того такой подход повышает надёжность и обеспечивает стабильность работы ПО.

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

Программное обеспечение состоит из нескольких компонентов:

1. База данных. Разработана с применением СУБД Microsoft Access 2002. Выбор СУБД обусловлен её относительной простотой и доступностью. В данной работе Microsoft Access отводится минимум функций. Единственная её задача состоит в хранении и обновлении информации в режиме on-line.

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

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

4. Модуль подготовки и вывода отчётов. Для подготовки отчётов используется встроенный в Visual Basic редактор отчётов и MS Word. Для корректной работы редактора отчётов используется метод доступа к БД ADO основан на технологии ODBC. Работа этого метода не требует жёсткой привязки к БД, необходимо указать название соединения и провайдера.

3.2 Проектирование базы данных

По указанным в пункте 3.1 мотивам для разработки БД был выбран MS Access. Все таблицы БД можно разбить по функциональным признакам на несколько групп:

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

· «ПродукцияПоставщиков»

· «Предприятие»

· «Конфигурация»

· «Запас»

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

· «ПроизводственныйПлан»

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

· «ПланЗакупок»

· «ПланПроизводства»

· «СтоимостьЗапаса»

· «Заказ комплектующих»

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

· «КодировкаBOM»

· «ДиаграммаBOM»

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

Рис3.1 Схема данных

3.3 Работа с программным обеспечением

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

Доступ к функциям программы осуществляется через контекстное меню родительской формы, либо через выбор соответствующей вкладки на «Главной форме» проекта (рис 3.2).

Рис 3.2 Главная форма

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

3.3.1 Ввод информации

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

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

2. Пользователь меняет или добавляет информацию, которая скапливается в компоненте формы MSFlexGride

3. Происходит запись или замена информации в БД.

Наиболее интересная форма в этой группе это форма «Закупки». Внешний вид представлен на рис 3.3

Рис 3.3 форма «Закупки»

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

Листинг 3.1

Загрузка формы «Закупки»

Private Sub Form_Load()

Dim base As Database

Dim nabor As Recordset

Dim Pt As String

Dim i As Integer

Pt = Form2.Label1.Caption & "Base.mdb"

Form5.Width = 7455

Form5.Height = 6045

Set base = OpenDatabase(Pt)

Set nabor = base.OpenRecordset("КодировкаBOM", dbOpenTable)

For i = 1 To nabor.RecordCount

Combo2.AddItem nabor.Fields(1)

nabor.MoveNext

Next i

nabor.Close

Set nabor = base.OpenRecordset("Поставщик", dbOpenTable)

Combo1.AddItem "нет"

For i = 1 To nabor.RecordCount

Combo1.AddItem nabor.Fields(0)

nabor.MoveNext

Next i

nabor.Close

base.Close

Form5.MSFlexGrid1.Row = 0

Form5.MSFlexGrid1.Col = 0

Form5.MSFlexGrid1.Text = "КодBOM"

Form5.MSFlexGrid1.Col = 1

Form5.MSFlexGrid1.Text = "Наименование"

Form5.MSFlexGrid1.Col = 2

Form5.MSFlexGrid1.Text = "Количество"

Form5.MSFlexGrid1.Col = 3

Form5.MSFlexGrid1.Text = "Цена"

Form5.MSFlexGrid1.Col = 4

Form5.MSFlexGrid1.Text = "Дата"

Form5.MSFlexGrid1.ColWidth(1) = 3000

End Sub

Затем после выбора группы наименований и поставщика происходит заполнение компонента «Наименование», причём если поставщик не выбран происходит отбор самой дешёвой комплектующей этой группы.

Листинг 3.2

Подбор наименований

Private Sub Command5_Click()

Dim base As Database

Dim nabor As Recordset

Dim Pt As String

Dim i As Integer

Combo3.Clear

Label6.Caption = "Подобранно"

Pt = Form2.Label1.Caption & "Base.mdb"

Set base = OpenDatabase(Pt)

Set nabor = base.OpenRecordset("КодировкаBOM", dbOpenTable)

For i = 1 To nabor.RecordCount

If Combo2.Text = nabor.Fields(1) Then Kod = nabor.Fields(0)

nabor.MoveNext

Next i

nabor.Close

Set nabor = base.OpenRecordset("ПродукцияПоставщиков", dbOpenTable)

If Combo1.Text = "" Or Combo1.Text = "нет" Then

For i = 1 To nabor.RecordCount

If Kod = nabor.Fields(1) Then Combo3.AddItem nabor.Fields(2)

nabor.MoveNext

Next i

Else

For i = 1 To nabor.RecordCount

If Kod = nabor.Fields(1) And nabor.Fields(0) = Combo1.Text Then Combo3.AddItem nabor.Fields(2)

nabor.MoveNext

Next i

End If

End Sub

После ввода количества и даты заказ можно переслать в компонент MSFlexGride.

Листинг 3.3

Механизм накопления информации

Private Sub Command1_Click()

Dim base As Database

Dim nabor As Recordset

Dim Pt As String

Dim i As Integer

Dim MinPrise As Integer

Pt = Form2.Label1.Caption & "Base.mdb"

Set base = OpenDatabase(Pt)

Set nabor = base.OpenRecordset("ПродукцияПоставщиков", dbOpenTable)

Form5.MSFlexGrid1.Rows = Form5.MSFlexGrid1.Rows + 1

Form5.MSFlexGrid1.Row = Form5.MSFlexGrid1.Rows - 1

If Combo1.Text = "" Or Combo1.Text = "нет" Then

Form5.MSFlexGrid1.Col = 0

Form5.MSFlexGrid1.Text = Kod

Form5.MSFlexGrid1.Col = 1

Form5.MSFlexGrid1.Text = Combo3.Text

Form5.MSFlexGrid1.Col = 2

Form5.MSFlexGrid1.Text = Text1.Text

Form5.MSFlexGrid1.Col = 4

Form5.MSFlexGrid1.Text = Text2.Text

MinPrise = 9900

For i = 1 To nabor.RecordCount

If nabor.Fields(2) = Combo3.Text And nabor.Fields(3) < MinPrise Then

MinPrise = nabor.Fields(3)

End If

nabor.MoveNext

Next i

Form5.MSFlexGrid1.Col = 3

Form5.MSFlexGrid1.Text = MinPrise

Else

Form5.MSFlexGrid1.Col = 0

Form5.MSFlexGrid1.Text = Kod

Form5.MSFlexGrid1.Col = 1

Form5.MSFlexGrid1.Text = Combo3.Text

Form5.MSFlexGrid1.Col = 2

Form5.MSFlexGrid1.Text = Text1.Text

Form5.MSFlexGrid1.Col = 4

Form5.MSFlexGrid1.Text = Text2.Text

For i = 1 To nabor.RecordCount

If nabor.Fields(2) = Combo3.Text Then

Form5.MSFlexGrid1.Col = 3

Form5.MSFlexGrid1.Text = nabor.Fields(3)

End If

nabor.MoveNext

Next i

End If

End Sub

После нажатия кнопки «Занести в БД» происходит запись информации в базу данных.

Листинг 3.4

Запись информации в БД

Private Sub Command3_Click()

Dim base As Database

Dim nabor As Recordset

Dim Pt As String

Dim i As Integer

Pt = Form2.Label1.Caption & "Base.mdb"

Set base = OpenDatabase(Pt)

Set nabor = base.OpenRecordset("Запас", dbOpenTable)

For i = 1 To Form5.MSFlexGrid1.Rows - 1

Form5.MSFlexGrid1.Row = i

nabor.AddNew

Form5.MSFlexGrid1.Col = 0

nabor.Fields(0) = Form5.MSFlexGrid1.Text

Form5.MSFlexGrid1.Col = 1

nabor.Fields(1) = Form5.MSFlexGrid1.Text

Form5.MSFlexGrid1.Col = 2

nabor.Fields(2) = Form5.MSFlexGrid1.Text

Form5.MSFlexGrid1.Col = 3

nabor.Fields(3) = Form5.MSFlexGrid1.Text

Form5.MSFlexGrid1.Col = 4

nabor.Fields(4) = Form5.MSFlexGrid1.Text

nabor.Update

Next i

MsgBox "Данные успешно занесены в БД", , "Сообщение"

End Sub

3.3.2 MRP модуль

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

Листинг 3.5

Формирование подневного плана производства

Private Sub Command15_Click()

Dim base As Database

Dim nabor As Recordset

Dim rezalt As Recordset

Dim prmo As Recordset

Dim Pt As String

Dim i, sam, kol, koldney As Integer

Dim dat, prdat As Date

Pt = Form2.Label1.Caption & "Base.mdb"

Set base = OpenDatabase(Pt)

Set nabor = base.OpenRecordset("ПроизводственныйПлан", dbOpenTable)

Set rezalt = base.OpenRecordset("ПланПроизводства", dbOpenTable)

Set prmo = base.OpenRecordset("Предприятие", dbOpenTable)

If rezalt.RecordCount > 0 Then

rezalt.MoveFirst

For i = 1 To rezalt.RecordCount

rezalt.Delete

rezalt.MoveNext

Next i

End If

sam = 0

For i = 1 To nabor.RecordCount

sam = sam + nabor.Fields(2)

nabor.MoveNext

Next i

prmo.MoveFirst

koldney = Round(sam / prmo.Fields(4))

nabor.MoveFirst

For i = 1 To nabor.RecordCount

dat = nabor.Fields(3)

kol = nabor.Fields(2)

Do While kol > 0

rezalt.AddNew

rezalt.Fields(0) = nabor.Fields(0)

rezalt.Fields(1) = nabor.Fields(1)

If kol > prmo.Fields(4) Then

rezalt.Fields(2) = prmo.Fields(4)

Else

rezalt.Fields(2) = kol

End If

If dat < prdat Then dat = prdat + prmo.Fields(5)

rezalt.Fields(3) = dat

dat = dat + prmo.Fields(5)

prdat = rezalt.Fields(3)

kol = kol - prmo.Fields(4)

rezalt.Update

Loop

nabor.MoveNext

Next i

With Form2.MSFlexGrid2

.Cols = 4

.ColWidth(0) = 1000

.ColWidth(1) = 1500

.ColWidth(2) = 1000

.ColWidth(3) = 1000

.Row = 0

.Col = 0

.Text = "Код заказа"

.Col = 1

.Text = "Конфигурация"

.Col = 2

.Text = "Количество"

.Col = 3

.Text = "Дата"

.Rows = rezalt.RecordCount + 1

rezalt.MoveFirst

For i = 1 To .Rows - 1

.Row = i

.Col = 0

.Text = rezalt.Fields(0)

.Col = 1

.Text = rezalt.Fields(1)

.Col = 2

.Text = rezalt.Fields(2)

.Col = 3

.Text = rezalt.Fields(3)

rezalt.MoveNext

Next i

End With

End Sub

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

Листинг 3.6

Определение времени заказа комплектующих

Private Sub Command6_Click()

Dim base As Database

Dim nabor As Recordset

Dim Sthran As Recordset

Dim Vrdost As Recordset

Dim rez As Recordset

Dim Pt As String

Dim i, j As Integer

Dim dat As Date

Dim sam As Double

Dim kol As Integer

Pt = Form2.Label1.Caption & "Base.mdb"

Set base = OpenDatabase(Pt)

Set nabor = base.OpenRecordset("ПланПроизводства", dbOpenTable)

Set Sthran = base.OpenRecordset("КодировкаBOM", dbOpenTable)

Set Vrdost = base.OpenRecordset("Поставщик", dbOpenTable)

Set rez = base.OpenRecordset("ПланЗакупок", dbOpenTable)

If rez.RecordCount > 0 Then

For i = 1 To rez.RecordCount

rez.Delete

rez.MoveNext

Next i

End If

sam = 0

kol = 0

nabor.MoveFirst

For i = 1 To nabor.RecordCount

dat = nabor.Fields(3) - Vrdost.Fields(4)

Sthran.MoveFirst

For j = 1 To Sthran.RecordCount

sam = sam * (nabor.Fields(3) - dat) + Sthran.Fields(3) * nabor.Fields(2)

Sthran.MoveNext

Next j

kol = kol + nabor.Fields(2)

If sam > Vrdost.Fields(3) Then

rez.AddNew

rez.Fields(1) = kol

sam = 0

kol = 0

rez.Update

End If

nabor.MoveNext

Next i

Dim samzak, sampr As Integer

nabor.MoveFirst

For i = 1 To nabor.RecordCount

sampr = sampr + nabor.Fields(2)

nabor.MoveNext

Next i

rez.MoveFirst

For i = 1 To rez.RecordCount

samzak = samzak + rez.Fields(1)

rez.MoveNext

Next i

If sampr > samzak Then

rez.AddNew

rez.Fields(1) = sampr - samzak

rez.Update

End If

kol = 0

rez.MoveFirst

nabor.MoveFirst

For i = 1 To rez.RecordCount

rez.Edit

rez.Fields(2) = nabor.Fields(3) - Vrdost.Fields(4)

Do While rez.Fields(1) > kol

kol = kol + nabor.Fields(2)

nabor.MoveNext

Loop

kol = 0

rez.Update

rez.MoveNext

Next i

With Form2.MSFlexGrid2

.Cols = 2

.Row = 0

.Col = 0

.ColWidth(0) = 2000

.ColWidth(1) = 1500

.Text = "Количество комплектов"

.Col = 1

.Text = "Дата заказа"

.Rows = rez.RecordCount + 1

rez.MoveFirst

For i = 1 To .Rows - 1

.Row = i

.Col = 0

.Text = rez.Fields(1)

.Col = 1

.Text = rez.Fields(2)

rez.MoveNext

Next i

End With

End Sub

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

Листинг 3.7

Формирование графика закупки комплектующих

Private Sub Command17_Click()

Dim base As Database

Dim PlZa As Recordset

Dim PlPr As Recordset

Dim rez As Recordset

Dim Pt As String

Dim i As Integer

Pt = Label1.Caption & "Base.mdb"

Set base = OpenDatabase(Pt)

Set PlPr = base.OpenRecordset("ПланПроизводства", dbOpenTable)

Set PlZa = base.OpenRecordset("ПланЗакупок", dbOpenTable)

Set rez = base.OpenRecordset("ЗаказКомплектующих", dbOpenTable)

If rez.RecordCount > 0 Then

rez.MoveFirst

For i = 1 To rez.RecordCount

rez.Delete

rez.MoveNext

Next i

End If

For i = 1 To PlPr.RecordCount

rez.AddNew

rez.Fields(0) = PlPr.Fields(0)

rez.Fields(1) = PlPr.Fields(1)

rez.Fields(2) = PlPr.Fields(2)

rez.Fields(3) = PlPr.Fields(3)

rez.Update

PlPr.MoveNext

Next i

Dim dat As Date

Dim k As Integer

rez.MoveFirst

PlZa.MoveLast

dat = PlZa.Fields(2)

PlZa.MoveFirst

PlZa.MoveNext

k = 1

For i = 1 To rez.RecordCount

Do While rez.Fields(3) < PlZa.Fields(2)

rez.Edit

PlZa.MovePrevious

rez.Fields(3) = PlZa.Fields(2)

PlZa.MoveNext

rez.Update

rez.MoveNext

k = k + 1

Loop

If dat = PlZa.Fields(2) Then

For j = k To rez.RecordCount

rez.Edit

rez.Fields(3) = dat

rez.Update

rez.MoveNext

Next j

GoTo l1

Else

PlZa.MoveNext

End If

Next i

l1: With Form2.MSFlexGrid2

.Cols = 3

.Row = 0

.Col = 0

.ColWidth(0) = 1500

.ColWidth(1) = 1250

.ColWidth(2) = 1250

.Text = "Комплектов"

.Col = 1

.Text = "Количество"

.Col = 2

.Text = "Дата"

.Rows = rez.RecordCount + 1

rez.MoveFirst

For i = 1 To .Rows - 1

.Row = i

.Col = 0

.Text = rez.Fields(1)

.Col = 1

.Text = rez.Fields(2)

.Col = 2

.Text = rez.Fields(3)

rez.MoveNext

Next i

End With

End Sub

3.3.3 Определение стоимости запасов

Стоимость запасов определяется 4-мя различными способами:

1. По стоимости последних по времени закупок LIFO

2. По стоимости первых по времени закупок FIFO

3. По средней цене

4. По средней взвешенной цене

Не смотря на различие в полученных результатах с машинной точки зрения методы расчёта похожи. Поэтому приведём лишь код расчёта с помощью метода LIFO.

Листинг 3.8

Расчёт стоимости запасов

Private Sub Command22_Click()

Dim base As Database

Dim rez As Recordset

Dim PrPo As Recordset

Dim zap As Recordset

Dim Pt As String

Pt = Form2.Label1.Caption & "Base.mdb"

Set base = OpenDatabase(Pt)

Set PrPo = base.OpenRecordset("ПродукцияПоставщиков", dbOpenTable)

Set zap = base.OpenRecordset("Запас", dbOpenTable)

Set rez = base.OpenRecordset("LIFO", dbOpenTable)

If rez.RecordCount > 0 Then

For i = 1 To rez.RecordCount

rez.Delete

rez.MoveNext

Next i

End If

Dim sam As Integer

Dim dat As Date

Dim prise As Integer

Dim Nazv As String

PrPo.MoveFirst

For i = 1 To PrPo.RecordCount

zap.MoveFirst

For j = 1 To zap.RecordCount

If PrPo.Fields(2) = zap.Fields(1) And zap.Fields(5) = 0 Then

sam = sam + zap.Fields(2)

zap.Edit

zap.Fields(5) = 1

zap.Update

Nazv = zap.Fields(1)

If dat < zap.Fields(4) Then

dat = zap.Fields(4)

prise = zap.Fields(3)

End If

End If

zap.MoveNext

Next j

rez.AddNew

rez.Fields(0) = Nazv

rez.Fields(1) = sam

rez.Fields(2) = prise

rez.Update

dat = 1

prise = 0

sam = 0

PrPo.MoveNext

Next i

rez.MoveFirst

For i = 1 To rez.RecordCount

If rez.Fields(1) = 0 And rez.Fields(2) = 0 Then rez.Delete

rez.MoveNext

Next i

rez.MoveFirst

For i = 1 To rez.RecordCount

rez.Edit

rez.Fields(3) = rez.Fields(1) * rez.Fields(2)

rez.Update

rez.MoveNext

Next i

zap.MoveFirst

For i = 1 To zap.RecordCount

zap.Edit

zap.Fields(5) = 0

zap.Update

zap.MoveNext

Next i

With Form2.MSFlexGrid3

.Cols = 3

.Row = 0

.Col = 0

.ColWidth(0) = 2550

.ColWidth(1) = 750

.ColWidth(2) = 1700

.Text = "Наименование"

.Col = 1

.Text = "Количество"

.Col = 2

.Text = "Стоимость запасов"

.Rows = rez.RecordCount + 1

rez.MoveFirst

For i = 1 To .Rows - 1

.Row = i

.Col = 0

.Text = rez.Fields(0)

.Col = 1

.Text = rez.Fields(1)

.Col = 2

.Text = rez.Fields(3)

rez.MoveNext

Next i

End With

End Sub

3.3.4 Подготовка и вывод отчётов

Для вывода отчётов используются компонент Visual Basic Data Report и MS Word.

1. Data Report. Работа с Data Report похожа на работу с подготовкой отчётов в MS Access. На форме отчёта располагаем заголовки и счётчик страниц, в области данных указываем название полей БД. Для формирования отчёта необходимо использовать методику доступа к БД ADO.

Листинг 3.9

Формирование отчёта с использованием Data Report

Sub Отчёт(tbl As String)

Dim Pt As String

Pt = Form2.Label1.Caption & "Base.mdb"

Set ist = New ADODB.Connection

ist.Provider = "Microsoft.Jet.OLEDB.4.0"

ist.ConnectionString = Pt

ist.Open

Set zap = New ADODB.Recordset

zap.CursorType = adOpenDynamic

zap.Source = tbl

Set zap.ActiveConnection = ist

zap.Open

End Sub

Private Sub Command13_Click()

Отчёт "ПродукцияПоставщиков"

Set DataReport3.DataSource = zap

DataReport3.Show

End Sub

Рис 3.4 Отчёт с использованием Data Report

2. MS Word. При использовании MS Word необходимо создать файл с расширением “.doc” затем он наполняется необходимой информацией и сохраняется в указанном месте. Естественно программа всё это делает в автоматическом режиме.

Листинг 3.10

Формирование отчёта с использованием MS Word

Private Sub Command9_Click()

Dim base As Database

Dim nabor As Recordset

Dim Pt As String

Dim objWord As Word.Application

Dim objDoc As Word.Document

Pt = Form2.Label1.Caption & "Base.mdb"

Set base = OpenDatabase(Pt)

Set nabor = base.OpenRecordset("Предприятие", dbOpenTable)

Set objWord = New Word.Application

objWord.Visible = True

Set objDoc = objWord.Documents.Add

objDoc.Activate

objDoc.ActiveWindow.Selection.Font.Size = 20

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.InsertAfter " Предприятие"

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.Font.Bold = True

objDoc.ActiveWindow.Selection.EndOf

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.InsertAfter "__________________________________________________________"

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.Font.Bold = True

objDoc.ActiveWindow.Selection.Font.Size = 14

objDoc.ActiveWindow.Selection.EndOf

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.InsertAfter "Название предприятия " & nabor.Fields(0)

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.InsertAfter "Адрес " & nabor.Fields(1)

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.InsertAfter "ФИО Директора " & nabor.Fields(2)

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.InsertAfter "ФИО главного бухгалтера " & nabor.Fields(3)

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.InsertAfter "Производственные мощности предприятия " & nabor.Fields(4) & " штук"

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.InsertAfter "Производственный цикл для каждого изделия " & nabor.Fields(5) & " дня"

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.Font.Bold = False

objDoc.ActiveWindow.Selection.Font.Size = 14

objDoc.ActiveWindow.Selection.EndOf

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.InsertAfter "__________________________________________________________"

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.Font.Bold = True

objDoc.ActiveWindow.Selection.Font.Size = 14

objDoc.ActiveWindow.Selection.EndOf

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.InsertAfter Date

objDoc.ActiveWindow.Selection.InsertParagraphAfter

objDoc.ActiveWindow.Selection.Font.Bold = True

objDoc.ActiveWindow.Selection.Font.Size = 10

objDoc.ActiveWindow.Selection.EndOf

Pt = Form2.Label1.Caption & Date & "Предприятие.doc"

objDoc.SaveAs Pt

End Sub


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.