• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Упорядочивание строк в документе

  • Автор темы Roman
  • Дата начала
V

vitfil

Только следи, чтобы в группировке не было указано БезГрупп
особой разницы не имеет.
ТЗН.Уровень = Номенклатура.Уровень();
ТЗН.Родитель = Номенклатура.Родитель;

ТЗН.Сортировать("Уровень,Родитель,...ну и все остальные сортировки");
 
V

vbs

особой разницы не имеет.
Это да, в запрос все равно попадет
ТЗН.Сортировать("Уровень,Родитель
А я вот еще о чем подумал - не перепутаются ли при этом нижние позиции, которые принадлежат разным группам




Добавлено: Похоже, погорячились мы с такой сортировкой.
Ведь ему, кажется, надо так :
Номенклатура Уровень
Машины 1
Импортные 2
Ауди 3
Вольво 3
Мерседес 3
Отечественные 2
Волга 3
Лада 3
Москвич 3...
А при ТЗН.Сортировать("Уровень,Родитель") выйдет
Машины 1
Импортные 2
Отечественные 2
Ауди 3
Волга 3
Вольво 3
Лада 3
Мерседес 3
Москвич 3...
Или я чего-то не понял ?
 
R

Roman

Это да, в запрос все равно попадет

А я вот еще о чем подумал - не перепутаются ли при этом нижние позиции, которые принадлежат разным группам




Добавлено: Похоже, погорячились мы с такой сортировкой.
Ведь ему, кажется, надо так :
Номенклатура Уровень
Машины 1
Импортные 2
Ауди 3
Вольво 3
Мерседес 3
Отечественные 2
Волга 3
Лада 3
Москвич 3...
абсолютно верно, именно такую сортировку мне и надо организовать
 
V

vbs

Тогда, пожалуй, придется добавить столько колонок, сколько уровней в справочнике и, исследуя родителей снизу,
добавлять значения родителей, пока не достигнут самый верхний уровень. Одновременно формируем список
будущей сортировки ("Номенклатура,Г3,Г2,Г1..."), где Г1 - самый нижний уровень вложения.
Причем, учти, что вряд ли это сработает адекватно, если в одной группе, например, 3 уровня, а в другой, скажем, 4
 
R

Roman

Тогда, пожалуй, придется добавить столько колонок, сколько уровней в справочнике и, исследуя родителей снизу,
добавлять значения родителей, пока не достигнут самый верхний уровень. Одновременно формируем список
будущей сортировки ("Номенклатура,Г3,Г2,Г1..."), где Г1 - самый нижний уровень вложения.
Причем, учти, что вряд ли это сработает адекватно, если в одной группе, например, 3 уровня, а в другой, скажем, 4
а может как-то можно использовать Для по Цикл?
Я просто не программист и въезжать(разбираться) начал не давно
Просто я думаю можно организовать проход в цикле: Для По - пусть выбирает пока не дойдет до верхнего уровня и сразу сортирует
с каждым проходом. я вот технически не знаю как это организовать.
 
V

vbs

Вот так работает, остальное оформи, как тебе нравится

UnloadTable(ТНЗ);
SortList = "";
КоличествоУровнейСправочника = 3; // или сколько надо
for k = 1 to КоличествоУровнейСправочника do
ТНЗ.NewColumn("Parent"+String(k),"String");
SortList = SortList + "Parent"+String(k)+","
enddo;
ТНЗ.SelectLines(); N = 0;
While ТНЗ.GetLine() = 1 do
N = N + 1;
Parent = ТНЗ.Номенклатура.Parent; k = 1;
While EmptyValue(Parent) = 0 do
ТНЗ.SetValue(N,"Parent"+String(k),Parent.Description);
Parent = Parent.Parent;
k = k + 1;
enddo;
enddo;
ТНЗ.Sort(SortList+"Номенклатура");
 
S

SeverBap

Наверно тебе надо вот такое:
Код:
	Если Вопрос("Упорядочить строки?","Да+Нет") = "Да" Тогда
ТЗН = СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТЗН);
МаксУровней=0;
ТЗН.ВыбратьСтроки();
Пока ТЗН.ПолучитьСтроку()=1 Цикл
Если МаксУровней<СтрЧислоВхождений(СокрЛП(ТЗН.Номенклатура.ПолныйКод()),"/") Тогда
МаксУровней=СтрЧислоВхождений(СокрЛП(ТЗН.Номенклатура.ПолныйКод()),"/");
КонецЕсли;	
КонецЦикла;
СтрокаСортировкиТЗН="";
Инк=МаксУровней;
Если Инк>0 Тогда
Пока Инк>0 Цикл
ТЗН.НоваяКолонка(Строка("Уровень"+Инк));	
СтрокаСортировкиТЗН=СтрокаСортировкиТЗН+Строка("Уровень"+Инк+"+,");
Инк=Инк-1;
КонецЦикла;	
КонецЕсли;
Уровней=0;
ТЗН.ВыбратьСтроки();
Пока ТЗН.ПолучитьСтроку()=1 Цикл
Уровней=СтрЧислоВхождений(СокрЛП(ТЗН.Номенклатура.ПолныйКод()),"/");
НомерСтрокиТЗН=ТЗН.НомерСтроки;
Номенк=ТЗН.Номенклатура;
Пока Уровней>0 Цикл
ТЗН.УстановитьЗначение(НомерСтрокиТЗН,Строка("Уровень"+Уровней),Номенк.Родитель);
Номенк=Номенк.Родитель;
Уровней=Уровней-1;
КонецЦикла;
КонецЦикла;
ТЗН.Сортировать(СтрокаСортировкиТЗН+"Номенклатура+");
ЗагрузитьТабличнуюЧасть(ТЗН);
КонецЕсли;
:trash: у меня работает! но надо найти ошибки ....
 
V

vbs

ТЗН.УстановитьЗначение(НомерСтрокиТЗН,Строка("Уровень"+Уровней),Номенк.Родитель);
ТЗН.УстановитьЗначение(НомерСтрокиТЗН,Строка("Уровень"+Уровней),Номенк.Родитель.НАИМЕНОВАНИЕ);
А так почти то же самое, только по-русски :trash:
 
R

Roman

У меня, что в первом варианте, что во втором сортирует вообще хрен поймешь как.

Добавлено: ладно всем спасибо за идею и наглядный образец кода
дальше сам буду додумывать
 
V

vitfil

vbs
Не перепутаются, потому как сортировка идет не только по уровню, но и по наименованию родителя.
 
V

vbs

Ошибочка вкралась. Надо так (чтобы список сортировки начинался сверху):

for k = 1 to КоличествоУровнейСправочника do
l = КоличествоУровнейСправочника - k + 1;
ТНЗ.NewColumn("Parent"+String(k),"String");
SortList = SortList + "Parent"+String(l)+","
enddo;


Добавлено: vitfil
Я попробовал твою идею, но как-то не вышло. Может, напишешь, как ты предлагаешь описать сортировку, а то как-то в голову не ложится ?
 
V

vitfil

vbs
<!--shcode--><pre><code class='1C'>ТЗ = СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТЗ);
//"Номенклатура" - колонка табличной части
ТЗ.НоваяКолонка("Уровень","Число");
ТЗ.НоваяКолонка("РодительСтр","Строка");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
ТЗ.Уровень = ТЗ.Номенклатура.Уровень();
ТЗ.РодительСтр = СокрЛ(ТЗ.Номенклатура.Родитель);
КонецЦикла;
ТЗ.Сортировать("Уровень,РодительСтр,Номенклатура");
ЗагрузитьТабличнуюЧасть(ТЗ);[/CODE]
 
V

vbs

ТЗ.Сортировать("Уровень,РодительСтр,Номенклатура");
Действительно, просто. Про наименование родителя совсем забыл, видимо ночь сказалась, зациклился на сортировке по уровню и номенклатуре :(
А такой вариант позволит грамотно организовать сортировку при разных уровнях вложенности отдельных групп, почему он мне сразу и понравился :)
 
R

Roman

Яможет чего не понимаю, но не сортирует как надо, думал уже что дело в том что
Код:
ТЗ.РодительСтр = СокрЛ(ТЗ.Номенклатура.Родитель)
думал надо Родитель.Наименование
эффект тот же сортирут как непонятно вообще
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!