Имя: Пароль:
1C
 
Значение не является значением объектного типа (Выбрать)
,
0 oqjawa
 
16.05.17
07:04
Есть запрос (выборка с условием где РеквизитДокумента = Значение) на вывод параметров в табличную часть печатной формы..

всё выводит всё хорошо, НО если выбрать значение которое не указано в запросе он ругается! "Значение не является значением объектного типа(выбрать)"

КАК сделать так что бы не ругался, а просто тогда выводил на печать "Ничего" пустую облать для печати.. и
1 Рэйв
 
16.05.17
07:11
хоть бы код показал,если уж понятно объяснять не твое...
2 Рэйв
 
16.05.17
07:12
телепатирую, что надо проверять на тип прежде чем делать .Выбрать()
3 oqjawa
 
16.05.17
07:17
Макет = Документы.Выхода_на_практику.ПолучитьМакет("Печать");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Выхода_на_практику.Вид_практики,
    |    Выхода_на_практику.Группа,
    |    Выхода_на_практику.Дата,
    |    Выхода_на_практику.Дата_конца_практики,
    |    Выхода_на_практику.Дата_начала_практики,
    |    Выхода_на_практику.ДатаИзданияПриказа,
    |    Выхода_на_практику.Курс,
    |    Выхода_на_практику.Номер,
    |    Выхода_на_практику.НомерПриказа,
    |    Выхода_на_практику.Специальность,
    |    Выхода_на_практику.Студенты.(
    |        НомерСтроки,
    |        ФИО_студента,
    |        Место_прохождения_практики,
    |        Договор,
    |        База,
    |        Основа_обучения
    |    )
    |ИЗ
    |    Документ.Выхода_на_практику КАК Выхода_на_практику
    |ГДЕ
    |    Выхода_на_практику.Ссылка В(&Ссылка)
        |   И Выхода_на_практику.Студенты.База = Значение(Перечисление.База_классов.классов_9) ИЛИ Выхода_на_практику.Студенты.База = Значение(Перечисление.База_классов.ПустаяСсылка)
    |    И Выхода_на_практику.Студенты.Основа_обучения = Значение(Перечисление.Основа_обучения.бюджетник)";
    
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();

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


    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        КонецЦикла;
        ОбластьШапка.Параметры.Заполнить(Выборка);
    ОбластьШапка.Параметры.Дата_Начала_Практики = Формат(Выборка.Дата_начала_практики, "ДЛФ=D");
    ОбластьШапка.Параметры.Дата_Конца_Практики = Формат(Выборка.Дата_конца_практики, "ДЛФ=D");
    


    Выборка.Следующий();
      ВыборкаСтуденты = Выборка.Студенты.Выбрать();
    Если ВыборкаСтуденты.Количество()>0 Тогда ТабДок.Вывести(ОбластьШапка, Выборка.Уровень());    ТабДок.Вывести(ОбластьСтудентыШапка); иначе Выводить = ложь;

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

КонецПроцедуры
4 oqjawa
 
16.05.17
07:18
|ГДЕ
Выхода_на_практику.Студенты.База = Значение(Перечисление.База_классов.классов_9)
5 Рэйв
 
16.05.17
07:18
(3)уже прогресс. На какое именно .Выбрать ругается?
6 oqjawa
 
16.05.17
07:19
если я выбераю в документе другое значение
то он ругается,

а мне нужно что бы он не ругался а просто не выводил на печать эту информацию

так можно?
7 oqjawa
 
16.05.17
07:19
если я в документе поставлю не классов_9 а допустим классов_11
то всё... колом
8 oqjawa
 
16.05.17
07:20
а я хочу чтобы он просто не выводил тогда на печать.. или выводил но пустую форму так можно?

както отменить выборку.. чтоли... типо ВЫборка = ложь)) или как
9 Рэйв
 
16.05.17
07:21
(6)Переделай запрос  на запрос к таб. части Студенты
10 Рэйв
 
16.05.17
07:21
к чему тебе запрос к ссылке если тебе нужна таб часть?
11 catena
 
16.05.17
07:28
ЕСЛИ Выборка.Следующий() ТОГДА...
12 oqjawa
 
16.05.17
07:40
Cetena Ваш вариант мне нравится, только я видимо не могу адаптировать его в моём коде.. подскажите в каком месте это вставить пожалуйста
13 oqjawa
 
16.05.17
07:49
Рейв, тоесть переделать запрос полностью к табличной части?? мне тоже так сказали.. а что изменится? разве ошибка пропадёт?
14 catena
 
16.05.17
07:52
(12)В том месте, где у вас просто
Выборка.Следующий();
15 catena
 
16.05.17
07:54
(13)Выборка к табличной части при пустой табличной части (или при пустой выборке по табличной части из-за наложенных условий на табличную часть), будет пустая.
16 oqjawa
 
16.05.17
08:01
а где писать КонецЕсли;
17 catena
 
16.05.17
08:03
(16)В конце логической цепочки действий, которая должна выполнятся при условии, озвученном в Если.
18 oqjawa
 
16.05.17
08:08
ЕСЛИ    Выборка.Следующий() Тогда
      ВыборкаСтуденты = Выборка.Студенты.Выбрать();
  Если ВыборкаСтуденты.Количество()>0 Тогда ТабДок.Вывести(ОбластьШапка, Выборка.Уровень());    ТабДок.Вывести(ОбластьСтудентыШапка); иначе Выводить = ложь;

КонецЕсли;
  
      Пока ВыборкаСтуденты.Следующий() Цикл
            ОбластьСтуденты.Параметры.Заполнить(ВыборкаСтуденты);
            ТабДок.Вывести(ОбластьСтуденты, ВыборкаСтуденты.Уровень());
        КонецЦикла;
КонецЕсли;
19 oqjawa
 
16.05.17
08:09
теперь вообще ничего не выводит и не важно какое там значение пустое, нужное или не нужно
20 oqjawa
 
16.05.17
08:09
зато не ругается... (
21 oqjawa
 
16.05.17
08:10
как сделать так чтобы он выводил только указаное значение реквизита? а если его в выборке нет то тогда ничего
22 arsik
 
гуру
16.05.17
08:14
(19) Поменяй
ВыборкаСтуденты = Выборка.Студенты.Выбрать();
на
ВыборкаСтуденты = Выборка.Выбрать();
23 catena
 
16.05.17
08:16
(21)У меня дочка в 7 классе учится. Занимается робототехникой. Вот когда она начинает что-то писать без блок-схемы, я ее шоколада лишаю.
24 oqjawa
 
16.05.17
08:19
поменял ничего не произошло.. всёравно пусто
25 oqjawa
 
16.05.17
08:20
я тоже себя шоколада лишу..
26 vadim777
 
16.05.17
08:37
(23) Ты ее учишь рисованию или программированию?
27 catena
 
16.05.17
08:39
(26)Я ее учу думать структурировано. А тут первое время без бумажки никак.
28 catena
 
16.05.17
08:42
+(27)Вот у меня первая игрушка была ПК "Львов-01". Там ввод кода был линейный, только вперед. Для редактирования вызывалась конкретная строчка. А перенести блок кода из одного места в другой - гемор на полдня. Так что, приходилось каждый символ наперед продумывать.
29 dezss
 
16.05.17
09:19
(23) +100500)))
в (0) какой-то бред сивой кобылы
Выборка.Следующий(); вызывается после того, как в цикле уже перебрали все значения. Причем в этом цикле делались только
Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
Получается, что сперва мы выведем кучу разделителей страниц, а потом уже будем делать что-то еще.
Тебе надо полностью пересмотреть свой код. В том числе и сам запрос. Делай его к тч, как советовали в (9). И первый бредовый цикл убери. Посмотришь что выводит, тогда и определяй где нужны разделители.
30 dezss
 
16.05.17
09:21
(29) поправка. запрос не в (0), а в (3)
31 Ёпрст
 
16.05.17
09:40
(0)

//Выборка.Следующий();
      ВыборкаСтуденты = Выборка.Студенты.Выбрать();

больше ничего не надо
32 h-sp
 
16.05.17
09:42
(31) да у него уже нет выборки. он ее прошел всю

    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        КонецЦикла;
33 Ёпрст
 
16.05.17
09:43
хотя не, весь код в топку.
34 Ёпрст
 
16.05.17
09:44
(32) сразу не увидел. форматирование страдает