Имя: Пароль:
1C
 
Метод объекта не обнаружен
0 Desrozen
 
23.06.16
09:19
Здравствуйте!
Прошу сильно не пинать, в 1С только начинаю разбираться, и вот не могу понять что я делаю не так. в 8.2 (Управление рестораном) создаю отчет, который показывал бы рецептуру по выбранной номенклатуре:

Процедура НаименованиеПриИзменении(Элемент)
    
        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Макет = Отчеты.Рецептура.ПолучитьМакет("Макет1");
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Рецептура.Товары.(
        |        Рецептура
        |    )
        |ИЗ
        |    Документ.Рецептура КАК Рецептура";

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

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

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

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

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

        ТабДок.НачатьГруппуСтрок();
        ТабДок.Вывести(ТоварыОбластьШапкаТаблицы);
        ТабДок.НачатьАвтогруппировкуСтрок();

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

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

        ТабДок.ЗакончитьАвтогруппировкуСтрок();
        ТабДок.Вывести(ТоварыОбластьПодвалТаблицы);
        ТабДок.ЗакончитьГруппуСтрок();
    КонецЦикла;

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


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



Вообще конструктор запроса при создании создает какой то ТабДок, который сразу же пытается очистить, создает при этом без объявления (ТабДок=Документы.Рецептура это уже я сам написал). При проверке синтаксических ошибок не находит, однако в режиме предприятия ругается:
{Отчет.Рецептура.Форма.ФормаОтчета.Форма(31)}: Метод объекта не обнаружен (Вывести)
    ТабДок.Вывести(ОбластьЗаголовок);
  Подскажите, куда копать?
1 lubitelxml
 
23.06.16
09:21
ТабДок - это имеется ввиду объект ТабличныйДокумент, а не табличная часть документа / таблица на форме
2 RomaH
 
naïve
23.06.16
09:24
Тип какой у ТабДок
3 Desrozen
 
23.06.16
09:25
окей, а почему тогда конструктор его создает и потом ругается что переменная не обнаружена?
4 GROOVY
 
23.06.16
09:27
(3)  Потому что конструктор сделан не для того, чтобы голову выключать, а просто чтобы не печатать много кода руками.
5 Desrozen
 
23.06.16
09:27
[quote]Тип какой у ТабДок[/quote]
конструктор не присваивает ничего ей, какой у нее может быть тип?
6 Desrozen
 
23.06.16
09:27
(4) а по существу можно? Я ничего не выключал, пытаюсь разобраться почти с нуля
7 GROOVY
 
23.06.16
09:28
По существу, нужно создать табличный документ.
8 1dvd
 
23.06.16
09:30
(7) или использовать поле табличного документа
9 lxs
 
23.06.16
09:35
И это все в "НаименованиеПриИзменении"?.. о_О
10 Desrozen
 
23.06.16
09:35
(7) что-то и правда, называется затупил =D Ну ругаться перестал, правда и не выводит пока ничего, будем ковырять дальше
11 Desrozen
 
23.06.16
09:36
(9) ну да, если я не в ту процедуру это пилю - подскажите куда оптимальнее?
12 lxs
 
23.06.16
09:36
(11) ТабДок.Показать();
13 catena
 
23.06.16
09:40
(11)Наверное в процедуру ПоказатьРецептуру()
14 lxs
 
23.06.16
09:52
(11) кнопку свою нарисовать хотя бы чтоли
15 Desrozen
 
23.06.16
09:54
(14) я на произвольной форме разместил элемент "Наименование" с выбором из номенклатуры, сейчас пытаюсь сделать так чтоб он мне выводил при выборе определенной номенклатуры ее рецептуру
16 hhhh
 
23.06.16
10:15
(15) может там в базе будут 10000 рецептур, зачем все сразу их выводить?
17 Desrozen
 
23.06.16
10:19
(16) их там немногим меньше, вот делаю фильтр чтоб именно нужную выводил))
18 Garikus
 
23.06.16
10:19
Судя по коду, запрос просто выдаст всю рецептуру без фильтра по номенклатуре, и как заметил (15) получите 100% тормоза
19 Garikus
 
23.06.16
10:20
(17) В запросе отфильтровывайте по конкретной номенклатуре и количество циклов уменьшайте
20 Desrozen
 
23.06.16
11:07
(19) с этим кодом он мне вообще пока ничего не выводит.
Если не сложно, можно пример привести как это сделать? :)
21 hhhh
 
23.06.16
11:09
(20) перечитывай (12) до наступления озарения.
22 Garikus
 
23.06.16
11:13
Только непонятно что у тебя там имеется вообще в списке рецептов.

По запросу имеет смысл добавить:

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Рецептура.Товары.(
        |        Рецептура
        |    )
        |ИЗ
        |    Документ.Рецептура КАК Рецептура
        |ГДЕ Рецептура.Товары в (&Номенклатура);
Запрос.Параметры.Номенклатура = Номенклатура;
        
    Результат = Запрос.Выполнить();
Как то так, сложно тебе что то соорудить не зная что у тебя там и как
23 hhhh
 
23.06.16
11:14
(20) и сделай запрос попроще. Зачем сразу высший пилотаж?

   Запрос.Текст =
        "ВЫБРАТЬ
        |    РецептураТовары.Рецептура
        |ИЗ
        |    Документ.Рецептура.Товары КАК РецептураТовары";
24 itlikbez
 
23.06.16
11:26
(0) Откуда у тебя вот это:

ТабДок=Документы.Рецептура;

?
25 Garikus
 
23.06.16
11:31
(24) Из леса вестимо)
26 Garikus
 
23.06.16
11:32
и где
ТабДок = Новый ТабличныйДокумент; ?
27 Desrozen
 
23.06.16
12:42
Я вот думаю, может я зря вообще в конструктор полез, может можно было обойтись СКД?
28 Desrozen
 
23.06.16
12:43
(26) это поправил уже, спасибо))