Имя: Пароль:
1C
1C 7.7
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) ну так молчите раз слов нет. кто то просто пытался помочь а не когда уже все решилось сказать, хм да эт ж херня