1с упорядочить список значений

Обновлено: 04.07.2024

Самый оптимальны и быстрый способ сортировки, это выгрузить массив в "список значений" и отсортировать его методом этого объекта, в 99.9% случаев программисты используют именно этот метод. Ниже рассмотрены другие способы сортировки, которые могут быть применены в некоторых специфичных задачах, например, недавно у меня была необходимость отсортировать массив состоящий из строк таблицы значений (сортировать надо было по одному из полей таблицы значений), быстрая сортировка была успешно применена.

Классическая сортировка массива в 1с через список значений

Передаем массив в список значений. Сортируем стандартным методом "Сортировать".

Алгоритм "Быстрая сортировка"

Наиболее популярный и применяемый алгоритм на практике. Является одним из самых эффективных алгоритмов сортировки данных.
Вся суть алгоритма сводится к тому, чтобы разбить сложную задачу на маленькие и решить их по отдельности. Выбирается некая опорная точка и все значения которые меньше перебрасываются влево, все остальные вправо. Далее для каждой полученной части выполняетя тоже самое, до тех пор пока дробить части уже нельзя. В конце мы получаем множество отсортированных частей, которые необходимо просто склеить в 1 целое.


Алгоритм "Сортировка выбором"

Является одним из самых простых алгоритмов сортировки массива. Смысл в том, чтобы идти по массиву и каждый раз искать минимальный элемент массива, обменивая его с начальным элементом неотсортированной части массива. На небольших массивах может оказаться даже эффективнее, чем более сложные алгоритмы сортировки, но в любом случае проигрывает на больших массивах. Число обменов элементов по сравнению с "пузырьковым" алгоритмом N/2, где N - число элементов массива.

Алгоритм:
1. Находим минимальный элемент в массиве.
2. Меняем местами минимальный и первый элемент местами.
3. Опять ищем минимальный элемент в неотсортированной части массива
4. Меняем местами уже второй элемент массива и минимальный найденный, потому как первый элемент массива является отсортированной частью.
5. Ищем минимальные значения и меняем местами элементы,пока массив не будет отсортирован до конца.

Алгоритм "Сортировка пузырьком"

Пожалуй самый известный алгоритм, применяемый в учебных целях, для практического же применения является слишком медленным. Алгоритм лежит в основе более сложных алгоритмов: "Шейкерная сортировка", "Пирамидальная сортировка", "Быстрая сортировка". Примечательно то, что один из самых быстрых алгоритмов "Быстрый алгоритм" был разработан путем модернизации одного из самых худших алгоритмов "Сортировки пузырьком"."Быстрая" и "Шейкерная" сортировки будут рассмотрены далее. Смысл алгоритма заключается в том, что самые "легкие" элементы массива как бы "всплывают" , а самые "тяжелые" "тонут". Отсюда и название "Сортировка пузырьком"

Алгоритм "Шейкерная сортировка"

(Сортировка перемешиванием, Двунаправленная пузырьковая сортировка)

Алгоритм представляет собой одну из версий предыдущей сортировки - "сортировки пузырьком". Главное отличие в том, что в классической сортировке пузырьком происходит однонаправленное движение элементов снизу - вверх, то в шейкерной сортировке сначало происходит движение снизу-вверху, а затем сверху-вниз.

Алгоритм такой же, что и у пузырьковой сортировки + добавляется цикл пробега сверху-вниз.

В приведенном ниже примере, есть усовершенствование в шейкерной сортировке. В отличие от классической, используется в 2 раза меньше итераций.

Алгоритм "Гномья сортировка"

Алгоритм так странно назван благодаря голландскому ученому Дику Груну.

Гномья сортировка основана на технике, используемой обычным голландским садовым гномом (нидерл. tuinkabouter). Это метод, которым садовый гном сортирует линию цветочных горшков. По существу он смотрит на следующий и предыдущий садовые горшки: если они в правильном порядке, он шагает на один горшок вперёд, иначе он меняет их местами и шагает на один горшок назад. Граничные условия: если нет предыдущего горшка, он шагает вперёд; если нет следующего горшка, он закончил. Вот собственно и все описание алгоритма "Гномья сортировка". Что интересно, алгоритм не содержит вложенных циклов, а сортирует весь массив за один проход.

Алгоритм "Сортировка вставками"

Представляет собой простой алгоритм сортировки. Смысл заключается в том, что на каждом шаге мы берем элемент, ищем для него позицию и вставляем в нужное место.
Элементарный пример: При игре в дурака, вы тянете из колоды карту и вставляете ее в соответствующее место по возрастанию в имеющихся у вас картах. Или
в магазине вам дали сдачу 550 рублей- одна купюра 500, другая 50. Заглядываете в кошелек, а там купюры достоинством 10,100,1000. Вы вставляете купюру
достоинсвом 50р. между купюрами достоинством 10р и 100р, а купюру в 500 рублей между купюрами 100р и 1000р. Получается 10,50,100,500,1000 - Вот вам
и алгоритм "Сортировка вставками".
Таким образом с каждым шагом алгоритма, вам необходимо отсортировать подмассив данных и вставить значение в нужное место.

Алгортим "Сортировка слиянием"

Интересный в плане реализации и идеи алгоритм. Смысл его в том, чтобы разбивать массив на подмассивы, пока длина каждого подмассива не будет равна 1. Тогда мы утверждаем, что такой подмассив отсортирован. Затем сливаем получившиеся подмассивы воедино, одновременно сравнивая и сортируя поэлементно значения подмассивов.

Алгортим "Сортировка Шелла"

Алгоритм назван так в честь американского ученого Дональда Шелла. По своей сути этот алгоритм является усовершенствованным алгоритмом "Сортировка вставками". Смысл алгоритма заключается в том, чтобы сравнивать не только элементы, стоящие рядом друг с другом, но и на некотором удалении. Сначало выбирается Шаг - некий промежуток, через который будут сравниваться элементы массива на каждой итерации. Обычно его определяют так:
Для первой итерации Шаг = Цел(Массив.Количество()/2), для последующих Шаг = Цел(Шаг/2). Т.е. постепенно шаг сокращается и когда Шаг будет равен 1 произойдет последние сравнение и массив будет отсортирован.

Пример:
Дан массив (10,5,3,1,14,2,7,12).
1. Шаг = 4.
Сортируем простыми вставками каждые 4 группы по 2 элемента (10,14)(5,2)(3,7)(1,12)

2. Шаг = 2
Сортируем простыми вставками каждые 2 группы по 4 элемента (10,3,14,7)(2,1,5,12)

3. Шаг = 1
Сортируем простыми вставками каждую 1 группу по 8 элементов.

В процедуру ПриОткрытии или в конец модуля добавить:
Код 1C v 8.х
Где НомерСоглашения - Колонка в списке регистра сведений по которой нужно сортировать!
Далее щелкнув правой клавишей мыши на списке и зайдя в пункт Сортировка - увидим что стала доступна возможность сортировки по НомерСоглашения.

Как отсортировать список документов по признаку ПРОВЕДЕН?
Код 1C v 8.х

Сортировка динамических списков (ЖурналДокументовСписок)
Добавлять элементы настройки порядка в динамические списки нельзя.
Если индексирование для графы установлено, то соответсвующий элемент настройки порядка уже есть, надо его просто включить:
Код 1C v 8.х
При открытии, журнал будет упорядочен!

Разместил: E_Migachev  Версии: | 8.x |  Дата: 05.07.2010   Прочитано: 59387

Распечатать

Похожие FAQ

17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ В регламентированной отчетности не печается штрих-код 1С ( EanGnivc )  0
Установка шрифта EanGnivc В формах регламентированной отчетности, например, налоговые декларации, которые введены для предоставления отчетности, на всех листах в левом верхнем углу содержат свой уникальный штрих-код. В этих формах, которые распрос В чем разница между ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ в языке запросов 1С  10
Цитата из справки 1С: " По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной . Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое Внешние обработки, печатные формы, обработки по заполнению табличных частей  3
Справочник «Внешние обработки, печатные формы, обработки по заполнению табличных частей» содержит список произвольных обработок, произвольных отчетов, дополнительных печатных форм, обработок для заполнения ТЧ объектов, обработок, подключаемых к отч Выгрузка результата запроса в Таблицу и Дерево значений  0
Результат запроса может быть выгружен в таблицу значений или дерево значений с помощью метода Выгрузить. Затем над ними могут быть произведены другие операции: сортировка, свертка, перебор строк и другие действия. Следующий пример выгружает результ Посмотреть все результаты поиска похожих

Еще в этой же категории

Как в форме списка реализовать сортировку по своему реквизиту?  10
Если реквизит примитивного типа, то достаточно установить для свойства реквизита «Индексировать» значение «Индексировать» или «Индексировать с доп. упорядочиванием» (не доступно для реквизитов типа ХранилищеЗначения). Если же реквизит ссылочного типа Оформление строки в ПриПолученииДанных или ПриВыводеСтроки   6
Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки , т.е. при обновлении данных, отображ Табличное поле

Как получить строки табличного поля, отобранные отбором?  4
ОтборСтрок = ТабличнаяЧастьИсточник.ОтборСтрок ; ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличнаяЧастьИсточник); // Добавляются необходимые отборы, такие же как в отбор Отбор по списку значений  3
СозданныйСписок = Новый СписокЗначений; СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.Выполнено); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ЗакрытиеЗаявки); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ОтклоненаРукОтдЗакупок); Как пользователям запретить удаление условия отбора в форме списка?  3
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; Полный код: ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип(" ЭлементОтбораКомпоновкиДанных" )); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпонов Посмотреть все в категории Список Справочника, Документов, Регистров

В процедуру ПриОткрытии или в конец модуля добавить:
Код 1C v 8.х
Где НомерСоглашения - Колонка в списке регистра сведений по которой нужно сортировать!
Далее щелкнув правой клавишей мыши на списке и зайдя в пункт Сортировка - увидим что стала доступна возможность сортировки по НомерСоглашения.

Как отсортировать список документов по признаку ПРОВЕДЕН?
Код 1C v 8.х

Сортировка динамических списков (ЖурналДокументовСписок)
Добавлять элементы настройки порядка в динамические списки нельзя.
Если индексирование для графы установлено, то соответсвующий элемент настройки порядка уже есть, надо его просто включить:
Код 1C v 8.х
При открытии, журнал будет упорядочен!

Разместил: E_Migachev  Версии: | 8.x |  Дата: 05.07.2010   Прочитано: 59388

Распечатать

Похожие FAQ

17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Быстрый отбор в справочнике по первой букве  0
В статье описан способ быстрой организации отбора в списке справочника по первой букве наименования. Механизм легко дотачивается под собственные нужды. https://helpf.pro/uploads/img/_1-T4ZDj6uNPX.jpg // ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ НаКлиенте В регламентированной отчетности не печается штрих-код 1С ( EanGnivc )  0
Установка шрифта EanGnivc В формах регламентированной отчетности, например, налоговые декларации, которые введены для предоставления отчетности, на всех листах в левом верхнем углу содержат свой уникальный штрих-код. В этих формах, которые распрос В чем разница между ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ в языке запросов 1С  10
Цитата из справки 1С: " По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной . Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое Внешние обработки, печатные формы, обработки по заполнению табличных частей  3
Справочник «Внешние обработки, печатные формы, обработки по заполнению табличных частей» содержит список произвольных обработок, произвольных отчетов, дополнительных печатных форм, обработок для заполнения ТЧ объектов, обработок, подключаемых к отч Посмотреть все результаты поиска похожих

Еще в этой же категории

Как в форме списка реализовать сортировку по своему реквизиту?  10
Если реквизит примитивного типа, то достаточно установить для свойства реквизита «Индексировать» значение «Индексировать» или «Индексировать с доп. упорядочиванием» (не доступно для реквизитов типа ХранилищеЗначения). Если же реквизит ссылочного типа Оформление строки в ПриПолученииДанных или ПриВыводеСтроки   6
Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки , т.е. при обновлении данных, отображ Табличное поле

Как получить строки табличного поля, отобранные отбором?  4
ОтборСтрок = ТабличнаяЧастьИсточник.ОтборСтрок ; ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличнаяЧастьИсточник); // Добавляются необходимые отборы, такие же как в отбор Отбор по списку значений  3
СозданныйСписок = Новый СписокЗначений; СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.Выполнено); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ЗакрытиеЗаявки); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ОтклоненаРукОтдЗакупок); Как пользователям запретить удаление условия отбора в форме списка?  3
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; Полный код: ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип(" ЭлементОтбораКомпоновкиДанных" )); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпонов Посмотреть все в категории Список Справочника, Документов, Регистров

Значительная часть информации, связанной с учетом или ведением бухгалтерии, хранится в виде списков. Эта традиция заведена уже очень давно и табличная информация воспринимается уже как нечто само собой понятное. Списки могут быть разными и представлены могут быть различными способами.


Программные продукты от 1С предлагают свою версию реализации списков. Это стандартный механизм для всех продуктов от 1С. Очень полезно научиться работать со списками в этой среде. Знания будут полезны как бухгалтерам, так и абсолютно всем, кто так или иначе, вынужден работать в программах от 1С.

Начнем по порядку.

1. Дату можно не вбивать полностью


Можно не вбивать текущую дату каждый раз. Просто введите сегоднящнее число в соответствующее поле и нажмите Enter. Программа сама допишет отсутствующую информацию. Это не ахти насколько важные знания, но если вы работаете с большим потоком документов, то этот лайфхак значительно ускорит обработку данных. Ведь каждый раз тратятся драгоценные секунды.

2. Функция "вывести список" - начальная сортировка


Нажимаем кнопку "Ещё" и находим опцию "Вывести список". Нажимаем на этот пункт и перед нами открывается панель настройки. Эта панель позволяет галочками указать, какие данные нужно сохранить в результирующем списке, который мы, например, хотим вывести на печать.

После такой сортировки, на выходе мы получим таблицу со всеми выбранными данными. Эту таблицу можно распечатать или использовать любым способом.

3. Быстрый отбор


Если нам нужно получить данные по какому-то контрагенту, то можно использовать простой способ сортировки. Достаточно кликнуть правой кнопкой по наименованию партнера или контрагента и выбрать опцию "Найти". В результате, система предложит вам сводную таблицу со всеми данными, отвечающими поставленному запросу. Это называется быстрый отбор. Очень полезная на практике функция. Кстати говоря. результат отбора будет висеть над всей таблицей как закладка. Его можно закрыть крестиком.

4. Сортировка данных

Ещё одна очень полезная функция - это сортировка данных внутри сводной таблицы. На самом деле штука довольно стандартная, но пользу. безусловно, имеет.


Обратите внимание, что колонки имеют шапки с названиями, которые можно кликать. Кликайте по нужному столбцу и произойдет сортировка в установленном порядке. Это очень удобно, когда нужно выполнить сортировку по одному из параметров.

5. Изменить форму

Если перейти во вкладку "ещё", то там вы увидите закладку изменить форму. Появляется форма настройки.


Тут можно поубирать галочками лишние пункты или добавить что-то новое. Благодаря этому можно сделать список более компактным. Здесь же можно изменить стиль и форму отображения объектов.


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


Здесь же можно сформировать удобный быстрый отбор. Просто кликните по вкладке, как показано на рисунке. а в появившемся наборном поле введите нужного контрагента (или любую другую информацию, соответствующую выбранному полю). Впоследствии, программа выведет подборку, аналогичную быстрому подбору.

6. Подборка документов по признаку

С помощью опции настройка списков можно не только сформировать удобную для прочтения форму или упорядочить данные, но и сделать выборку по признаку. Например, вывести все документы, которые нужно подписывать. Очень полезная функция. которая значительно сократит рутинную обработку стандартных документов.


Настроить эту функцию очень просто. Переходите во вкладку "ещё", выбирайте настройку списков. Тут выбираем вкладку отбор, как показано на картинке выше и в итоге получаем отсортированные данные, где подобраны все неподписанные документы.

7. Группировка


Данные можно не только сортировать, но и группировать. Иногда группировка внутри списка бывает очень и очень полезной. поскольку позволяет работать сразу с несколькими важными параметрами. Для того, чтобы выполнить группировку, нужно в уже знакомой нам вкладке "ещё", выбрать соответствующий раздел.

После выполнения группировки все данные будут отсортированы по группам. Можно сделать, например. группировку по контрагенту, как указано на рисунке выше. Это позволит нам выполнить удобную подборку всех данных, которые будут объединены в сводный перечень данных. Так можно в одном раскрывающемся списке увидеть и долги, и неподписанные документы, и другое.

8. Изменить форму внутри документа


Менять можно не только общий список, но и конкретный документ. Перейдем в уже известный нам раздел, там выберем "изменение формы".

Настройка формы позволяет открыть или спрятать ненужные нам пункты. Обратите внимание, что мы работаем не просто со списком, а с папками. Пункты будущего списка можно перемещать из папки в папку, а затем выводить в нужном поле.

Читайте также: