#0
by OTMOPO3OK
Группы могут быть в любой колонке. Сначала должна идти группа, потом её потомки и т. д. Я написал сортировку по двум колонкам с использованием рекурсии, а дальше затык. Не могу удержать в памяти весь алгоритм универсальной сортировки по любому количеству колонок. Помогите.
#0
by OTMOPO3OK
Группы могут быть в любой колонке. Сначала должна идти группа, потом её потомки и т. д. Я написал сортировку по двум колонкам с использованием рекурсии, а дальше затык. Не могу удержать в памяти весь алгоритм универсальной сортировки по любому количеству колонок. Помогите.
#4
by Barmalei
это значит содержимое одной колонки никак не связано с содержимым другой. тогда можно использовать 1 алгоритм для 1 колонки в цикле на все колонки ?
#5
by OTMOPO3OK
Из этой портянки видно, что сортировка работает только по двум колонкам. Естественно, что это не универсально и вообще не красиво. Но я наверное уже выдохся и не вижу.
#8
by OTMOPO3OK
Понятно, что должен быть цикл по колонкам, но я не вижу его, глаз замылился, наверное.
#10
by Barmalei
по идее так будет в самом начале Для А=1 По ТЗ.КоличествоКолонок Цикл тут делаем сортировку по 1 колонке КонецЦикла;
#13
by OTMOPO3OK
По третьей колонке сортировка будет выглядеть ещё ужаснее. Нужно увидеть во всём этом универсальный алгоритм. Я его не вижу.
#14
by Barmalei
так выходит есть связь 1 и 2 колонки ? иначе все просто было бы Для А=1 По ТЗ.КоличествоКолонок Цикл сортировка по колонке КонецЦикла;
#15
by КонецЦикла
Где потом используешь эту сортировку? Вот перед использованием и сортируй по нужным колонкам ТЗ, потом потомки Вот пример рекурсивного вызова для ИТЗ, добавит просто сортировку в вывод группировок
#16
by OTMOPO3OK
Связь только в том, что сортировать, конечно же, нужно с учётом предыдущих колонок. Использую непосредственно перед подсчётом итогов по группировкам (и группам), который ещё предстоит написать. То, что по ссылке, мне пока совсем не подходит. Данные уже есть в таблице значений. Их просто нужно отсортировать.
#18
by NS
новаяколонка,, заполняешь полным наименованием - .полноенаименование, и сортируешь по ней.
#19
by OTMOPO3OK
Полное наименование выдает строку вида "родитель/потомок". А в наименовании элемента справочника может использоваться символ слэша. И поэтому такая сортировка может быть неправильной. Ну, это если конечно я ничего не путаю.
#22
by NS
написанием своей простенькой функции получения полного наименования, где в качестве разделителя например используется симв
#23
by КонецЦикла
Ну дык... ИТЗ сама подсчитает итоги по группировкам Зачем мучать анальное отверстие?
#26
by OTMOPO3OK
Меня немного смущает лицензия, по которой распространяется icpp. Но конечно я рассмотрю и этот вариант. Всем спасибо.
#29
by OTMOPO3OK
О, привет. Ты ж создатель индексированной таблицы. Как в ней искать неопределённое значение? Создал индекс из трёх колонок. Но в ключе последнее значение должно быть неопределённым. А в список значений неопределённое значение невозможно засунуть. И вот я сижу и думаю, если создать индекс из двух первых колонок, то будет ли "НайтиСтроку" позиционироваться точно на строку ИТЗ с неопределённым значением третьей колонки, не участвующей в индексе? Но что-то мне сдаётся, что не обязательно будет так.
#31
by aka AMIGO
можно и я вылезу со своим вариантом? :) как-то давно тому делал такую сортировку для этого создал еще одну колонку, записал в неё ПолныеКоды товаров из соотв.колонки, да по ним и отсортировал.
#32
by OTMOPO3OK
Не работает. РазмерСписка только возвращает размер списка. Но я всё равно попробовал и вот: "Слишком много параметров передано при вызове функции/процедуры объекта".
#36
by ADirks
точно, гоню ... единственный вариант - воспользоваться тем фактом, что неопределенные значения всегда первые в сортировке. примерно так, хотя конечно изврат
#37
by OTMOPO3OK
Пустое значение занято для пустого элемента. Они у меня есть. А неопределённые в строках с группировками. Да, только вот так получается. А сейчас с обычными ТЗ я сначала делаю индексную строку из внутренних представлений и уже её ищу. В любом случае этот вариант с ИТЗ будет быстрее, чем мой?
#38
by ADirks
Насчет быстрее - необязательно. Такая сортировка с иерархией - это куча обращений к базе, что сводит на нет все другие оптимизации. Но он может оказаться понятнее - и это немаловажно. А может и не оказаться :)
#39
by OTMOPO3OK
Я почему спрашиваю. Потому что процедуру сбора итогов про группам справочника я ещё не сделал, и мне кажется, что это будет сложно. Вот думаю теперь, что будет проще: либо её своими силами написать или на ИТЗ сделать (ведь в этом случае, многое придётся переписывать). Учитывая, что мне только это и осталось. Планировалось, что оптимизацией и ускорением я займусь потом, когда всё будет работать.
#41
by OTMOPO3OK
Этот вариант мне не нравится, теоретически коды могут быть не уникальны. Такое конечно редко бывает, но тем не менее. Вариант с полным наименованием мне тоже не нравится. Теоретически в наименовании может быть любой символ, который можно было бы использовать как разделитель. Вы все конечно можете подумать, что выдумываю лишнее, но я люблю, чтобы было всё максимально однозначно.
#43
by ADirks
Если ты возьмёшь ИТ.Группировать - то оптимизацией и ускорением ты не сможешь заняться :) Всё, что ты можешь сделать это: "При группировке возможно также подсчитывать суммы по группам справочников - для этого в списке модификаторов индекса нужно указать '&'. Если в таблице есть колонка с именем '<ИмяКолонкиСправочника>_Родитель', то родитель для элемента будет браться из этой колонки - это уменьшает количество обращений к базе, и заметно увеличивает производительность."
#45
by OTMOPO3OK
Да не, всего лишь маленькая библиотека для создания простеньких кросс-отчётов. Спасибо, с этим я ещё не разобрался. Мне нужно в перспективе, чтобы группы и элементы можно было отсортировать в алфавитном порядке или в обратном. Сделать это с использованием внутренних идентификаторов будет проблематично, мне кажется. Да это и не важно сейчас. Но тем не менее спасибо за участие.
#46
by Chum
Весь текст не читал, но: 1. Что мешает ТС использовать дерево, т.е. таблицы в таблицах? 2. Что мешает ТС, если не применять п.1, то добавить сортирующие колонки, например: уровень, родитель? имхо дерево решает все задачи, а там хоть засортируйся.
#47
by OTMOPO3OK
Наверное, ничто не мешает. Просто я не задумывался об этом. Спасибо, ваш комментарий ценен для меня. Я подумаю.
#48
by Mikeware
1. Используй нормальные инструменты, и будет тебе счастье. например, такое: 3. думаю, что не так уж проблематично - вторым ключевым полем первые буквы наименований. если я правильно понял задачу, ему неизвестен первоначально порядок столбцов сортировок.
#52
by OTMOPO3OK
Спасибо. Я тут подумал, что qryConsole конечно полезная вещь, я её обязательно изучу. Но сейчас уже многое сделано. Библиотечку эту я ж не просто так пишу, а для отчёта, который не спешно ваяю. Пожалуй, его я по старинке докончу. Ваш комментарий тоже ценен для меня. Изучу всесторенне.
#53
by Mikeware
С квериконсолью "неспешнописуемый" отчет не будет иметь никакого смысла (кроме разве что учебной цели). Быстрее сделать на консоли. хотя - каждый ССЗБ.
#54
by OTMOPO3OK
С одной стороны хочется, конечно, изучить что-то новое, удобное, красивое. Но для этого опять придётся стопятьсот часов с красными глазами просидеть. Спрашивается, нужно ли это сейчас, когда семёрка уже устарела?
#55
by Mikeware
да там, собственно, и изучать нефиг... всяко меньше времени надо, чтоб написать "универсальную библиотечку"
#57
by КонецЦикла
Добавился пример переделанного отчета 1c911.by/sites/default/files/user//files/primer_itz.rar
#58
by ADirks
Всё-таки наиболее дельный совет - от Майка. Надо кубики, значит берём кубики, зачем мудрить.
#59
by КонецЦикла
А я нечетал честно говоря Как правило нужен готовый отчет с минимумом настроек, как в макдаке (так любят некоторые руководители говорить)
#63
by OTMOPO3OK
Я с ИТЗ ещё не до конца разобрался, чего уж говорить про квериконсоль. Это надолго. Что ещё к этому всему добавить, если я только вчера догадался прикрутить gcomp чтобы он автоматически распаковывал обработку при сохранении, а до этого пару лет вручную текст модуля в файлик копировал, чтобы исходник нормально в git засовывать?
#65
by ADirks
Разберись с тем, про что Майк говорил, ну нафига велосипед заново конструировать? Лучше то не будет. И быстрее не будет.
#67
by ADirks
Нормальное положение программиста, ничего страшного. Это же оч.шорошо, что много нового.
#68
by Злопчинский
я вот вообще к мысли пришел. что не в 1с счастье... когда утрясутся все бури житейские - буду сидеть на голой пенсии, пить кисель да на солнце смотреть...
#69
by OTMOPO3OK
Выяснилось, что первоначальный вариант был ошибочный. Этот вроде рабочий. Единственное, что меня смущает — производительность. Вы наверное заметили в цикле по строкам таблицы выгрузку всей таблицы и фильтрацию всей таблицы:
#70
by OTMOPO3OK
Делал замеры. Этот метод выполняется 70% всего времени в отчёте за один день. Конечно это никуда не годится. Если же запустить отчёт за весь год, то думаю, он займёт 95% времени.
#76
by Mikeware
сводную таблицу с итогом по группам. задачка, вообще-то , давно решена нормальными способами, но ТС хочет изобрести скоростной трехколесный велосипед со взаимно ортогональными колесами разного диаметра, и цепной передачей от педалей к рулю... Почти изобрел, но жалуется на скорость...
#78
by OTMOPO3OK
Ты мне скажи, что плохого в том, что я изобретаю велосипед? Сейчас я понимаю, что всё уже давно изобретено. Но это всё ещё нужно запустить, а оно у меня пока не взлетает. Имею в виду твой метод с квериконсолью и пивоттэйблом. А ты ведь наверняка знаешь, какого это — долгое время не видеть результатов своего труда, когда ты готов почти на любые костыли и подпорки, чтобы только хоть как-нибудь заработало. Велосипед уже готов. Он медленно едет, но его, я уверен, можно ускорить. И я понимаю, что возможно мне не следовало его писать, что нужно было чуть подольше погуглить, найти твой метод и начать сразу с него. Но что уж теперь, выкидывать? Это был бы ещё более глупый поступок. Спасибо за ценную информацию о квериконсоли и т. д., но твои причитания мне уже наскучили.
#79
by monsterZE
я делал прайс с подсчетом колва элементов в группах и с разбегом цен от мин до макс.. без ИТЗ =) завтра свой трехколесный пригоню ;-)
#82
by Salimbek
У тебя развернут только один вид справочника. ТС же нужно несколько разновидностей разворачивать. Т.е. первый вид, допустим справочник магазинов с группами в виде регионов, второй вид: номенклатура, третий - еще какой-то вид справочников.
#85
by OTMOPO3OK
Прошу прощения. В код неправильный. Неправильно сортирует по второй и последующим колонкам. Ну и конечно очень медленный. Ну а вдруг я потом на bitbucket.com открою репозиторий. Хоть кому-нибудь может пригодиться для тривиальных вещей. Вероятность ненулевая. Я ещё не думал над оптимизацией запроса и последующей обработкой его результата. Возможно, удастся избавиться от лишних этапов. Так-то запрос вроде по некоторым колонкам возвращает то, что мне нужно, но потом я в таблицу добавляю ещё несколько группировок. А новые строки с итогами по по этим группировкам добавляю в конец таблицы, а потом её сортирую. По идее было бы неплохо подумать над тем, чтобы не сортировать таблицу из запроса, а вставлять новые строки прямо в правильные места. Но это уже потом. В любом случае сейчас я хочу это доделать всё-таки. Пригодится это или нет мне или кому-нибудь неважно. Просто хочу доделать.
#86
by Salimbek
А можешь хоть словами описать, что у тебя в развороте первой иерархии, что во второй, что в третьей?
#88
by OTMOPO3OK
В первой справочник «Номенклатура», во второй «Контрагенты», в третьей тупо строка. Да это и неважно в сущности, что у меня там. Какая вообще разница? Там что угодно может быть. Секс ради удовольствия. Мне нравится, когда что-то получается, пусть даже это на твой взгляд чепуха. Я вот когда это сделаю (а осталось немного), тогда уже буду думать, потратил я время зря или нет, и в будущем возможно освою твой мегасуперметод с квериконсолью.
#89
by Mikeware
твой метод требует очень много лишних сил и движений. по сути, ты пытаешьс сделать предпросчитанный куб. Т.е. то, что делает, скажем, ms analysis services. Средствами 1с - это долго и нерационально, и до конца (с разумной мерностью, и за вменяемое время) сделано не будет.
#90
by OTMOPO3OK
Так я же пишу простенькую библиотеку. Для простых случаев с относительно небольшим количеством измерений вполне подойдёт. Конечно, если удастся что-то сделать со скоростью. Вот я честно пытался твой метод использовать. Запустил пример, и он у меня не заработал. Прописал внутри загрузку 1CPP.dll, он заработал, но выдал ошибку, связанную vfoxsqlprovider. Скачал, установил, запустил, получил ошибку, связанную с metainfoчто-то. Поэтому я погрустнел и отложил до лучших времён.
#91
by uno-group
Все не читал но на вскидку создаем дубли всех колонок которые подлежат сортировке и в них пишем полный код и сортируем по этим колонкам.
#92
by OTMOPO3OK
Опять же прошу прощения. Код в правильный. Разве что процедура _кк_ОтфильтроватьТаблицу некорректно работала, но её код я не приводил. А всё дело в том, что после очередного рефакторинга этой процедуры, она регрессировала. Без юнит-тестирования очень плохо, оказывается. Видишь, какой прогресс. Благодаря этой задаче я освоил несколько вещей, полезных для разработки, даже если сама эта задача бессмысленна. А вот сейчас об юнит-тестировании в 1С задумался.
#93
by ADirks
Как пример практического применения можно скачать исходники 1С++ - там база юнит-тестов немаленькая.
#95
by OTMOPO3OK
Как смог, улучшил быстродействие. Что-то мне подсказывает, что можно ещё лучше, но на первых порах и так сойдёт:
#96
by OTMOPO3OK
Товарищи, я тут решил улучшить эту сортировку. Сделал её (с одним примечанием: она пока не работает с неопределёнными значениями в случае, если группировка с группами) гораздо более красивой и логичной. Но у меня возникла небольшая проблема. 1С говорит: «Недостаточно свободной оперативной памяти на этом компьютере». Это было бы логично, учитывая, что здесь использована рекурсия, но в сортируемой таблице всего 2к с лишним строк и всего четыре группировки, из которых всего лишь две первые с группами, остальные плоские. Как освобождать память в 1С 7.7, кто знает? Вот сижу уже час думаю, а в голову ничего не приходит. ////////////////////////////////////////////////////////////////////////////////
#97
by OTMOPO3OK
Предполагается, что этот вариант должен работать гораздо быстрее предыдущего. Если бы не нехватка памяти. Чего её не хватает? Табличка ведь маленькая. Ну, в общем вот так.
#98
by OTMOPO3OK
А, пардон, товарищи, этот код работает, оказывается. Просто я для второй группировки с группами не включил настройку "СГруппами". Единственное, что теперь нужно, чтобы он с неопределёнными значениями работал. Ну, это дело техники.
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- А можно в таблицу значений записать другую таблицу значений?
- v7: v7 : НДС при возврате
- v7: Что нужно чтоб подключить ККМ Меркурий 112F к 1с V7 Торговля + склад
- v7: v7.7 премещение элемента справочника
- v7: v8: v7: Кто-нибудь сумел скачать комплект отчетности за I квартал 2007 года
- Как таблицу значений значений превратить во временную таблицу SQL ?
- v7: можно ли использовать таблицу отчет как Экселевскую таблицу
- v7: 1С V7.7 в сети
- v7: 1C:V7 starter program (for SQL) - обнаружена ошибка
- v7: Выгрузить таблицу значений в таблицу
- v7: Перенос данных Бухгалтерия из v7 в v8
- v8: Как таблицу значений выгрузить на управляемую форму в таблицу значений?
В этой группе 1С
- 8.2 УФ Не вызывается событие Регулирование
- Каким документом делать проводку Дт03 Кт01
- Как в комплексной автоматизации при РАУЗ рассчитать себестоимость?
- Печать ценников на одном листе
- УФ Дерево значений, в строку установить картинку
- УТ11 Несколько видов цен на этикетке
- СКД, два набора, передача параметра
- Подскажите нормальную dll для отлавливания нажатия клавиши?
- УТ 11. Настройка рабочего стола
- Некорректное распределение проводок по счетам 60.1 и 60.2
- Как быстрее всего найти подчиненный документ по типу документов ?
- Резервное копирование УТ 11
- Управляемы формы программно добавить переключатель и привязать обработчик
- Получение значений полей формы
- V8: УТ11 - Согласование заказов клиента/продажи
- Проверка модуля не показывает ошибки!
- v8: Розница 2.0.8.8 постоянно создает новые рабочие места при каждом открытии смены
- Сильна ли визуально разница между разрешением 1200*800 и 1920*1200 на планшете?
- Изменить проводки в документах программно
- Зависит ли скалярное произведение векторов от их направления?