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

Нужна помощь новичку с отбором

Автор SupremeMax, 27 янв 2011, 10:51

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

SupremeMax

Здравствуйте! Я начинающий программист (всего месяц), работаю в версии 8.2, требуется ваша неоценимая помощь! Имеется ИЕРАРХИЧЕСКИЙ справочник "Сотрудники", состоящий из 2х групп: Работающие и Уволенные. Справочник состоит из 4х колонок: Код, Наименование(имеется ввиду ФИО сотрудника), Дата рождения, Процент премии. Мне необходимо выполнить отбор по Дате рождения, т.е. в соответствующих полях я назначаю интервал дат, в соответствии с которым при нажатии кнопки "Вывести" на печать будет выведен список сотрудников, чьи даты рождения входят в назначенный пользователем интервал. Для того, чтобы лучше понять мой вопрос, в прикрепленных файлах имеются картинки. Я вписывал следующий код:

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

    КонецЦикла;

    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();

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


При нажатии кнопки "Вывести" в режиме исполния мне выдается следующая ошибка:

{Справочник.Сотрудники.Форма.ФормаСписка.Форма(159)}: Ошибка при вызове метода контекста (ВыбратьИерархически): Несоответствие типов (параметр номер '1')
Выборка = Справочники.Сотрудники.ВыбратьИерархически(С,По1,"возр");
по причине:
Несоответствие типов (параметр номер '1')

Подскажите, пожалуйста, что я делаю непарвильно?

Klyacksa

Ну, во-первых:

СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
ВыбратьИерархически (SelectHierarchically)
Синтаксис:
ВыбратьИерархически(<Родитель>, <Владелец>, <Отбор>, <Порядок>)


а у вас параметры подставляются абы как. Вместо Родителя и Владельца подставляются ваши даты.

Ну а в во-вторых, подобным отбором можно отобрать только данные с определенным реквизитом, по интервалу отобрать не получится. Например, выбрать Сотрудников с датой рождения 10.12.1980 можно, а Сотрудников с датой рождения с 01.12.1980 по 31.12.1981 придется отбирать запросом:

Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| Сотрудники.Ссылка КАК Ссылка,
| Сотрудники.ЭтоГруппа,
| Сотрудники.Код,
| Сотрудники.Наименование,
| Сотрудники.ДатаРождения,
| Сотрудники.ПроцентПремии
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.ДатаРождения между &С и &По1
|
|УПОРЯДОЧИТЬ ПО
| ДатаРождения
|
    |ИТОГИ ПО
    | Ссылка ИЕРАРХИЯ";

Запрос.УстановитьПараметр("С",С);
Запрос.УстановитьПараметр("По1",По1);
Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Теги:

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

Рейтинг@Mail.ru

Поиск