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

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

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
Просмотров: 6878
Последний ответ 06 Фев 2012, 10:46
от cska-fanat-kz
Заполнение поля табличной части документа из табличной части справочника.

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

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

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

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

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

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

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

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

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
152 Сообщений
oleg-x
69 Сообщений
alex0402
65 Сообщений
AIFrame AIFrame
55 Сообщений
wise wise
39 Сообщений
buketov.av buketov.av
36 Сообщений
KOI8-R
34 Сообщений
ilyay ilyay
29 Сообщений
Alter
27 Сообщений
trialex3
25 Сообщений

* Кто онлайн

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal