Имя: Пароль:
1C
1C 7.7
v7: Отсортировать ТЗ со структурой справочника
,
0 vadim777
 
26.08.16
21:00
Есть ТЗ с колонками: ТМЦ, Группа, Уровень, Родитель.
Как отсортировать эту ТЗ, чтобы расположение строк повторяло иерархию справочника? То есть:
- группа уровня 1
- ТМЦ входящие в эту группу
- группа уровня 2, входящая в эту группу
- ТМЦ входящие в эту группу
и т.д.
1 Djelf
 
26.08.16
21:08
Перебором с установкой веса сортировки, а потом сортировкой по весу.
2 mkalimulin
 
26.08.16
22:01
(0) А откуда в этой ТЗ взялись строки?
3 Garykom
 
гуру
26.08.16
22:08
Добавить число колонок "слева" равное числу уровней, заполнить их правильно и отсортировать по ним через ","
4 Garykom
 
гуру
26.08.16
22:09
Другой вариант, более сложный для новичка, это добавить одну колонку с "позицией" для сортировки и заполнить ее через построение иерархического дерева.
5 Автор
 
26.08.16
23:42
Можно еще с ПолныйКод() поизвращаться
6 vadim777
 
27.08.16
06:22
(2) Из запроса по бухгалтерским итогам.
7 mkalimulin
 
27.08.16
10:15
(6) Сортируй в запросе.
8 Это_mike
 
27.08.16
10:47
Традиционый вопрос - нафига?
9 vadim777
 
27.08.16
20:39
(7) Запрос по бух.итогам, а не по справочнику ТМЦ:
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,МФВыбТовары,1,1);
Если Склад.Выбран() = 1 Тогда
   Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,Склад,1);
КонецЕсли;
Ит.ВыполнитьЗапрос(ВыбДата, ВыбДата, Счет,,, 1,, "К,С");
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Склад");
ТЗ.НоваяКолонка("ТМЦ");
ТЗ.НоваяКолонка("ОККол");
ТЗ.НоваяКолонка("Цена");
ТЗ.НоваяКолонка("Группа");
ТЗ.НоваяКолонка("Уровень");
// Формирование ТЗ с остатками и ценой
Ит.ВыбратьСубконто(1);
   Пока Ит.ПолучитьСубконто(1) = 1 Цикл
....
10 vadim777
 
27.08.16
20:39
(8) - 0
11 Chameleon1980
 
28.08.16
08:36
cpp не предлагать?
12 Это_mike
 
28.08.16
09:05
(11) куда там... Ести тс не понимает, что "расположение строк" можеь сильно отличаться в зависимости от сортировки... Ну и немлэетответить на ТКВ®
13 vadim777
 
28.08.16
11:10
(12) Майк, ты как всегда выдаешь собственные мысли за чужие. Если бы я не понимал, что расположение строк зависит от сортировки, то не было бы и вопроса. А мне как раз и нужно остортировать ТЗ так, чтобы получить нужный порядок строк. Но у тебя, как всегда, дельного совета нет, только...
14 Это_mike
 
28.08.16
11:30
(13) так какой порядок строк для тебя "нужный"?  Если сортировка по коду, то тебе давно уже сказали. Если по наименованию, или в порядке реквизита -это немного геморнее. Но главный вопрос - "анахуа?"®
15 mkalimulin
 
28.08.16
11:36
(9) Результат запроса выдается в иерархическом порядке. Разве нет?
16 Это_mike
 
28.08.16
11:40
(15) емнип, порядок не определяется.
17 vadim777
 
28.08.16
15:08
(13) Мне нужен иерархический порядок. Это отчет Остатки номенклатуры.
18 Злопчинский
 
28.08.16
15:22
(17) ну добавь тупо столбец в ТЗ и заполняй его типа "индексом" типа
000001-0000002-000003, т.е. X-Y-Z
где X-Y-Z - номера уровней родителей по иерархии, соответсвующие текущему элементу. для элементов второго уровня-часть относящаяся к 3-му уровню будет нулевой
000001-0000002-000000
19 FN
 
28.08.16
16:22
Добавляешь колонку, заполняешь элемент. Полноенаименование(),
20 FN
 
28.08.16
16:22
И сортируешь по ней. Будет как в справочнике на 99,99% только без групп
21 vadim777
 
28.08.16
20:09
(18)Смотрим:
Группа Товары 1 уровень: индекс 001
Элем. Дюбель в Товары:   индекс 001-002
Группа Изделия в Товары: индекс 001-002
Элем Герметик в Изделия: индекс 001-002-003
Группа Трубы в Товары:   индекс 001-002
Элем Труба40мм в Трубы:  индекс 001-002-003

После сортировки ТЗ по индексу строки с индексом 001-002 расположатся подряд, а за ними - элементы с индексами 001-002-003. Иерархии никакой.
22 vadim777
 
28.08.16
20:11
(19, 20)по ПолномуНаименованию картина такая-же, как в (21)
23 Garykom
 
гуру
28.08.16
20:13
(21) у тя индексы неправильные
с какого перепугу элем дюбель, группа изделия и группа трубы имеют одинаковый индекс "001-002"?
24 Это_mike
 
28.08.16
20:14
(21) прочитай чонить про ПолныйКод(). Заодно самую первую книгу для юзверей, по представлениям споавочгиков
25 Это_mike
 
28.08.16
20:15
(23) д'Эбилл...
26 Garykom
 
гуру
28.08.16
20:19
(24) ПолныйКод() это слишком просто )) специально не советовал, думал может поймет слегка побольше но в (5) уже сказали.
27 Рэйв
 
28.08.16
20:27
Дерево уже предлагали?
28 Garykom
 
гуру
28.08.16
20:30
(27) угу (4), по сути цикла для каждого по родителям до самого верхнего корня
29 Garykom
 
гуру
28.08.16
20:31
(28)+ это и будет ПолныйКод
30 vadim777
 
28.08.16
20:45
(26) Сортировка по ПолномуКоду никак не отражает иерархию, т.к. серии кодов заданы в во всем справочнике. Специально проверил, чтоб не быть голословным - иерархия не получилась.
Наверное, решения с использованием одной ТЗ не существует. Пробую сейчас две ТЗ: ТЗэлем и ТЗгрупп.
31 Смотрящий
 
28.08.16
21:32
(30) Все сортируется через ПолныйКод. Есть Нюанс:
Группа Товары 1 уровень: Код 001
Элем. Дюбель в Товары:   Код 001-002
Группа Изделия в Товары: Код 001-003
Элем Герметик в Изделия: Код 001-002-003

Чтоб метод Сортировать отработал как надо, в рамках решения задачи, ПолныйКод надо добить справа нулями. В 7.7 максимальная вложенность справочников 10 уровней

ТЗ.Сортировка = Прав(Спр.ПолныйКод() + "000-000-000-000-000-000-000-000-000-000", 39)

и потом ТЗ.Сортировать("+Сортировка")
32 Смотрящий
 
28.08.16
21:36
Функия только не прав в леыв
33 vadim777
 
28.08.16
22:32
(31) Почти получилось, только группа первого уровня оказалась в конце:
ТМЦ    ОККол    Цена    Группа    Уровень    ПолныйКод
гипсокартон потолочн 2500*1200*9,5мм(KNAUF)    8    0    0    2    8597/1590000-000-000-000-000-000-000-00
Бумага туалетная    2    0    0    3    8597/2408/981000-000-000-000-000-000-00
Изделия из дерева и бумаги              1    2    8597/2408000-000-000-000-000-000-000-00
герметик силиконовый    1    0    0    3    8597/2409/1552000-000-000-000-000-000-0
герметик универсальный силикон    1    0    0    3    8597/2409/30628000-000-000-000-000-000-
пленка пароизоляционная 1,6х43,75м    70    0    0    3    8597/2409/34974000-000-000-000-000-000-
пенопласт 1000х1000х50мм    20    0    0    3    8597/2409/36968000-000-000-000-000-000-
Изделия хим., резиновые и пластмассовые              1    2    8597/2409000-000-000-000-000-000-000-00
шифер  асб-цемент 8-волн.    40    0    0    2    8597/32444000-000-000-000-000-000-000-0
Баллон пропановый V-50л    1    0    0    2    8597/34272000-000-000-000-000-000-000-0
плитка для пола 40*40 грес рект    194.68    0    0    2    8597/34766000-000-000-000-000-000-000-0
наличник  МДФ ОМИС полукруг    2    0    0    2    8597/35256000-000-000-000-000-000-000-0
мат стекловолоконный Урса М-11 7000х1200х50мм    6    0    0    2    8597/36132000-000-000-000-000-000-000-0
дюбель металл с молли 6х52    50    0    0    2    8597/36924000-000-000-000-000-000-000-0
стиральная машина Indesit Wisl    1    0    0    2    8597/37214000-000-000-000-000-000-000-0
скоба П-обр.д/ГК 125мм    450    0    0    2    8597/7735000-000-000-000-000-000-000-00
Товары              1    1    8597000-000-000-000-000-000-000-000-000
34 vadim777
 
