ОГЛАВЛЕНИЕ
Введение
Теоретическая часть
Описание автоматизированного рабочего места
Вывод
Приложение
В этом примере рассматривается деятельность городской (районной) библиотеки. В библиотечном фонде храниться много данных, как о книгах (название книг, издание, количество), так и о читателях (ФИО, адрес). Чтобы облегчить работу сотрудникам, правильно отследить данные о читателе и книгах можно автоматизировать его рабочее место.
Целью данной работы является разработка и проектирование базы данных библиотеки, в которой описываются данные о книгах, читателей и вывод на печать определенных документов. Интерфейс пользователя разрабатывается в среде программирования 1С:Предприятия.
Постановка задачи.
Требуется создать простейшую систему учета для библиотеки, которая позволит выдавать книги читателям, отслеживать задолженности читателя и формировать отчеты по совершенным операциям за заданный период.
Программа должна содержать:
1. Справочник "Книги": у каждой книги есть уникальный библиотечный номер (код). Необходимо отметить, что может быть несколько экземпляров одного и того же произведения.
2. Справочник "Читатели": каждому читателю выдается читательский билет с уникальным номером.
3. Справочник "Произведение": у каждого произведения есть уникальный код.
4. Справочник "Авторы" и "Жанры"
В программе должны фиксироваться следующие события:
Выдача книг читателю из библиотеки на определенный срок
Продление книги
Возврат книги читателем в библиотеку
Потеря книги читателем
Для каждого события в конфигурации необходимо предусмотреть соответствующий документ.
Правила работы библиотеки следующие:
Читатель может взять в библиотеке только определенное количество книг (задается директором библиотеки).
Читатель берет книги обычно на месяц, но может сразу взять книгу на больший срок, если явно скажет об этом.
Читатель может продлевать книгу, т.е. сообщать о том, что он вернет ее позже указанного ранее срока.
При просрочке возврата книги, читатель получает предупреждение.
Когда предупреждений у читателя накапливается больше определенного предела, он лишается правом пользования библиотекой на 1 месяц.
При потере книги читатель лишается правом пользования библиотекой на 1 месяц, независимо от количества предупреждений.
В программе должна быть возможность сформировать библиотечную выписку, которая показывает все совершенные операции за заданный период. Необходимо иметь возможность выбрать операции только по указанному читателю и/или по указанной книге. В программе должна быть возможность узнать долги конкретного читателя на данный момент, т.е. какие книги у него сейчас на руках и когда он должен их вернуть. В таблице 1 представлены все объекты, которые нужно создать в конфигурации.
Таблица 1.
Тип объектов | Объекты |
Справочники |
Произведения Книги (подчинен спр. Произведения) Читатели ЖанрыКниг Авторы |
Перечисления |
СтатусКниги (значения: Свободна, Выдана, Списана) ДаНет (значения: Да, Нет) |
Документы |
ВыдачаКниги ПродлениеКниги ВозвратКниги ПотеряКниги |
Журналы документов | Библиотека |
Отчеты |
БиблиотечнаяВыписка ДолгиЧитателя |
Проектирование БД.
Для проектирования БД в системе 1С:Предприятие используется конфигуратор- в этом режиме создается или корректируется БД, программные модули. В таблице 2 подробно представлены все справочники с реквизитами, которые потребуются для создания БД.
Таблица 2.
№ n/n | Справочники | Реквизиты |
1 | Произведения |
Жанр Авторы Издание Год издания Число страниц Ключевые слова Аннотация |
2 | Книги |
Статус Читатель Дата выдачи Срок возврата |
3 | Читатель |
ФИО Блокирован Количество предупреждений |
4 | Жанры книг | Наименование жанра |
5 | Авторы | ФИО |
В таблицах 3-7 описана подробная структура справочников.
Таблица 3.Справочник "Произведения"
№ | Имя реквизита | Тип значения |
1 | Жанр | Справочник. ЖанрыКниг |
2 | Авторы | Справочник. Авторы |
3 | Издание | Число |
4 | Год издания | Число |
5 | Число страниц | Число |
5 | Ключевые слова | Строка |
7 | Аннотация | Строка |
Таблица 4. Справочник "Книги"
№ | Имя реквизита | Тип значения |
1 | Статус | СтатусКниг. |
2 | Читатель | Справочник. Читатели. |
3 | Дата Выдачи | Дата |
4 | Срок Возврата | Дата |
Таблица 5. Справочник "Читатели"
№ | Имя реквизита | Тип значения |
1 | ФИО | Строка |
2 | Кол-во предупреждений | Число |
3 | Блокирован | Да Нет |
Таблица 6. Справочник "Жанр Книги"
№ | Имя реквизита | Тип значения |
1 | Жанр Книги | Строка |
Таблица 7. Справочник "Авторы"
№ | Имя реквизита | Тип значения |
1 | Авторы | Строка |
3. ОПИСАНИЕ АВТОМАТИЗИРОВАННОГО РАБОЧЕГО МЕСТА
Разработка приложения.
Разработка приложения состоит из нескольких частей.
Интерфейс ввода/ корректировка справочников, работа с документами.
Составление печатных форм отчетов.
Интерфейс ввода / корректировки справочников.Интерфейс пользователя разработан в программной среде
1С: Предприятие.
При запуске программы 1С:Предприятие, пользователь сразу попадает в диалог "Запуск 1С: Предприятия".
Рис1. Диалог "Запуск 1С:Предприятия".
В диалоге, информационная база запускается в режиме 1С:Предприятие.
При запуске информационной базы сразу попадаем на главную форму. (Рис2).
Рис2. Окно главного меню.
Для простоты обращения интерфейсы всех трех меню одинаковы.
Меню "Справочники".
При нажатие на меню "Справочник", всплывает вспомогательное меню, в котором перечислены все используемы справочники программы. (Рис3.)
Рис3. Меню "Справочник"
Все справочники представлены в виде таблицы, в которые можно добавлять, изменять данные и удалять данные. (Рис4).
Рис4. Справочник "Читатели".
Для справочника "Произведение" создана форма элемента - вызывает редактор форм для создания формы ввода данных в справочник. (Рис5.)
Рис5. Форма для ввода данных в справочник "Произведение".
Меню "Документы".
В меню "Документы", представлены все документы, с которыми должен работать библиотекарь. Это документы: "Выдача книг", "Продление книги", "Возврат книги", "Потеря книги". (Рис6.)
Рис 6. Меню "Документы".
Для всех документов созданы формы элемента, для удобного редактирования. (Рис7).
Рис7. Форма элемента документа "Выдача книги".
Рис8. Форма элемента документа "Продление книги".
Рис9. Форма элемента документа "Возврат книги".
Рис10. Форма элемента документа "Потеря книги".
Меню "Отчеты".
Отчеты предназначены для вывода информации из базы данных. У любого отчета в системе 1С:Предприятие есть экранная форма.
Рис11. Экранная форма отчета "Библиотечная выписка".
Библиотечная выписка, показывает все совершенные операции за заданный период. Можно выбрать операции только по указанному читателю и/или по указанной книге.
Рис 12. Пример работы отчета "Библиотечная выписка".
В отчете "Долги читателя", можно отследить задолжников.
Рис 13. Экранная форма отчета "Долги читателя".
Рис 14. Пример отчета "Долги читателя".
4. ВЫВОД
В результате проектирования были разработаны:
1. База данных, в которой описаны: наименование книг имеющихся в библиотечном фонде, читатели, пользующиеся услугами библиотеки.
2. Разработаны печатные формы (отчеты).
3. Простой в применение интерфейс для пользователей.
Рис15. Справочник "Книги".
Рис 16. Справочник "Жанры Книги".
Рис17. Справочник "Авторы".
Текст программы:
Выдача Книги:
// ********************
//
Процедура ОбработкаПроведения()
СпрКниги = создатьОбъект("Справочник.Книги");
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
СпрКниги.НайтиЭлемент(Книга);
СпрКниги.Статус = Перечисление.СтатусКниги.Выдана;
СпрКниги.Читатель = Читатель;
СпрКниги.ДатаВыдачи = ДатаДок;
СпрКниги.СрокВозврата = СрокВозврата;
СпрКниги.Записать();
КонецЦикла;
КонецПроцедуры
Продление Книги:
// ********************
//
Процедура ОбработкаПроведения()
СпрКниги = создатьОбъект("Справочник.Книги");
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
Если Число(НовыйСрокВозврата)<>0 Тогда
СпрКниги.НайтиЭлемент(Книга);
СпрКниги.СрокВозврата = НовыйСрокВозврата;
СпрКниги.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Продление книги:
// ********************
//
Процедура ОбработкаПроведения()
СпрКниги = создатьОбъект("Справочник.Книги");
СпрЧитатели = СоздатьОбъект("Справочник.Читатели");
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
СпрКниги.НайтиЭлемент(Книга);
Если СпрКниги.СрокВозврата < ДатаДок Тогда
СпрЧитатели.НайтиЭлемент(Читатель);
СпрЧитатели.КоличествоПредупреждений =
СпрЧитатели.КоличествоПредупреждений + 1;
СпрЧитатели.Записать();
Если СпрЧитатели.КоличествоПредупреждений >
Константа.МаксКолвоПредупреждений Тогда
УстановитьРеквизитСправочника(Читатель, "Блокирован",Перечисление.ДаНет.Да, ДатаДок);
УстановитьРеквизитСправочника(Читатель, "Блокирован",Перечисление.ДаНет.Нет, ДатаДок +
Константа.КолвоДнейБлокировки);
КонецЕсли;
КонецЕсли;
СпрКниги.Статус = Перечисление.СтатусКниги.Свободна;
СпрКниги.Читатель = 0;
СпрКниги.ДатаВыдачи = 0;
СпрКниги.СрокВозврата = 0;
СпрКниги.Записать();
КонецЦикла;
КонецПроцедуры
Потеря книги:
// ********************
//
Процедура ОбработкаПроведения()
СпрКниги = создатьОбъект("Справочник.Книги");
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
СпрКниги.НайтиЭлемент(Книга);
СпрКниги.Статус = Перечисление.СтатусКниги.Списана;
СпрКниги.Читатель = 0;
СпрКниги.ДатаВыдачи = 0;
СпрКниги.СрокВозврата = 0;
СпрКниги.Записать();
КонецЦикла;
УстановитьРеквизитСправочника(Читатель, "Блокирован",Перечисление.ДаНет.Да, ДатаДок);
УстановитьРеквизитСправочника(Читатель, "Блокирован",Перечисление.ДаНет.Нет, ДатаДок +
Константа.КолвоДнейБлокировки);
КонецПроцедуры
Отчеты. Библиотечная выписка.
//---------------------
//Документы ПродлениеКниги
//---------------------
Запрос = создатьОбъект("Запрос");
ТекстЗапроса = "
|Период С НачДата По КонДата;
|ОбрабатыватьДокументы Проведенные;
|Док =
Документ.ПродлениеКниги.Текущий//*******************************************
Процедура Сформировать()
тз = создатьОбъект("ТаблицаЗначений");
тз.НоваяКолонка("Дата");
тз.НоваяКолонка("ТипОперации");
тз.НоваяКолонка("Читатель");
тз.НоваяКолонка("Книга");
тз.НоваяКолонка("СрокВозврата");
//---------------------
//Документы ВыдачаКниги
//---------------------
Запрос = создатьОбъект("Запрос");
ТекстЗапроса = "
|Период С НачДата По КонДата;
|ОбрабатыватьДокументы Проведенные;
|Док = Документ.ВыдачаКниги.ТекущийДокумент;
|Читатель = Документ.ВыдачаКниги.Читатель;
|Книга = Документ.ВыдачаКниги.Книга;
|СрокВозврата = Документ.ВыдачаКниги.СрокВозврата;
|Группировка Книга;
|Условие (Читатель в ВыбрЧитатель);
|Условие (Книга в ВыбрКнига);
|";
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка(1)=1 Цикл
Док = Запрос.Док;
тз.НоваяСтрока();
тз.Дата = Док.ДатаДок;
тз.ТипОперации = Док.Вид();
тз.Читатель = Запрос.Читатель;
тз.Книга = Запрос.Книга;
тз.СрокВозврата = Запрос.СрокВозврата;
КонецЦикла;
Документ;
|Читатель = Документ.ПродлениеКниги.Читатель;
|Книга = Документ.ПродлениеКниги.Книга;
|НовыйСрокВозврата =
Документ.ПродлениеКниги.НовыйСрокВозврата;
|Группировка Книга;
|Условие (Читатель в ВыбрЧитатель);
|Условие (Книга в ВыбрКнига);
|";
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка(1)=1 Цикл
Док = Запрос.Док;
тз.НоваяСтрока();
тз.Дата = Док.ДатаДок;
тз.ТипОперации = Док.Вид();
тз.Читатель = Запрос.Читатель;
тз.Книга = Запрос.Книга;
тз.СрокВозврата = Запрос.НовыйСрокВозврата;
КонецЦикла;
//---------------------
//Документы ВозвратКниги
//---------------------
Запрос = создатьОбъект("Запрос");
ТекстЗапроса = "
|Период С НачДата По КонДата;
|ОбрабатыватьДокументы Проведенные;
|Док = Документ.ВозвратКниги.ТекущийДокумент;
|Читатель = Документ.ВозвратКниги.Читатель;
|Книга = Документ.ВозвратКниги.Книга;
|Группировка Книга;
|Условие (Читатель в ВыбрЧитатель);
|Условие (Книга в ВыбрКнига);
|";
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка(1)=1 Цикл
Док = Запрос.Док;
тз.НоваяСтрока();
тз.Дата = Док.ДатаДок;
тз.ТипОперации = Док.Вид();
тз.Читатель = Запрос.Читатель;
тз.Книга = Запрос.Книга;
КонецЦикла;
//---------------------
//Документы ПотеряКниги
//---------------------
Запрос = создатьОбъект("Запрос");
ТекстЗапроса = "
|Период С НачДата По КонДата;
|ОбрабатыватьДокументы Проведенные;
|Док = Документ.ПотеряКниги.ТекущийДокумент;
|Читатель = Документ.ПотеряКниги.Читатель;
|Книга = Документ.ПотеряКниги.Книга;
|Группировка Книга;
|Условие (Читатель в ВыбрЧитатель);
|Условие (Книга в ВыбрКнига);
|";
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка(1)=1 Цикл
Док = Запрос.Док;
тз.НоваяСтрока();
тз.Дата = Док.ДатаДок;
тз.ТипОперации = Док.Вид();
тз.Читатель = Запрос.Читатель;
тз.Книга = Запрос.Книга;
КонецЦикла;
тз.Сортировать("Дата+");
Таб = создатьОбъект("Таблица");
Таб.ВывестиСекцию("Все<");
тз.ВыбратьСтроки();
НомПП = 0;
Пока тз.ПолучитьСтроку()=1 Цикл
НомПП = НомПП + 1;
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.ВывестиСекцию("Все>");
Таб.Опции(0);
Таб.Показать();
КонецПроцедуры
НачДата = НачМесяца(РабочаяДата());
КонДата = КонМесяца(РабочаяДата());
Долги читателя
//*******************************************
Процедура Сформировать()
Таб = создатьОбъект("Таблица");
Таб.ВывестиСекцию("Все<");
НомПП = 0;
СпрКниги = создатьОбъект("Справочник.Книги");
СпрКниги.ВыбратьЭлементыПоРеквизиту("Читатель",ВыбрЧитатель,0,0);
Пока СпрКниги.ПолучитьЭлемент()=1 Цикл
НомПП = НомПП + 1;
Таб.ВывестиСекцию("Книга");
КонецЦикла;
Таб.ВывестиСекцию("Все>");
Таб.Показать();
КонецПроцедуры