#0
by Ненавижу 1С
Есть таблица с двумя полями: ссылка и родитель. Ссылка в таблице уникальна и всегда заполнена. Родитель - это ссылка непосредственного родителя (он тоже обязательно есть в некоторой записи этой таблицы в поле Ссылка). Если родителя нет, то поля Родитель не заполнено (ммм... в терминах 1С "пустая ссылка") - это корневой элемент. Требуется написать ОДИН запрос (можно пакетный) на языке запросов 1С, с помощью которого можно проверить нет ли в этой таблице иерархии зацикленности? То есть проверить на валидность данные. Взлетит?
#2
by Ненавижу 1С
нужен запрос, если он есть, то взлетит, если есть хоть какое-то приемлимое обоснование, что нельзя - значит не взлетит
#3
by Fragster
это порочная структура, реально. правильная структура - ссылка, левое значение, правое значение, уровень. родитель опционален. и дерево вида (1,6,0) (2,3,1)(4,5,1)
#4
by Ненавижу 1С
структура уже задана, порочная она или нет, другой вопрос меня интересует можно проверить запросом на зацикленность или нет
#8
by Fragster
может коррелированными подзапросами и можно как-то извратится. только это не стандартный T_SQL, да и хз, только 1 раз написал такой запрос, как раз для построения дерева (но там гарантированно не было циклов)
#13
by Lama12
Недавно тема обсасывалась, но без запросов. Та дано оптимальное решение. Если на запрос переведешь, то получится.
#14
by Ненавижу 1С
нужно запросом дать данные, которые уже обработки не требуют (или требуют за фиксированное время)
#15
by Mort
И это можно доказать, оперируя порядком вычислений необходимого для решения данной задачи и порядком который может "предложить" один запрос.
#18
by Axel2009
если тока вывести, можно скд попробовать, там есть рекурсии встроенные.. набор данных сам на себя зациклить..
#19
by sikuda
Реляционный подход требует получения данных за ограниченное количество внутренних запросов в системе. Если вы используете рекурсию типа TSQL оператор with, то количесто подзапросов растет как квардат от уровня вложенности. Если количество вложенности до 10, то этот костыль подходит. Но запихнуть его в 1С мне не удалось. В общем случае создавайте кэш-РегистрСведений Родитель(любого уровня), Ссылка, УровеньВложенности. Записывайте его при любом изменении иерархии. С помощью этой структуры ваш запрос строиться легко.
#20
by Ахиллес
Что есть в данном случае "Зацикленность"? У Ссылки1 родитель равен Сылка2, а у Ссылка2 родитель равен Ссылка1?
#22
by Ахиллес
Что тогда найти надо? Неоднократные ссылки? Ещё большая халява тогда. Что есть зацикленность?
#24
by Ахиллес
Запрос1: Выбрать Элемент, Родитель, группировка по Элемент,Родитель, где Родитель не пустое значение. Запрос2: Выбрать Элемент2, Родитель2, группировка по Элемент2,Родитель2, где Родитель2 не пустое значение. Внутреннее соединение по Элемент = Родитель2 З.Ы. Если х.ню сморозил - звиняйте :-)
#25
by Ахиллес
Не это ересь я какую то написал. Необходимо ещё уровень элемента знать. И дополнительное условие по сравнению уровней, я так понимаю.
#30
by Ахиллес
Цитата из Есть таблица с двумя полями: ссылка и родитель. Значит надо просто дополнить эту таблицу уровнем элемента и уровнем родителя
#32
by Ахиллес
Если уровень родителя больше уровня элемента, то косяк. Собственно при нормальном заполнении ситуация в невозможна в принципе. Х.З. Как эту таблицу Ненавижу 1С заполняет и почему у него там какая то зацикленность образовалась.
#33
by Axel2009
когда дерево заполняет пользователь на глаз, то каждый пересчет может занимать "долгое" время наверна
#35
by Axel2009
ну вот сидит пользователь, дается ему 2 колонки, ссылка, родитель. он заполняет ее сначала, а потом надо проверить, все ли он корректно ввел. если по каждому тыку проверять, пользователь будет сидеть по паре секунд и ждать когда же это произойдет..
#36
by Живой Ископаемый
2 зачем проверять после того как он наделал ошибок а не каждый раз как он вводит новую строку? Или это специальный пользователь, обученный заполнять сначала только одну колонку, а потом только вторую во всей таблице сразу?
#37
by Живой Ископаемый
"если по каждому тыку проверять" непонятно пчоему по паре секунд а не мгновенно
#39
by Ахиллес
В момент заполнения элемента и родителя пусть проверяются уровни элемента и уровень родителя. Если уровень родителя больше уровня эдемента, включается разрядник в сиденье стула на 1000 вольт. Я не могу придумать, как иначе образуется эта зацикленность?
#40
by Ахиллес
Мы ведь о многоуровневом справочнике говорим? В таком случае Уровень это объективное свойство элемента. Не надо думать какой уровень, надо просто взять и посмотреть на него.
#41
by Fragster
в нет уровня, есть таблица с 2 колонками. требуется проверить возможность построения дерева.
#42
by Живой Ископаемый
2 нет, не обязательно... Автор может думать как организовать альтернативную иерархию... Ну например... Есть справочник контрагентов - он заполняется как бог на душу положит бухгалтерии или например по Гегорафическому принципу... А на другом уровне эти контрагенты связаны между собой иерархией Агент-субагент
#44
by Живой Ископаемый
по географическому принципу 1.ЦАО 1.1.МосковскаяОбласть 1.1.1 агент Вася 1.2. Калужская Область 1.2.1 агент Петя а альтернативная ирерхия выглядит так: 1. агент Вася из московской области 1.1. субагент Петя из Калужской области
#45
by Fragster
при чем тут? допустим, мы строим произвольную (альтернативную) иерархию, и у нас РС с 2 измерениями: Ссылка и Родитель.
#48
by Живой Ископаемый
2 а ему и не нужно проверять зацикленность первой. Он хочет проверить зацикленность второй. а выглядит это просто: 1. агент Вася из московской области | 1.1. субагент Петя из Калужской области 1.1. субагент Петя из Калужской области | 1. агент Вася из московской области
#49
by МихаилМ
-------------------------- можно только если известно макс колво вложенности уровней но можно построить более эффективнуюю иерархию : в cсылке можно закодировать иерархию. и проверять её при создании элемента. тогда можно создать эффективный индекс.
#51
by Ахиллес
Если таблица соответствует новой иерархии, то действует простое правило, кто первый встал, того и тапки. Мы же должны знать на какой уровень иерархии мы хотим поместить создаваемый элемент? Как только создаётся элемент в новой иерархии ему моментально присваивается уровень. Без этого условия новую иерархию вообще невозможно построить. А раз уж мы присвоили уровень, то мы можем сравнивать их для новой пары.
#52
by Ахиллес
Для случая Создаем 1. агент Вася из московской области и решаем, что он будет родителем всех агентов. (Должны же мы с чего то начать дерево? Поэтому получите Вася первый уровень и распишитесь) Далее мы создаём 1.1. субагент Петя из Калужской области и решаем, что вася должен стать его родителем. Да не вопрос. Вот тебе Петя второй уровень. Дальше мы вышли покурить, а кто то нам решил помочь. Заводит 1.1. субагент Петя из Калужской области и решает, что Петя должен стать родителем Васи. И тут же получает граблями по лбу, потому, что Вася уже был заведён ранее и уже имеет уровень 1 который меньше чем у предпологаемого родителя.
#54
by vmv
уже давно создан алгоритм превращения тз в дерево по набору полей иерархии посредством запсроса с менеджером временных таблиц(ищем на инфостаре). его, кто хотел, докрутил по корректной обработке всех полей таблицы. Заодно он покакзывает зацикленности или его(алгоритм) можно заставить это делать веласипед снова изобретаем
#56
by Ахиллес
На какой фабрике таких умных делают? Или алгоритм опиши или ссылку прямую дай. А на предъявы типа ищите на инфостарте/гугле/яндексе можно аналогичный посыл получить, куда Макар телят не гонял.
#57
by vmv
"вольная" работа с группами - однин из больших минусов платформы 1С. Мне пришлось к ключевым справочникам: ОС, Контрагенты, Номенкратура, ФизЛица прикручивать подписчики ПередЗаписью, которые при создании пользователем нового элемента "кладут" его программно именно в тут группу, которая определена
#59
by Живой Ископаемый
2 даже если будет включена не иерархия групп, а иерархия групп и элементов? даже если после интерактивной записи потом программно для элемента-родителя назначу родителем элемент-потомок? не проверял, просто спрашиваю.
#60
by vmv
не-а, В новом ПланВидов характеристик задаются правила иерархии для этих справочников согласно наборам реквизитов объекта. Например если при вводе нового контрагента выбрали, что это юр.лицо, что форма собственности "ООО" и это, допустим поставшик, то он "падает" в свою иерархию и любая попытка перемешщения его из групы будет "натыкаться" на это правило расположения в иерахии, упорно записывая его в ту группу, что определена ПВХ. Если пользователь ничего не выбрал, то элемент падает в корень, а пользователь получает втык за лень и скопление незаполненных элементов.
#61
by Ахиллес
Ну интерактивно точно не получится. Я верю в то, что создатели 1С не конченые дауны, а програмно тоже не пробовал. Завтра попробую.
#63
by vmv
пример вызова и метод ниже, метод не совсем оптимален в смысле кода, но я ему "скармливаю" любые тз для получения иерархий и итогов по числовым полям, полезно, например, для работы с банками, группировать дата/банк/Валюта деревья и импортить потом куда хочь // Инициализация массива колонок группировок и структуры с колонками пересчета.
#65
by Живой Ископаемый
Но вот такой запрос: Где параметр Ссылка я задаю в элемент первого уровня, а Ссылка1 в его потомка третьего уровня, дает мне одну строку. к этой строке я применяю такой код: прокатывает, и после этого если открыть форму списка справочника Подразделения - там нет ни элемента первого уровня и ни одного его потомка... Но если выполнить запрос к справочнику вцелом, то эти элементы видны. И можно даже открыть сам элемент.. Но вот по кнопке "Перейти в список" Толстый клиент подвисает - видимо зацикливается... :))
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Можно ли сгруппировать в СКД номенклатуру по иерархии если наборданных - таблица знач
- СКД: Расчет итогов по иерархии, набор данных - таблица значений
- Таблица формы, таблица значений, табличная часть. В чем разница?
- УПП таблица InfoRgChngR27280 что эта за таблица
- Не срабатывает проверка иерархии в СКД
- Как найти элемент конфигурации - таблица Reference36 и таблица SeqB25827
- Сортировка элементов в СКД по иерархии, но без вывода иерархии
В этой группе 1С
- v7: ОткрытьФорму и ОткрытьФормуМодально
- v8: Вывести табличный документ в реквизит управляемой формы
- УПП. Премия по итогам за год, фиксированная
- Поменять имя колонки в ТаблицеЗначений 82
- Каков максимальный размер вложения у ИнтернетПочтовоеСообщение?
- Публикация базы 1С 8.2 на веб-сервере
- v7: Что с последними обновлниями для Украины? Декларация формируется?
- 8.2 - УПП - Платежное поручение - ЗАПОЛНИТЬ расшифровку платежа
- как выгнать пользователей из ФАЙЛОВОЙ базы? бп на 8.2
- За что отвечает bsl.dll
- v8: Неужто нельзя в УПП стандартными RLS скрыть группу контрагентов?
- v8: Управляемые формы. Как создать закладки на форме?
- Запустить вручную регламентное задание в файловой базе данных УТП 8.1
- ОбщийМодуль.УправлениеВзаиморасчетами
- v8: Транспортные расходы отнести на 20 счет? можно?
- 8.2 Тонкий клиент. Как свернуть табличную часть?
- Дебетовое сальдо на сч.68.04.2
- Несовместимая версия файла базы данных... 8.2.14.0...
- В бухгалтерии 1.6 возможно продолжать вести учет?
- УПП: Учет продаж по менеджерам.?