Форум программистов, компьютерный форум, киберфорум
1С
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/230: Рейтинг темы: голосов - 230, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 11.11.2005
Сообщений: 59

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

16.03.2010, 14:36. Показов 43015. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Code
1
2
3
4
5
6
7
8
9
10
Процедура УпорядочитьСтроки()
Если Вопрос("Упорядочить строки?","Да+Нет") = "Да" Тогда
ТЗН = СоздатьОбъект("ТаблицаЗначений");
Док = СоздатьОбъект("Документ.ПредЗаявка");
Док.ВыгрузитьТабличнуюЧасть(ТЗН);
ТЗН.НоваяКолонка("Родитель");
ТЗН.Родитель = Номенклатура.Родитель;
ТЗН.Сортировать.("Родитель +");
КонецЕсли;
КонецПроцедуры;
Выдает ошибку и закрывает приложение, не пойму в чем моя ошибка?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2010, 14:36
Ответы с готовыми решениями:

Упорядочивание строк в запросе
Здравствуйте. Имеется запрос по котором строится отчет, в этом отчете есть поле "габариты изделия", в запросе это строковый тип,...

7.7 Количество строк в документе
Добрый день! Проблема состоит в следующем: имеется документ Прайс, табличная часть которого содержит всю номенклатуру из справочника. В...

Поиск дублирующих строк в документе
В общем необходимо найти дубли в многострочном документе (дублем считается строка совпадающая с более ранней строкой по ряду параметров)....

34
0 / 0 / 0
Регистрация: 28.03.2004
Сообщений: 1,913
21.03.2010, 21:14
Студворк — интернет-сервис помощи студентам
Только следи, чтобы в группировке не было указано БезГрупп
особой разницы не имеет.
ТЗН.Уровень = Номенклатура.Уровень();
ТЗН.Родитель = Номенклатура.Родитель;

ТЗН.Сортировать("Уровень,Родитель,...ну и все остальные сортировки");
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
21.03.2010, 23:15
Цитата Сообщение от vitfil
особой разницы не имеет.
Это да, в запрос все равно попадет


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




Добавлено: Похоже, погорячились мы с такой сортировкой.
Ведь ему, кажется, надо так :
Номенклатура Уровень
Машины 1
Импортные 2
Ауди 3
Вольво 3
Мерседес 3
Отечественные 2
Волга 3
Лада 3
Москвич 3...
А при ТЗН.Сортировать("Уровень,Родитель") выйдет
Машины 1
Импортные 2
Отечественные 2
Ауди 3
Волга 3
Вольво 3
Лада 3
Мерседес 3
Москвич 3...
Или я чего-то не понял ?
0
0 / 0 / 0
Регистрация: 11.11.2005
Сообщений: 59
22.03.2010, 11:06
Цитата Сообщение от vbs
Это да, в запрос все равно попадет

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




Добавлено: Похоже, погорячились мы с такой сортировкой.
Ведь ему, кажется, надо так :
Номенклатура Уровень
Машины 1
Импортные 2
Ауди 3
Вольво 3
Мерседес 3
Отечественные 2
Волга 3
Лада 3
Москвич 3...
абсолютно верно, именно такую сортировку мне и надо организовать
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
22.03.2010, 12:24
Тогда, пожалуй, придется добавить столько колонок, сколько уровней в справочнике и, исследуя родителей снизу,
добавлять значения родителей, пока не достигнут самый верхний уровень. Одновременно формируем список
будущей сортировки ("Номенклатура,Г3,Г2,Г1..."), где Г1 - самый нижний уровень вложения.
Причем, учти, что вряд ли это сработает адекватно, если в одной группе, например, 3 уровня, а в другой, скажем, 4
0
0 / 0 / 0
Регистрация: 11.11.2005
Сообщений: 59
22.03.2010, 13:24
Цитата Сообщение от vbs
Тогда, пожалуй, придется добавить столько колонок, сколько уровней в справочнике и, исследуя родителей снизу,
добавлять значения родителей, пока не достигнут самый верхний уровень. Одновременно формируем список
будущей сортировки ("Номенклатура,Г3,Г2,Г1..."), где Г1 - самый нижний уровень вложения.
Причем, учти, что вряд ли это сработает адекватно, если в одной группе, например, 3 уровня, а в другой, скажем, 4
а может как-то можно использовать Для по Цикл?
Я просто не программист и въезжать(разбираться) начал не давно
Просто я думаю можно организовать проход в цикле: Для По - пусть выбирает пока не дойдет до верхнего уровня и сразу сортирует
с каждым проходом. я вот технически не знаю как это организовать.
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
22.03.2010, 13:48
Вот так работает, остальное оформи, как тебе нравится

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+"Номенклатура");
0
0 / 0 / 0
Регистрация: 14.09.2007
Сообщений: 428
22.03.2010, 13:57
Наверно тебе надо вот такое:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    Если Вопрос("Упорядочить строки?","Да+Нет") = "Да" Тогда
ТЗН = СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТЗН);
МаксУровней=0;
ТЗН.ВыбратьСтроки();
Пока ТЗН.ПолучитьСтроку()=1 Цикл
Если МаксУровней<СтрЧислоВхождений(СокрЛП(ТЗН.Номенклатура.ПолныйКод()),"/") Тогда
МаксУровней=СтрЧислоВхождений(СокрЛП(ТЗН.Номенклатура.ПолныйКод()),"/");
КонецЕсли;
КонецЦикла;
СтрокаСортировкиТЗН="";
Инк=МаксУровней;
Если Инк>0 Тогда
Пока Инк>0 Цикл
ТЗН.НоваяКолонка(Строка("Уровень"+Инк));
СтрокаСортировкиТЗН=СтрокаСортировкиТЗН+Строка("Уровень"+Инк+"+,");
Инк=Инк-1;
КонецЦикла;
КонецЕсли;
Уровней=0;
ТЗН.ВыбратьСтроки();
Пока ТЗН.ПолучитьСтроку()=1 Цикл
Уровней=СтрЧислоВхождений(СокрЛП(ТЗН.Номенклатура.ПолныйКод()),"/");
НомерСтрокиТЗН=ТЗН.НомерСтроки;
Номенк=ТЗН.Номенклатура;
Пока Уровней>0 Цикл
ТЗН.УстановитьЗначение(НомерСтрокиТЗН,Строка("Уровень"+Уровней),Номенк.Родитель);
Номенк=Номенк.Родитель;
Уровней=Уровней-1;
КонецЦикла;
КонецЦикла;
ТЗН.Сортировать(СтрокаСортировкиТЗН+"Номенклатура+");
ЗагрузитьТабличнуюЧасть(ТЗН);
КонецЕсли;
:trash: у меня работает! но надо найти ошибки ....
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
22.03.2010, 13:58
Цитата Сообщение от Bap
ТЗН.УстановитьЗначение(НомерСтрокиТЗН,Ст рока("Уровень"+Уровней),Номенк.Родитель) ;
ТЗН.УстановитьЗначение(НомерСтрокиТЗН,Ст рока("Уровень"+Уровней),Номенк.Родитель. НАИМЕНОВАНИЕ);
А так почти то же самое, только по-русски :trash:
0
0 / 0 / 0
Регистрация: 14.09.2007
Сообщений: 428
22.03.2010, 14:01
:trash:
0
0 / 0 / 0
Регистрация: 11.11.2005
Сообщений: 59
22.03.2010, 17:02
У меня, что в первом варианте, что во втором сортирует вообще хрен поймешь как.

