Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) ИТЗ Сортировать и т.д.? (число прочтений - 10267 )
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
ИТЗ Сортировать и т.д.?
30. Марта 2008 :: 14:51
Печать  
Как можно Создавать Индексы с учетом предыдущей сортировки по основному индексу?
ну кроме как выгрузки в новую ИТЗ  Печаль
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #1 - 30. Марта 2008 :: 15:02
Печать  
Вопрос непонятен, что хочешь сделать и зачем?
  
Наверх
ICQ  
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #2 - 30. Марта 2008 :: 15:19
Печать  
[code]//--------------------------------------------
Процедура ЗаполнитьДЛяВывода(Знач Тз_ТекСтр, Знач Тз_ТекГр, ДляВывода)
     Перем ТекГр,УнНомер_Табл, Найденая, СтарСсылка;
     
     ТекГр = ИНТЗ.Получить(Тз_ТекСтр, "Номер_Гр");
     СсылкаНа_УнНомер = ИНТЗ.Получить(Тз_ТекСтр, "СсылкаНа_УнНомер");
    СтарСсылка = СсылкаНа_УнНомер;
     Пока (ТекГр = Тз_ТекГр) и (СтарСсылка=СсылкаНа_УнНомер) Цикл
           
           
           ДляВывода = ДляВывода+1;
           ИНТЗ.Установить(Тз_ТекСтр, "ДляВывода", ДляВывода);
           УнНомер_Табл = ИНТЗ.Получить(Тз_ТекСтр, "УнНомер_Табл");
           
           Уровень_Разворот = ИНТЗ.Получить(Тз_ТекСтр, "Уровень_Разворот");
           
           Если Уровень_Разворот > 0 Тогда
                 //Найдем вложенную
                 Найденая = ИНТЗ.НайтиСтроку("инСсылкаНа_УнНомер", УнНомер_Табл, 0,0);
                 Если Найденая=0 Тогда //не нашли
                       //Ничего неделаем
                 Иначе // нашли вложенную
                       ЗаполнитьДЛяВывода(Найденая, Тз_ТекГр+1, ДляВывода);
                 КонецЕсли;
           КонецЕсли;
        
           Тз_ТекСтр=Тз_ТекСтр+1; // перейдем к следующей строке
           
           Если Тз_ТекСтр > ИНТЗКоличествоСтрок Тогда
                 Возврат;
           КонецЕсли;
           ТекГр = ИНТЗ.Получить(Тз_ТекСтр, "Номер_Гр");
         СсылкаНа_УнНомер = ИНТЗ.Получить(Тз_ТекСтр, "СсылкаНа_УнНомер");
     КонецЦикла;

КонецПроцедуры      // ЗаполнитьДЛяВывода

//--------------------------------------------
Процедура СортироватьСГруппировками(СортКолонка)
     
     ИНТЗ.УдалитьКолонку("ДляВывода");

     Если (СортКолонка = "") или (СортКолонка = "ПечТекстСтроки") Тогда                         
           кстСтроки,УнНомер_Табл", 1);
     Иначе
           //Если здесь использовать ИНТЗ.Сортировать() то неверное поведение при создании новых индексов
           тКолонка+",ПечТекстСтроки,УнНомер_Табл", 1);
     КонецЕсли; 

     Состояние("Выгрузка ИТ в тз Сортировка...");

     // хочется избавиться от ЭТОГО
     ВремИНТЗ=СоздатьОбъект("ИндексированнаяТаблица");
     ИНТЗ.Выгрузить(ВремИНТЗ,"Сортировка");
     ИНТЗ=0;
     ИНТЗ = ВремИНТЗ;
     ВремИНТЗ=0;
     //--------------

     ИНТЗ.НоваяКолонка("ДляВывода");

     Состояние("ЗаполнитьДЛяВывода ИТ...");

     ИНТЗ.ДобавитьИндекс("инСсылкаНа_УнНомер","*СсылкаНа_УнНомер",0);

     ИНТЗКоличествоСтрок = ИНТЗ.КоличествоСтрок();
     ЗаполнитьДЛяВывода(1,1,0);      
     
     ИНТЗ.ДобавитьИндекс("ДляВывода","ДляВывода",1);

     Состояние("Выгрузка ИТ в тз ДляВывода...");

     // хочется избавиться от ЭТОГО
     ВремИНТЗ=СоздатьОбъект("ИндексированнаяТаблица");
     ИНТЗ.Выгрузить(ВремИНТЗ,"ДляВывода");
     ИНТЗ=0;
     ИНТЗ = ВремИНТЗ;
     ВремИНТЗ=0;
     //--------------

     Состояние("ДобавитьИндекс инУнНомер_Табл в ИТ...");

     ИНТЗ.ДобавитьИндекс("инУнНомер_Табл","*УнНомер_Табл",1);
     ИНТЗ.ДобавитьИндекс("инНомер_Гр","Номер_Гр",0);

КонецПроцедуры // СортироватьСГруппировками() [/code]

при добавлении нового индекса не учитывается метод сортировка
ИНТЗ.ДобавитьИндекс("инСсылкаНа_УнНомер","*СсылкаНа_УнНомер",0);

осюда невозможность использовать НомерСтроки и
правильный поиск по :
Найденая = ИНТЗ.НайтиСтроку("инСсылкаНа_УнНомер", УнНомер_Табл, 0,0);
метод сортировать основного индекса не перестраивает строки и метод НайтиСтроку использует ИТЗ до сортировки!
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #3 - 30. Марта 2008 :: 15:32
Печать  
И зачем мне эта страница кода? Думаешь кому то интересно разбиратся что ты там написал?

Цитата:
осюда невозможность использовать НомерСтроки и
правильный поиск по :
Найденая = ИНТЗ.НайтиСтроку("инСсылкаНа_УнНомер", УнНомер_Табл, 0,0);
метод сортировать основного индекса не перестраивает строки и метод НайтиСтроку использует ИТЗ до сортировки!


т.е. ты хочешь сказать что если изменить основной индекс, а потом добавить какойто свой индекс то метод НайтиСтроку по этому индексу вернет неправильный номер строки?
Если так то это некорректное поведение ИТЗ напищи простой тест где это воспроизводится.

Учти номера строк при перестройки основного индекса не меняются т.е. ели был номер 2 то и останется 2 даже если в индексе теперь это 10 строка
  
Наверх
ICQ  
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #4 - 30. Марта 2008 :: 15:42
Печать  
Nick писал(а) 30. Марта 2008 :: 15:32:
Учти номера строк при перестройки основного индекса не меняются т.е. ели был номер 2 то и останется 2 даже если в индексе теперь это 10 строка


ну так я об этом и говорю!
вопрос можно как нибудь построить новый индекс с учетом сортировки в основном индексе?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #5 - 30. Марта 2008 :: 15:50
Печать  
Номера у строк никогда не изменяются, фактически это не номера строк а просто уникальный идентификатор строки. Если тебе нужен номер строки в конкретной выборке считай его сам
  
Наверх
ICQ  
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #6 - 30. Марта 2008 :: 15:51
Печать  
ИТЗ:
К1

0
2
1

сортируем "К1"
по основному индексу:
К1

0
1
2

добавляем индекс "Инд2" по колонке "К1"
будет "Инд2"

К1

0
1
2

применяем
Найденая = ИНТЗ.НайтиСтроку("Инд2", 1, 0,0);

получем Найденая=3, а хочется Найденая=2
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #7 - 30. Марта 2008 :: 15:55
Печать  
Да это стандартное поведение ИТЗ, так и должно быть. А зачем тебе поведение которое ты описал?
  
Наверх
ICQ  
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #8 - 30. Марта 2008 :: 16:05
Печать  
Nick писал(а) 30. Марта 2008 :: 15:55:
Да это стандартное поведение ИТЗ, так и должно быть. А зачем тебе поведение которое ты описал?


привел пример кода  Печаль РЕКУРСИЯ!

тест ИТЗ:
  

TestITZ.ert ( 28 KB | Загрузки )
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #9 - 30. Марта 2008 :: 16:08
Печать  
PVR писал(а) 30. Марта 2008 :: 16:05:
Nick писал(а) 30. Марта 2008 :: 15:55:
Да это стандартное поведение ИТЗ, так и должно быть. А зачем тебе поведение которое ты описал?


привел пример кода  Печаль РЕКУРСИЯ!

тест ИТЗ:


Это тоже самое что в 6 посте. Повторяю так и дожно быть!

Причем здесь рекурсия?
  
Наверх
ICQ  
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #10 - 30. Марта 2008 :: 16:11
Печать  
можно использовать Спозиционироваться=1:
     Найденая = ИТЗ.НайтиСтроку("Инд2", 1, 0,1);
     Сообщить("Найденая="+Найденая +", Хочется =2");
     
     Сообщить("ИТЗ.К1=" + ИТЗ.К1);

ИТЗ.К1 =1 правильно, но как это поведение использовать в рекурсии?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #11 - 30. Марта 2008 :: 16:15
Печать  
PVR писал(а) 30. Марта 2008 :: 16:11:
можно использовать Спозиционироваться=1:
     Найденая = ИТЗ.НайтиСтроку("Инд2", 1, 0,1);
     Сообщить("Найденая="+Найденая +", Хочется =2");
     
     Сообщить("ИТЗ.К1=" + ИТЗ.К1);

ИТЗ.К1 =1 правильно, но как это поведение использовать в рекурсии?


Приведи пример рекурсии где ты хочешь это использовать
Только коротко, и не нодо выкладывать ert
  
Наверх
ICQ  
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #12 - 30. Марта 2008 :: 16:25
Печать  
пример рекурсии 2 пост всего 85 строк.

ЗаполнитьДЛяВывода(Знач Тз_ТекСтр, Знач Тз_ТекГр, ДляВывода), =35 строк

вроде как не много!?
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #13 - 30. Марта 2008 :: 16:30
Печать  
по http://www.1cpp.ru/forum/YaBB.pl?num=1206094105/17#17

реальный код где это используется класс "ТПОтчетДерево.ert"

хочется довести все минусы класса до +++  Смущённый
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ИТЗ Сортировать и т.д.?
Ответ #14 - 30. Марта 2008 :: 16:36
Печать  
PVR писал(а) 30. Марта 2008 :: 16:25:
пример рекурсии 2 пост всего 85 строк.

ЗаполнитьДЛяВывода(Знач Тз_ТекСтр, Знач Тз_ТекГр, ДляВывода), =35 строк

вроде как не много!?


Для чего нужна ЗаполнитьДЛяВывода? Я так понимаю она сортирует строки в порядке вывода?

P.S. пошел спать
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать