|
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) - ответы в десяточку :) Коллеги, спасибо за помощь! Тема закрыта. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |