Имя: Пароль:
1C
 
Как СтрокаДереваЗначений переконвертировать в ДанныеФормыЭлементДерева (при поиске)
0 Гений 1С
 
гуру
03.09.20
15:11
Написал функцию, не знаю, как назад передать строку реквизита ДеревоПозиций типа ДанныеФормыДерево.

Или тупо перебором искать?

&НаСервере
Функция НайтиСтрокуВДереве(СтруктураПоиска) Экспорт
    
    ДЗ = РеквизитФормыВЗначение("ДеревоПозиций");    
    ИскСтроки = ДЗ.Строки.НайтиСтроки(СтруктураПоиска, истина);
    Если ИскСтроки.Количество() = 0 Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    ИскСтрока = ИскСтроки[0];
    Возврат ИскСтрока;
    
КонецФункции
1 fisher
 
03.09.20
15:49
Тупо перебором. Или умно перебором. Но если уже работаешь ДанныеФормыДерево, то нет смысла плодить сущности чтобы потом бороться с проблемами их проекции друг на друга.
2 fisher
 
03.09.20
15:52
Плюс на серверном вызове сэкономишь.
3 acht
 
03.09.20
16:13
Ну вот, опять Его Гений ничего нам не дарит, а попрошайничает, печалька....
Для сохранения баланса говнокода предлагаю возвращать строку индексов по всем родителям найденной строки, типа "10,2,0". На клиенте реверсировать, заменять запятую на "ПолучитьЭлементы" и передавать в функцию Вычислить:

СтрокаДерева = Вычислить("ДеревоПозиций.ПолучитьЭлементы()[0].ПолучитьЭлементы()[2].ПолучитьЭлементы()[10]");

По-моему, так гениально. Будет в духе Автора.
4 Гений 1С
 
гуру
03.09.20
17:49
(3) Дарю:

&НаКлиенте
Функция НайтиСтрокуВЭлементах(Элементы, СтруктураПоиска) Экспорт
    Для Каждого Строка ИЗ Элементы Цикл
        Найдено = истина;
        Для Каждого КЗ ИЗ СтруктураПоиска Цикл
            Если Строка[КЗ.Ключ] <> КЗ.Значение Тогда
                Найдено = ложь;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        Если Найдено Тогда
            Возврат Строка;
        КонецЕсли;
        //Ищем рекурсивно вниз
        Возврат  НайтиСтрокуВЭлементах(Строка.ПолучитьЭлементы(), СтруктураПоиска);
    КонецЦикла;
КонецФункции

Хотя идея с индексами тоже зер гуд.
5 acht
 
03.09.20
20:01
(4) Сережа, а вторая строку в коллекции элементов, у тебя когда проверяться будет?
6 Гений 1С
 
гуру
03.09.20
20:08
(5) чего?
7 acht
 
03.09.20
20:15
(6) "Для Каждого Строка ИЗ Элементы Цикл", спрашиваю, вторую строку коллекции когда проверять будет?
8 Гений 1С
 
гуру
03.09.20
20:26
(7) хорошее замечание, спасибо
9 Гений 1С
 
гуру
03.09.20
20:32
&НаКлиенте
Функция НайтиСтрокуВЭлементах(Элементы, СтруктураПоиска) Экспорт
    Для Каждого Строка ИЗ Элементы Цикл
        Найдено = истина;
        Для Каждого КЗ ИЗ СтруктураПоиска Цикл
            Если Строка[КЗ.Ключ] <> КЗ.Значение Тогда
                Найдено = ложь;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        Если Найдено Тогда
            Возврат Строка;
        КонецЕсли;
        //Ищем рекурсивно вниз
        ИскСтрока = НайтиСтрокуВЭлементах(Строка.ПолучитьЭлементы(), СтруктураПоиска);
        Если ИскСтрока <> Неопределено Тогда
            Возврат  ИскСтрока;
        КонецЕсли;
    КонецЦикла;
КонецФункции
10 Сияющий в темноте
 
03.09.20
22:39
а не судьба вернуть идентификатор?
11 Гений 1С
 
гуру
04.09.20
18:53
(10) как?
12 Гений 1С
 
гуру
04.09.20
18:53
&НаКлиенте
Функция НайтиСтрокиВЭлементах(Элементы, СтруктураПоиска) Экспорт
    Результат = Новый Массив();
    Для Каждого Строка ИЗ Элементы Цикл
        Найдено = истина;
        Для Каждого КЗ ИЗ СтруктураПоиска Цикл
            Если Строка[КЗ.Ключ] <> КЗ.Значение Тогда
                Найдено = ложь;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        Если Найдено Тогда
            Результат.Добавить(Строка);
        КонецЕсли;
        
        //Ищем рекурсивно вниз
        ИскМ = НайтиСтрокиВЭлементах(Строка.ПолучитьЭлементы(), СтруктураПоиска);
        Для Каждого Эл ИЗ ИскМ Цикл
            Результат.Добавить(Эл);
        КонецЦикла;
    КонецЦикла;
    Возврат Результат;
КонецФункции
13 H A D G E H O G s
 
04.09.20
19:17
И вот такие же ебантяи пишут Дерево Маркировки.
Хотя нет, там они все же делают это бережней.
14 Гений 1С
 
гуру
04.09.20
19:32
(13) ну кто то же должен Родину Автоматизировать.
15 Ненавижу 1С
 
гуру
04.09.20
19:35
(14) вот поэтому и стыдно за таких
16 Гений 1С
 
гуру
04.09.20
19:56
(15) за Рассеюшку у тебя все душа болит, Пантелеймон Лексеевич.
17 Ненавижу 1С
 
гуру
05.09.20
13:21
Ну нашел ты эти строки, а дальше, что с ними делать собрался?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан