Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
16 Дек 2017, 17:46
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Получение элементов иерархического справочника  (Прочитано 5793 раз)

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

Оффлайн dborovsky

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-07-05
  • Сайт: 
  • Профессия: Ученик 1С
Доброго времени суток Дамы и Господа. Тема наверное избитая уже, но все таки. недавно начал изучать 1с. Мне надо выбрать из иерархического справочника Сотрудники всех работников,  у которых сегодня день рождение. Вначале у меня справочник был без иераррхии и все работало. Как только добавил группы, моя выборка стала пуста. Изменил код, как показано внизу, но безрезультатно. Что ни так в коде? Заранее спасибо за ответ.

Функция СписокИмениннниковПоТекДате() Экспорт 
ТД_День = День(ТекущаяДата());  
ТД_Месяц = Месяц(ТекущаяДата());

Массив = Новый Массив();


Выборка =  Справочники.Сотрудники.ВыбратьИерархически();

Пока Выборка.Следующий() Цикл
ДР_День = День(Выборка.ДатаРождения);
ДР_Месяц = Месяц(Выборка.ДатаРождения);


Если ТД_День = ДР_День И ТД_Месяц = ДР_Месяц Тогда
Массив.Добавить(Выборка.Наименование);
КонецЕсли;

КонецЦикла;

Возврат Массив;

  КонецФункции
 


Оффлайн sadovod

  • ****
  • Сообщений: 289
  • РЕПУТАЦИЯ: 53
  • КПД: 18%
  • Регистрация: 2012-02-19
  • Сайт: 
  • Профессия: Программист 1С
Выбрать() и ВыбратьИерархически() возвращают один и тот же список, просто порядок элементов в выборке разный.
Ну, ещё можно внутрь цикла вставить условие
    Если НЕ Выборка.ЭтоГруппа Тогда ...
ведь вы же не заполняли у групп ДатуРождения.
А так, непонятно, почему массив пустой, может на самом деле нет совпадений дат?

Оффлайн dborovsky

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-07-05
  • Сайт: 
  • Профессия: Ученик 1С
Выдает ошибку: {ОбщийМодуль.ОбщийМодуль.Модуль(11)}: Преобразование значения к типу Дата не может быть выполнено
         ДР_День = День(Выборка.ДатаРождения);

Оффлайн sadovod

  • ****
  • Сообщений: 289
  • РЕПУТАЦИЯ: 53
  • КПД: 18%
  • Регистрация: 2012-02-19
  • Сайт: 
  • Профессия: Программист 1С
Выдает ошибку: {ОбщийМодуль.ОбщийМодуль.Модуль(11)}: Преобразование значения к типу Дата не может быть выполнено
         ДР_День = День(Выборка.ДатаРождения);
Ну правильно, значит ДатаРождения у вас по умолчанию не заполняется, вы добавили группы, и это поле в группах равно null, можете в отладчике посмотреть...
А значение null в Дату в данном случае нельзя преобразовать, вот ошибку и выдает...
Варианты решения такие:
Можно в цикл вставить проверку НЕ Выборка.ЭтоГруппа или, что гораздо лучше, вставить проверку Если ЗначениеЗаполнено(ДатаРождения) Тогда ...
И, кстати, можете ещё оптимизировать свой код. Вместо того, чтобы по отдельности выделять день и месяц для сравнения дат, лучше привести обе даты к началу дня и сравнивать их как даты. Вот так примерно:

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

            КонецЕсли;

        КонецЦикла;
       
        Возврат Массив;

Оффлайн dborovsky

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-07-05
  • Сайт: 
  • Профессия: Ученик 1С
Я не совсем понимаю, что значит в группах не заполнен реквизит день рождения. Ведь у меня есть объекты в группах, у которых заполнены дни рождения.

Оффлайн sadovod

  • ****
  • Сообщений: 289
  • РЕПУТАЦИЯ: 53
  • КПД: 18%
  • Регистрация: 2012-02-19
  • Сайт: 
  • Профессия: Программист 1С
Я не совсем понимаю, что значит в группах не заполнен реквизит день рождения. Ведь у меня есть объекты в группах, у которых заполнены дни рождения.
Откройте в конфигураторе объект конфигурации Справочник.Сотрудники. Перейдите на закладку 'Реквизиты', там, где вы добавили реквизит 'ДатаРождения'. Так вот там ещё есть кнопочка 'Стандартные реквизиты', нажмите её.
Вы увидите список реквизитов (в базах данных они называются полями), которые присутствуют у любого элемента справочника Сотрудники. Среди них есть реквизит 'ЭтоГруппа' (может быть или Истина или Ложь). Так вот, является элемент справочника Сотрудники группой или обычным элементом как раз определяется состоянием этого 'флажка'. А больше они ничем не отличаются. Когда добавляете группу, то в справочник добавляется новая запись (строка, если угодно), у которой этот флаг установлен в 'Истину', а когда добавляется обычный элемент - то 'Ложь'.
Дело ещё в том, что все остальные реквизиты, в том числе и добавленная вами 'ДатаРождения' есть и у обычных элементов, и у групп. Если её не устанавливать явно, и не задавать в свойствах значения по умолчанию, то при вводе новой группы(или элемента) остаётся "пустой" (значение null). Попытка преобразовать такое значение в Дату вызывает ошибку.
Чтобы избежать этой ошибки, нужно проверять значение 'ДатаРождения' на заполненность, пример этого я привёл выше...

Оффлайн dborovsky

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-07-05
  • Сайт: 
  • Профессия: Ученик 1С
теперь понятно, спасибо большое)

Оффлайн ivanov660

  • *
  • Сообщений: 18
  • РЕПУТАЦИЯ: 1
  • КПД: 6%
  • Регистрация: 2011-09-05
  • Компания: Орион XL
  • Профессия: Программист 1С
Используйте запросы, а не объектную модель!


Теги:
 

Как вызвать "Анализ субконто" из справочника "Контрагенты"

Автор EnigManРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 6500
Последний ответ 06 Фев 2012, 10:46
от cska-fanat-kz
Заполнение поля табличной части документа из табличной части справочника.

Автор Kurt_WagnerРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 4202
Последний ответ 06 Апр 2015, 20:08
от Kurt_Wagner
Заполнение табличной части документа реквизитами табличной части справочника

Автор kaf_infoРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 639
Последний ответ 10 Май 2017, 20:44
от ilnur75
Как сделать, чтобы поле в документе имело тип "ссылка на поле справочника"?

Автор друганРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 2040
Последний ответ 05 Мар 2017, 14:36
от Igor100500
Изменение цвета при подборе сотрудника в форме списка справочника "Сотрудники организации" для документа "Зарплата к выплате организаций" ЗУП 2.5

Автор ksander-farsРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 271
Последний ответ 12 Окт 2017, 14:02
от wise

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
157 Сообщений
ilyay ilyay
66 Сообщений
alex0402
53 Сообщений
AIFrame
47 Сообщений
andron81_81
44 Сообщений
oleg-x
44 Сообщений
BuhRust
33 Сообщений
MuI_I_Ika MuI_I_Ika
32 Сообщений
Golickoff Golickoff
31 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 232
  • Точка Скрытых: 0
  • Точка Пользователей: 6
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal