Имя: Пароль:
1C
1C 7.7
v7: Вывод элементов определенной подгруппы по коду подгруппы в таблицу значений
,
0 SeeWorld
 
31.07.12
11:40
Как реализовать?
Вот что сделал:
Процедура Сформировать()
Перем СписЭлем;    
Таб.НоваяКолонка("Наименование");
СписЭлем = СоздатьОбъект("Справочник.Номенклатура");
СписЭлем.ВыбратьЭлементы();
Пока СписЭлем.ПолучитьЭлемент() = 1 Цикл
Если (СписЭлем.ЭтоГруппа() = 1) и (СписЭлем.Код = "0010") тогда
   СписЭлем.ВключатьПодчиненные(1);
   СписЭлем.ВыбратьЭлементы();
   Пока СписЭлем.ПолучитьЭлемент() = 1 Цикл
   Таб.НоваяСтрока();
   Таб.Наименование = СписЭлем;
   КонецЦикла;
КонецЕсли;    
КонецЦикла;    
КонецПроцедуры

Не рабоает.
1 viktor_vv
 
31.07.12
11:47
СписЭлем = СоздатьОбъект("Справочник.Номенклатура");
Если СписЭлем.НайтиПоКоду("0010",0) = 1 Тогда
ТекРодитель = СписЭлем.ТекущийЭлемент();
КонецЕсли ;

СписЭлем.ИспользоватьРодителя(ТекРодитель);
СписЭлем.ВыбратьЭлементы();
Пока СписЭлем.ПолучитьЭлемент() = 1 Цикл



   Таб.НоваяСтрока();
   Таб.Наименование = СписЭлем;


КонецЦикла;    
КонецПроцедуры
2 viktor_vv
 
31.07.12
11:48
А сорри, немного ошибся.

Если СписЭлем.НайтиПоКоду("0010",0) = 1 Тогда
ТекРодитель = СписЭлем.ТекущийЭлемент();
Иначе
ТекРодитель = ПолучитьПустоеЗначение();
КонецЕсли ;
3 viktor_vv
 
31.07.12
11:49
Это если в справочнике уникальность кодов во всем справочнике. Если в пределах подчинени, то находить будет первый элемент с такми кодом.
4 Надсмотрщик
 
31.07.12
12:02
(0)(1) За этот код - "(СписЭлем.Код = "0010")" Длинной толстой линейкой, да по заднице!
5 viktor_vv
 
31.07.12
12:05
(4) А мне за что :)?
6 пипец
 
31.07.12
12:05
запросом не ?
7 Надсмотрщик
 
31.07.12
12:08
(5)
СписЭлем = СоздатьОбъект("Справочник.Номенклатура");
Если СписЭлем.НайтиПоКоду("0010",0) = 1 Тогда
  ТекРодитель = СписЭлем.ТекущийЭлемент();
КонецЕсли ;

Чей код?
8 SeeWorld
 
31.07.12
12:12
Не мой)
9 Oleg_Kag
 
31.07.12
12:18
НайтиПоКоду(<?>,);
Синтаксис:
НайтиПоКоду(<Код>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по коду.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Код> - выражение со значением искомого кода,
<ФлагПоиска> - флаг поиска (необязателен):
 0 - поиск во всем справочнике вне зависимости от родителя;<-----СЮДА СМОТРИМ
 1 - поиск внутри установленного подчинения (родителя);
 2 - поиск по полному коду через разделитель.
Значение по умолчанию:
 0 - если код уникален во всем справочнике;
 2 - если код уникален только в группе.
Замечание:
Метод  можно использовать только для объектов, созданных
10 Oleg_Kag
 
31.07.12
12:23
Опять же
Таб.Наименование = СписЭлем.ТекущийЭлемент(); //вот так надо
11 viktor_vv
 
31.07.12
12:27
Не мой :). Просто надоело про это писать каждый раз, про то что лучше кинуть на форму реквизит, завести константу и т. п. и т. д.
12 viktor_vv
 
31.07.12
12:29
(11)+ Обычно после таких советов, от ТС'ов начинаются жалостливые истории, почему именно так, и никак иначе.
13 SeeWorld
 
31.07.12
12:38
В моем коде открывается элементы не одной подгруппы, а все элементы всех подгрупп. Как сделать так, чтобы элементы одной подгруппы открывались?
14 SeeWorld
 
31.07.12
12:38
открываются
15 SeeWorld
 
31.07.12
12:41
Процедура Сформировать()
Перем СписЭлем;    
Таб.НоваяКолонка("Наименование");
СписЭлем = СоздатьОбъект("Справочник.Номенклатура");
СписЭлем.ВыбратьЭлементы();
Пока СписЭлем.ПолучитьЭлемент() = 1 Цикл
Если (СписЭлем.ЭтоГруппа() = 1) и (СписЭлем.Код = "0010") тогда
   СписЭлем.ИспользоватьРодителя(СписЭлем);
   СписЭлем.ВыбратьЭлементы();
   Пока СписЭлем.ПолучитьЭлемент() = 1 Цикл
   Таб.НоваяСтрока();
   Таб.Наименование = СписЭлем.ТекущийЭлемент();
   КонецЦикла;
КонецЕсли;    
КонецЦикла;    
КонецПроцедуры
Решил сам проблему
16 viktor_vv
 
31.07.12
12:46
Если уж тебе твой больше нравиться, то

СписЭлем.ИспользоватьРодителя(СписЭлем.ТекущийЭлемент());
17 SeeWorld
 
31.07.12
12:50
А обязательно так делать?)
18 viktor_vv
 
31.07.12
12:58
(17) В данном случае может и отработает, но если привыкнешь, то потом можешь поиметь неработающий код в других местах.
Тут тебе надо четко понимать разницу между объектом Справочник.Номенкдатура СписЭлем и ссылкой на элемент справочника, которую возвращает метод СписЭлем.ТекущийЭлемент() .
19 SeeWorld
 
31.07.12
13:02
А в чем разница?
20 Nirvana
 
31.07.12
13:04
Ой, ужас.
Автор, если ты внутри одной выборки в СписЭлем открываешь другую выборку в СписЭлем, то первая, естественно, сбивается. Используй другую переменную для второй выборки (с отбором по родителю из первой выборки).
21 SeeWorld
 
31.07.12
13:14
Что ужас то если я только учусь работать в 1с.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой