|
v7: сортировка адреса | ☑ | ||
---|---|---|---|---|
0
logon
10.06.14
✎
16:25
|
Товарищи подскажите аникею как правильно оформить такую штуку:
Есть таблица в которую собираются значения из документов, в таблице есть поле адрес. Когда формируется таблица сортирую таблицу по реквизиту адрес "ТабЗн.Сортировать("Адрес")", так вот сортировка происходит следующим образом. Пример: Есть адреса: Ленина, 1; Ленина, 2; Ленина, 10, Ленина, 11, Ленина,20, Ленина,3. В итоге после сортировки выходит в следующем порядке: Ленина1 Ленина10 Ленина11 Ленина2 Ленина20 Ленина3 Почему так?? |
|||
1
palpetrovich
10.06.14
✎
16:27
|
(0) а как надо? вроде правильно все
|
|||
2
lex-kex
10.06.14
✎
16:30
|
(0) Отдельно делать колонку "Улица" и колонку "НомерДома" и сортировать "Улица,НомерДома"
|
|||
3
lex-kex
10.06.14
✎
16:30
|
(2) + колонка номер дома должна иметь тип Число
|
|||
4
logon
10.06.14
✎
16:31
|
ага, уловил! щас попробую спасибо!
|
|||
5
logon
10.06.14
✎
16:33
|
(1) не правильно, должно быть 1,2,3,10,11,20
|
|||
6
logon
10.06.14
✎
16:34
|
А если будет не два реквизита улица дом а еще населенный пункт? ну то есть на столько колонок и разбивать?
|
|||
7
IOL
10.06.14
✎
16:36
|
От большего к меньшему, Область, город, район, улица, дом, квартира.
|
|||
8
palpetrovich
10.06.14
✎
16:37
|
(5) это ты так думаешь :) ...делай (2)
|
|||
9
logon
10.06.14
✎
16:39
|
(8) объясните?:)
|
|||
10
Мигало
10.06.14
✎
16:53
|
Просто колонку сортировки создай вида
ТабЗн.НоваяКолонка("Сортировка", "Строка"); И пихай в нее строку сортировки с лидируюшими нулями в номере дома .... ТабЗн.Сортировка = "Ленина00001"; // Ленина00010, Ленина00003 ..... ТабЗн.Сортировать("Сортировка"); Он тебе отсортирует в виде Ленина, 1 Ленина, 2 Ленина, 10 |
|||
11
palpetrovich
10.06.14
✎
16:55
|
(9) нечего тут объяснять, 1с-ка сортирует строку посимвольно, поэтому так: зн1, зн121234234254, зн2 ....
|
|||
12
logon
10.06.14
✎
16:58
|
(10) эт для каждой улицы или это как шаблон булет?
|
|||
13
palpetrovich
10.06.14
✎
17:01
|
(12) верное решение - в (2), что еще неясно-то?
|
|||
14
logon
10.06.14
✎
17:13
|
(13) просто спросил)
|
|||
15
logon
15.06.14
✎
07:16
|
еще один момент.
в документе многострочная чпсть. сначало я добавил колонки в нее с нужным идентификатором и заполнил их в цикле вместе с остальными. после при выводе в печатную форму отсортировал как вы мне и подсказали. А если не добавлять еще колонки в многострочную часть что бы не менять форму документа ну и не увеличивать вес базы, ведь будет в документе сохранться еще три поля, а в многострочной части порой храниться по нескольку сотен строк. А добавить разложенный адрес как мне подсказали в формировании печатной формы? При формировании печатной формы идет выгрузка из многострочной части " ВыгрузитьТабличнуюЧасть(ТабЗн);" я так понимаю мне как то нужно добавить в ТабЗн мои колонки с разложенным адресом и потом уже "ТабЗн.Сортировать("АдресНасП,АдресУл,АдресДом,АдресКВ+");" не могу понять как построчно заполнить/добавить колонки,строки. сначало выгрузить в ТабЗн потом добавить мои новые колонки, потом их заполнить а потом отсортировать???? |
|||
16
Мимохожий Однако
15.06.14
✎
07:49
|
Да.
|
|||
17
logon
15.06.14
✎
08:54
|
(16) а добавить в табзн через ВставитьКолонку ?
|
|||
18
logon
15.06.14
✎
08:58
|
ВыгрузитьТабличнуюЧасть(ТабЗн); \\многострочная часть выгружена в ТЗ
Как теперь добавить в эту же тз и заполнить их еще три столбца? Пока ТабЗн.ПолучитьСтроку()>0 цикл ТабЗн.ВставитьКолонку("АдресНасП"); ТабЗн.ВставитьКолонку("АдресУл"); ТабЗн.ВставитьКолонку("АдресДом",,"Число",10); ТабЗн.ВставитьКолонку("АдресКВ",,"Число",10); |
|||
19
VladZ
15.06.14
✎
09:06
|
(18) Обратись к специалисту.
|
|||
20
logon
15.06.14
✎
09:31
|
(19) вот я и обращаюсь. вы не специалист?
|
|||
21
kobzon
15.06.14
✎
09:36
|
ТабЗн.НоваяКолонка(<?>,,,,,,,);
Синтаксис: НоваяКолонка(<Идентификатор>,<Тип>,<Длина>,<Точность>,<Заголовок>,<Ширина>,<Формат>,<Положение>) |
|||
22
logon
15.06.14
✎
09:38
|
после того как заполняю таким образом он не видит уже выгруженной многострочной части
|
|||
23
logon
15.06.14
✎
09:44
|
это начало процедуры:
Процедура Печать() Таб = СоздатьОбъект("Таблица"); ИмяТаблицы = "Таблица"; Таб.ИсходнаяТаблица(ИмяТаблицы); ТабЗн = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТабЗн); выгрузили, теперь нужно добавить в эту Таблицу три колонки и заполнить их. а потом уже отсортирую. вот как вставить три колонки и !главное! заполнить их проблема у меня |
|||
24
kobzon
15.06.14
✎
09:47
|
(23) Какие именно 3 колонки нужно вставить?
|
|||
25
Vladal
15.06.14
✎
09:50
|
(24) Строка - название улицы, Число - номер дома.
Как вариант, номер дома может быть и строкой, но справа надо добавить пробелы. Тогда будет сортировка правильная: Ленина, 1 Ленина, 2 Ленина, 10 Ленина, 12 Ленина, 20 |
|||
26
kobzon
15.06.14
✎
09:50
|
(25) Улица всегда будет Ленина что ли?
|
|||
27
Vladal
15.06.14
✎
09:51
|
(26) А ты как хотел?
|
|||
28
logon
15.06.14
✎
09:51
|
ой извинияюсь. три колонки это разложенный адрес: нас.пункт, улица, дом
|
|||
29
logon
15.06.14
✎
09:52
|
(26) Ну можно еще герцена добавить, а вобще это для примера
|
|||
30
Vladal
15.06.14
✎
09:53
|
(29) Я об этом месье kobzon и намекал
|
|||
31
logon
15.06.14
✎
09:54
|
ребят ну помогите нубу)
|
|||
32
kobzon
15.06.14
✎
09:54
|
(29) Понятно улицы разные. А функция разкладки адреса используется стандартная из глобального модуля?
|
|||
33
logon
15.06.14
✎
09:55
|
(32) адрес получил обращаясь реквизиту из многострочной части. а именно
АдресНасП = ФИО.Наименование АдресУл = ФИО.Улица.Наименование |
|||
34
kobzon
15.06.14
✎
09:57
|
(33) Так если адрес не надо раскладывать а это реквизиты то на хрена эти заморочки с ТЗ?
|
|||
35
Vladal
15.06.14
✎
09:58
|
(33) А номер дома как?
|
|||
36
kobzon
15.06.14
✎
09:59
|
(35) Аа да мы же сортируем)
|
|||
37
logon
15.06.14
✎
10:00
|
(34) что бы не держать их в документе
|
|||
38
logon
15.06.14
✎
10:00
|
сохраняя в документе у меня уже получилось сделать а сдесь заморочка
|
|||
39
logon
15.06.14
✎
10:01
|
(35) номер дома так же, просто пример привел на счет нас.пункта и улицы
|
|||
40
Vladal
15.06.14
✎
10:01
|
(37) Если держать в табличной части документа, то можно сортировать прямо в документе.
Хотя... Как вариант: сортировать это перед записью. |
|||
41
kobzon
15.06.14
✎
10:03
|
(39) То есть номер дома это: Номер = ФИО.НомерДома.Наименование?
|
|||
42
logon
15.06.14
✎
10:04
|
(41) да
|
|||
43
logon
15.06.14
✎
10:04
|
и когда в многострочной части у меня таким образом сделано и добавлено все сортирует.
|
|||
44
Vladal
15.06.14
✎
10:06
|
(31) Алгоритм такой:
1. Выгрузить табчасть документа в ТЗ. 2. В ТЗ добавить несколько колонок для: Населенного пункта, Улицы, номера дома. 3. Построчно пройтись по это ТЗ и заполнить данными новые колонки: СтрокаТЧ.АдресНасП = СтрокаТЧ.ФИО.Наименование СтрокаТЧ.АдресУл = СтрокаТЧ.ФИО.Улица.Наименование СтрокаТЧ.НомерДома = Число(СтрокаТЧ.ФИО.НомерДома.Наименование) // Хотя тут вопрос в комбинированной номерации, например, 35/42 Потом после цикла сделать сортировку: ТЗ.Сортировать("АдресНасП+, АдресУл+, НомерДома+"); Вот и получите свою таблицу |
|||
45
kobzon
15.06.14
✎
10:09
|
(44) Даже добавить нечего!
|
|||
46
logon
15.06.14
✎
10:10
|
хехе, щас уточню
|
|||
47
logon
15.06.14
✎
10:17
|
3. Построчно пройтись по это ТЗ и заполнить данными новые колонки:
это так будет выглядеть? ТабЗнач.ВыбратьСтроки(); Пока ТабЗнач.ПолучитьСтроку()=1 Цикл ТабЗнач.АдресНасП = ФИО.АдресНасП.Наименование; КонецЦикла; |
|||
48
kobzon
15.06.14
✎
10:20
|
(47) Да. Только не забудь сначала колонки добавить к ТЗ!
|
|||
49
Vladal
15.06.14
✎
10:20
|
(47) Как вариант
|
|||
50
logon
15.06.14
✎
10:21
|
(49) а еще один вариант?:)
|
|||
51
Vladal
15.06.14
✎
10:21
|
(50) Цикл Для
|
|||
52
Vladal
15.06.14
✎
10:23
|
КолвоСтрок = ТЗ.Количество();
Для Сч = 1 По КолвоСтрок Цикл ТекСтрока = ТЗ.ПолучитьСтроку(Сч); ТекСтрока.АдресНасП = ТекСтрока.ФИО.АдресНасП.Наименование; ... КонецЦИкла |
|||
53
logon
15.06.14
✎
11:12
|
значения получает а вот сортировку не делает.... все хаотично
|
|||
54
logon
15.06.14
✎
11:13
|
ТабЗн.Сортировать("АдресНасП,АдресУл,АдресДом,АдресКВ+");
|
|||
55
kobzon
15.06.14
✎
11:33
|
(54) Мож че не так сделал? Код выкладывай весь.
|
|||
56
logon
15.06.14
✎
11:38
|
Процедура Печать()
Таб = СоздатьОбъект("Таблица"); ИмяТаблицы = "Таба"; Таб.ИсходнаяТаблица(ИмяТаблицы); ТабЗн = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТабЗн); // ТабЗн.НоваяКолонка("АдресНасП"); ТабЗн.НоваяКолонка("АдресУл"); ТабЗн.НоваяКолонка("АдресДом",,"Число",10); ТабЗн.НоваяКолонка("АдресКВ",,"Число",10); ТабЗн.ВыбратьСтроки(); Пока ТабЗн.ПолучитьСтроку()=1 Цикл ТабЗн.АдресНасП = ТабЗн.ФИО.Наименование; ТабЗн.АдресУл = ТабЗн.ФИО.Улица.Наименование; ТабЗн.АдресДом = ТабЗн.ФИО.Дом.Наименование; ТабЗн.АдресКВ = ТабЗн.ФИО.Квартира; КонецЦикла; ПерПок = СоздатьОбъект("Периодический"); ШаблонСорт = СортПечать.ПолучитьЗначение(СортПечать.ТекущаяСтрока()); // ------- Just ---- Begin Если ШаблонСорт="Адрес2" Тогда ТабЗн.Сортировать("АдресНасП,АдресУл,АдресДом,АдресКВ+"); Иначе ТабЗн.Сортировать(ШаблонСорт); КонецЕсли; Инд = 0; Ном = 0; ТабЗн.ВыбратьСтроки(); Пока ТабЗн.ПолучитьСтроку() > 0 Цикл // Если СписокДомов.РазмерСписка() = 0 Тогда Инд = Инд + 1; КодАбон = ТабЗн.КодПотр; ................. |
|||
57
kobzon
15.06.14
✎
11:41
|
Хм, ну вроде все так. Может это условие не выполняется?
Если ШаблонСорт="Адрес2" Тогда ТабЗн.Сортировать("АдресНасП,АдресУл,АдресДом,АдресКВ+"); Иначе ТабЗн.Сортировать(ШаблонСорт); КонецЕсли; |
|||
58
logon
15.06.14
✎
11:48
|
закоментировал условие. не сортирует. да и не выполняться там особо нечему, выбрал из списка по адресу строка соответствует Адрес2 и пошло. а тут че т не хотит
|
|||
59
logon
15.06.14
✎
11:56
|
и ТабЗн при открытии в отладчике все поля видит у абонента. странно однако
|
|||
60
Мимохожий Однако
15.06.14
✎
12:09
|
<Колонки> - строковое выражение, которое определяет колонки, порядок и направление сортировки. Формат передаваемой строки - это разделенные запятыми номера или идентификаторы колонок со знаком направления сортировки ( ''+'' - сортировать по возрастанию; ''- '' - сортировать по убыванию; ''*'' - сортировать по внутреннему значению). Знак направления сортировки можно указывать до или после обозначения колонки через пробел или без пробела. По умолчанию направление сортировки принимается по возрастанию.
|
|||
61
logon
15.06.14
✎
12:30
|
(60) колонки?
|
|||
62
Мимохожий Однако
15.06.14
✎
12:34
|
Да.см (44) внимательнее еще раз
|
|||
63
logon
15.06.14
✎
12:59
|
не понял все можно сказать так же сделано за исключением дома. так даже если определить тип все равно не сортирует
|
|||
64
Мимохожий Однако
15.06.14
✎
13:14
|
отсутствиезнаковпрепинаниясоответвуетвосприятиюбольшеничемпомочьневозможнонечитателям
|
|||
65
Chieftain
15.06.14
✎
13:24
|
(63)Разницу видишь?
ТабЗн.НоваяКолонка("АдресДом",,"Число",10); ТабЗн.НоваяКолонка("АдресДом","Число",10); |
|||
66
Отладчик
15.06.14
✎
14:46
|
(64) Не понял, все можно сказать. Так же сделано! За исключением дома.
Так даже если определить тип, все равно не сортирует ( |
|||
67
kobzon
15.06.14
✎
14:59
|
ТабЗн.НомерДома = Число(СтрокаТЧ.ФИО.НомерДома.Наименование) // Хотя тут вопрос в комбинированной номерации, например, 35/42
Это тоже сделано? |
|||
68
Vladal
15.06.14
✎
15:28
|
(67) Я бы сделал колонку строковой и при заполнении добавлял лидирующие нули:
ДлинаНомера = 7; ТЗ.СоздатьКолонку("НомерДома", "Строка", ДлинаСтроки); Для ... НомерДома = СокрЛП(СтрокаТЧ.ФИО.НомерДома.Наименование); НомерДома = Прав(" " // 7 пробелов + НомерДома, ДлинаСтроки); // Добавление лидирующих пробелов КонецЦикла |
|||
69
logon
15.06.14
✎
15:41
|
(67) ну я и сказал за исключением дома. я исключал дом-делал сортировку по улицам(тщетно), и как вы говорили делал определял тип но это не помогает.
|
|||
70
Vladal
15.06.14
✎
15:42
|
(69) Покажи, как делал сортировку?
|
|||
71
logon
15.06.14
✎
15:48
|
так выше по сообщениям?
ТабЗн.Сортировать("АдресНасП,АдресУл,АдресДом,АдресКВ+"); |
|||
72
logon
15.06.14
✎
15:50
|
с определением типа я уже делал. и при создании колонки я определял тип число однако это ничего не давало. даже когда сортировал из многострочной части в печатную форму
|
|||
73
Отладчик
15.06.14
✎
15:53
|
(0) Нужен критерий отбора, сортировки, соответствующий.
И всё. И никаких костылей! Системную сортировку не изменишь! Ибо это не прихоть, а единственная логичная установка! Пораскинь мозгами. Убери цифры из букв. И задай номер дома в отдельном поле. А потом в ТЗ соотв. колонку. И не .би мозг. |
|||
74
Злопчинский
15.06.14
✎
15:53
|
блин развели бодягу на 100 постов.
подключитесь уже к человеку кто-нить и покажите/помогите |
|||
75
logon
15.06.14
✎
15:59
|
ну так ведь работало когда в многостраничную часть добавлял столбцы вручную и сортировал! а здесь что не так?
|
|||
76
Отладчик
15.06.14
✎
16:00
|
(75) Повзраслел. Ты просто пока об этом не знаешь.
|
|||
77
Злопчинский
15.06.14
✎
16:01
|
(75) да хз.. я среди обилия постов уже напрочь потерялся что у тебя за исходные даннеы, что за решение и где именно не работает
|
|||
78
kobzon
15.06.14
✎
16:02
|
Я тоже уже забыл что за задание было)
|
|||
79
logon
15.06.14
✎
16:03
|
ладно ребята, спасибо кто пытался помочь и просто похихикал) единственный правильный вывод учить мат часть. что нить придумаю
|
|||
80
kobzon
15.06.14
✎
16:04
|
Блина, экспериментируй. Попробуй сортировать только по дому например. ТабЗн.Сортировать("АдресДом")
Попробуй в цикле сравнивать АдресДом с Числом. Если АдресДом > 1 Тогда бла бла бла.. Заодно и посмотришь привелось у тебя значение к виду числа или нет. |
|||
81
logon
15.06.14
✎
16:22
|
я уже отклчал сортировку по дому/квартире. прсто по улице. эфекта ноль
\ |
|||
82
Отладчик
15.06.14
✎
16:23
|
Поле чудес, Капитал-шоу.
Якубович - а вы вопрос помните? Подарки в студию!!!!! |
|||
83
logon
15.06.14
✎
16:26
|
(82) вы банкрот!
|
|||
84
EvgeniuXP
15.06.14
✎
20:28
|
корпус, сооружения, блоки, 1а, 2б - и у человека сразу море проблем!
|
|||
85
Vladal
16.06.14
✎
13:34
|
(83) ТЗ.Сортировать("АдресНасП+, АдресУл+, НомерДома+");
|
|||
86
Vladal
16.06.14
✎
13:35
|
Указывать направление сортировки явно и для каждой колонки
|
|||
87
logon
17.06.14
✎
16:59
|
пока никак
|
|||
88
VladZ
18.06.14
✎
08:10
|
(20) Я круче!
|
|||
89
logon
18.06.14
✎
08:54
|
(88) о, ну да, крутости границ нет
|
|||
90
NikVars
18.06.14
✎
09:39
|
(3) В корне ошибочное положение.
Что делать с номерами домов 13/1, 15а? |
|||
91
NikVars
18.06.14
✎
09:44
|
Мое предложение: номер дома - строка 6-8 символов. Причем эту строку нужно форматировать добавляя впереди номера дома пробелы.
Дом номер 1 будет выглядеть: " 1"; Дом номер 10 будет выглядеть: " 10". Далее сортировать, как в (85). Я бы в ТЗ добавил бы скрытую колонку именно для сортировки так, как я предложил, а видимую колонку, которую предполагается использовать выдавал бы пользователю удалив лишние пробелы. |
|||
92
logon
19.06.14
✎
05:32
|
(90) дробей у нас нет. а вот индекс "а" ставит такой дом по порядку. когда сортировка делается многострочной части документа когда в ней есть доп поля "АдресНасП ..."
|
|||
93
logon
19.06.14
✎
06:08
|
всему виной оказались пробелы!!
|
|||
94
logon
19.06.14
✎
06:09
|
все убрал заработало) вот лошаро
|
|||
95
osa1C
19.06.14
✎
06:33
|
просто слов нет(((... ТС будь мужиком вызови программиста и заплати за его работу
|
|||
96
logon
19.06.14
✎
08:06
|
(95) ну так молчите раз слов нет. кто то просто пытался помочь а не когда уже все решилось сказать, хм да эт ж херня
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |