Имя: Пароль:
1C
1С v8
построение отчета с параметрами
0 Константин536
 
25.04.16
17:32
Добрый день.
Создал отчет с параметром "склад". Теперь при выборе склада можно получать данные только по выбранному складу.
А как сделать, чтобы если не задано значение параметра склада, то выводить по всем складам.

Написал код:

"&НаСервере
Процедура Показать(ТабДок)
         Макет = Отчеты.Отчет1.ПолучитьМакет("Макет1");
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПриемТовары.Ссылка.Склад КАК Склад,
        |    ПРЕДСТАВЛЕНИЕ(ПриемТовары.Ссылка.Склад),
        |    ПриемТовары.Товар,
        |    ПРЕДСТАВЛЕНИЕ(ПриемТовары.Товар)
        |ИЗ
        |    Документ.Прием.Товары КАК ПриемТовары
        |УПОРЯДОЧИТЬ ПО
        |    Склад";
            Результат = Запрос.Выполнить();
     ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");

    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ВыборкаДетальныеЗаписи = Результат.Выбрать();

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

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

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

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");

    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
        ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;
   КонецЕсли;    
КонецПроцедуры"

Но результата нет: при невыбранном складе отчет пустой.
1 timurhv
 
25.04.16
17:36
(0)
проверка на заполнение "Склад" и если не заполнено - заменить текст запроса "ПриемТовары.Ссылка.Склад = &Склад" на "ИСТИНА"
2 Elatiell
 
25.04.16
17:37
|ГДЕ
  |    ПриемТовары.Ссылка.Склад = &Склад ИЛИ &Склад =ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)

Примерно так.
3 Sabbath
 
25.04.16
17:41
откройте для себя фигурные скобочки


"ВЫБРАТЬ
        |    ПриемТовары.Ссылка.Склад КАК Склад,
        |    ПРЕДСТАВЛЕНИЕ(ПриемТовары.Ссылка.Склад),
        |    ПриемТовары.Товар,
        |    ПРЕДСТАВЛЕНИЕ(ПриемТовары.Товар)
        |ИЗ
        |    Документ.Прием.Товары КАК ПриемТовары
        |{ГДЕ
        |    (ПриемТовары.Ссылка.Склад = &Склад)}
        |
        |УПОРЯДОЧИТЬ ПО
        |    Склад";
4 Elatiell
 
25.04.16
17:44
(3) Там судя по всему не СКД. ;)
5 aleks_default
 
25.04.16
17:47
(4) фу, какая древность...
6 aleks_default
 
25.04.16
17:49
(0)Вы, небось, еще 4 айфоном пользуйтесь, когда все уже на 6 перешли.
7 Chameleon1980
 
25.04.16
17:59
давно еще типа такого использовал:

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Запрос=Новый Запрос;
    
    ТекстЗапроса="ВЫБРАТЬ
                 |    ТоварыНаСкладахОстатки.Склад,
                 |    ТоварыНаСкладахОстатки.Номенклатура,
                 |    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
                 |    ТоварыНаСкладахОстатки.КоличествоОстаток
                 |ИЗ
                 |    РегистрНакопления.ТоварыНаСкладах.Остатки(
                 |            &ДатаВыборки,
                 |            ВЫБОР
                 |                КОГДА &ЕстьУсловиеПоСкладу
                 |                    ТОГДА Склад = &ВыбСклад
                 |                ИНАЧЕ ИСТИНА
                 |            КОНЕЦ) КАК ТоварыНаСкладахОстатки";
                
                
    Запрос.Текст=ТекстЗапроса;
    
    Запрос.УстановитьПараметр("ВыбСклад", ПоСкладу);
    
    Если НЕ ПоСкладу.Пустая() Тогда
        Запрос.УстановитьПараметр("ЕстьУсловиеПоСкладу", Истина);
    Иначе
        Запрос.УстановитьПараметр("ЕстьУсловиеПоСкладу", Ложь);
    КонецЕсли;
    
КонецПроцедуры
8 Константин536
 
25.04.16
18:53
(4) (5) (6)  Что же Вы, уважаемые, думаете, что все сразу сели и научились грамотные запросы писать? (6) До 6-го айфона был 5-тый и 4-тый.
9 Константин536
 
25.04.16
21:15
(2) огромное СПАСИБО!!!!! Помогло!!!!!!!!!!