28.08.16
22:35
(31)Немного изменил код:
ПолныйКод = Ит.Субконто(1).ПолныйКод();
Если Прав(ПолныйКод,1) <> "/" Тогда
  ПолныйКод = ПолныйКод + "/";
КонецЕсли;
ТЗ.ПолныйКод = Лев(ПолныйКод + "000-000-000-000-000-000-000-000-000-000", 39);
Вот теперь как-будто бы правильно выводится. Спасибо.
35 vadim777
 
28.08.16
22:40
(31) Нет, неверно выводится. ТМЦ из группы первого уровня Товар оказывается размещенными в группе второго уровня.
36 Злопчинский
 
28.08.16
23:37
(35) смотри проблемы интерпретации возможны, когда на одном уровне могут быть и элементы и группы - при сортировке выводе интерпретации - как определить (только ОТСТУПАМИ ИЛИ ДРУГОЙ ИНДИКАЦИЙЕ) где коныились элементы внутри группы второго уровя и началист элементы второго уровня, то есть уровень элемента=2 и уровень группы=2.

Для нормальной "работы" должно быть простое правило - на одном уровне не должно быть и групп и элементов, только что-то одно
37 Torquader
 
28.08.16
23:39
(36) Это очень тяжело объяснить пользователям - они хотят, чтобы всё было там, где они хотят.
38 Злопчинский
 
28.08.16
23:51
(37) согласен. поэтому запиливаем в ноль такую возможность, припопытке записать элемент на том же уровень что и группа внутри данного родителя - отлуп. на все вопли отвечаем - идите нахрен.
39 Torquader
 
28.08.16
23:59
(38) Если пользователь не может записать элемент туда, куда ему нужно, он записывает его туда, куда может. Другой пользователь, не найдя элемент там где по его мнению он должен быть, создаёт ещё один.
Если запрещать пользователям создавать элементы в папках, то проще вообще отключить иерархию - и пусть возятся в общей куче.
40 Garykom
 
гуру
29.08.16
00:01
(39) Да для тупых юзеров лучше иерархию запретить и заменить реквизитами/свойствами с возможностью отборки/поиска по ним.
Иначе никак ну или фиксить/приколачивать группы намертво.
41 Garykom
 
гуру
29.08.16
00:02
(40)+ Причем юзеры могут заводить с приколоченными группами новые элементы только в одну спец группу "Новые/К распределению"
42 Torquader
 
29.08.16
00:02
(40) Я просто обратил внимание, что когда пользователи что-то ищут в справочнике, они первым делом отключают иерархию.
43 Garykom
 
гуру
29.08.16
00:03
(41)+ А распределяет (или объединяет с существующими) по группам уже продвинутый юзер
44 Torquader
 
29.08.16
00:03
Иерархия бывает нужна для отчётов - если для отчётов она не нужна, то её смело можно отключить.
45 Garykom
 
гуру
29.08.16
00:04
(42) Угу и проблема что найдя дублю не смотрят на группу, с реквизитами так сложнее - колонка всегда видна отдельная
46 Torquader
 
29.08.16
00:05
(45) У меня для "особо одарённых" была колонка "Папка", где рисовался полный путь для родителя - всё равно не смотрели.

(43) А что делать тем, у кого нет "продвинутого" ?
47 Garykom
 
гуру
29.08.16
00:17
(46) Или продолжать сидеть в автоматизированном хаосе или нанимать и платить 1Снику
48 Злопчинский
 
29.08.16
17:41
у мну у лавочника например такая развесистая хотелка, что по умум справочник - должен быть линейным с неограниченным количеством произвольных характеристик и "иерархия" должна строиться "динамически"
49 Garykom
 
гуру
29.08.16
18:16
(48) Сделать не проблема через подчиненные справочники (в 77) но тормоза легкие будут.
В 8-ке с этим попроще есть и регистры сведений и ТЧ у элементов справочника.
50 Рэйв
 
02.09.16
19:26
То, что в тз нет иерархии я первый заметил или как?:)
51 Рэйв
 
02.09.16
19:27
походу и деревл предлагал...е взлетает вертолет:-))
52 Рэйв
 
02.09.16
19:28
(0)ДА НАПИШИ ТЫ СУКА СВОЮ КОМПОНЕНТУ И УСПОКОЙСЯ.
53 Изобретатель Велосип
 
02.09.16
19:35
(52) Ему, наверное, проще свою учётную систему написать, чем "экскременты мамонта в космос выводить".
54 Djelf
 
02.09.16
21:39
(48) Ты ты имеешь ввиду что-то вроде реквизитов ГруппаТовара, ТипТовара и вывод товара деревом, если оно заполнено в таком виде? Это не сильно сложно.
Или ты придумал что-то более мудреное?