Добавлено: ладно всем спасибо за идею и наглядный образец кода
дальше сам буду додумывать
0
0 / 0 / 0
Регистрация: 28.03.2004
Сообщений: 1,913
22.03.2010, 17:35
vbs
Не перепутаются, потому как сортировка идет не только по уровню, но и по наименованию родителя.
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
22.03.2010, 18:59
Ошибочка вкралась. Надо так (чтобы список сортировки начинался сверху):

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


Добавлено: vitfil
Я попробовал твою идею, но как-то не вышло. Может, напишешь, как ты предлагаешь описать сортировку, а то как-то в голову не ложится ?
0
0 / 0 / 0
Регистрация: 28.03.2004
Сообщений: 1,913
23.03.2010, 09:57
vbs
<!--shcode--><pre><code class=1C>ТЗ = СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТЗ);
//"Номенклатура" - колонка табличной части
ТЗ.НоваяКолонка("Уровень","Число");
ТЗ.НоваяКолонка("РодительСтр","Строка");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
ТЗ.Уровень = ТЗ.Номенклатура.Уровень();
ТЗ.РодительСтр = СокрЛ(ТЗ.Номенклатура.Родитель);
КонецЦикла;
ТЗ.Сортировать("Уровень,РодительСтр,Номе нклатура");
ЗагрузитьТабличнуюЧасть(ТЗ);[/CODE]
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
23.03.2010, 12:52
Цитата Сообщение от vitfil
ТЗ.Сортировать("Уровень,РодительСтр,Номе нклатура");
Действительно, просто. Про наименование родителя совсем забыл, видимо ночь сказалась, зациклился на сортировке по уровню и номенклатуре :(
А такой вариант позволит грамотно организовать сортировку при разных уровнях вложенности отдельных групп, почему он мне сразу и понравился
0
0 / 0 / 0
Регистрация: 11.11.2005
Сообщений: 59
24.03.2010, 16:42
Яможет чего не понимаю, но не сортирует как надо, думал уже что дело в том что

Code
1
ТЗ.РодительСтр = СокрЛ(ТЗ.Номенклатура.Родитель)
думал надо Родитель.Наименование
эффект тот же сортирут как непонятно вообще
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.03.2010, 16:42

Нарушение порядка строк в документе
В протоколе было 660 строк, расположенных в алфавитном порядке. После удаления нескольких строк произошел глюк - нарушился алфавитный...

Очистка строк в табличном документе
Событие Команды &amp;НаКлиенте Процедура Команда1(Команда) НаСервере(); КонецПроцедуры &amp;НаСервере Процедура НаСервере() ...

Порядок строк в документе "на основании"
Доброго дня! Возник вопрос - в документе, вводимом на основании меняется порядок строк относительно документа-основания. Посоветуйте, как...

Упорядочивание строк
&quot;ввести 10 имен, вывести их на экран в алфавитном порядке.&quot; Меня интересует как это записать в строке if. То есть что и с чем тут...

Упорядочивание строк в матрице
Помогите пожалуйста с этим заданием. Уже неделю пытаюсь написать, вообще не получается. Дана матрица размером NxM. Упорядочить ее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru