Помогите с сортировкой!
08.06.2005
17:41
#1
Написал внешнюю обработку, выбирает сотрудников по их дате рождения (Кадры желают знать когда, кого и главное где поздравить), но у меня не как не получается отсортировать выбраных по дате Рождения.
Посоветуйте плиз, я уже пару дней бьюсь и все без успешно.
Посоветуйте плиз, я уже пару дней бьюсь и все без успешно.
08.06.2005
18:02
#2
Код покажи.
Такое впечатление, что у тебя дата записывается как строка, отсюда глюки.
Такое впечатление, что у тебя дата записывается как строка, отсюда глюки.
08.06.2005
18:03
#3
Данные в обработке выбираешь в таблицу значений, а потом применяешь метод Сортировать("ПолеСортировки"), при чем можешь сортировать и по сложному выражению, указывая поля через запятую, например: сотрудники, родившиеся в один и тот же день -по алфавиту.
08.06.2005
18:29
#4
"Вот код. выберает и показывает в таблице как надо но только не в том порядке.
//*******************************************
Процедура Сформировать()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Список");
Таб.ВывестиСекцию("Шапка");
СпрС = СоздатьОбъект("Справочник.Сотрудники");
Нпп = 0;
СпрС.ВыбратьЭлементы();
Пока СпрС.ПолучитьЭлемент()=1 Цикл
ДатаРож = СпрС.ДатаРождения;
Если ДатаМесяц(ДатаРож) >= ДатаМесяц(НачДата) Тогда
Если ДатаМесяц(ДатаРож) <= ДатаМесяц(КонДата) Тогда
Если ДатаЧисло(ДатаРож) >= ДатаЧисло(НачДата) Тогда
Если ДатаЧисло(ДатаРож) <= ДатаЧисло(КонДата) Тогда
ЛФИО = СокрЛП(СпрС.Фамилия)+ " " +СокрП(СпрС.Имя)+ " " +СокрП(СпрС.Отчество);
ДатаР = СпрС.ДатаРождения;
Подр = СпрС.Подразделение;
Долж = СпрС.Должность;
Нпп = Нпп + 1;
Таб.ВывестиСекцию("Строка");
Конецесли;
Конецесли;
Конецесли;
Конецесли;
Конеццикла;
Таб.ТолькоПросмотр(1);
Таб.Опции(0,0,0,0,"Список сотрудников");
Таб.ПараметрыСтраницы(,,,0,0,0,0,0,0);
Таб.Показать("Список сотрудников");
КонецПроцедуры
Процедура ПриОткрытии()
НачДата = НачМесяца(РабочаяДата());
КонДата = КонМесяца(РабочаяДата());
Конецпроцедуры
"
//*******************************************
Процедура Сформировать()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Список");
Таб.ВывестиСекцию("Шапка");
СпрС = СоздатьОбъект("Справочник.Сотрудники");
Нпп = 0;
СпрС.ВыбратьЭлементы();
Пока СпрС.ПолучитьЭлемент()=1 Цикл
ДатаРож = СпрС.ДатаРождения;
Если ДатаМесяц(ДатаРож) >= ДатаМесяц(НачДата) Тогда
Если ДатаМесяц(ДатаРож) <= ДатаМесяц(КонДата) Тогда
Если ДатаЧисло(ДатаРож) >= ДатаЧисло(НачДата) Тогда
Если ДатаЧисло(ДатаРож) <= ДатаЧисло(КонДата) Тогда
ЛФИО = СокрЛП(СпрС.Фамилия)+ " " +СокрП(СпрС.Имя)+ " " +СокрП(СпрС.Отчество);
ДатаР = СпрС.ДатаРождения;
Подр = СпрС.Подразделение;
Долж = СпрС.Должность;
Нпп = Нпп + 1;
Таб.ВывестиСекцию("Строка");
Конецесли;
Конецесли;
Конецесли;
Конецесли;
Конеццикла;
Таб.ТолькоПросмотр(1);
Таб.Опции(0,0,0,0,"Список сотрудников");
Таб.ПараметрыСтраницы(,,,0,0,0,0,0,0);
Таб.Показать("Список сотрудников");
КонецПроцедуры
Процедура ПриОткрытии()
НачДата = НачМесяца(РабочаяДата());
КонДата = КонМесяца(РабочаяДата());
Конецпроцедуры
"
09.06.2005
10:10
#5
"Здесь сортировку тебе не сделать.
Есть 2 варианта.
Либо выгружай в таблицу значений и сортируй там,
либо делай запрос с сортировкой по датам.
Примерно так:
ТекстЗапроса=
"Сотрудник = Справочник.Сотрудники.ТекущийЭлемент();
|ДатаРождения = Справочник.Сотрудники.ДатаРождения;
|Группировка ДатаРождения Упорядочить по ДатаРождения;
|Группировка Сотрудник Упорядочить по Сотрудник.Фамилия;
|Условие ((ДатаМесяц(ДатаРож) >= ДатаМесяц(НачДата)) и (ДатаМесяц(ДатаРож) <= КонДата)) и (ДатаЧисло(ДатаРож) >= ДатаЧисло(НачДата)) и (ДатаЧисло(ДатаРож)<=ДатаЧисло(КонДата)));";
Запрос = СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка("ДатаРождения") = 1 Цикл
Пока Запрос.Группировка("Сотрудник") = 1 Цикл
ПечСотрудник=Запрос.Сотрудник;
// печать строки
КонецЦикла;
КонецЦикла;
"
Есть 2 варианта.
Либо выгружай в таблицу значений и сортируй там,
либо делай запрос с сортировкой по датам.
Примерно так:
ТекстЗапроса=
"Сотрудник = Справочник.Сотрудники.ТекущийЭлемент();
|ДатаРождения = Справочник.Сотрудники.ДатаРождения;
|Группировка ДатаРождения Упорядочить по ДатаРождения;
|Группировка Сотрудник Упорядочить по Сотрудник.Фамилия;
|Условие ((ДатаМесяц(ДатаРож) >= ДатаМесяц(НачДата)) и (ДатаМесяц(ДатаРож) <= КонДата)) и (ДатаЧисло(ДатаРож) >= ДатаЧисло(НачДата)) и (ДатаЧисло(ДатаРож)<=ДатаЧисло(КонДата)));";
Запрос = СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка("ДатаРождения") = 1 Цикл
Пока Запрос.Группировка("Сотрудник") = 1 Цикл
ПечСотрудник=Запрос.Сотрудник;
// печать строки
КонецЦикла;
КонецЦикла;
"
09.06.2005
18:01
#8
Писал без проверки, чтобы ясен был смысл, поэтому гарантии нет.
Если выгрузишь в таблицу значений, то
используй Сортировать(<Колонки>) (см. Синтакс-Помощник)
В таблицу значений пиши дополнительный столбец со значением
ДатаМесяц(Запрос.ДатаРож)*100+ДатаЧисло(Запрос.ДатаРож))
и сортируй по нему.
Если выгрузишь в таблицу значений, то
используй Сортировать(<Колонки>) (см. Синтакс-Помощник)
В таблицу значений пиши дополнительный столбец со значением
ДатаМесяц(Запрос.ДатаРож)*100+ДатаЧисло(Запрос.ДатаРож))
и сортируй по нему.
Читают тему
(гостей: 1)