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

преобразования к Типу Дата не может быть выполнено

Автор Yamuna, 18 фев 2018, 08:43

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

Yamuna

Написал процедуру по напоминанию о днях рождения сотрудников и в чистой конфигурации все получается ,а в чистой типовой конфигурации БП 3.0 нет, выдает ошибку :Преобразования к значению типу Дата не может быть выполнено:
ДеньРождения = Дата(Год(ТекущаяДата()),Месяц(Выборка.ДатаРождения),День(Выборка.ДатаРождения));



Как бороться с этим?

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

alexandr_ll

В БП 3.0 в справочнике "Сотрудники" нет реквизита "ДатаРождения".
Он есть в справочнике "ФизическиеЛица".

Yamuna

Цитата: alexandr_ll от 18 фев 2018, 10:17
В БП 3.0 в справочнике "Сотрудники" нет реквизита "ДатаРождения".
Он есть в справочнике "ФизическиеЛица".

да вы правы но когда я это выполняю в БП 3.0 , то я естественно обращаюсь в Справочник "ФизическиеЛица"

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

   Если ДеньРождения>=ДатаНачала И ДеньРождения<=ДатаОкончания Тогда
             Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "У сотрудника "+Выборка.Наименование+" день рождения - "+ДеньРождения;
        Сообщение.Сообщить();
        КонецЕсли;
   КонецЦикла;
   
   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

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

alex0402

Цитата: Yamuna от 18 фев 2018, 08:43Пока Выборка.Следующий() Цикл
тогда напиши следующее:

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


там скорее всего не дата.
Спасибо за Сказать спасибо

AIFrame

А зачем цикл с перебором выборки?
Можно же в запросе все что нужно отобрать.

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

ТД=Новый ТабличныйДокумент;
ТД.ТолькоПросмотр = Истина;
ОбластьВывода=ТД.ПолучитьОбласть(1,1,1,Результат.Колонки.Количество());
Для Счетчик=1 по Результат.Колонки.Количество() Цикл
   ОбластьЗаполнения=ОбластьВывода.Область(1,Счетчик,1,Счетчик);
   Колонка = Результат.Колонки[Счетчик-1];
   ОбластьЗаполнения.Параметр=Колонка.Имя;
   ОбластьЗаполнения.ПараметрРасшифровки = Колонка.Имя;
   ОбластьЗаполнения.Заполнение=ТипЗаполненияОбластиТабличногоДокумента.Параметр;
КонецЦикла;
Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
   ОбластьВывода.Параметры.Заполнить(Выборка);
   ТД.Вывести(ОбластьВывода);
КонецЦикла;
ТД.Показать();
КонецПроцедуры

ПолучитьДниДеньРождения( НачалоКвартала(ТекущаяДата()), ТекущаяДата());

Теги: ТипДата 

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

Рейтинг@Mail.ru

Поиск