helpf.pro
Регистрация

Сортировка типа перечисление

bless18
16.05.2010 21:01Прочитано: 2037
Здравствуйте, подскажите, пожалуйста, как в табличной части сортировать поле, имеющее тип перечисление?
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
16.05.2010 22:20Ответ № 1
сортировка не реагирует на тип значения, она приводит все значения к строковым и сортирует по алфавиту
Пример сортировки в ТЧ товары - номенклатуры по возрастанию а суммы по убыванию
Код 1C v 8.х
 Товары.Сортировать("Номенклатура Возр,Сумма Убыв")    
bless18
17.05.2010 07:08Ответ № 2
У меня в ТЧ поле приоритет: высокий, средний, низкий
Необходимо отсортировать по возрастанию это поле..
E_Migachev
17.05.2010 09:33Ответ № 3
Ясно, путем обычной сортировки, получишь:
-Высокий
-Низкий
-Средний

тут нужно или переименовать текущие статусы и сделать:
1. Высокий
2. Средний
3. Низкий

или вводить еще одно невидимое поле, где
высокий -1
средний 2
низкий - 3
и сортировать его
bless18
17.05.2010 09:36Ответ № 4
Я ввела еще одно поле с именем Номер и пишу:
Код 1C v 8.х
 

Если СтрокаТабличнойЧасти.Приоритет = Перечисления.Приоритет.Высокий Тогда
СтрокаТабличнойЧасти.Номер = "1";
ИначеЕсли СтрокаТабличнойЧасти.Приоритет = Перечисления.Приоритет.Средний Тогда
СтрокаТабличнойЧасти.Номер = "2";
ИначеЕсли СтрокаТабличнойЧасти.Приоритет = Перечисления.Приоритет.Низкий Тогда
СтрокаТабличнойЧасти.Номер = "3";
КонецЕсли;

ТзВрем.Сортировать("Номер Возр");


Но ничего не происходит, все остается так же как и было
E_Migachev
17.05.2010 09:48Ответ № 5
покажи весь код
bless18
17.05.2010 10:01Ответ № 6
Вот
Код 1C v 8.х
 
Процедура ПриОткрытии()
ОбработкаОбъект.Пользователь = ПараметрыСеанса.ТекущийПользователь;
ОбработкаОбъект.ПолучательЗадачи = ПараметрыСеанса.ТекущийПользователь.Сотрудник;
ОбработкаОбъект.Отдел = ПараметрыСеанса.ТекущийПользователь.Сотрудник.Отдел;

ЭтотОбъект.Дата=КонецДня(ТекущаяДата());
ЭлементыФормы.Польз.Заголовок = ПараметрыСеанса.ТекущийПользователь;
ЭлементыФормы.Получ.Заголовок = ПараметрыСеанса.ТекущийПользователь.Сотрудник;
ЭлементыФормы.Отд.Заголовок = ПараметрыСеанса.ТекущийПользователь.Сотрудник.Отдел;

Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РаспределениеЗадачиСрезПоследних.ИсполнительЗадачи,
| РаспределениеЗадачиСрезПоследних.НаименованиеЗадачи,
| РаспределениеЗадачиСрезПоследних.Пользователь,
| РаспределениеЗадачиСрезПоследних.Приоритет,
| РаспределениеЗадачиСрезПоследних.ДатаВыполнения,
| РаспределениеЗадачиСрезПоследних.ДатаНачалаВыполнения
|ИЗ
| РегистрСведений.РаспределениеЗадачи.СрезПоследних(&Дата, ) КАК РаспределениеЗадачиСрезПоследних";
Запрос.УстановитьПараметр("Дата", КонецДня(ЭтотОбъект.Дата));
Результат = Запрос.Выполнить();
ТзВрем = Результат.Выгрузить();
ТзВрем.Колонки.Добавить("Номер");
ТзВрем.Колонки.Добавить("ПроцентОставшегосяВремени");
Для Каждого СтрокаРаспределениеЗадачи Из ТзВрем Цикл
СтрокаТабличнойЧасти = ЭтотОбъект.Пользователи.Добавить();
СтрокаТабличнойЧасти.ПользовательСистемы = СтрокаРаспределениеЗадачи.Пользователь;
СтрокаТабличнойЧасти.ТекущаяЗадача = СтрокаРаспределениеЗадачи.НаименованиеЗадачи;
СтрокаТабличнойЧасти.Приоритет = СтрокаРаспределениеЗадачи.Приоритет;
СтрокаТабличнойЧасти.ДатаНачалаВыполнения = СтрокаРаспределениеЗадачи.ДатаНачалаВыполнения;
СтрокаТабличнойЧасти.ДатаВыполненияПоПлану = СтрокаРаспределениеЗадачи.ДатаВыполнения;
СтрокаТабличнойЧасти.ИсполнительЗадачи = СтрокаРаспределениеЗадачи.ИсполнительЗадачи;

ДатаНачала = СтрокаРаспределениеЗадачи.ДатаНачалаВыполнения;
ДатаКонца = СтрокаРаспределениеЗадачи.ДатаВыполнения;

КоличествоДнейНаВыполнение = РазностьДат(ДатаКонца,ДатаНачала);
КоличествоДнейСоДняНачалаВыполнения = РазностьДат(ТекущаяДата(),ДатаНачала);
Если ТекущаяДата()>ДатаКонца тогда
СтрокаРаспределениеЗадачи.ПроцентОставшегосяВремени="100 %";
Иначе
СтрокаРаспределениеЗадачи.ПроцентОставшегосяВремени=Окр(Число(КоличествоДнейСоДняНачалаВыполнения / КоличествоДнейНаВыполнение) * 100, 2);
КонецЕсли;
СтрокаТабличнойЧасти.ПроцентОставшегосяВремени = Строка(СтрокаРаспределениеЗадачи.ПроцентОставшегосяВремени)+ " ";

Если СтрокаТабличнойЧасти.Приоритет = Перечисления.Приоритет.Высокий Тогда
СтрокаТабличнойЧасти.Номер = "1";
ИначеЕсли СтрокаТабличнойЧасти.Приоритет = Перечисления.Приоритет.Средний Тогда
СтрокаТабличнойЧасти.Номер = "2";
ИначеЕсли СтрокаТабличнойЧасти.Приоритет = Перечисления.Приоритет.Низкий Тогда
СтрокаТабличнойЧасти.Номер = "3";
КонецЕсли;
//ТзВрем.Сортировать("ДатаВыполнения Возр");
ТзВрем.Сортировать("Номер Возр");
//ТзВрем.Сортировать("Приоритет Возр");

КонецЦикла;

E_Migachev
17.05.2010 10:17Ответ № 7
сортировка должна быть после цикла
Код 1C v 8.х
 //ТзВрем.Сортировать("ДатаВыполнения Возр");
//ТзВрем.Сортировать("Приоритет Возр");
КонецЦикла;
ТзВрем.Сортировать("Номер Возр");
bless18
17.05.2010 10:35Ответ № 8
Не сортирует, а Номер должен быть типа строка или число?
E_Migachev
17.05.2010 10:57Ответ № 9
опс... так СтрокаТабличнойЧасти.Номер это в ТабПоле Пользователи,
соответственно нужно Пользователи.Сортировать("Номер Возр");
bless18
17.05.2010 13:10Ответ № 10
Ой, спасибо вам!
Заработало! )
bless18
17.05.2010 13:38Ответ № 11
Вопрос закрыт!
Подсказка:Вы можете добавить любую страничку в Социальные закладки щелкнув по значку соцсетей (в вверху)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.