Как в 1С получить вернюю папку-родителя номенклатуры #550662


#0 by KattyMix
Есть  список номенклатур,каждая номенклатура лежит в папке. Например Питание-Тема-Каша.Необходимо вытащить верхнего родителя номенклатуры. Пробовала таким образом: Но мне этот метод не подходит-так как в списке номенклатур разное количество родителей у каждого элемента.
#0 by KattyMix
Есть  список номенклатур,каждая номенклатура лежит в папке. Например Питание-Тема-Каша.Необходимо вытащить верхнего родителя номенклатуры. Пробовала таким образом: Но мне этот метод не подходит-так как в списке номенклатур разное количество родителей у каждого элемента.
#1 by Asmody
#2 by luns
можно запросом. ВЫБРАТЬ ГДЕ    Номенклатура.Родитель.Ссылка ЕСТЬ NULL ; это для 5 уровней.
#3 by Asmody
запросом это делается гораздо проще
#4 by Reset
Вариант: Сообщить(Справочники.ИМЯСПРАВОЧНИКА.НайтиПоКоду(Лев(Ссылка.ПолныйКод,Ссылка.Метаданные.ДлинаКода)));
#5 by Reset
Почему пол мужской в профиле?
#6 by luns
возможно. это я за минуту накидал. никогда такой задачи не возникало. покажи кстати вариант. интересно.
#7 by Fragster
#8 by Ахиллес
Если вдруг код окажется числом, получишь граблями по лбу.
#9 by Mitriy
кстати, интересно, точно будет ошибка, или скушает?... ты проверял?
#10 by Asmody
даже если и текст, всё равно получит
#11 by KattyMix
Потому  что по  умолчанию пол мужской...=) Я нашла решение- СправочникРод = Строка.Номенклатура;
#12 by luns
скд не то. речь про запрос.
#13 by Fragster
чем принципиально толичается СКД от запроса? в ТЗ ты результат все равно можешь выгрузить
#14 by zbv
в ЛЧ еще есть место, где можно разместить фотку :)
#15 by Адинэснег
охохо...
#16 by Fragster
никогда так не делай:
#17 by Адинэснег
Асмод в одинэснеки подался? оО
#18 by KattyMix
Почему?Потому  что  код может измениться?
#19 by wPa
хард-код = Табу
#20 by luns
да ничем. вон в уже есть ответ. просто Asmody сказал что запросом можно. вот мне и интересно стало чисто технически именно запросом.
#21 by Fragster
алгоритмы конфигурации должна быть независима от данных, хранящихся в ней.
#22 by Fragster
*должны быть
#23 by Asmody
подсказка в слове иерархия
#24 by luns
не надо подсказок. запости текст плиз тем паче что если он проще чем в то будет небольшим
#25 by Ахиллес
полный код: 1/2/3 Длина кода 5. Найди родителя верхнего уровня. Не мы такие, жизнь такая. Не всегда предопределённые значения удобно использовать. Просто надо помнить, что тут лежат грабли. Но то, что это авнокод это несомненно.
#26 by Mitriy
просто не пробовал на числовых кодах... может, там строку строит с нулями, откуда мне знать? А проверять в лом ))
#27 by Fragster
типа выбрать с итогами по иерархии а в обходе результата обработать только первую строку? а если родителя надо получить для кучи номенкулатуры?
#28 by Адинэснег
+А если номенклатуры 200к?)
#29 by Ахиллес
Строка с ведущими нулями это когда тип - "строка", когда "число", тогда без ведущих нулей.
#30 by Fragster
=> , конечно тормозит, но типа работает быстрее, чем рекурсия по каждому элементу, или запрос с группировкой по иерархии.
#31 by KattyMix
Вот мне как раз  для  всех элементов  справочника и надо было...
#32 by Fragster
тогда почему фотка в личной карточке не заполнена?
#33 by Septera
Все просто, нижем приведу пример как получить главного родителя в справочнике:
#34 by Fragster
а теперь для 2-х номенклатур то же самое.
#35 by Reset
С числовым кодом действительно не будет работать, так же, как и с кодом с нулевой длиной. А я писал что метод универсальный на все случаи? Для приведенного в условия - метод полностью рабочий. Точнее, вариант метода. Сам использую в таких случаях вариант из .
#36 by Адинэснег
ВЫБРАТЬ
#37 by Ахиллес
Нафига тут |    Номенклатура.ПометкаУдаления = ЛОЖЬ А если мне надо помеченный на удаление элемент обработать?
#38 by KattyMix
какой-то не логичный вопрос... интересует блондинка или нет?)))
#39 by nop
ужаснах. ВЫБОР - зло
#40 by zbv
нет. Традиция такая есть на мисте.
#41 by spiteful41
+100500
#42 by Fragster
можно и так сказать... просто ускорит получение ответов в дальнейшем...
#43 by zbv
+ и не будут засорять тему, сообщениями про фото. :)
#44 by nop
продублировать текст запроса Н раз, используя ОБЪЕДИНИТЬ ?
#45 by Адинэснег
- 100500 вы чо запросы собрались в цикле крутить?
#46 by nop
можно в цикле составить текст, а потом выполнить 1 раз
#47 by Fragster
самый универсальный способ - в
#48 by smaharbA
строкаТЧ.Номенклатура.ПолныйКод
#49 by Адинэснег
ПЕРВЫЕ возратит родителя только для одной позиции. А если я беру 5-7 тыщ позиций?)
#50 by Septera
Способ в Выигрывает в быстродействии у всех, готов сертификат на стол положить если это не так =)
#51 by Fragster
не работает, если в коде есть /
#52 by KattyMix
А чем вам мой вариант не понравился?Он же короче ваших запросов...Просто прибавляю  столько родителей,сколько мне надо...
#53 by nop
а если в наименованиях есть символ / ?
#54 by Fragster
как получить для всего справочника? ну и да, у меня нет сертификата, но сравни с
#55 by nop
см
#56 by Fragster
медленный
#57 by zbv
для нескольких номенклатур. по скорости ХЗ. ВЫБРАТЬ    Номенклатура.Ссылка КАК Ссылка ИЗ    Справочник.Номенклатура КАК Номенклатура    Номенклатура.ПометкаУдаления = ЛОЖЬ    И Номенклатура.Ссылка В(&Ссылка) ИТОГИ ПО    Ссылка ТОЛЬКО ИЕРАРХИЯ
#58 by zbv
+ правда в какой папке, какая номенклатура видно не будет :)
#59 by Fragster
а теперь - если номенклатуры в разных группах ?
#60 by KattyMix
какая тема оказывается популярная)))
#61 by nop
есть ещё вариант определить максимальную глубину вложености в справочнике единожды. После чего составлять динамически (программно) текст запроса типа но не на 5 уровней, а на определенную ранее глубину вложености.
#62 by Septera
тебе же сказали что можно составить запрос под твою задачу, не вижу проблемы в этом, пример который я привел в универсален и работает очень быстро
#63 by Fragster
ну, результирующий запрос будет быстрым, но вот получение максимального уровня может затянуться :)
#64 by Fragster
запрос в цикле работает быстро?
#65 by smaharbA
ну и чо
#66 by smaharbA
пох
#67 by Адинэснег
у него в базе 100 ном-х позиций :-D
#68 by Fragster
если есть 2 группы верхнего уровня: а а/а и искомая номенклаутра находится в "а/а", то анализ полного кода все равно вернет "а"
#69 by nop
но оно того стоит, 1 раз сделать определение в ПриНачалеРаботыСистемы. Если конфу нельзя менять, и отчет внешний, тогда упс
#70 by smaharbA
да хоть три
#71 by FN
Если в 8-ке есть функция ПолныйКод и коды уникальны по всем справочнику, то юзай Если Лев(строкаТЧ.ПолныйКод,11)="0000045647/" тогда .... КонецЕсли
#72 by Fragster
ага, и еще подписку на "приЗаписи" справочника повесить, да :)))
#73 by nop
фигня, если в коде есть /
#74 by Fragster
ты чему учишь? сам же потом переделывать будешь.
#75 by nop
затормозит запись
#76 by KattyMix
У меня вообще стоит 8.0...
#77 by Адинэснег
#78 by Fragster
там у объекта по моему есть Уровень. а так - если в процессе сеанса работы изменится максимальная глубина - будет косяк. ну и каждый раз при запуске не надо будет пересчитывать...
#79 by Fragster
тогда запрос в цикле из будет быстрее твоего метода, но ты не парься, скорее всего это не будет основным источником тормозов :)
#80 by Ткачев
#81 by nop
точно.  Тогда можно в ПриЗаписи справочника Уровень максимальный сохранять в РС например.
#82 by nop
Баян 1005500 раз. См
#83 by Septera
Выборка программными средствами никога не выиграет у запроса, особенно на sql базах, потому что при переводе на Transact-SQL субд использует различные планировщики запросов, которые построят оптимальный вид запроса.
#84 by zbv
Кстати, а зачем собственно ?
#85 by FN
"/" поставить в код платформа не даст (во всяком случае 7.7) да ладно - абсолютно рабочий подход. Главное прямо в коде не писать "0000045647/", а брать например из константы
#86 by Fragster
и список элементов с максимальным уровнем :))
#87 by Адинэснег
добавьте в петицию "Справочник.Ссылка.ВерхнийРодитель"
#88 by lxs
Строить такие этажи в запросе, тем более, когда количество уровней иерархии неограниченное - бред
#89 by FN
+ на 7.7 это один из самых быстрых способов проверки вхождения элемента в группу
#90 by nop
у меня есть предложение покруче тогда. Завести реквизит в этом же справочнике Уровень и писать в него Уровень, по реквизиту индекс. Экономия и ускорение поиска на лицо
#91 by Fragster
:)
#92 by smaharbA
балбесы
#93 by Reset
Тогда уж сразу реквизит ВерхнийРодитель )
#94 by smaharbA
Справочники.Номенклатура.НайтиПоКоду(строкаТЧ.Номенклатура.ПолныйКод) все
#95 by Ненавижу 1С
в общем случае одним запросом (пакетом запросов) нельзя
#96 by Фрэнки
если задавать список ссылок для которых нужно найти?
#97 by Адинэснег
строй программно
#98 by Адинэснег
->
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С