|
v7: Построение дерева категорий 1с77 | ☑ | ||
---|---|---|---|---|
0
BalBess
22.06.16
✎
07:59
|
Подскажите уважаемые, может есть у кого , поиском не нашел
Мне надо выгрузить список категорий из справочника в таблицу значений Главное условие, чтобы была ссылка на ID родительской категории. Для построения дерева. |
|||
1
BalBess
22.06.16
✎
08:01
|
Дело в том, что у категории нет какого-либо уникального ID, т.е. нужно будет присваивать какой-то уникальный ID
И еще трудность в том, что заранее не известна глубина вложенности |
|||
2
Mikeware
22.06.16
✎
08:06
|
чиво?
зы. ид есть всегда |
|||
3
BalBess
22.06.16
✎
08:09
|
вот то что пока накидал, и больше ничего в голову не лезет ((
ТабЗнач = СоздатьОбъект("ТаблицаЗначений"); ТабЗнач.НоваяКолонка("Id"); ТабЗнач.НоваяКолонка("Parent_Id"); ТабЗнач.НоваяКолонка("Уровень"); ТабЗнач.НоваяКолонка("Категория"); СпрКатегорииТоваров=СоздатьОбъект("Справочник.Номенклатура"); СпрКатегорииТоваров.ИспользоватьРодителя(Группа); СпрКатегорииТоваров.ВключатьПодчиненные(1); СпрКатегорииТоваров.ВыбратьЭлементы(1); Ид = 1; Парент_Ид = 0; Пока СпрКатегорииТоваров.ПолучитьЭлемент() = 1 Цикл Если СпрКатегорииТоваров.ЭтоГруппа() = 0 Тогда Продолжить; КонецЕсли; Если СпрКатегорииТоваров.ПометкаУдаления()=1 Тогда Продолжить; КонецЕсли; ТабЗнач.НоваяСтрока(); ТабЗнач.Категория = СпрКатегорииТоваров.ТекущийЭлемент(); ТабЗнач.Уровень = СпрКатегорииТоваров.Уровень(); ТабЗнач.Id = Ид; //????? ТабЗнач.Parent_Id = Парент_Ид; //??????????? Ид = Ид + 1; // // ???? // // Сообщить("" + ТабЗнач.Уровень + " - " + СпрКатегорииТоваров.Наименование); КонецЦикла; |
|||
4
BalBess
22.06.16
✎
08:11
|
(2) ну ИД есть (код), но он не уникальный, т.е. уникальный в пределах подчинения
и совершенно не "презентабельный". Там и буквы и цифры, кому что в голову прийдет, при заведении категории |
|||
5
Mikeware
22.06.16
✎
08:30
|
(4) а ид и не должен быть "презентабельным". он должен быть однозначно идентифицирующим.
например,как "полный код". к еще есть и уникальный ид у каждого элемента (включая группы). До него можно тоже добраться, даже штатными языковыми средствами. |
|||
6
BalBess
22.06.16
✎
08:40
|
(5) "полный код" - идет со слешами, если только слеши убрать.. надо будет попробовать
и про "внутренний" ИД тоже почитаю, спасибо |
|||
7
Mikeware
22.06.16
✎
08:43
|
(6) чем мешают слеши?
|
|||
8
fbear
22.06.16
✎
08:50
|
ЗначениеВСтрокуВнутр(<Элемент>) отличный же идентификатор
|
|||
9
Mikeware
22.06.16
✎
08:51
|
(8) не длинноват? :-)
|
|||
10
ShoGUN
22.06.16
✎
08:52
|
(6) Огласите весь список требований к идентификатору. Слэши совершенно не мешают, если конечно не хочется непременно числовой идентификатор.
|
|||
11
BalBess
22.06.16
✎
09:05
|
(7) (8) (9) (10) - идентификатор будет индексом в массиве (на сайте) для построения дерева каталога, чем он короче и проще, тем быстрее будет экспорт, да и сайт будет быстрее работать
Слеши там недопустимы |
|||
12
Mikeware
22.06.16
✎
09:08
|
(11) открой для себя 1с++, и функцию ЗначениеВСтрокуБД()
|
|||
13
Mikeware
22.06.16
✎
09:09
|
(11) и его длина на скорость будет влиять очень мало.
|
|||
14
BalBess
22.06.16
✎
09:11
|
Представляете себе индекс массива:
{"B","0","0","33","0","0"," 10275 "} - ЗначениеВСтрокуВнутр(<Элемент>) 000000000000001/00000000000005/000000000000009/000000000000003 - ПолныйКод() (13) может и так, буду пробовать |
|||
15
Ёпрст
22.06.16
✎
09:39
|
если религия не позволяет, то на вот
http://my1c-archive.narod.ru/knowhow/get_id.html |
|||
16
Mikeware
22.06.16
✎
09:40
|
(14) объем большой, а скорость та же.
|
|||
17
Ёпрст
22.06.16
✎
09:51
|
Можно так еще
Функция глПолучитьОбъектИД(Объект) Экспорт // Функция получает ИД объекта // Объект - объект метаданных Перем Сп,Стр; Сп=СоздатьОбъект("СписокЗначений"); Сп.ДобавитьЗначение("",Объект); Сп.ПолучитьЗначение(1,Стр); Возврат Число(Стр); КонецФункции // глПолучитьИДОбъекта |
|||
18
Ёпрст
22.06.16
✎
09:51
|
Или так, самый короткий из штатных
СтрокаДействийФормы=Объект; Сообщить(СтрокаДействийФормы); ©РупорАбсурда или Абрахамс, не вспомню ужо, кто первый нашел |
|||
19
BalBess
22.06.16
✎
10:09
|
(15) - (18) все это хорошо, только поле parent_id на сайте число ((
parent_id INT(10) UNSIGNED NOT NULL DEFAULT '0' менять структуру таблицы я боюсь, нарушу что-нибудь придется что-то изобретать, алгоритм который будет на ходу присваивать ИД и parent_id |
|||
20
Ёпрст
22.06.16
✎
10:15
|
Ё...
в (17) число, если че |
|||
21
Ёпрст
22.06.16
✎
10:16
|
и в клюшках, ид - это число, если че, только в другой системе счисления приведенный к строке
|
|||
22
BalBess
22.06.16
✎
10:26
|
(20) (21) понял, будем копать, спасибо
|
|||
23
Mikeware
22.06.16
✎
10:28
|
(21) если нет УРБД
|
|||
24
SiAl-chel
22.06.16
✎
10:28
|
(22) в (21) - правда, система счисления 36-ричная.
|
|||
25
Mikeware
22.06.16
✎
10:31
|
(22) а чего тут копать? _StrToId() и _IdToStr()
|
|||
26
BalBess
22.06.16
✎
10:48
|
(17) больше всего понравилась, а она точно выдает уникальные номера для каждого элемента? Если таких элементов несколько тысяч?
(25) - честно говоря не разобрался пробую так: Сообщить("" + _StrToId(СпрКатегорииТоваров.ТекущийЭлемент())); выдает то нули, то отрицательные значения |
|||
27
Mikeware
22.06.16
✎
10:52
|
(26) ей нужно скармливать (15) или (17) или (12)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |