Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Получение элементов иерархического справочника
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
dborovsky
Доброго времени суток Дамы и Господа. Тема наверное избитая уже, но все таки. недавно начал изучать 1с. Мне надо выбрать из иерархического справочника Сотрудники всех работников, у которых сегодня день рождение. Вначале у меня справочник был без иераррхии и все работало. Как только добавил группы, моя выборка стала пуста. Изменил код, как показано внизу, но безрезультатно. Что ни так в коде? Заранее спасибо за ответ.


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



Выдает ошибку: {ОбщийМодуль.ОбщийМодуль.Модуль(11)}: Преобразование значения к типу Дата не может быть выполнено
ДР_День = День(Выборка.ДатаРождения);
Batchir
Нужно ставить проверку перед ДР_День = День(Выборка.ДатаРождения);:
если это группа тогда продолжить
А вообще лучше бы запросы поучили и с их помощью данные получали.
logist
Не страдайте ерундой, читайте лучше умные книжки, раз только начинаете изучать.
Ваша задача решается следующим образом:

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущаяДата", НачалоДня(ТекущаяДата());
Запрос.Текст = "ВЫБРАТЬ
               |    Сотрудники.Наименование КАК Сотрудник
               |ИЗ
               |    Справочник.Сотрудники КАК Сотрудники";
               |ГДЕ
               |    НАЧАЛОПЕРИОДА(Справочник.Сотрудники.ДатаРождения, ДЕНЬ) = &ТекущаяДата";
ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
МассивСотрудников = ТаблицаРезультата.ВыгрузитьКолонку("Сотрудник");

Возврат МассивСотрудников;
dborovsky
как сделать с помощью запроса я знаю. Для меня принципиально именно так сделать, чтобы разобраться.

Зачем нужно ставить проверку перед ДР_День = День(Выборка.ДатаРождения);?
Если это группа тогда продолжить. А если объекты не в группе находятся, то что? Ведь у нас есть метод ВыбратьИерархически(), кторый сам все выберет. Я правильно понимаю?
Batchir
Цитата(dborovsky @ 10.08.12, 15:42) необходимо зарегистрироваться для просмотра ссылки
Зачем нужно ставить проверку перед ДР_День = День(Выборка.ДатаРождения);?

Потому что ошибку Ваш код дает потому что пытается получить день рождения у группы, а этот реквизит скорее всего доступен только для элементов.
logist
Цитата(dborovsky @ 10.08.12, 15:42) необходимо зарегистрироваться для просмотра ссылки
Для меня принципиально именно так сделать, чтобы разобраться.

Зачем тратить время на то, что бы разобраться в том, что не нужно делать... Или Вы претендуете на звание заслуженного гинеколога-сантехника? Тогда удачи в освоении wink.gif
dborovsky
Хожу на курсы, дали такую домашку. Не понимаю только причем здесь сантехник с гинекологом? Я уже разобрался, всем спасибо за консультацию.

Thanks)))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.