В начало

Проверка выдачи книг в библиотеке

           

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

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

            Проверку будем осуществлять непосредственно на форме документа «Выдача книг».

            Но для начала проверим с помощью отчета «Книги в библиотеке» сколько каких книг имеется.

Рис. Наличие книг в библиотеке, сформированное отчетом

Рис. Наличие книг в библиотеке, сформированное отчетом

 

            Переходим в документ «Выдача книг» и создаем форму, конкретнее «Форму документа». На форме находим элемент «КнигиКоличество», переходим на закладку «События» и выбираем событие «ПриИзменении», кликаем на кнопку с лупой и переходим в модуль формы, где заполняем, созданные процедуры. Далее показан листинг процедуры на клиенте и функции на сервере.

 

Листинг. Процедура и функция проверки выдачи книг

&НаКлиенте

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

            ТекКнига = Элементыниги.ТекущиеДанные.Книга;

            ТекКоличество = Элементыниги.ТекущиеДанные.Количество;

           

            Если КнигиКоличествоПриИзмененииНаСервере(ТекКнига) >= ТекКоличество Тогда

                        Сообщить("Ок");

            ИначеЕсли КнигиКоличествоПриИзмененииНаСервере(ТекКнига)=0 Тогда

                        Сообщить("Книги '" + ТекКнига + "' нет в наличии");

            Иначе  

                        Сообщить("Книга '" + ТекКнига + "' имеется в меньшем количестве: " +

                                 КнигиКоличествоПриИзмененииНаСервере(ТекКнига) + " шт.");

            КонецЕсли;

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

&НаСервере

Функция КнигиКоличествоПриИзмененииНаСервере(Книга)

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

            Запросекст =

            "ВЫБРАТЬ

            |           КнигиВБиблиотекеОстаткиоличествоОстаток КАК Количество

            |ИЗ

            РегистрНакоплениянигиВБиблиотеке.Остатки(&Дата, ) КАК КнигиВБиблиотекеОстатки

            |ГДЕ

            |           КнигиВБиблиотекеОстаткинига = &Книга";

           

            ЗапросстановитьПараметр("Дата", ТекущаяДата());

            ЗапросстановитьПараметр("Книга", Книга);

            РезультатЗапроса = Запросыполнить();

           

            Выборка = РезультатЗапросаыбрать();

           

            Если Выборкаледующий() Тогда

                        Возврат Выборкаоличество;

            Иначе

                        Возврат 0;

            КонецЕсли;

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

 

            Проверяем код в пользовательском режиме, пробуя по очереди все варианты событий:

– книги есть в наличии;

– книги нет в наличии;

– требуемое количество книг больше имеющегося в библиотеке.

Рис. Документ выдача книг

Рис. Документ выдача книг (отладка процедур)

 

            Кроме того, можно еще что-нибудь поделать кроме вывода сообщений, а именно корректировать данные на ближайшие правильные.

 

Листинг. Процедура с коррекцией данных

&НаКлиенте

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

            ТекКнига = Элементыниги.ТекущиеДанные.Книга;

            ТекКоличество = Элементыниги.ТекущиеДанные.Количество;

           

            Если КнигиКоличествоПриИзмененииНаСервере(ТекКнига) >= ТекКоличество Тогда

                        Сообщить("Ок");

            ИначеЕсли КнигиКоличествоПриИзмененииНаСервере(ТекКнига) = 0 Тогда

                        Элементыниги.ТекущиеДанные.Количество="";

                        Сообщить("Книги '" + ТекКнига + "' нет в наличии");        

            Иначе  

                        Элементыниги.ТекущиеДанные.Количество =  

                         КнигиКоличествоПриИзмененииНаСервере(ТекКнига);

                        Сообщить("Книга '" + ТекКнига + "' имеется в меньшем количестве: " +

                                 КнигиКоличествоПриИзмененииНаСервере(ТекКнига) + " шт.");  

 

            КонецЕсли;

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

 

            ПРИМЕЧАНИЕ: отладка проводилась на версии 8.3.