Имя: Пароль:
1C
1С v8
Хранение для сортировки
, ,
0 withoutname
 
06.02.20
10:12
Обычные формы. Имеется документ с ТЧ. На форме ТЧ преобразуется в Дерево значений (ДЗ). У строк ДЗ имеется список вида
Раздел 1.
  1.1.
  1.2.
Раздел 2.
  2.1.
    2.1.1.
...
Порекомендуйте как организовать хранение данного списка?
В дальнейшем потребуется выводить такую же иерархию в отчетах

Сейчас ДЗ постоянно перенумеровывается при добавлении строк, перестановки.
Возможно это хранение поможет сократить затраты на перенумерацию
1 Ненавижу 1С
 
гуру
06.02.20
10:16
заполнять (возможно программно) служебное поле-шаблон для упорядочивания фиксированного типа:

01.000.000 Раздел 1.
01.001.000  1.1.
01.002.000  1.2.
02.000.000 Раздел 2.
02.001.000  2.1.
02.001.001  2.1.1.

но нужно знать заранее глубину вложенности
можно еще организовать технологией "вложенные множества", но там сложнее
2 artemis
 
06.02.20
10:33
(0) Хранить в справочнике.
3 withoutname
 
06.02.20
10:48
(1) заполняю программно. ну вот примерно так я и думал )
вложенность ограничена всего 3я уровнями
4 withoutname
 
06.02.20
10:54
не пойму как мне обработать строку верхнего уровня, при добавлении подчиненного.
5 withoutname
 
06.02.20
10:57
и соответственно назначать этот шаблон - при добавлении или изменять - при перестановке
6 Ненавижу 1С
 
гуру
06.02.20
11:07
(4) зачем обрабатывать строку верхнего уровня при добавлении подчиненного?
7 withoutname
 
06.02.20
11:14
(6) допустим я сформировал поле-шаблон 001.000.000, далее добавляю подчиненную строку, мне необходимо получить ...
а, ну все правильно, мне просто со строки родителя надо взять первый разряд, посчитать количество строк у родителя и установить 001.[кол-во строк в формате разряда].000
3й уровень также...
вроде пока всё складывается )
8 polosov
 
06.02.20
11:23
(7) Зачем такие сложности?
Добавь 1 реквизит который будет хранить номер строки "родительской" строки. Если он не заполнен, то это строка верхнего уровня, если заполнена, то значит строка подченена в дереве соответствующей строке.
9 withoutname
 
06.02.20
11:31
(8) в принципе у меня есть такой реквизит - КлючСвязи, для построения дерева, но он присваивается только при сохранении
10 withoutname
 
28.02.20
12:32
Забыл отписаться...
Вот что получилось в итоге
Функция юскСформироватьПорядок(Дерево, ТекущаяСтрока) Экспорт
    
    //Шаблон = "000.000.000";
    //:Дерево = Новый ДеревоЗначений
    Если ТекущаяСтрока.Уровень() = 0 Тогда
        
        ИндексСтроки = Дерево.Строки.Индекс(ТекущаяСтрока)+1;
        Порядок = Формат(ИндексСтроки, "ЧЦ=3; ЧВН=") + ".000.000";
    ИначеЕсли ТекущаяСтрока.Уровень() = 1 Тогда
        
        СтрокаРодитель = ТекущаяСтрока.Родитель;
        ПорядокРодителя = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаРодитель.Порядок, ".", Истина);
        МассивПорядка = Новый Массив;
        МассивПорядка.Добавить(ПорядокРодителя[0]);
        ИндексСтроки = СтрокаРодитель.Строки.Индекс(ТекущаяСтрока)+1;
        МассивПорядка.Добавить(Формат(ИндексСтроки, "ЧЦ=3; ЧВН="));
        МассивПорядка.Добавить("000");
        
        Порядок = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(МассивПорядка, ".");
    ИначеЕсли ТекущаяСтрока.Уровень() = 2 Тогда
        
        СтрокаРодитель = ТекущаяСтрока.Родитель;
        ПорядокРодителя = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаРодитель.Порядок, ".", Истина);
        МассивПорядка = Новый Массив;
        МассивПорядка.Добавить(ПорядокРодителя[0]);
        МассивПорядка.Добавить(ПорядокРодителя[1]);
        ИндексСтроки = СтрокаРодитель.Строки.Индекс(ТекущаяСтрока)+1;
        МассивПорядка.Добавить(Формат(ИндексСтроки, "ЧЦ=3; ЧВН="));
        
        Порядок = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(МассивПорядка, ".");
    КонецЕсли;
    
    Возврат Порядок;
КонецФункции