![]() |
|
v7: Нестандартная сортировка? | ☑ | ||
---|---|---|---|---|
0
Ночной Эльф
09.08.12
✎
09:38
|
Всем доброго времени суток.
Собственно имеется запрос. Запрос = СоздатьОбъект("Запрос"); ТабДок = СоздатьОбъект("ТаблицаЗначений"); ТабДок.НоваяКолонка("НомерДок"); ТабДок.НоваяКолонка("Ширина"); ТабДок.НоваяКолонка("Длина"); ТабДок.НоваяКолонка("Контрагент"); ТабДок.НоваяКолонка("ФактДатаВыполнения"); ТабДок.НоваяКолонка("ДатаВыполнения"); ТабДок.НоваяКолонка("СрочноеВремя"); ТабДок.НоваяКолонка("Номенклатура"); ТабДок.НоваяКолонка("ВидТипаПечати"); ТабДок.НоваяКолонка("ФактДатаРаботы"); ТабДок.НоваяКолонка("ВремяВыполнения"); ТабДок.НоваяКолонка("Количество"); ТабДок.НоваяКолонка("Разрешение180"); ТабДок.НоваяКолонка("Разрешение360"); ТабДок.НоваяКолонка("Менеджер"); ТабДок.НоваяКолонка("ВидОперации"); ТабДок.НоваяКолонка("ЗаданиеНаИзготовление"); ТабДок.НоваяКолонка("ДатаДок"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |НомерДок = Документ.ЗаданиеНаИзготовление.НомерДок; |Ширина = Документ.ЗаданиеНаИзготовление.Ширина; |Длина = Документ.ЗаданиеНаИзготовление.Длина; |Контрагент = Документ.ЗаданиеНаИзготовление.Контрагент; |ФактДатаВыполнения = Документ.ЗаданиеНаИзготовление.ФактДатаВыполнения; |ДатаВыполнения = Документ.ЗаданиеНаИзготовление.ДатаВыполнения; |СрочноеВремя = Документ.ЗаданиеНаИзготовление.СрочноеВремя; //|ПлановоеВремяВыполнения = Документ.ЗаданиеНаИзготовление.ПлановоеВремяВыполнения; |Номенклатура = Документ.ЗаданиеНаИзготовление.Номенклатура; |ВидТипаПечати = Документ.ЗаданиеНаИзготовление.ВидТипаПечати; |ФактДатаРаботы = Документ.ЗаданиеНаИзготовление.ФактДатаРаботы; |ВремяВыполнения = Документ.ЗаданиеНаИзготовление.ВремяВыполнения; |Количество = Документ.ЗаданиеНаИзготовление.Количество; |Разрешение180 = Документ.ЗаданиеНаИзготовление.Разрешение180; |Разрешение360 = Документ.ЗаданиеНаИзготовление.Разрешение360; |Менеджер = Документ.ЗаданиеНаИзготовление.Автор; |ВидОперации = Документ.ЗаданиеНаИзготовление.ВидОперации; |ЗаданиеНаИзготовление = Документ.ЗаданиеНаИзготовление.ТекущийДокумент; |ДатаДок = Документ.ЗаданиеНаИзготовление.ДатаДок; //|НомерСтроки= Документ.ЗаданиеНаИзготовление.НомерСтроки; //|Функция ФункцияДляСортировки = Сумма(ВидТипаПечати); |Группировка ЗаданиеНаИзготовление упорядочить по ЗаданиеНаИзготовление.ДатаВыполнения; //|Группировка НомерСтроки упорядочить по ФункцияДляСортировки; |Группировка СтрокаДокумента; //|Условие(ПустоеЗначение(ФактДатаРаботы) = 1); |Условие(ВидОперации = Перечисление.ВидыОперацийЗаданиеНаИзготовление.ЗаданиеНаИзготовление); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Пока Запрос.Группировка(1) = 1 Цикл Пока Запрос.Группировка(2) = 1 Цикл ТабДок.НоваяСтрока(); ТабДок.НомерДок = Запрос.НомерДок; ТабДок.Ширина = Запрос.Ширина; ТабДок.Длина = Запрос.Длина; ТабДок.Контрагент = Запрос.Контрагент; ТабДок.ФактДатаВыполнения = Запрос.ФактДатаВыполнения; ТабДок.ДатаВыполнения = Запрос.ДатаВыполнения; ТабДок.СрочноеВремя = Запрос.СрочноеВремя; ТабДок.Номенклатура = Запрос.Номенклатура; ТабДок.ВидТипаПечати = Запрос.ВидТипаПечати; ТабДок.ФактДатаРаботы = Запрос.ФактДатаРаботы; ТабДок.ВремяВыполнения = Запрос.ВремяВыполнения; ТабДок.Количество = Запрос.Количество; ТабДок.Разрешение180 = Запрос.Разрешение180; ТабДок.Разрешение360 = Запрос.Разрешение360; ТабДок.Менеджер = Запрос.Менеджер; ТабДок.ВидОперации = Запрос.ВидОперации; ТабДок.ЗаданиеНаИзготовление = Запрос.ЗаданиеНаИзготовление; ТабДок.ДатаДок = Запрос.ДатаДок; // Таб.ВывестиСекцию("тест"); КонецЦикла; КонецЦикла; ТабДок.Сортировать("-ДатаВыполнения,-СрочноеВремя,ВидТипаПечати"); В документе по которому осуществляется запрос имеется реквизит срочное время выполнения, если необходимо выполнить заказ срочно то это время проставляется и по нему происходит сортировка в массиве ТабДок. За каждый день может быть таких срочных заказов от 2 до 3. Но дело в том что происходит сортировка так что первый на дню становится тот срочный заказ время которого больше к примеру Задание на изготовление ИН00001838 (31.07.12) 01.08.12 16:00 Задание на изготовление ИН00001836 (31.07.12) 01.08.12 15:00 Задание на изготовление ИН00001854 (31.07.12) 01.08.12 : Задание на изготовление ИН00001846 (31.07.12) 01.08.12 : Задание на изготовление ИН00001864 (01.08.12) 01.08.12 : Дальше идет пустое время, не срочные заказы. сами понимаете, что не логично получается первый выполняется заказ время на которое отводится больше чем на следующий срочный заказ, если брать группировку в другую сторону то срочные заказы становятся последними на дню, как сделать так чтобы срочные заказы с меньшим временем шли первее срочных заказов с большим временем выполнения, но после них шли не срочные заказы с пустым временем? |
|||
1
Wobland
09.08.12
✎
09:40
|
добавить некое поле Срочность и сортировать по двум? с семёркой не дружу
|
|||
2
НикДляЗапросов
09.08.12
✎
09:40
|
Конечно по двум
|
|||
3
KUBIK
09.08.12
✎
09:43
|
(0) Запрос.Выгрузить(ТабДок,1,0) не проще было бы?
|
|||
4
Boroda
09.08.12
✎
09:57
|
Поскольку ТабДок заполняешь "группировкой", то можно попробовать следующее:
Добавить новую колонку, во время записи в тз анализировать Срочное Время пустое или нет. Если пусто ставить 1 иначе 0. Далее добавить это поле в сортировку. Ну и "-" убрать с "СрочноеВремя". |
|||
5
Boroda
09.08.12
✎
10:36
|
А еще лучше вот так:
Добавить в текст запроса: "|Без итогов" и следующие 2 строчки: |Функция Сорт0 = Сумма(1); |Функция Сорт1 = Сумма(1) когда (ПустоеЗначение(СрочноеВремя)=1); далее выгрузить как в (3)в тз и добавить в сортировку тз "Сорт1" :) |
|||
6
0xFFFFFF
09.08.12
✎
10:38
|
Эх семерочка, семерочка. Хоцца плакать...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |