Имя: Пароль:
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) получилось путём добавления процедуры
Процедура ОбойтиСтроки(Дерево,ДеревоКудаДобавлять)
   Для Каждого СтрокаДерева Из Дерево.Строки Цикл
       НС = ДеревоКудаДобавлять.Строки.Добавить();
       ЗаполнитьЗначенияСвойств(НС,СтрокаДерева);
       ОбойтиСтроки(СтрокаДерева,НС);
   КонецЦикла;    
КонецПроцедуры

теперь вопрос в другом, как здесь получить Уникальный Идентификатор...
Независимо от того, куда вы едете — это в гору и против ветра!