Имя: Пароль:
1C
1С v8
В форму списка справочника при открытии высчитывать и заполнять реквизит формы
0 ANDRU48
 
16.07.15
10:04
У меня есть справочник "А", в нем есть реквизит "Возраст" и "ДатаРождения". При открытии формы элемента реквизит "Возраст" высчитывается и заполняется, в зависимости от "ДатыРождения" на текущую дату - это реализовал.

Теперь нужно в форме списка данного справочника при открытии заполнять реквизит "Возраст" от реквизита "ДатаРождения" на текущую дату. Здесь застрял, порылся в интернете не нашел.

Подскажите плиз...Спасибо
1 vicof
 
16.07.15
10:08
ПриПолученииДанных
2 butterbean
 
16.07.15
10:09
нафиг реквизит, если он постоянно в формах пересчитывается?
3 ANDRU48
 
16.07.15
10:13
(1) УФ
4 ANDRU48
 
16.07.15
10:15
В форме элемента делаю так:

Элементы.Возраст = .ВозрастВычислить(Объект.ДатаРождения, ТекущаяДата());
5 butterbean
 
16.07.15
10:16
(3) произвольный запрос у дин. списка + текущую дату как параметр и вперед
6 VikingKosmo
 
16.07.15
10:17
если это УФ, то все эти шашни нужно написать в запросе ДемоническогоСписка
7 ANDRU48
 
16.07.15
10:22
Высчитывается кол-во месяцев вот так





&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Для Каждого Строка Из
    Элементы.Возраст = .ВозрастВычислить(Объект.ДатаРождения, ТекущаяДата());
КонецПроцедуры

&НаСервереБезКонтекста
Функция ВозрастВычислить(Возраст, Дата)
    
    Месяцы = РазностьМеждуДатамиВМесяцах(Возраст,Дата);
    ВозрастСтруктура = ВозрастВМесяцахИГодах(Месяцы);
    ВозрастПрописью = ВозрастПрописью(ВозрастСтруктура);
    
    Возврат ВозрастПрописью;
    
КонецФункции

&НаСервереБезКонтекста
Функция ВозрастВМесяцахИГодах(Месяцы)
    
    Структура = Новый Структура;
    Структура.Вставить("Год");
    Структура.Вставить("Месяц");
    Структура.Месяц = Месяцы % 12;
    Структура.Год = (Месяцы - Структура.Месяц) / 12;
    
    Возврат Структура;
    
КонецФункции

&НаСервереБезКонтекста
Функция ВозрастПрописью(Структура)
    
    Строка = "";
    Если Структура.Год > 0 Тогда
        ПоследняяЦифраГода = Число(Сред(Строка(Структура.Год), СтрДлина(Строка(Структура.Год)), 1));
        Если (ПоследняяЦифраГода = 1) И (Структура.Год <> 11) Тогда Строка = Строка(Структура.Год) + " год"; КонецЕсли;
        Если (ПоследняяЦифраГода >= 2) И (ПоследняяЦифраГода <=4) И ((Структура.Год < 12) ИЛИ (Структура.Год > 14)) Тогда Строка = Строка(Структура.Год) + " года"; КонецЕсли;
        Если ((ПоследняяЦифраГода >= 5) И (ПоследняяЦифраГода <=9)) ИЛИ (ПоследняяЦифраГода = 0) Тогда Строка = Строка(Структура.Год) + " лет"; КонецЕсли;
        Если (Структура.Год >= 11) И (Структура.Год <= 14) Тогда Строка = Строка(Структура.Год) + " лет"; КонецЕсли;
    КонецЕсли;
    
    Если (Структура.Год > 0) И (Структура.Год < 3) И (Структура.Месяц > 0) Тогда
        Строка = Строка + ", ";
    КонецЕсли;
    
    Если (Структура.Месяц > 0) И (Структура.Год <= 3) Тогда
        Если Структура.Месяц = 1 Тогда Строка = Строка + "1 месяц"; КонецЕсли;
        Если (Структура.Месяц >= 2) И (Структура.Месяц <= 4) Тогда Строка = Строка + Строка(Структура.Месяц) + " месяца"; КонецЕсли;
        Если Структура.Месяц >= 5 Тогда Строка = Строка + Строка(Структура.Месяц) + " месяцев"; КонецЕсли;
    КонецЕсли;
    
    Возврат Строка;
    
КонецФункции

&НаСервереБезКонтекста
Функция РазностьМеждуДатамиВМесяцах(Дата1,Дата2)
    
    Год1 = Год(Дата1);
    Год2 = Год(Дата2);
    Месяц1 = Месяц(Дата1);
    Месяц2 = Месяц(Дата2);
    День1 = День(Дата1);
    День2 = День(Дата2);
    
    Результат = (Год1 - Год2) * 12 + Месяц1 - Месяц2;
    Если Результат < 0 Тогда Результат = 0 - Результат; КонецЕсли;
    Если ((Дата1 > Дата2) И (День1 < День2)) ИЛИ ((Дата1 < Дата2) И (День1 > День2)) ИЛИ ((Дата1 < Дата2) И (День1 < День2)) Тогда
        Результат = Результат - 1;
    КонецЕсли;
    Возврат Результат;
    
КонецФункции


Как из динамического списка потом вытаскивать это значение?
8 VikingKosmo
 
16.07.15
10:28
(7) про ДемоническиеСписки вообще в курсе? Что это такое и зачем используется?
9 Timon1405
 
16.07.15
10:29
рвутся все шаблоны, как совместим вопрос в топике и Как продавать свою конфу?
10 ANDRU48
 
16.07.15
11:03
Спасибо за помощь
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.