Как мне получить последние цифры возраста для склонения год, года, лет? Прав(Поле,1) не работает, выдаёт ошибку

1. user1811910 17.07.22 18:13 Сейчас в теме
Перем Год;

Запрос = Новый Запрос;
	Запрос.Текст =
	 "ВЫБРАТЬ
	 |	Пользователи.Наименование КАК Наименование,
	 |	Пользователи.Ссылка КАК Ссылка,
	 |	РАЗНОСТЬДАТ(Пользователи.ДатаРождения, &ТекущаяДата, ГОД) КАК Поле1,
	 |	ДЕНЬ(Пользователи.ДатаРождения) КАК Поле2
	 |ИЗ
	 |	Справочник.Пользователи КАК Пользователи
	 |ГДЕ
	 |	ДОБАВИТЬКДАТЕ(Пользователи.ДатаРождения, ГОД, &ТекущийГод - ГОД(Пользователи.ДатаРождения)) МЕЖДУ &ДатаНачала И &ДатаКонец
	 |
	 |УПОРЯДОЧИТЬ ПО
	 |	Поле2";
	Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ТекущаяДата()));
	Запрос.УстановитьПараметр("ДатаКонец",КонецДня(ТекущаяДата()+3*86400));	
	Запрос.УстановитьПараметр("ТекущийГод", Год(ТекущаяДата())); 
	Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
	
	Результат= Запрос.Выполнить();
	Выборка= Результат.Выбрать();                            
	
	Пока Выборка.Следующий() Цикл
		
		Если Выборка.Поле1 >=5 и Выборка.Поле1 <=20 ИЛИ Выборка.Поле1 =0  Тогда 
			Год = "лет";                                     
		ИначеЕсли Выборка.Поле1= 1 Тогда 
			Год = "год";
		ИначеЕсли Выборка.Поле1>=2 и Выборка.Поле1 <=4 Тогда 
			Год = "года";
		Иначе Год = "йцу";
		КонецЕсли;
			
		Сообщить("У сотрудника "+ Выборка.Ссылка+ " сегодня ДР ему "+ Выборка.Поле1 + Год );

	КонецЦикла;
Показать
Найденные решения
5. karamazoff 101 17.07.22 20:59 Сейчас в теме
Поле1 число, а Прав применяется для строки
Vitaly1C8; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. -AI- 17.07.22 18:48 Сейчас в теме
а где код в котором "Прав(Поле,1)" ?
3. user1811910 17.07.22 18:59 Сейчас в теме
В этом случае выдаёт ошибку, операция сравнения доступна для примитивных типов значений

Если Прав(Выборка.Поле1,1) >=5 и Прав(Выборка.Поле1,2) <=20 ИЛИ Прав(Выборка.Поле1,1) =0 Тогда
Год = "лет";
ИначеЕслиПрав(Выборка.Поле1,1) = 1 Тогда
Год = "год";
ИначеЕсли Прав(Выборка.Поле1,1) >=2 и Прав(Выборка.Поле1,1) <=4 Тогда
Год = "года";
Иначе Год = "йцу";
КонецЕсли;
4. RustamZz 17.07.22 20:53 Сейчас в теме
5. karamazoff 101 17.07.22 20:59 Сейчас в теме
Поле1 число, а Прав применяется для строки
Vitaly1C8; +1 Ответить
6. ishelper 17.07.22 21:35 Сейчас в теме
(5)
Прав применяется для строки
Нынешние "программисты" такими мелочами не заморачиваются - об этом пусть "умная 1С" думает, а он смотрит на число, например, 33 и видит правую цифру - 3. Фсё, о чем тут думать, быстренько говнокод пилить надо! :-)
7. makfromkz 35 18.07.22 06:47 Сейчас в теме
остаток от деления на 100 это и есть последние цифры года
8. custer 18.07.22 09:54 Сейчас в теме
Используй ПолучитьСклоненияСтрокиПоЧислу

Как пример:
    Запрос = Новый Запрос;
    Запрос.Текст =
     "ВЫБРАТЬ
     |    Пользователи.Наименование КАК Наименование,
     |    Пользователи.Ссылка КАК Ссылка,
     |    Пользователи.ДатаРождения КАК ДатаРождения
     |ИЗ
     |    Справочник.Пользователи КАК Пользователи
     |ГДЕ
     |    Пользователи.ДатаРождения МЕЖДУ &ДатаНачала И &ДатаКонец
     |
     |УПОРЯДОЧИТЬ ПО
     |    Пользователи.ДатаРождения"; 
	
    Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ТекущаяДата()));
    Запрос.УстановитьПараметр("ДатаКонец",КонецДня(ТекущаяДата()+3*86400));    
    
    Результат = Запрос.Выполнить();  
	
    Выборка = Результат.Выбрать();                            
    
    Пока Выборка.Следующий() Цикл
		
		// К примеру количество лет составило: 21
		КоличествоЛет = Год(ТекущаяДата()) - Год(Выборка.ДатаРождения);
		
		// К примеру количество лет строкой получилось: 21 год
		КоличествоЛетСтрокой = ПолучитьСклоненияСтрокиПоЧислу("год", КоличествоЛет); 
		
		// Сообщение: Сотруднику Фамилия Имя Отчество 21 год
		Сообщить(СтрШаблон("Сотруднику %1 %2", Выборка.Наименование, КоличествоЛетСтрокой));

    КонецЦикла;
Показать
Vitaly1C8; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот