|   |   | 
| 
 | 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) ну так молчите раз слов нет. кто то просто пытался помочь а не когда уже все решилось сказать, хм да эт ж херня     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |