Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
10 мая 2024, 18:19

Сортировка

Автор sail, 27 дек 2010, 22:46

0 Пользователей и 1 гость просматривают эту тему.

sail

Подскажите, пожалуйста.
Я сделала печатную форму, которая содержит № п/п/, ФИО сотрудника, Должность, Подразделение, Оклад. Как сделать так, чтобы данные в нее выводились:
а) по подразделениям в алфавитном порядке (Администрация, Бибилиотека, ...)
б) по возрастанию окладов
Заранее спасибо.
P.S. Только, если можно, поскорее надо.

DenPlus

Когда делаете обход по справочнику, то не выводите результат в таблицу (Таб.вывестиСекцию("строка")), а заполняйте, ранее созданную ТаблицуЗначений (ТЗ.НоваяСтрока()).

После обхода справочника сделайте ТЗ.Сортировать("Подразделение, Оклад"). Далее уже цикл по ТЗ и в этом цикле: Таб.вывестиСекцию("строка").

Цикл по ТЗ (как вариант):

Для нн = 1 По ТЗ.КоличествоСтрок() Цикл
ТЗ.ПолучитьСтрокуПоНомеру(нн);
Подразделение = ТЗ.Подразделение;
Оклад = ТЗ.Оклад;
...
...
КонецЦикла;

sail

Мой код таков
   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   ном=0;
       Запрос = СоздатьОбъект("Запрос"); 
         ТекстЗапроса = "
      |Док = Справочник.Сотрудники.ТекущийЭлемент;
      |Наим  = Справочник.Сотрудники.Наименование;
      |Дол = Справочник.Сотрудники.Должность;
      |Подр  = Справочник.Сотрудники.Подразделение;
      |Окл = Справочник.Сотрудники.Оклад; 
      |Группировка  Подр упорядочить по Подр.Наименование;
       |";          
Запрос.Выполнить(ТекстЗапроса) ;
Запрос.Выгрузить(ТЗ,"Док,Наим,Дол,Подр,Окл"); 
ТЗ.ВыбратьСтроки();
   
   Если Первый = 1 Тогда    //по подразделению
   Сортировка = "По подразделениям в алфавитном порядке";
        ТЗ.Сортировать("Подр");
   ИначеЕсли Первый = 2 Тогда    //по окладу
   Сортировка = "По возрастанию окладов";
      ТЗ.Сортировать("Окл");
   КонецЕсли;   
   
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Реестр");
   Пока ТЗ.ПолучитьСтроку()=1 Цикл
      ном=ном+1;
   Таб.ВывестиСекцию("Строка");
   КонецЦикла;

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

DenPlus

Как вариант можно и так. А в чем проблема? В любом случае, вы по условию сортируете таблицу значений и в цикле по ней выводите строку в печатную форму.

DenPlus

Кстати

Запрос.Выгрузить(ТЗ,"Док,Наим,Дол,Подр,Окл");

Это конечно не канает.

Синтаксис:
Выгрузить(<ТаблЗнач>,<Флаг>,<Итоги>)

Вашем случае:
Выгрузить(ТЗ,0,0)

Ну и это лишнее (поскольку все равно потом работать с ТЗ):
|Группировка  Подр упорядочить по Подр.Наименование;



sail

Но мне выдает только одного сотрудника по каждому подразделению, но ведь их там много. В этом проблема.

prog1c7.7

1.//вместо
Запрос.Выполнить(ТекстЗапроса) ;
Запрос.Выгрузить(ТЗ,"Док,Наим,Дол,Подр,Окл"); 
//сделай
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Запрос.Выгрузить(ТЗ, 1);

2.//СНАЧАЛА ДЕЛАЕШЬ !!!
Если Первый = 1 Тогда    //по подразделению
   Сортировка = "По подразделениям в алфавитном порядке";
        ТЗ.Сортировать("Подр");
   ИначеЕсли Первый = 2 Тогда    //по окладу
   Сортировка = "По возрастанию окладов";
      ТЗ.Сортировать("Окл");
   КонецЕсли;   
// А УЖЕ ПОТОМ
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Реестр");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
      ном=ном+1;
Таб.ВывестиСекцию("Строка");
КонецЦикла;


DenPlus

Цитата: sail от 28 дек 2010, 00:18
Но мне выдает только одного сотрудника по каждому подразделению, но ведь их там много. В этом проблема.
Группировка нужна. Имел ввиду упорядочить по лишнее. Ведь потом все равно сортируете ТЗ в зависимости от настроек формы.

prog1c7.7

Конечно у вас будет по одному сотруднику.(Только заметил, извиняюсь)
у вас же группировка только по должностям, вот он и выводит вам ТОЛЬКО
сотрудников у которых различаются записи в реквизите должность,
надо группировку по сотрудникам делать:

|Группировка  Док упорядочить по Док.Наименование;

а по должностям не надо вообще,
т.к. потом все равно сортируете
ТЗ.Сортировать("Подр");

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск