Постановка задачи
Требуется создать простейшую систему учета для библиотеки, которая позволит выдавать книги читателям, отслеживать задолженности читателя и формировать отчеты по совершенным операциям за заданный период.
Конфигурация, по-видимому, должна содержать справочник Книги. У каждой книги есть уникальный библиотечный номер (код). Необходимо отметить, что может быть несколько экземпляров одного и того же произведения.
Очевидно, в конфигурации должен быть справочник Читатели. Каждому читателю выдается читательский билет с уникальным номером.
В программе должны фиксироваться следующие события:
- Выдача книг читателю из библиотеки на определенный срок
- Продление книги
- Возврат книги читателем в библиотеку
- Потеря книги читателем
Для каждого события в конфигурации необходимо предусмотреть соответствующий документ.
Правила работы библиотеки следующие:
- Читатель может взять в библиотеке только определенное количество книг (задается директором библиотеки).
- Читатель берет книги обычно на месяц, но может сразу взять книгу на больший срок, если явно скажет об этом.
- Читатель может продлевать книгу, т.е. сообщать о том, что он вернет ее позже указанного ранее срока.
- При просрочке возврата книги, читатель получает предупреждение.
- Когда предупреждений у читателя накапливается больше определенного предела, он лишается правом пользования библиотекой на 1 месяц.
- При потере книги читатель лишается правом пользования библиотекой на 1 месяц, независимо от количества предупреждений.
В программе должна быть возможность сформировать библиотечную выписку, которая показывает все совершенные операции за заданный период. Необходимо иметь возможность выбрать операции только по указанному читателю и/или по указанной книге.
В программе должна быть возможность узнать долги конкретного читателя на данный момент, т.е. какие книги у него сейчас на руках и когда он должен их вернуть.
Объекты конфигурации
В конфигурации потребуется создать следующие объекты:
Тип объектов
|
Объекты
|
Константы |
|
Справочники |
|
Перечисления |
|
Документы |
|
Журналы документов |
|
Отчеты |
|
Справочник «Произведения» (форма элемента)
Экранная форма элемента справочника Произведения выглядит следующим образом:
Справочник «Книги» (форма списка)
Экранная форма списка справочника Книги выглядит следующим образом:
Экранная форма документа выглядит следующим образом:
Модуль формы см. в конфигурации «Мини-библиотека».
Модуль проведения:
Процедура ОбработкаПроведения()
СпрКниги = создатьОбъект(«Справочник.Книги»);
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 ЦиклСпрКниги.НайтиЭлемент(Книга);
СпрКниги.Статус = Перечисление.СтатусКниги.Выдана;
СпрКниги.Читатель = Читатель;
СпрКниги.ДатаВыдачи = ДатаДок;
СпрКниги.СрокВозврата = СрокВозврата;
СпрКниги.Записать();КонецЦикла;
КонецПроцедуры
Документ «Продление книги»
Экранная форма документа выглядит следующим образом:
Модуль формы см. в конфигурации «Мини-библиотека».
Модуль проведения:
Процедура ОбработкаПроведения()
СпрКниги = создатьОбъект(«Справочник.Книги»);
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 ЦиклЕсли Число(НовыйСрокВозврата)<>0 Тогда
СпрКниги.НайтиЭлемент(Книга);
СпрКниги.СрокВозврата = НовыйСрокВозврата;
СпрКниги.Записать();КонецЕсли;
КонецЦикла;
КонецПроцедуры
Документ «Возврат книги»
Экранная форма документа выглядит следующим образом:
Модуль формы см. в конфигурации «Мини-библиотека».
Модуль проведения:
Процедура ОбработкаПроведения()
СпрКниги = создатьОбъект(«Справочник.Книги»);
СпрЧитатели = СоздатьОбъект(«Справочник.Читатели»);ВыбратьСтроки();
Пока ПолучитьСтроку()=1 ЦиклСпрКниги.НайтиЭлемент(Книга);
Если СпрКниги.СрокВозврата < ДатаДок Тогда
СпрЧитатели.НайтиЭлемент(Читатель);
СпрЧитатели.КоличествоПредупреждений = СпрЧитатели.КоличествоПредупреждений + 1;
СпрЧитатели.Записать();Если СпрЧитатели.КоличествоПредупреждений > Константа.МаксКолвоПредупреждений Тогда
УстановитьРеквизитСправочника(Читатель, «Блокирован»,Перечисление.ДаНет.Да, ДатаДок);
УстановитьРеквизитСправочника(Читатель, «Блокирован»,Перечисление.ДаНет.Нет, ДатаДок + Константа.КолвоДнейБлокировки);КонецЕсли;
КонецЕсли;
СпрКниги.Статус = Перечисление.СтатусКниги.Свободна;
СпрКниги.Читатель = 0;
СпрКниги.ДатаВыдачи = 0;
СпрКниги.СрокВозврата = 0;
СпрКниги.Записать();КонецЦикла;
КонецПроцедуры
Документ «Потеря книги»
Экранная форма документа выглядит следующим образом:
Модуль формы см. в конфигурации «Мини-библиотека».
Модуль проведения:
Процедура ОбработкаПроведения()
СпрКниги = создатьОбъект(«Справочник.Книги»);
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 ЦиклСпрКниги.НайтиЭлемент(Книга);
СпрКниги.Статус = Перечисление.СтатусКниги.Списана;
СпрКниги.Читатель = 0;
СпрКниги.ДатаВыдачи = 0;
СпрКниги.СрокВозврата = 0;
СпрКниги.Записать();КонецЦикла;
УстановитьРеквизитСправочника(Читатель, «Блокирован», Перечисление.ДаНет.Да, ДатаДок);
УстановитьРеквизитСправочника(Читатель, «Блокирован», Перечисление.ДаНет.Нет, ДатаДок + Константа.КолвоДнейБлокировки);
КонецПроцедуры
Экранная форма диалога отчета выглядит следующим образом:
Пример работы отчета:
Модуль отчета см. в конфигурации «Мини-библиотека».
Экранная форма диалога отчета выглядит следующим образом:
Пример работы отчета:
Модуль отчета см. в конфигурации «Мини-библиотека».
Вам предлагается самостоятельно реализовать следующие дополнительные функции:
- Поиск нужной книги по названию, автору, жанру и другим известным признакам.
- Технология штрих-кодирования. Каждому читателю и каждой книге присваивается уникальный штрих-код. В экранных формах выбор читателя производится путем считывания штрих-кода, программа должна найти читателя или книгу в справочнике по штрих-коду.
- Денежные расчеты. Допустим каждая книга имеет определенную ценность и библиотека является коммерческой. Каждый день взятия книги должен быть оплачен читателем исходя из задаваемых директором тарифов. При потере книги читатель должен заплатить штраф.
- Отмена документов. При отмене проведения документов все изменения, которые он сделал в системе должны быть также отменены. Для сохранения непротиворечивости базы данных отмена документов должна проводиться в обратном порядке для каждого читателя и книги.
- Может быть вам захочется реализовать учет на регистрах, а не только на справочниках и документах.
- Добавьте другие функции, которые вы считаете просто необходимыми для работы нормальной библиотеки.