Вход | Регистрация
 

Как СтрокаДереваЗначений переконвертировать в ДанныеФормыЭлементДерева (при поиске)

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

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

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

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

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

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

        Возврат  НайтиСтрокуВЭлементах(Строка.ПолучитьЭлементы(), СтруктураПоиска);
    КонецЦикла;
КонецФункции

Хотя идея с индексами тоже зер гуд.
   acht
 
5 - 03.09.20 - 20:01
(4) Сережа, а вторая строку в коллекции элементов, у тебя когда проверяться будет?
   Гений 1С
 
6 - 03.09.20 - 20:08
(5) чего?
   acht
 
7 - 03.09.20 - 20:15
(6) "Для Каждого Строка ИЗ Элементы Цикл", спрашиваю, вторую строку коллекции когда проверять будет?
   Гений 1С
 
8 - 03.09.20 - 20:26
(7) хорошее замечание, спасибо
   Гений 1С
 
9 - 03.09.20 - 20:32
&НаКлиенте
Функция НайтиСтрокуВЭлементах(Элементы, СтруктураПоиска) Экспорт
    Для Каждого Строка ИЗ Элементы Цикл
        Найдено = истина;
        Для Каждого КЗ ИЗ СтруктураПоиска Цикл
            Если Строка[КЗ.Ключ] <> КЗ.Значение Тогда
                Найдено = ложь;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        Если Найдено Тогда
            Возврат Строка;
        КонецЕсли;
        //Ищем рекурсивно вниз

        ИскСтрока = НайтиСтрокуВЭлементах(Строка.ПолучитьЭлементы(), СтруктураПоиска);
        Если ИскСтрока <> Неопределено Тогда
            Возврат  ИскСтрока;
        КонецЕсли;
    КонецЦикла;
КонецФункции
   Сияющий в темноте
 
10 - 03.09.20 - 22:39
а не судьба вернуть идентификатор?
   Гений 1С
 
11 - 04.09.20 - 18:53
(10) как?
   Гений 1С
 
12 - 04.09.20 - 18:53
&НаКлиенте
Функция НайтиСтрокиВЭлементах(Элементы, СтруктураПоиска) Экспорт
    Результат = Новый Массив();
    Для Каждого Строка ИЗ Элементы Цикл
        Найдено = истина;
        Для Каждого КЗ ИЗ СтруктураПоиска Цикл
            Если Строка[КЗ.Ключ] <> КЗ.Значение Тогда
                Найдено = ложь;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        Если Найдено Тогда
            Результат.Добавить(Строка);
        КонецЕсли;
        
        //Ищем рекурсивно вниз

        ИскМ = НайтиСтрокиВЭлементах(Строка.ПолучитьЭлементы(), СтруктураПоиска);
        Для Каждого Эл ИЗ ИскМ Цикл
            Результат.Добавить(Эл);
        КонецЦикла;
    КонецЦикла;
    Возврат Результат;
КонецФункции
   H A D G E H O G s
 
13 - 04.09.20 - 19:17
И вот такие же ебантяи пишут Дерево Маркировки.
Хотя нет, там они все же делают это бережней.
   Гений 1С
 
14 - 04.09.20 - 19:32
(13) ну кто то же должен Родину Автоматизировать.
   Ненавижу 1С
 
15 - 04.09.20 - 19:35
(14) вот поэтому и стыдно за таких
   Гений 1С
 
16 - 04.09.20 - 19:56
(15) за Рассеюшку у тебя все душа болит, Пантелеймон Лексеевич.
   Ненавижу 1С
 
17 - 05.09.20 - 13:21
Ну нашел ты эти строки, а дальше, что с ними делать собрался?

Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.