В начало
Проверка выдачи книг в библиотеке
Есть некая конфигурация для учета книг в библиотеке. В
конфигурации есть несколько документов-регистраторов, а именно: «Выдача книг»,
«Возврат книг» и «Пополнение библиотечного фонда». Также имеются регистры
накопления: «Книги у читателей» и «Книги в библиотеке».
Необходимо проконтролировать выдачу книг, сравнив заказ с имеющимися в наличии.
Проверку будем осуществлять
непосредственно на форме документа «Выдача книг».
Но для начала проверим с помощью
отчета «Книги в библиотеке» сколько каких
книг имеется.
Рис. Наличие книг в
библиотеке, сформированное отчетом
Переходим в документ «Выдача книг» и
создаем форму, конкретнее «Форму документа». На форме находим элемент «КнигиКоличество», переходим на закладку «События» и
выбираем событие «ПриИзменении», кликаем
на кнопку с лупой и переходим в модуль формы, где заполняем, созданные
процедуры. Далее показан листинг процедуры на клиенте и функции на сервере.
Листинг. Процедура и
функция проверки выдачи книг
&НаКлиенте
Процедура КнигиКоличествоПриИзменении(Элемент)
ТекКнига = Элементы.Книги.ТекущиеДанные.Книга;
ТекКоличество = Элементы.Книги.ТекущиеДанные.Количество;
Если КнигиКоличествоПриИзмененииНаСервере(ТекКнига)
>= ТекКоличество Тогда
Сообщить("Ок");
ИначеЕсли КнигиКоличествоПриИзмененииНаСервере(ТекКнига)=0 Тогда
Сообщить("Книги '" + ТекКнига
+ "' нет в наличии");
Иначе
Сообщить("Книга '" + ТекКнига
+ "' имеется в меньшем количестве: " +
КнигиКоличествоПриИзмененииНаСервере(ТекКнига)
+ " шт.");
КонецЕсли;
КонецПроцедуры
|
&НаСервере
Функция КнигиКоличествоПриИзмененииНаСервере(Книга)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КнигиВБиблиотекеОстатки.КоличествоОстаток
КАК Количество
|ИЗ
РегистрНакопления.КнигиВБиблиотеке.Остатки(&Дата, ) КАК КнигиВБиблиотекеОстатки
|ГДЕ
| КнигиВБиблиотекеОстатки.Книга =
&Книга";
Запрос.УстановитьПараметр("Дата",
ТекущаяДата());
Запрос.УстановитьПараметр("Книга",
Книга);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Количество;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
|
Проверяем код в пользовательском
режиме, пробуя по очереди все варианты событий:
–
книги есть в наличии;
– книги
нет в наличии;
–
требуемое количество книг больше имеющегося в библиотеке.
Рис. Документ выдача
книг (отладка процедур)
Кроме того, можно еще что-нибудь
поделать кроме вывода сообщений, а именно корректировать данные на ближайшие правильные.
Листинг. Процедура с
коррекцией данных
&НаКлиенте
Процедура КнигиКоличествоПриИзменении(Элемент)
ТекКнига = Элементы.Книги.ТекущиеДанные.Книга;
ТекКоличество = Элементы.Книги.ТекущиеДанные.Количество;
Если КнигиКоличествоПриИзмененииНаСервере(ТекКнига) >= ТекКоличество Тогда
Сообщить("Ок");
ИначеЕсли КнигиКоличествоПриИзмененииНаСервере(ТекКнига) = 0 Тогда
Элементы.Книги.ТекущиеДанные.Количество="";
Сообщить("Книги '" + ТекКнига
+ "' нет в наличии");
Иначе
Элементы.Книги.ТекущиеДанные.Количество =
КнигиКоличествоПриИзмененииНаСервере(ТекКнига);
Сообщить("Книга '" + ТекКнига
+ "' имеется в меньшем количестве: " +
КнигиКоличествоПриИзмененииНаСервере(ТекКнига)
+ " шт.");
КонецЕсли;
КонецПроцедуры
|
ПРИМЕЧАНИЕ:
отладка проводилась на версии 8.3.