Файл: Разработка конфигурации «Складской учет» в среде 1С:Предприятие 8.3.».pdf
Добавлен: 29.02.2024
Просмотров: 101
Скачиваний: 2
СОДЕРЖАНИЕ
1.1. Выбор комплекса задач автоматизации
1.2. Характеристика существующих бизнес-процессов
1.3. Характеристика документооборота, возникающего при решении задачи
1.4. Обоснование проектных решений по информационному обеспечению
1.5. Обоснование проектных решений по программному обеспечению
2.1. Информационная модель и её описание
2.2. Характеристика нормативно-справочной, входной и оперативной информации
2.3. Характеристика результатной информации
2.4. Общие положения (дерево функций и сценарий диалога)
2.5. Характеристика базы данных
2.6. Структурная схема пакета (дерево вызова программных модулей)
Таблица 16
Заказ
Наименование поля (реквизиты) |
Идентификация |
Тип |
Длина |
Код заказа |
КодЗаказа |
Числовой |
10 |
Код товара |
КодТовара |
Числовой |
10 |
Код единицы измерения |
КодЕИ |
Числовой |
10 |
Количество |
Количество |
Числовой |
10 |
Цена |
Цена |
Числовой |
Double |
Код услуги |
КодУслуги |
Числовой |
10 |
Код вид услуги |
КодВидУслуги |
Числовой |
10 |
Код сотрудника |
КодСотрудника |
Числовой |
10 |
Дата начала |
ДатаНачала |
Дата/время |
Формат времени |
Дата конца |
ДатаКонца |
Дата/время |
Формат времени |
Описание |
Описание |
Текстовый |
200 |
Код документа |
КодДокумента |
Числовой |
10 |
Код поставщика |
КодПоставщика |
Числовой |
10 |
Код склада |
КодСклада |
Числовой |
10 |
Таблица 17
Пользователь
Наименование поля (реквизиты) |
Идентификация |
Тип |
Длина |
Код пользователя |
КодПользователя |
Числовой |
10 |
Логин пользователя |
Логин |
Текстовый |
25 |
Имя пользователя |
ФИО |
Текстовый |
50 |
Пароль пользователя |
Пароль |
Текстовый |
25 |
Администратор |
Администратор |
Текстовый |
1 |
Таблица 18
Настройки
Наименование поля (реквизиты) |
Идентификация |
Тип |
Длина |
Код |
Код |
Числовой |
10 |
Формат номера телефона |
ФорматНомераТелефона |
Текстовый |
45 |
2.3. Характеристика результатной информации
Определим предварительные отношения.
- Связь Закупка_СОДЕРЖИТ_Товар характеризуется степенью связи 1:1 и классом принадлежности Н:О, поэтому порождает два предварительных отношения:
а) Закупка (КодЗакупка, КодТовар, ….)
б) Товар (КодТовар, …)
- Связь Закупка_ИМЕЕТ_ЕдиницыИзмерения характеризуется степенью связи N:1 и классом принадлежности Н:О, поэтому порождает два предварительных отношения:
а) Закупка (КодЗакупка, КодЕИ, …)
б) ЕдиницыИзмерения(КодЕИ, …)
- Связь Приход_ИМЕЕТ_Закупку характеризуется степенью связи 1:N и классом принадлежности О:Н, поэтому порождает два предварительных отношения:
а) Приход (КодПриход, ….)
б) Закупка (КодЗакупка, КодПриход, …)
- Связь Приход_ИМЕЕТ_Поставщика характеризуется степенью связи 1:1 и классом принадлежности Н:О, поэтому порождает два предварительных отношения:
а) Приход (КодПриход, КодПоставщик, …)
б) Поставщик (КодПоставщик, …)
- Связь Приход_ИДЁТ_на_Склад характеризуется степенью связи 1:1 и классом принадлежности Н:О, поэтому порождает два предварительных отношения:
а) Приход (КодПриход, КодСклад, ….)
б) Склад (КодСклад, …)
- Связь Сотрудник_ДЕЛАЕТ_Заказ характеризуется степенью связи 1:N и классом принадлежности О:Н, поэтому порождает два предварительных отношения:
а) Сотрудник (КодСотрудник, …)
б) Заказ (КодЗаказ, КодСотрудник, …)
- Связь Заказ_СОДЕРЖИТ_Товар характеризуется степенью связи 1:1 и классом принадлежности Н:О, поэтому порождает два предварительных отношения:
а) Заказ (КодЗаказ, КодТовар, …)
б) Товар (КодТовар, ….)
- Связь Заказ_СОДЕРЖИТ_Услугу характеризуется степенью связи N:1 и классом принадлежности Н:О, поэтому порождает два предварительных отношения:
а) Заказ (КодЗаказ, КодУслуга, …)
б) Услуга (КодУслуга,…)
- Связь Заказ_ИМЕЕТ_ЕдиницыИзмерения характеризуется степенью связи N:1 и классом принадлежности Н:О, поэтому порождает два предварительных отношения:
а) Заказ (Код Заказ, КодЕИ, …)
б) ЕдиницыИзмерения(КодЕИ, …)
- Связь Услуга_ИМЕЕТ_ЕдиницыИзмерения характеризуется степенью связи N:1 и классом принадлежности Н:О, поэтому порождает два предварительных отношения:
а) Услуга (Код Услуга, КодЕИ, …)
б) ЕдиницыИзмерения(КодЕИ, …)
- Связь Расход_ИМЕЕТ_Заказ характеризуется степенью связи 1:N и классом принадлежности О:Н, поэтому порождает два предварительных отношения:
а) Расход (КодРаход, ….)
б) Заказ (КодЗаказ, КодРасход, …)
- Связь Расход_ОТНОСИТСЯ_к_Складу характеризуется степенью связи 1:1 и классом принадлежности Н:О, поэтому порождает два предварительных отношения:
а) Расход (Код Расход, КодСклад, ….)
б) Склад (КодСклад, …)
- Связь Расход_ИМЕЕТ_Клиента характеризуется степенью связи 1:1 и классом принадлежности Н:О, поэтому порождает два предварительных отношения:
а) Расход (Код Расход, КодКлиент, …)
б) Клиент (КодКлиент, …)
- Связь Товар_ИМЕЕТ_ВидТовара характеризуется степенью связи N:1 и классом принадлежности Н:О, поэтому порождает два предварительных отношения:
а) Товар (КодТовар, КодВидТовара, ….)
б) ВидТовара (КодВидТовара, …)
- Связь Услуга_ИМЕЕТ_ВидУслуги характеризуется степенью связи N:1 и классом принадлежности Н:О, поэтому порождает два предварительных отношения:
а) Услуга (КодУслуга, КодВидУслуги, …)
б) ВидУслуги (КодВидУслуги, …)
Составив список предварительных отношений, мы можем удалить все дублирующиеся отношения.
Таким образом, получим следующие итоговые отношения:
- Единицы измерения (ЕИ) (КодЕИ, Наименование)
- Вид товара (ВидТовара) (КодВТ, Наименование)
- Вид услуги (ВидУслуги) (КодВУ, Наименование)
- Приходная накладная (ПриходнаяНакладная) (КодПН, КодСклад, КодПоставщик, Дата, Номер)
- Расходная накладная (РасходнаяНакладная) (КодРН, КодСклад, КодКлиент, Дата, Номер)
- Закупка (Закупка) (КодЗакупка, КодРН, КодТовар, КодЕИ, Количество, Цена)
- Заказ (Заказ) (КодЗаказ, КодПН, КодТовар, КодУслуга, Количество, КодЕИ, Описание, ДатаНачала, ДатаОкончания)
- Склад (Склад) (КодСклад, Адрес, Наименование)
- Поставщик (Поставщик) (КодПоставщик, Адрес, Наименование, Телефон)
- Клиент (Клиент) (КодКлиент, Имя, Фамилия, Отчество, Адрес, Пасспорт, Телефон)
- Сотрудник (Сотрудник) (КодСотрудник, Имя, Фамилия, Отчество, Адрес, Пасспорт, Телефон, ДатаРождения)
- Услуга (Услуга) (КодУслуга, КодЕИ, КодВУ, Цена, Наименование)
- Товар (Товар) (КодТовар, КодЕИ, КодВТ, Наименование, Артикул, Цвет, Ширина, Изготовитель, Цена)
2.4. Общие положения (дерево функций и сценарий диалога)
Дерево функций это иерархическая структура действий, реализованных в информационной системе. Можно выделить два подмножества функций:
- служебные функции;
- основные функции.
Служебные функции - идентичны для всех автоматизированных систем управления учреждением на уровне развития аппаратных и программных средств. Эти функции призваны обеспечить безопасность ввода, обработки и хранения информации, облегчить работу с системой, сделать ее наиболее удобной для конечного пользователя.
Основные функции управления и обработки данных отражают особенности процесса обработки информации, получения результатов, ведения информационной базы проекта. Дерево функций, разрабатываемого программного продукта представлено на рисунке 15.
Диалог - это процесс обмена сообщениями между информационной системой и пользователем. В процессе этого обмена постоянно осуществляется смена ролей информатора ( тот, кто отправляет информацию) и реципиента ( пользователь, который принимает информацию), при этом смена ролей происходит оперативно.
В процессе диалога возможно:
- двустороннее управление на базе языка типа «запрос-ответ»;
одностороннее управление со стороны информационной системы с языком общения типа «меню», «заполнение шаблона», ответа по «подсказке»;
одностороннее управление со стороны пользователя с использованием языка команд.
Сценарий диалога представлен на рисунке 16.
Рисунок 15. Дерево функций
Рисунок 16. Сценарий диалога
После входа в программу открывается главное окно программы и активизация системы меню.
2.5. Характеристика базы данных
После того как обследована предметная область, изучена ее информационная структура; выявлены все фрагменты, каждый из которых характеризуется пользовательским представлением, информационными объектами и связями между ними, процессами над информационными объектами разрабатывается концептуальная модель. Модель представлена на рис.17.
Рисунок 17. Концептуальная модель
Главным результатом данного этапа является построение логической модели (модель требований) системы. Логическая модель описывает понятия предметной области, их взаимосвязь. Логическая модель строится в терминах информационных единиц, но без привязки к конкретной СУБД. Логическая модель данных представлена далее в виде модели «сущность-связь» на рис. 18.
Рисунок 18. Логическая модель данных
2.6. Структурная схема пакета (дерево вызова программных модулей)
Для подключения к БД и хранение созданного соединения разработан класс ConnectionPool. Преимущество, которое даёт хранение созданного подключения к БД в том, что не тратится при каждом запросе время на создание подключения. Особо ощутимы затраты на подключение, когда сервер находится на удалённой машине.
Рис. 19. Дерево вызова программных модулей
В логической модели базы данных установлены три родительские сущности: «Постащик», «Счет» и «Кодификатор», которые связаны с ТМЦ связями один ко многим по ключевым полям.
Класс ConnectionPool реализует интерфейс IDisposable, чтобы иметь возможность принудительно закрыть соединение с БД при вызове метода Dispose().
Клиент класса может получить соединение, обратившись к статическому свойству класса Connection, на методе get которого находится проверка валидности существующего соединения.
Код класса находится в лист. 3.4.2.
Листинг 3.4.2 Класс ConnectionPool
// Класс отвечающий за подключение к MySQL
public class ConnectionPool : IDisposable
{
// Объект подключения
private static MySqlConnection connection = null;
// Конструктор класса
public ConnectionPool()
{
if (connection != null)
{
connection.Close();
connection = null;
}
}
// Открытие подключения.
public static MySqlConnection Connection
{
get
{
if (connection == null)
{
try
{
// Получение настроек
DatabaseSettings dbs = new DatabaseSettings();
connection = new MySqlConnection(dbs.ConnectionString);
// Открытие
connection.Open();
}
catch (Exception e)
{
connection = null;
}
}
if (connection.State != ConnectionState.Open)
{
connection.Open();
}
return connection;
}
}
public static IDbConnection ResetConnection()
{
if (connection != null)
{
connection.Close();
connection.Dispose();
connection = null;
}
return Connection;
}
#region Implementation of IDisposable
public void Dispose()
{
CloseSharedConnection();
}
/// <summary>
/// Closes all «keep alive» connections for all database instanced.
/// </summary>
public void CloseSharedConnection()
{
if (connection != null)
{
connection.Close();
connection.Dispose();
connection = null;
}
}
#endregion
}