Помогите с сортировкой!

Новая тема
Написал внешнюю обработку, выбирает сотрудников по их дате рождения (Кадры желают знать когда, кого и главное где поздравить), но у меня не как не получается отсортировать выбраных по дате Рождения.

Посоветуйте плиз, я уже пару дней бьюсь и все без успешно.
Код покажи.

Такое впечатление, что у тебя дата записывается как строка, отсюда глюки.
Данные в обработке выбираешь в таблицу значений, а потом применяешь метод Сортировать("ПолеСортировки"), при чем можешь сортировать и по сложному выражению, указывая поля через запятую, например: сотрудники, родившиеся в один и тот же день -по алфавиту.
"Вот код. выберает и показывает в таблице как надо но только не в том порядке.

//*******************************************



Процедура Сформировать()

Таб = СоздатьОбъект("Таблица");

Таб.ИсходнаяТаблица("Список");

Таб.ВывестиСекцию("Шапка");

СпрС = СоздатьОбъект("Справочник.Сотрудники");

   Нпп = 0;

СпрС.ВыбратьЭлементы();

  Пока СпрС.ПолучитьЭлемент()=1 Цикл

ДатаРож = СпрС.ДатаРождения;

Если ДатаМесяц(ДатаРож) >= ДатаМесяц(НачДата) Тогда

Если ДатаМесяц(ДатаРож) <= ДатаМесяц(КонДата) Тогда

Если ДатаЧисло(ДатаРож) >= ДатаЧисло(НачДата) Тогда

Если ДатаЧисло(ДатаРож) <= ДатаЧисло(КонДата) Тогда

ЛФИО = СокрЛП(СпрС.Фамилия)+ " " +СокрП(СпрС.Имя)+ " " +СокрП(СпрС.Отчество);

ДатаР = СпрС.ДатаРождения;

Подр = СпрС.Подразделение;

Долж = СпрС.Должность;            

Нпп = Нпп + 1;

Таб.ВывестиСекцию("Строка");

              Конецесли;

Конецесли;

Конецесли;

Конецесли;

Конеццикла;

Таб.ТолькоПросмотр(1);

Таб.Опции(0,0,0,0,"Список сотрудников");

Таб.ПараметрыСтраницы(,,,0,0,0,0,0,0);

Таб.Показать("Список сотрудников");

КонецПроцедуры

Процедура ПриОткрытии()

НачДата =  НачМесяца(РабочаяДата());

КонДата =  КонМесяца(РабочаяДата());

Конецпроцедуры  



"
"Здесь сортировку тебе не сделать.

Есть 2 варианта.

Либо выгружай в таблицу значений и сортируй там,

либо делай запрос с сортировкой по датам.



Примерно так:



ТекстЗапроса=

"Сотрудник = Справочник.Сотрудники.ТекущийЭлемент();

|ДатаРождения = Справочник.Сотрудники.ДатаРождения;

|Группировка ДатаРождения Упорядочить по ДатаРождения;

|Группировка Сотрудник Упорядочить по Сотрудник.Фамилия;

|Условие ((ДатаМесяц(ДатаРож) >= ДатаМесяц(НачДата)) и (ДатаМесяц(ДатаРож) <= КонДата)) и (ДатаЧисло(ДатаРож) >= ДатаЧисло(НачДата)) и (ДатаЧисло(ДатаРож)<=ДатаЧисло(КонДата)));";



Запрос = СоздатьОбъект("Запрос");

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

Возврат;

КонецЕсли;



Пока Запрос.Группировка("ДатаРождения") = 1 Цикл

Пока Запрос.Группировка("Сотрудник") = 1 Цикл

ПечСотрудник=Запрос.Сотрудник;

// печать строки

КонецЦикла;

КонецЦикла;







"
ИМХО, запрос лучше, когда в справочнике большое число элементов.
Как ты написал так не получилось!

Ну выгрузить разберусь а как там сортировать?
Писал без проверки, чтобы ясен был смысл, поэтому гарантии нет.

Если выгрузишь в таблицу значений, то

используй Сортировать(<Колонки>) (см. Синтакс-Помощник)



В таблицу значений пиши дополнительный столбец со значением

ДатаМесяц(Запрос.ДатаРож)*100+ДатаЧисло(Запрос.ДатаРож))

и сортируй по нему.
Читают тему
(гостей: 1)

Быстрый переход