| 
    
        
     
     | 
    
  | 
Они мне предлагают алгоритм сортировки вспомнить? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        RomaH    
     naïve 
    14.02.20 
            ✎
    11:39 
 | 
         
        Описание:
 
        Сортирует коллекцию в соответствии с указанными правилами сортировки. Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер). Вызов метода выполняет обращение к серверу. Надо получить последние измененные 10 файлов Пишу список файлов в ТЗ СОРТИРУЮ по дате изменения получаю первые 10 казалось бы все просто ... но Описание: Сортирует коллекцию в соответствии с указанными правилами сортировки. Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер). Вызов метода выполняет обращение к серверу. а вот сервер тут мне совсем не нужен... как отсортировать на клиенте?  | 
|||
| 
    1
    
        vicof    
     14.02.20 
            ✎
    11:41 
 | 
         
        Ручками     
         | 
|||
| 
    2
    
        RomanYS    
     14.02.20 
            ✎
    11:43 
 | 
         
        Пишу список файлов в ТЗ ... как отсортировать на клиенте?
 
        Вроде первое с последним несовместимо  | 
|||
| 
    3
    
        Галахад    
     гуру 
    14.02.20 
            ✎
    11:44 
 | 
         
        Пузырьком? ;-)     
         | 
|||
| 
    4
    
        ДенисЧ    
     14.02.20 
            ✎
    11:44 
 | 
         
        (0)
 
        "вот сервер тут мне совсем не нужен" Понимаешь ли, в чём тут дело, Пятачок... (с) 1с абсолютно пофигу, нужен ли тебе сервер или нет...  | 
|||
| 
    5
    
        ДенисЧ    
     14.02.20 
            ✎
    11:44 
 | 
         
        (3) Ага. Как раз пятница...     
         | 
|||
| 
    6
    
        ptiz    
     14.02.20 
            ✎
    11:46 
 | 
         
        (2) Что за поток букв? Какая ТЗ на клиенте в управляемом приложении?     
         | 
|||
| 
    7
    
        mTema32    
     14.02.20 
            ✎
    11:48 
 | 
         
        (6) Реквизит формы.     
         | 
|||
| 
    8
    
        ptiz    
     14.02.20 
            ✎
    11:50 
 | 
         
        (7) Тогда на клиенте - это уже не ТЗ.     
         | 
|||
| 
    9
    
        pechkin    
     14.02.20 
            ✎
    11:50 
 | 
         
        юзай список.     
         | 
|||
| 
    10
    
        Garykom    
     гуру 
    14.02.20 
            ✎
    12:02 
 | 
         
        (0) Юзай массивы     
         | 
|||
| 
    11
    
        Garykom    
     гуру 
    14.02.20 
            ✎
    12:03 
 | 
         
        (0) И уточни задание, если у 20 файлов одна дата/время то какие первые 10 тебе нужны?     
         | 
|||
| 
    12
    
        НЕА123    
     14.02.20 
            ✎
    13:02 
 | 
         
        (0)
 
        ну, не более 10 проходов (11)+1  | 
|||
| 
    13
    
        fisher    
     14.02.20 
            ✎
    13:43 
 | 
         
        А нафига ты их пихаешь в ТЗ на форме, чтобы отсортировать? Тебе же только последние 10 надо?
 
        1. Создай список значений (переменную, не реквизит формы) и пихай туда ГГГГММДД в представление, а остальные данные в виде структур - в значение. 2. Сортируй по представлению 3. Первые 10 запихиваешь уже в ТЗ на форме.  | 
|||
| 
    14
    
        fisher    
     14.02.20 
            ✎
    13:49 
 | 
         
        А если тебе все данные нужны в ТЗ на форме а сортировка - какая-то промежуточная опция, тогда не парься и делай штатную сортировку с серверным вызовом. На суммарном трафике между клиентом и сервером ты почти ничего не потеряешь, получишь только лишний серверный вызов. Что в худшем случае даст небольшое подтормаживание. Но если сортировка выполняется по какой-то операции пользователя, то пользователь этого подсознательно ожидает и в юзабилити ты не потеряешь.     
         | 
|||
| 
    15
    
        novichok79    
     14.02.20 
            ✎
    13:52 
 | 
         
        Процедура СортироватьМассивСтруктур(МассивСтруктур, Знач ИмяКлюча, ОбратнаяСортировка = Ложь) Экспорт 
 
        //пресловутая сортировка пузырьком Перем ЛевоеЗначение, ПравоеЗначение; ИмяКлюча = СокрЛП(ИмяКлюча); ДлинаМассива = МассивСтруктур.Количество(); ПорядокИзменен = Ложь; Для ПервыйСчетчик = 0 По ДлинаМассива - 1 Цикл ПорядокИзменен = Ложь; Для ВторойСчетчик = 0 По ДлинаМассива - ПервыйСчетчик - 2 Цикл ЛеваяСтруктура = МассивСтруктур.Получить(ВторойСчетчик); ПраваяСтруктура = МассивСтруктур.Получить(ВторойСчетчик + 1); Если ЛеваяСтруктура.Свойство(ИмяКлюча, ЛевоеЗначение) И ПраваяСтруктура.Свойство(ИмяКлюча, ПравоеЗначение) Тогда НадоПереставить = ?(ОбратнаяСортировка, ЛевоеЗначение < ПравоеЗначение, ЛевоеЗначение > ПравоеЗначение); Если НадоПереставить Тогда МассивСтруктур[ВторойСчетчик] = ПраваяСтруктура; МассивСтруктур[ВторойСчетчик + 1] = ЛеваяСтруктура; ПорядокИзменен = Истина; КонецЕсли; КонецЕсли; КонецЦикла; Если Не ПорядокИзменен Тогда Прервать; КонецЕсли; КонецЦикла; КонецПроцедуры  | 
|||
| 
    16
    
        novichok79    
     14.02.20 
            ✎
    13:52 
 | 
         
        дарю     
         | 
|||
| 
    17
    
        Cthulhu    
     14.02.20 
            ✎
    13:52 
 | 
         
        (2),(6),(8):
 
        
     | 
|||
| 
    18
    
        RomanYS    
     14.02.20 
            ✎
    13:58 
 | 
         
        (17) Да, обсуждали здесь когда-то. Баг это или фича не известно. Когда оно сломается тоже не угадаешь.     
         | 
|||
| 
    19
    
        fisher    
     14.02.20 
            ✎
    14:02 
 | 
         
        (15) Тогда уж лучше сортировка вставками. Она не сложнее, зато быстрее на частично отсортированных массивах. Ее часто используют как оптимизационную на рекурсивных сортировках, когда неотсортированными небольшие кусочки остаются элементов по десять. Или сортировку Шелла. Она еще эффективнее и не сильно сложнее. Хотя если так заморачиваться, то уже несложно будет написать и полноценную сортировку слиянием с оптимизациями. Только смысла нет никакого :)
 
        (17) Нужно быть Чипом, чтобы юзать это в продакшене.  | 
|||
| 
    20
    
        olegves    
     14.02.20 
            ✎
    14:04 
 | 
         
        (0) засунь в список значений и сортируй хот по значению, хоть по представлению     
         | 
|||
| 
    21
    
        acht    
     14.02.20 
            ✎
    14:07 
 | 
         
        (17) На вебклиенте упадет с "Индекс находится за границами массива".
 
        Так чта...  | 
|||
| 
    22
    
        RomanYS    
     14.02.20 
            ✎
    14:08 
 | 
         
        (21) Ты пустой тип взял, а надо с типом ТЗ.
 
        (17) Кстати где его предлагается брать?  | 
|||
| 
    23
    
        cViper    
     14.02.20 
            ✎
    14:08 
 | 
         
        (0)just google MergeSort and QuickSort     
         | 
|||
| 
    24
    
        acht    
     14.02.20 
            ✎
    14:09 
 | 
         
        (22) Ты попробуй-попробуй     
         | 
|||
| 
    25
    
        acht    
     14.02.20 
            ✎
    14:12 
 | 
         
        (22) ОписаниеТипа = Новый ОписаниеТипов("ТаблицаЗначений");     
         | 
|||
| 
    26
    
        novichok79    
     14.02.20 
            ✎
    14:14 
 | 
         
        (19) я не заморачивался особо, мне нужна была на клиенте сортировка. взял первое, что пришло в голову, и самое простое. а так конечно как написано в (23).     
         | 
|||
| 
    27
    
        RomaH    
     naïve 
    14.02.20 
            ✎
    14:15 
 | 
         
        в общем - список последних файлов сильно не мешающий работе
 
        &НаКлиенте Процедура ПриОткрытии(Отказ) ПодключитьОбработчикОжидания("ПолучитьСписокПоследнихФайлов",1,ложь); КонецПроцедуры &НаСервереБезКонтекста Процедура ПолучитьСписокПоследнихФайловНаСервере(Знач МассивФайлов,СписокФайлов) ПоследниеОткрытыеФайлы = Новый ТаблицаЗначений; ПоследниеОткрытыеФайлы.Колонки.Добавить("ИмяЯрлыка"); ПоследниеОткрытыеФайлы.Колонки.Добавить("ПолноеИмяЯрлыка"); ПоследниеОткрытыеФайлы.Колонки.Добавить("ДатаЯрлыка"); ПоследниеОткрытыеФайлы.Колонки.Добавить("ПутьДоОбъекта"); Для Каждого Ярлык Из МассивФайлов Цикл СтрокаТЗ = ПоследниеОткрытыеФайлы.Добавить(); СтрокаТЗ.ИмяЯрлыка = Ярлык.ИмяЯрлыка; СтрокаТЗ.ПолноеИмяЯрлыка = Ярлык.ПолноеИмяЯрлыка; СтрокаТЗ.ДатаЯрлыка = Ярлык.ДатаЯрлыка; СтрокаТЗ.ПутьДоОбъекта = Ярлык.ПутьДоОбъекта; КонецЦикла; ПоследниеОткрытыеФайлы.Сортировать("ДатаЯрлыка УБЫВ"); //СписокФайлов = Новый Массив; Для КоличествоФайловОфис = 0 По ПоследниеОткрытыеФайлы.Количество() - 1 Цикл Если КоличествоФайловОфис > 10 Тогда Прервать; КонецЕсли; СтрокаТЗ = ПоследниеОткрытыеФайлы[КоличествоФайловОфис]; Структура = Новый Структура("ПутьДоОбъекта,ИмяЯрлыка",СтрокаТЗ.ПутьДоОбъекта,СтрокаТЗ.ИмяЯрлыка); СписокФайлов.Добавить(Структура); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ПолучитьСписокПоследнихФайлов() Shell = Новый COMОбъект("WScript.Shell"); ПутьДоЯрлыков = Shell.ExpandEnvironmentStrings("%AppData%\Microsoft\Office\Последние файлы"); ПоследниеФайлы = НайтиФайлы(ПутьДоЯрлыков,"*.lnk"); МассивФайлов = Новый Массив; Для Каждого Ярлык Из ПоследниеФайлы Цикл ЯрлыкОбъект = Shell.CreateShortcut(Ярлык.ПолноеИмя); ПутьДоОбъекта = ЯрлыкОбъект.TargetPath; РасширениеФайла = Сред(ПутьДоОбъекта,СтрНайти(ПутьДоОбъекта,".",НаправлениеПоиска.СКонца)+1); Если Не (РасширениеФайла = "doc" ИЛИ РасширениеФайла = "docx" ИЛИ РасширениеФайла = "rtf") Тогда Продолжить; КонецЕсли; Структура = Новый Структура("ИмяЯрлыка,ПолноеИмяЯрлыка,ДатаЯрлыка,ПутьДоОбъекта" ,Ярлык.ИмяБезРасширения,Ярлык.ПолноеИмя,Ярлык.ПолучитьВремяИзменения(),ПутьДоОбъекта); МассивФайлов.Добавить(Структура); КонецЦикла; МассивСпискаФайлов = Новый Массив; ПолучитьСписокПоследнихФайловНаСервере(МассивФайлов,МассивСпискаФайлов); Для КоличествоФайловОфис = 0 По МассивСпискаФайлов.ВГраница() Цикл Если КоличествоФайловОфис > 10 Тогда Прервать; КонецЕсли; СтрокаТЗ = МассивСпискаФайлов[КоличествоФайловОфис]; СтрокаСписка = СписокФайлов.НайтиПоЗначению(СтрокаТЗ.ПутьДоОбъекта); Если СтрокаСписка = Неопределено Тогда СписокФайлов.Вставить(КоличествоФайловОфис,СтрокаТЗ.ПутьДоОбъекта,СтрокаТЗ.ИмяЯрлыка,,БиблиотекаКартинок.ФорматWord); КонецЕсли; КонецЦикла; КонецПроцедуры  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |