Имя: Пароль:
1C
1C 7.7
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
Эх семерочка, семерочка. Хоцца плакать...
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс