Имя: Пароль:
1C
1С v8
Установка параметра в запросе
0 Константин536
 
16.03.15
23:48
Есть справочник *Склады*. В нем находятся 2 склада: Склад1 и Склад2.
Хочу создать отчет, где можно смотреть поступления товаров по  отдельно взятому складу.
Для этого в форме отчета я создал реквизит с типом *Справочник.склады*.

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

    Запрос.УстановитьПараметр("Склад", Склад);

Но при проверке система говорит: *переменная не определена *Склад**.
Как это исправить?
1 mc lammer
 
17.03.15
00:08
какая версия платформы ?
если 8.3, то может запрос выполняется &НаСервереБезКонтекста ?
2 GROOVY
 
17.03.15
00:09
Склад в параметры виртуальной таблицы!
3 hhhh
 
17.03.15
00:10
(0) нужно послушаться систему и определить переменную "Склад".
4 prog-Igor
 
17.03.15
00:47
Нужно передать правильный параметр в запрос,
ошибка в Запрос.УстановитьПараметр("Склад", Склад)
5 TamerlanDE
 
17.03.15
01:10
(0) Запрос.УстановитьПараметр("Склад", Отчет.Склад);
6 Константин536
 
17.03.15
09:38
Фух...
всего то проблема заключалась в том, что я писал "НаСервереБезКонтекста" а надо было "Насервере".
7 D_E_S_131
 
17.03.15
09:48
(6) Мог бы с клиентского вызова передать в процедуру формирования отчета ссылку Склад, а то чего на Сервер весь контекст формы "тащить".
8 Константин536
 
17.03.15
10:25
(7) Это еще слишком сложно для меня, что то куда то "тащить" :).
Вот полный текст:
"&НаКлиенте
Процедура Сформировать(Команда)
    Показать(ТабДок)
КонецПроцедуры


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

Не подскажешь что можно вытащить на клиент, а что оставить?
9 D_E_S_131
 
17.03.15
10:34

&НаКлиенте
Процедура Сформировать(Команда)
    Показать(ТабДок, Склад);
КонецПроцедуры


&НАСЕРВЕРЕбезКонтекста
Процедура Показать(ТабДок, Склад)