Имя: Пароль:
1C
1С v8
v8: Ошибка. Несоответствие типов (параметр номер '1')
0 bUbA
 
15.05.13
12:44
Есть такая процедура

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


При выполнении запроса выдаётся ошибка

{Документ.СвязкаНоменклатуры.Форма.ФормаДокумента.Форма(47)}: Ошибка при вызове метода контекста (Выгрузить)
Дерево=Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.2.16.362): Несоответствие типов (параметр номер '1')

Хотя судя по синтакс-помощнику там всё верно должно быть.
1 Shrike
 
15.05.13
12:45
База.ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
2 Fish
 
15.05.13
12:47
База.ЗаписатьКонецЭлемента() - улыбнуло :)
3 ДенисЧ
 
15.05.13
12:48
Дерево = Результат.Выгрузить(База.ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
4 Волшебник
 
15.05.13
12:49
5 bUbA
 
15.05.13
12:58
спасибо, с этой проблемой всё ясно
(2) а что здесь не так?
6 Fish
 
15.05.13
12:59
(5) Название интригующее :)
7 bUbA
 
15.05.13
13:01
(6) просто перед этим есть процедура ОбойтиУровеньДерева(Строки, Запись)
эта строка к той процедуре относится
8 Fish
 
15.05.13
13:03
(7) Да это понятно. Просто в 1С некоторые названия процедур веселят. А бесит, когда смешивают в одном названии английские буквы и русские. Например: WebЦвета.
9 bUbA
 
15.05.13
13:07
а что может быть не так в записи Запись.ЗаписатьНачалоЭлемента("Элемент");
Метод объекта не обнаружен (ЗаписатьНачалоЭлемента)
может это только с xml работает?
10 Fish
 
15.05.13
13:10
(9) Что такое у тебя Запись?
11 bUbA
 
15.05.13
13:20
(10) в смысле что такое? здесь всё по синтакс-помощнику описано
12 Fish
 
15.05.13
13:30
(11) Я имел в виду, какого типа у тебя переменная "запись"?
13 bUbA
 
15.05.13
13:37
получается строковый тип. но я почитал, что Запись записывает элемент XML. получается, что это не подходит?
14 Fish
 
15.05.13
13:47
(13) Всё верно. У строки нету методов - это примитивный тип. Поэтому и ошибка в (9).
15 bUbA
 
15.05.13
13:52
(14) а по-другому это реализовать можно как то?

дата, число и булево тоже примитивные типы?
16 hhhh
 
15.05.13
13:59
(15) ну, создавай объект, типа ЗаписьХМЛ, с ним и работай.
17 palpetrovich
 
15.05.13
14:02
вот как "ЗаписатьКонецЭлемента" - так База, а как  "ЗаписатьНачалоЭлемента" - так Запись ...несправедливо :)
18 bUbA
 
15.05.13
14:09
сейчас получается такой код

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

я убрал процедуру ОбойтиУровеньДерева, всё вроде бы работает, но выводится в отдельном окне. а как его заставить выводиться в табличной части формы?
19 ДенисЧ
 
15.05.13
14:10
(18) вместо тз.ВыбратьСтроку(); сделай заполнения табличной части. Ваш К.О.
20 bUbA
 
15.05.13
14:13
(19) вместо тз записал ЭлементыФормы.Номенклатура. Но это поле недоступно для записи.
21 ДенисЧ
 
15.05.13
14:14
(20) логично...
А почему бы не заполнять именно табличную часть, не элемент формы?

Кроме того... У тебя в тз что находиится? строки, числа и даты? Если больше - то овоща ты таким образом сделаешь...
22 bUbA
 
15.05.13
14:27
В тз строки и числа.
Эта табличная часть недоступна для заполнения. Если просто нажать на кнопку Добавить, то тогда построчно можно заполнить из справочника. Но если надо заполнить запросом, тогда не получается.
23 ДенисЧ
 
15.05.13
14:39
обогиядумне...

Для Каждого стр из тз Цикл
 стр1 = ИмяТабличнойЧастиОбработки.Добавить();
 ЗаполниьтЗначенияСвойств(стр1, стр);
КОнецЦикла;
24 ice777
 
15.05.13
14:49
эта.. я смущен.
В чем смысл вместо:
Запрос = новый запрос;

писать:

Запрос = База.NewObject("Запрос");
25 Shrike
 
15.05.13
15:24
(24) В том, что запрос через ОЛЕ
26 palpetrovich
 
15.05.13
16:06
bUbA, если (25) верно, то ЗаполниьтЗначенияСвойств из (23) не прокатит, надо предватрительно найти номенклатуру, к примеру - по наимменованию
27 ДенисЧ
 
15.05.13
16:17
(26) читай (22)
Я специально уточнил
28 bUbA
 
15.05.13
17:47
(26) получилось путём добавления процедуры
Процедура ОбойтиСтроки(Дерево,ДеревоКудаДобавлять)
   Для Каждого СтрокаДерева Из Дерево.Строки Цикл
       НС = ДеревоКудаДобавлять.Строки.Добавить();
       ЗаполнитьЗначенияСвойств(НС,СтрокаДерева);
       ОбойтиСтроки(СтрокаДерева,НС);
   КонецЦикла;    
КонецПроцедуры

теперь вопрос в другом, как здесь получить Уникальный Идентификатор...
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший