Имя: Пароль:
1C
1C 7.7
v7: ИспользоватьРодителя() - пустой родитель в com-соединении
Ø (Злопчинский 25.03.2016 17:55)
,
0 Mr_Best
 
24.03.16
19:20
Здравствуйте Коллеги!
Уж пол-дня ломаю свой ум и потихоньку перехожу в состояние тихого ужаса от 7.7 после 8.Х. Чую я мой мозг не совмести с семеркой и поэтому прошу вашей помощи.

Занимаюсь переносом данных из 7.7 в 8.3. Организовал com-соединение из 8.3 в 7.7 по имени V77. Встала задача: получить корневые элементы справочника номенклатура. Ниже код который работает для всех каталогов кроме корневого.

Например так:

Спр = V77.CreateObject("Справочник.Номенклатура");
Спр.НайтиПоКоду("Х510345");

Выборка = V77.CreateObject("Справочник.Номенклатура");
Выборка.ИспользоватьРодителя(Спр);
Выборка.ВыбратьЭлементы();

Пока Выборка.ПолучитьЭлемент() Цикл
КонецЦикла;

Я получу содержимое каталога по найденного по коду "Х510345".  

Если так:
Спр = V77.ПолучитьПустоеЗначение("Справочник.Номенклатура");
то получаю весь справочник, а не первый уровень.

И еще много чего я перепробовал, все не взлетает!

Подскажите, как это сделать в com-соединении, принципиально интересно: именно методом ИспользоватьРодителя это вообще возможно или нет?
1 Mr_Best
 
24.03.16
19:21
Необходимо получить только элементы справочника с пустым родителем. Неужели 7.7 этого не может?
2 Злопчинский
 
24.03.16
19:23
Выборка.ИспользоватьРодителя(Спр);

Спр - это (условно) выборка со спозиционированным курсором (условно). не надо ВЫБОРКУ пихать там, где должен быть скаляр

используй
Выборка.ИспользоватьРодителя(Спр.ТекущийЭлемент());
3 Злопчинский
 
24.03.16
19:24
Пока Выборка.ПолучитьЭлемент() = 1 Цикл //!!! = 1
4 Смотрящий
 
24.03.16
19:26
Спр = V77.ПолучитьПустоеЗначение("Справочник.Номенклатура");

Выборка = V77.CreateObject("Справочник.Номенклатура");
Выборка.ИспользоватьРодителя(Спр);
Выборка.ВыбратьЭлементы(1);
5 Злопчинский
 
24.03.16
19:26
Такое впечатление, что восьмерка разжижает мозг - я это давно подозревал - галочки ставить - много ума не надо... ;-)

Спр.НайтиПоКоду("Х510345"); //НАШЕЛ ГРУППУ!!!
//нехилые проги обычно удостоверяются что найдено, т.к. может быть не найдено, быдлокод
6 Смотрящий
 
24.03.16
19:26
(2) При работе с олей в спр уже возвращается текущийЭлемент()
7 Злопчинский
 
24.03.16
19:28
Выборка.ИспользоватьРодителя(Спр); //используй .ТекущийЭлемент()
Выборка.ВыбратьЭлементы();

//здесб для найденной выше группы ты получаешь подчиненные ей записи номенклатуры (элементы и группы в т.ч. вложенные в группу Спр.ТекущийЭлемент()
8 Злопчинский
 
24.03.16
19:28
(6) хуже не будет
9 Злопчинский
 
24.03.16
19:29
(1) "Необходимо получить только элементы справочника с пустым родителем." - как это соотносится с твоим кодом в (0) - см. пояснения в (7)...?
10 Злопчинский
 
24.03.16
19:30
(5) нехило бы удостоверится что не просто нашел - если нашелю. а что нашел ГРУППУ. а то вдруг на элемент справочника наткнулся
11 Смотрящий
 
24.03.16
19:30
(0) см 4
12 Смотрящий
 
24.03.16
19:30
ой епт ... .ВыбратьЭлементы(0);
вот так
13 Злопчинский
 
24.03.16
19:34
(11) угу..

"Необходимо получить только элементы справочника с пустым родителем."

ПустойРодитель = V77.ПолучитьПустоеЗначение("Справочник.Номенклатура");

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

  Если Выборка.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; //пропускаем группы верхнего уровня
  //обработать ЭЛЕМЕНТ
КонецЦикла;
14 Злопчинский
 
24.03.16
19:36
должно корректно отработать

смотрим на верхний уровень, видим следующее

ГРУППА ЧЕХЛЫ    //группу пропустит
ГРУППА ЗАРЯДКИ  //группу пропустит
Зарядник высоковольтный амперажный //элемент возьмет
Чехол неклассифицированный //элемент возьмет

но у меня например на верхнем уровне запрещено хранить элементы, только группы
15 Остап Сулейманович
 
24.03.16
19:38
(13) "Выборка.ИспользоватьРодителя(ПустойРодитель);" Это звиздетц. Окончательный и бесповоротный.

Все намного проще и намного банальнее.

Спр7 = V77.CreateObject("Справочник.Номенклатура");
Спр7.ВключатьПодчиненные(0);
Спр7.ВыбратьЭлементы();
Пока Спр7.ПолучитьЭлемент()=1 Цикл
  ...
КонецЦикла;
16 HawkEye
 
24.03.16
20:09
(0) ты не представляешь в каком ужасе от таких "специалистов" 7.7...
17 Злопчинский
 
24.03.16
23:20
(15) да, так правильнее
18 Mr_Best
 
25.03.16
10:46
После внесения ваших рекомендаций данный код получает элементы расположенные в корне справочника (с пустым родителем):

Спр = V77.ПолучитьПустоеЗначение("Справочник.Номенклатура");
Выборка = V77.CreateObject("Справочник.Номенклатура");
Выборка.ИспользоватьРодителя(Родитель);
Выборка.ВыбратьЭлементы(1);
        
Пока Выборка.ПолучитьЭлемент(0) Цикл
    // обработка
КонецЦикла;

(5) - дело не в разжижении мозга, а разных подходах к программированию. Мы все когда-то учились.
(4)(13) - ответы в десяточку :)

Коллеги, спасибо за помощь! Тема закрыта.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс