Имя: Пароль:
1C
1С v8
Тип не определен (запрос)
,
0 infinity1992
 
26.11.13
00:54
Помогите начинающему!
нужно создать форму документа, для проверки наличия книг в библиотеке, которые мы собираемся выдать
в форме документа пишем

&НаКлиенте
Процедура СписокКнигКоличествоПриИзменении(Элемент)
             Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    КнигиВБиблиотекеОстатки.КоличествоОстаток
        |ИЗ
        |    РегистрНакопления.КнигиВБиблиотеке.Остатки(&ДатаДокумента, ) КАК КнигиВБиблиотекеОстатки
        |ГДЕ
        |    КнигиВБиблиотекеОстатки.Книги = &Книги";

    Запрос.УстановитьПараметр("ДатаДокумента", Дата -1);
    Запрос.УстановитьПараметр("Книги", Элементы.СписокКниг.ТекущиеДанные.Книги);

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

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

    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
        Если ВыборкаДетальныеЗаписи.КоличествоОстаток <= Элементы.СписокКниг.ТекущиеДанные.Количество Тогда
        Иначе
            Сообщить ("Данной книги не хватает в библиотеке");
        КонецЕсли;
    Иначе
        Сообщить ("Этой книги нет в библиотеке");
        КонецЕсли;

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



Выдает ошибку: {Документ.ВыдачаКниг.Форма.ФормаДокумента.Форма(4,23)}: Тип не определен (Запрос)
             Запрос = Новый <<?>>Запрос;

Что делать?Что не так?
1 Научите меня
 
26.11.13
00:55
(0) На клиенте к БД не обратиться, поэтому и нет такого объекта как Запрос. Перенеси его в серверную процедуру
2 infinity1992
 
26.11.13
00:59
если сделать так,
&НаСервере
Процедура СписокКнигКоличествоПриИзменении(Элемент)
             Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    КнигиВБиблиотекеОстатки.КоличествоОстаток
        |ИЗ
        |    РегистрНакопления.КнигиВБиблиотеке.Остатки(&ДатаДокумента, ) КАК КнигиВБиблиотекеОстатки
        |ГДЕ
        |    КнигиВБиблиотекеОстатки.Книги = &Книги";

    Запрос.УстановитьПараметр("ДатаДокумента", Дата -1);
    Запрос.УстановитьПараметр("Книги", Элементы.СписокКниг.ТекущиеДанные.Книги);

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

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

    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
        Если ВыборкаДетальныеЗаписи.КоличествоОстаток <= Элементы.СписокКниг.ТекущиеДанные.Количество Тогда
        Иначе
            Сообщить ("Данной книги не хватает в библиотеке");
        КонецЕсли;
    Иначе
        Сообщить ("Этой книги нет в библиотеке");
        КонецЕсли;

КонецПроцедуры
, то пишет {Документ.ВыдачаКниг.Форма.ФормаДокумента.Форма(13,45)}: Переменная не определена (Дата)
    Запрос.УстановитьПараметр("ДатаДокумента", <<?>>Дата -1);
3 GROOVY
 
26.11.13
01:00
Специалиста позовите.
4 Steel_Wheel
 
26.11.13
01:01
(2) Амперсант забыл... это как минимум
5 Steel_Wheel
 
26.11.13
01:02
А нет, вру
6 GROOVY
 
26.11.13
01:03
(5) Объект он забыл. Но судя по коду это кг.
7 Научите меня
 
26.11.13
01:04
(2) Ну не совсем так! У тебя событие возникает на клиенте, из этой процедуры вызываешь еще одну (другую!) процедуру которая находится у тебя на сервере.. в ней уже все это делаешь.
Включи отладчик - и ты увидишь, что "Дата" у тебя реквизита нет на форме, он в объекте - поэтому скорее всего надо будет написать: "Объект.Дата"
8 Steel_Wheel
 
26.11.13
01:05
"Запрос.УстановитьПараметр("Книги", Элементы.СписокКниг.ТекущиеДанные.Книги);"

эта строчка мне совсем не нравится, если Книги -- список значеий, то надо "В" а там СЗ или подзапрос

(6) Угу. Я вот тоже так подумал
9 Научите меня
 
26.11.13
01:07
(8) Кто его знает, может в одной строчке одна количество одной книги, может так просто назвали.
10 Научите меня
 
26.11.13
01:08
(9) Тьфу ты, ну вы поняли ) "одна" - лишнее слово
11 Steel_Wheel
 
26.11.13
01:09
(9) Глядя на это
Элементы.СписокКниг.ТекущиеДанные.Книги)
я очень сомневаюсь

но может и такое быть
12 infinity1992
 
26.11.13
01:16
спасибо! вроде все заработало
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс