Помогите отсортировать по месяцам в ЗиК

1. stalker-vn 13 26.10.07 14:33 Сейчас в теме
Есть список сотрудников с датами рождений, отсортированный по подразделениям (сделано в запросе). нужно еще в каждом подразделении отсортировать по месяцам.
Кто знает как, помогите?

Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос

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

Пока Запрос.Группировка(2) = 1 Цикл
Таб.ВывестиСекцию("НомерКод");
КонецЦикла;
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры



Процедура ПриОткрытии()
ВыбНачПериода = НачМесяца(РабочаяДата());
ВыбКонПериода = КонМесяца(РабочаяДата());

КонецПроцедуры
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. sashulyT 201 26.10.07 16:26 Сейчас в теме
Сделай так:
Код
|Группировка Подразделение; 
|Группировка ДатаРожд; 
|Группировка Наименование; 


Пока Запрос.Группировка(1) = 1 Цикл 
        Таб.ВывестиСекцию("НаимПодразделения"); 

        Пока Запрос.Группировка(2) = 1 Цикл 
              Пока Запрос.Группировка(3) = 1 Цикл 
                      Таб.ВывестиСекцию("НомерКод"); 
              КонецЦикла; 
        КонецЦикла; 
КонецЦикла; 
Показать полностью
7. stalker-vn 13 26.10.07 17:21 Сейчас в теме
А тут не поможешь с кодом? Вроде бы все выводит, но не совсем верно. Что-то с циклом, только не пойму где.
Выводиться ошибка:"Значение не представляет агрегатный объект (выбран)".
В каждое последующее подразделение добавляются предыдущие сотрудники + новые (которые должны быть) и так дальше (как снежный ком). Посмотри пожалуйста.

Процедура Флаг()
Д=?(Все=1,0,1);
А=?(ВсеПодразделения=1,0,1);
Форма.ПР.Доступность(А);
Форма.МР.Доступность(Д);
КонецПроцедуры
//__________________________________________________________­__//
Процедура ПриОткрытии()
//МР = СоздатьОбъект("СписокЗначений");
МР.ДобавитьЗначение(1, "Январь");
МР.ДобавитьЗначение(2, "Февраль");
МР.ДобавитьЗначение(3, "Март");
МР.ДобавитьЗначение(4, "Апрель");
МР.ДобавитьЗначение(5, "Май");
МР.ДобавитьЗначение(6, "Июнь");
МР.ДобавитьЗначение(7, "Июль");
МР.ДобавитьЗначение(8, "Август");
МР.ДобавитьЗначение(9, "Сентябрь");
МР.ДобавитьЗначение(10, "Октябрь");
МР.ДобавитьЗначение(11, "Ноябрь");
МР.ДобавитьЗначение(12, "Декабрь");
Все=1;
Флаг();
КонецПроцедуры


//__________________________________________________________­__//
Процедура Сформировать()
База=СоздатьОбъект("ТаблицаЗначений");
База.НоваяКолонка("Ном","Число",4,,"№ п/п",4,,2);
База.НоваяКолонка("Имя",,,,"Сотрудник",15,,1);
База.НоваяКолонка("Должность",,,,"Должность",15,,1);
База.НоваяКолонка("День","Дата",,,"Дата рожд.",10,,);
База.НоваяКолонка("Мес","Число",3,,"Месяц",4,,2);
База.НоваяКолонка("Знак");
База.НоваяКолонка("Адрес",,,,"Адрес",15,,1);
База.НоваяКолонка("Подразделение",,,,"Подразделение",15,,1);
//База.НоваяКолонка("Подраздел");
База.НоваяКолонка("Телефон",,,,"Телефон",15,,1);

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
//
СпрСотрудники=СоздатьОбъект("Справочник.Сотрудники");
СпрПодр = СоздатьОбъект("Справочник.Подразделения");
СпрСотрудники.ИспользоватьДату(ТекущаяДата());

СпрПодр.ВыбратьЭлементы();
Пока СпрПодр.ПолучитьЭлемент()=1 Цикл
Если СпрПодр.ТекущийЭлемент().ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
Если ПустоеЗначение(ВыбПодразделения)=1 Тогда
Подр=СпрПодр.ТекущийЭлемент();
Иначе
Подр=ВыбПодразделения;
КонецЕсли;
Таб.ВывестиСекцию("НаимПодразделения");

СпрСотрудники.ВыбратьЭлементы();
Пока СпрСотрудники.ПолучитьЭлемент()=1 Цикл
Если НЕ (СпрСотрудники.ТекущийЭлемент().СостояниеФизЛица.Получить(ВыбДата)= Перечисление.СостояниеФизЛица.СотрудникОсновной) тогда
продолжить;
КонецЕсли;

Если СпрСотрудники.ТекущийЭлемент().ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;

Если СпрСотрудники.ТекущийЭлемент().Подразделение.Получить(РабочаяДата())<>Подр Тогда
Продолжить;
КонецЕсли;

Стр="";
База.НоваяСтрока();
База.Ном=База.НомерСтроки;
База.Имя=СпрСотрудники.ТекущийЭлемент();
База.Должность=СпрСотрудники.Должность;
База.Адрес=СпрСотрудники.АдресФакт;
База.День=СпрСотрудники.ДатаРождения;
База.Мес=ДатаМесяц(СпрСотрудники.ДатаРождения);
База.Подразделение=СпрСотрудники.Подразделение;
База.Телефон=СпрСотрудники.Телефон;
КонецЦикла;
База.Сортировать("5+,2+,3+");

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


Если Форма.МР.Доступность()=1 Тогда
МойМесяц="";
МР.ПолучитьЗначение(МР.ТекущаяСтрока(),МойМесяц);
Если Мес=МойМесяц Тогда
Таб.ВывестиСекцию("Строка_1");
КонецЕсли;
Иначе
Таб.ВывестиСекцию("Строка_1");
КонецЕсли;
СчетМесяца=База.Мес;
КонецЦикла;

Если ПустоеЗначение(ВыбПодразделения)=0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;

Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.ПараметрыСтраницы(1,100,);
Таб.Показать("Таблица","");
КонецПроцедуры
3. stalker-vn 13 26.10.07 16:36 Сейчас в теме
Не получается. Нужно в каждом подразделениии вставить секции месяца и отсортировать по месяцам.
Кто знает помоготе плиз...
4. sashulyT 201 26.10.07 16:48 Сейчас в теме
Про месяц я пропустил.
Тогда надо выгрузить резкльтат в ТЗ, добавить колонку месяц, отсортировать по ней и вывести на печать
5. stalker-vn 13 26.10.07 16:53 Сейчас в теме
А не подскажешь как? Я в коде не силен. Очень надо. Плиз.
6. sashulyT 201 26.10.07 17:02 Сейчас в теме
если в двух словах:
Код
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.Загрузить(Запрос);

ТЗ.НоваяКолонка("Месяц");

ТЗ.ВЫбратьСтроки();
Пока ТЗ.ПолучитьСТроку() цикл
       ТЗ.Месяц = ДатаМесяц(ТЗ.ДатаРожд);
КонецЦикла;
ТЗ.Сортировать("Подразделение, месяц,Наимненование");

ТЗ.ВыбратьСТроки();
Пока ТЗ.ПолучитьСТроку()=1 ЦИКЛ
       //тут чуть сложнее, надо отследить что это уже другое подразделение, другой месяц вывести заголок
       Таб.ВывестиСекцию("НомерКод_новый"); 

конецЦикла;

Показать полностью



это на вскидку, даже без проверки


п.с. подожди мож кто предложит другой вариант
8. sashulyT 201 26.10.07 17:24 Сейчас в теме
В какой строке у тебя выводится это сообщение?
9. stalker-vn 13 26.10.07 17:27 Сейчас в теме
Когда запускаешиь на обработку. А именно в какой не знаю.
10. sashulyT 201 26.10.07 17:34 Сейчас в теме
Скопируй тескт ошибки
11. stalker-vn 13 26.10.07 17:44 Сейчас в теме
Значение не представляет агрегатный объект (выбран)



Прикрепленные файлы:
Отчет.rar
12. stalker-vn 13 26.10.07 17:49 Сейчас в теме
Ошибка вылетает по кнопке "Сформировать". Там прикреплен сам отчет.
13. sashulyT 201 26.10.07 17:50 Сейчас в теме
В шапке печатной формы

?(Подразделение.выбран()=1,"подразделение: "+Подразделение," общий спиосок по предприятию")

нет такой функции Выбран() используй ПустоеЗначение()
14. stalker-vn 13 26.10.07 17:58 Сейчас в теме
А с циклом что делать. Подскажи пожалуйста.
15. sashulyT 201 26.10.07 18:00 Сейчас в теме
А с циклом у тебя что?





п.с. усе меня не будет, до понедельника
16. stalker-vn 13 29.10.07 08:37 Сейчас в теме
Привет! Это опять я. Помоги пожалуйста с циклом разобраться.
Когда делаешь отчет по всем подразделениям, то сотрудники из предыдущего подразделения поподают в следующее и так далее. В конце получается, что в последнем подразделении оказываются все сотрудники. А когда делаешь по одному подразделению, то все впорядке. Посмотри пожалуйста, что можно сделать.
17. sashulyT 201 29.10.07 09:18 Сейчас в теме
Таблицу База кто бкдут чистить, сделай так:

Код
Пока СпрПодр.ПолучитьЭлемент()=1 Цикл
       База.УдалитьСТроки();
//все что у тебя идет
.....
.....

КонецЦикла;



Показать полностью
18. stalker-vn 13 29.10.07 09:29 Сейчас в теме
Спасибо ОГРОМНЕЙШЕЕ!!!!! Выручил.
19. Just 3 29.10.07 10:08 Сейчас в теме
У тебя повтор из-за цикла перебора подразделения, (вообще довольно неправильно сделано, но для начала пойдет), Ты когда перебор подразд делаешь, тутже делаешь перебор сотрудников, записываешь в таблицу, потом опять перебор сотрудников и добавляешь в туже таблицу (не очистив её) и получается, постоянно выводишь таблицу целиком, при каждом цикле добавляя новые строки. Сделай форматирование кода (выдели всё)
- Текст - Блок - Форматировать, тогда сам увидишь какая каша получилась,
Удачи
20. Just 3 29.10.07 10:10 Сейчас в теме
извини, (не обновилась страница) не видел что ответ уже дали
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот