Расчет возраста по дате рождения и текущей дате

Публикация № 616313

Разработка - Практика программирования

Запрос возраст количество лет месяцев дней

5
Была задача - рассчитать возраст определенных лиц по дате их рождения. Решил поискать в интернете, как всегда множество мнений, множество реализаций, но, к сожалению, не встречал той статьи, где рассчитывалось количество полных лет, месяцев и дней. Например: 28 лет, 3 месяца, 15 дней. Решил заняться самостоятельно, и вот к чему это привело.

Как известно, в 1С есть неплохие средства работы с датами, которые в данной задаче я и попытался использовать.

И, конечно же, обработка "Консоль запросов":

Очень помогли мне функции

РАЗНОСТЬДАТ()

и 

ДОБАВИТЬКДАТЕ()

В итоге получил такие запросы, в которых выставил ограничения по количеству записей (500) для отладки информации:

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 500
	Люди.Ссылка КАК Ссылка,
	Люди.ДатаРождения КАК ДатаРождения,
	ГОДАМЕСЯЦА.Количество_лет,
	ГОДАМЕСЯЦА.Количество_месяцев,
	РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(
							ДОБАВИТЬКДАТЕ(
										Люди.ДатаРождения,
										ГОД,
										ВЫРАЗИТЬ(ГОДАМЕСЯЦА.Количество_лет КАК ЧИСЛО)
										),
							МЕСЯЦ,
							ВЫРАЗИТЬ(ГОДАМЕСЯЦА.Количество_месяцев КАК ЧИСЛО)),
				&ТекущаяДата,
				ДЕНЬ
				) КАК Количество_дней
ИЗ
	Справочник.Люди КАК Люди
		ЛЕВОЕ СОЕДИНЕНИЕ ГОДАМЕСЯЦА КАК ГОДАМЕСЯЦА
		ПО (Люди.Ссылка = ГОДАМЕСЯЦА.Ссылка)
;

Хотелось бы, конечно, довести эти запросы до совершенства, но ограничен во времени.

PS.

Не знаю, что делать с такими днями рождения - 29.02.1988. Возраст получаю - 29 лет 1 месяц 30 дней.

Если есть предложения, пишите в комментариях).

5

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. FirePyres 42 28.04.17 11:52 Сейчас в теме
как то все сложно, у меня вот так получилось:
ВЫБРАТЬ
	&ТД КАК ТД,
	&ДР КАК ДР
ПОМЕСТИТЬ данные
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	РАЗНОСТЬДАТ(Данные.ДР, Данные.ТД, ГОД) + ВЫБОР
		КОГДА МЕСЯЦ(Данные.ДР) < МЕСЯЦ(Данные.ТД)
				ИЛИ МЕСЯЦ(Данные.ДР) = МЕСЯЦ(Данные.ТД)
					И ДЕНЬ(Данные.ДР) <= ДЕНЬ(Данные.ТД)
			ТОГДА 0
		ИНАЧЕ -1
	КОНЕЦ КАК Лет,
	МЕСЯЦ(Данные.ТД) - МЕСЯЦ(Данные.ДР) + ВЫБОР
		КОГДА МЕСЯЦ(Данные.ТД) - МЕСЯЦ(Данные.ДР) < 0
			ТОГДА 12
		ИНАЧЕ 0
	КОНЕЦ КАК Месяц,
	ВЫБОР
		КОГДА ДЕНЬ(Данные.ТД) - ДЕНЬ(Данные.ДР) >= 0
			ТОГДА ДЕНЬ(Данные.ТД) - ДЕНЬ(Данные.ДР)
		ИНАЧЕ ДЕНЬ(Данные.ТД) - ДЕНЬ(Данные.ДР) + РАЗНОСТЬДАТ(Данные.ТД, ДОБАВИТЬКДАТЕ(Данные.ТД, МЕСЯЦ, 1), ДЕНЬ)
	КОНЕЦ КАК День,
	Данные.ДР
ИЗ
	данные КАК Данные
Показать
2. D.Gal 5 28.04.17 16:08 Сейчас в теме
(1) как месяцев может быть 12?
9. sp18s 03.05.17 12:59 Сейчас в теме
(1) херня. вбейте
Имя параметра Значение параметра
ДР 05.05.2015 0:00:00
ТД 03.05.2017 0:00:00
и получите 1 лет и 29 дней.
10. Vlad_2008 12 03.05.17 14:07 Сейчас в теме
Странный запрос в (1) и процедура в (6) странная, и считает не правильно, для 27.04.2017 - 29.02.1988 выдала: "Лет: 29 Месяцев: 1 Дней: 30".

У меня запрос из трех строк выдает следующее:

27.04.2017 - 29.02.1988 = 29 лет 1 мес 27 дней
03.05.2017 - 29.02.1988 = 29 лет 2 мес 3 дня
11. Vlan 11 03.05.17 15:06 Сейчас в теме
(10) Для високосного года достаточно добавить одно условие и будет правильно.
	Лет = 0;
	Месяцев = 0;
	Дней = 0;
	ДатаР = Объект.ДатаРождения;
	Високосный = 0;
	Если Не День(ДобавитьМесяц(ДатаР,12)) = День(ДатаР) Тогда
		Високосный = 1;
		ДатаР = ДатаР - 60*60*24;
	КонецЕсли;
	Пока ДатаР <= Объект.ЛюбаяДата Цикл
		ДатаР = ДобавитьМесяц(ДатаР,1);
		Месяцев = Месяцев + 1;
	КонецЦикла;
	Месяцев = Месяцев-1;
	Лет = Цел(Месяцев/12);
	Месяцев = Месяцев-Лет*12;
	Дней = Цел((Объект.ЛюбаяДата - ДобавитьМесяц(ДатаР,-1))/(60*60*24))-Високосный;
	Объект.КоличествоДней = "Лет: "+Строка(Лет)+" Месяцев: "+Строка(Месяцев)+" Дней: "+Строка(Дней);
Показать

Между прочим, для 03.05.2017 - 29.02.1988 должно быть 29 лет 2 мес 4 дня, а не 3 дня, как у вас.
15. Vlad_2008 12 03.05.17 18:19 Сейчас в теме
(11) Ну я считал так:

29.02.1988 - 28.02.2017 = 29 лет
01.03.2017 - 30.04.2017 = 2 мес
01.05.2017 - 03.05.2017 = 3 дня

поправьте меня, где я потерял день?

В моем понимании, 29.02.1988 не должно считаться за день в этом расчете - это собсна день рождения, в этот день у человека "полный год", а вот со след. дня и пошел расчет ... "между прочим" )).

P.S.

А "високосный" Вы по прежнему считаете не правильно. А саму конструкцию проверки високосного я бы сделал так: "Год(ДатаР) % 4". Ваш способ, конечно, оригинален, я бы не додумался. Скорее всего я бы сделал так: День(КонецМесяца(ДатаР)) = 29 ... вау ))))))))

И еще, у Вас если д/р 29.02.1988, то Високосный = 1, а если 28.02.1988, то Високосный = 0 ... странно все ето ))) ужОс !!
16. Vlan 11 03.05.17 19:15 Сейчас в теме
(15) Високосный нужен только для 29.02, остальные дни считаются одинаково.
Логика расчета проста: каждое число следующего месяца, совпадающее с днем рождения дает полный месяц. Каждый следующий день, если месяц неполный, добавляется к дням. Именно так у вас "потерялся" один день. Полный месяц приходится на 29-е число. Затем идут 30,1,2,3. Итого 4 дня.
17. Vlad_2008 12 03.05.17 21:33 Сейчас в теме
(16) Да, Вы правы. Я зачем-то считал календарные месяцы, вместо реальных.

Переделал запрос, теперь все четко:
18. borodatii 2 03.05.17 22:08 Сейчас в теме
(15) из википедии:
... год является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400.
24. Vlad_2008 12 04.05.17 15:03 Сейчас в теме
(18)
... год является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400.


... НЕ кратен 100, либо кратен 400 ...

Мой мозг не смог впитать сие ...
25. borodatii 2 04.05.17 15:29 Сейчас в теме
(24)
Год високосный в одном из двух случаев:
1) кратен 4, но при этом не кратен 100, например, 16, 96, 1996.
2) кратен 400, например 800, 2000.
Иначе - обычный, например, 100, 200, 300.
27. v3rter 04.05.17 16:02 Сейчас в теме
(25)
2) кратен 400, например 800, 2000.
Если уж совсем быть точными, григорианский календарь запустили 4 октября 1582 года, то есть кратные 400 года надо считать високосными если год>=1600. Но в нашем случае это, думаю, несущественно.
28. Vlad_2008 12 04.05.17 16:45 Сейчас в теме
(25) , (27)

Да, я видимо, застрял в юлианском календаре. Теперь вместо "Год % 4" буду делать
"ЭтоВисокосный = (Год % 400 = 0) ИЛИ (Год % 100 <> 0 И Год % 4 = 0)".


Кстати, в 1С 400,800,1200 - високосные, т.е. уже не важно, что запустили в 1582 году )).
3. FirePyres 42 29.04.17 05:55 Сейчас в теме
пример покажите,
я лично не вижу куска где такое возможно
МЕСЯЦ(Данные.ТД) - МЕСЯЦ(Данные.ДР) 
+ ВЫБОР
        КОГДА МЕСЯЦ(Данные.ТД) - МЕСЯЦ(Данные.ДР) < 0      ТОГДА 12

        ИНАЧЕ 0
    КОНЕЦ
4. D.Gal 5 29.04.17 13:20 Сейчас в теме
Да, невозможно, это я ошибся, только проблема с високосными годами осталась. Дни неправильно считает...
5. МимохожийОднако 127 03.05.17 07:42 Сейчас в теме
Полагаю в ЗУП уже есть подобные процедуры и функции
14. D.Gal 5 03.05.17 18:04 Сейчас в теме
(5) Можете скинуть реализацию из ЗУП?
19. МимохожийОднако 127 04.05.17 07:36 Сейчас в теме
6. Vlan 11 03.05.17 09:37 Сейчас в теме
А почему именно запросом получать дни?
Ведь гораздо проще соорудить такую, например, конструкцию:
	Лет = 0;
	Месяцев = 0;
	Дней = 0;
	ДатаР = Объект.ДатаРождения;
	Пока ДатаР <= ТекущаяДата() Цикл
		ДатаР = ДобавитьМесяц(ДатаР,1);
		Месяцев = Месяцев + 1;
	КонецЦикла;
	Месяцев = Месяцев-1;
	Лет = Цел(Месяцев/12);
	Месяцев = Месяцев-Лет*12;
	Дней = Цел((ТекущаяДата() - ДобавитьМесяц(ДатаР,-1))/(60*60*24));
	Объект.КоличествоДней = "Лет: "+Строка(Лет)+" Месяцев: "+Строка(Месяцев)+" Дней: "+Строка(Дней);
Показать
13. D.Gal 5 03.05.17 18:03 Сейчас в теме
(6) Я скажу, что такова была постановка задачи, решить которую надо запросом, в коде же модулей было бы значительно проще.
7. v3rter 03.05.17 10:07 Сейчас в теме
Вопрос с месяцами скорее методический - как складывать между собой два неполных месяца интервала и с чем сравнивать их суммарное количество дней.
8. v3rter 03.05.17 10:48 Сейчас в теме
Сравнивать их с 29, 30, 31, с количеством дней в месяце первой даты, с количеством дней в месяце второй даты, или с минимумом количества дней в месяцах обеих дат.
12. v3rter 03.05.17 17:40 Сейчас в теме
В экселе с разностью дат аналогичные проблемы http://excel2.ru/articles/funkciya-razndat-vychislenie-raznosti-dvuh-dat-v-dnyah-mesyacah-godah-v-ms-excel-razndat по ссылке варианты разностей с полными месяцами и с неполными, альтернативные формулы и немного обсуждения
20. Vlan 11 04.05.17 07:52 Сейчас в теме
Нашел и у себя ошибку. На 28-м числе дает неверные значения. Вот так поправил, теперь вроде с 29.02 все верно:
	Лет = 0; Месяцев = 0; Дней = 0; Високосный = Ложь;
	Сутки = 60*60*24;
	ДатаР = Объект.ДатаРождения;
	Если Не День(ДобавитьМесяц(ДатаР,12)) = День(ДатаР) Тогда
        Високосный = Истина;
    КонецЕсли;
    Пока ДатаР <= Объект.ЛюбаяДата Цикл
        ДатаР = ДобавитьМесяц(ДатаР,1);
		Если Високосный И Месяц(ДатаР)=3 
		И Не Год(Объект.ДатаРождения)= Год(ДатаР) Тогда
			ДатаР = ДатаР+Сутки;
		КонецЕсли;
        Месяцев = Месяцев + 1;
    КонецЦикла;
    Месяцев = Месяцев-1;
    Лет = Цел(Месяцев/12);
    Месяцев = Месяцев-Лет*12;
    Дней = Цел((Объект.ЛюбаяДата - ДобавитьМесяц(ДатаР,-1))/Сутки);
    Объект.КоличествоДней = "Лет: "+Строка(Лет)+" Месяцев: "+Строка(Месяцев)+" Дней: "+Строка(Дней);
Показать
23. Vlad_2008 12 04.05.17 14:56 Сейчас в теме
(20) Вчера гонял Ваш предыдущий вариант на ошибки и видел что на 28 числе они были, сейчас проверим новый вариант )).

Думаю, что и в Вашем варианте и в варианте из (22) будут ошибки, а думаю так, потому что Вы используете деление на "сутки". Чисто математически, очевидно, что при расчете за 1000 лет "что-то пойдет не так".
26. Vlan 11 04.05.17 15:44 Сейчас в теме
(23)Сомневаюсь, что за 1000 лет что-то поменяется. Если только календарь вдруг закончится, как у Майя. :-)
В моем алгоритме загвоздка была только в добавлении месяца с 29.01 до 29.02. 1C автоматом исправляла недопустимую дату на 28.02, если год не високосный. Достаточно было это обойти, чтобы программа заблистала во всей красе.
29. Vlad_2008 12 04.05.17 17:48 Сейчас в теме
(26) Проверил Ваш новый вариант, количество ошибок прежнее, просто они чуть сместились по дням, вот пара замеров:
Дата рождения: 31.12.1672 0:00:00,  период: 01.01.2017 0:00:00 - 31.12.2017 0:00:00
Ошибок = 336  ( 92,1% )

01.01.2017 = 344 - 00 - 01  /  344 - 00 - 01    344 - 00 - 02  !!!!!!!!!!!!
 --------------------------------------------------

Дата рождения: 29.02.1988 0:00:00,  период: 01.01.2017 0:00:00 - 31.12.2017 0:00:00
Ошибок = 30  ( 8,2% )

29.01.2017 = 28 - 11 - 00  /  28 - 11 - 00    28 - 11 - 01  !!!!!!!!!!!!
 --------------------------------------------------

[Дата текущая] = [расчет в запросе] / [расчет в коде]   [Ваш расчет]
Показать


На всякий случай, замечу, что я в своих расчетах не использую определение "високосности".

А Ваш цикл расчета месяцев всегда будет "грешить", т.к. конец месяца будет сбиваться не только в феврале и не обязательно в високосный год:

- 29.11.2016 + з мес = 28.02.2017 ( 29 -> 28 )
- 31.03.2017 + 3 мес = 30.06.2017 ( 31 -> 30 )

имеется в виду ДобавитьМесяц(Дата, 3).

Задайте ДР = 31.03.1975 и ДТ = 29.01.2017:

- старый = Лет: 41 Месяцев: 10 Дней: 1
- новый = Лет: 41 Месяцев: 9 Дней: 30

- д.быть = 29.01.2017 = 41 - 09 - 29.
30. Vlad_2008 12 04.05.17 19:30 Сейчас в теме
Тут вот еще замер производительности сделал, вариант (26) с циклом, явно проигрывает:

Период текущих дат: 01.01 - 31.12.2017

1) дата рождения: 29.02.1988

запрос     :  2  (  1,598 )
код        :  0  (  0,013 )
Инфостарт  :  1  (  1,235 )

2) дата рождения: 31.01.1700

запрос     :  2  (  1,606 )
код        :  0  (  0,013 )
Инфостарт  : 14  ( 13,164 )
Показать
31. Vlan 11 05.05.17 13:10 Сейчас в теме
(30) Ну, понятно, что на множественных циклах будет потеря времени. Тогда и алгоритм можно другой сделать, просто прибавляя по дню к полученному первоначально значению.
Я переделал свою обработку. Проверяйте.
&НаКлиенте
Процедура Рассчитать(Команда)
	Объект.КоличествоДней.Очистить();
	ДатаНач = Объект.ДатаНач;
	ЛюбаяДата = Объект.ЛюбаяДата;
	ДатаРождения = Объект.ДатаРождения;
	ЧислоДатаР = День(ДатаРождения);
	Сутки = 60*60*24;
	Пока ДатаНач <= ЛюбаяДата Цикл
		Лет = 0; Месяцев = 0; Дней = 0;
		ДатаР = ДатаРождения;
	    Пока ДатаР <= ДатаНач Цикл
			ДатаР = ПолучитьЧислоМесяца(ДатаР,ЧислоДатаР,1);
			Месяцев = Месяцев+1;
	    КонецЦикла;
	    Месяцев = Месяцев-1;
	    Лет = Цел(Месяцев/12);
	    Месяцев = Месяцев-Лет*12;
		ДатаР = ПолучитьЧислоМесяца(ДатаР,ЧислоДатаР,-1);
	    Дней = Цел((ДатаНач-ДатаР)/Сутки);
		Дни = Объект.КоличествоДней.Добавить();
		Дни.Дата = ДатаНач;
		Дни.Количество = "Лет: "+Строка(Лет)+" Месяцев: "+Строка(Месяцев)+" Дней: "+Строка(Дней);
		ДатаНач = ДатаНач + Сутки;
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
Функция ПолучитьЧислоМесяца(ДатаР,Знач ЧислоДатаР,Смещение)
	День = ЧислоДатаР;
	Год = Год(ДатаР);
	Месяц = Месяц(ДатаР)+Смещение;
	Если Месяц > 12 Тогда
		Месяц = 1; 
		Год = Год + 1;
	ИначеЕсли Месяц = 0 Тогда
		Месяц = 12;
		Год = Год - 1;
	КонецЕсли;
	Пока День > 0 Цикл
		Попытка
			ДатаР = Дата(Год,Месяц,День);
			Прервать;
		Исключение
			День = День - 1;
		КонецПопытки;
	КонецЦикла;
	Возврат ДатаР;
КонецФункции
Показать

Остается открытым вопрос: от дня рождения на 31.05.2016 до 28.02.2017 будет полных 9 месяцев или 8 месяцев и 28 дней?
36. Vlad_2008 12 09.05.17 17:51 Сейчас в теме
(31) Я, думаю, что это 9 полных месяцев, т.к. "месячный" день рождения приходится именно на 28.02.2017.
21. Vlan 11 04.05.17 08:53 Сейчас в теме
А можно еще упростить, ведь сбивается общий расчет только для 29.02 при переходе с високосного года на обычный:
	Лет = 0; Месяцев = 0; Дней = 0;
	Сутки = 60*60*24;
	ДатаР = Объект.ДатаРождения;
    Пока ДатаР <= Объект.ЛюбаяДата Цикл
        ДатаР = ДобавитьМесяц(ДатаР,1);
		Если Месяц(ДатаР) = 3 И Не День(ДатаР) = День(Объект.ДатаРождения) Тогда
			ДатаР = ДатаР+Сутки;
		КонецЕсли;
        Месяцев = Месяцев+1;
    КонецЦикла;
    Месяцев = Месяцев-1;
    Лет = Цел(Месяцев/12);
    Месяцев = Месяцев-Лет*12;
    Дней = Цел((Объект.ЛюбаяДата-ДобавитьМесяц(ДатаР,-1))/Сутки);
    Объект.КоличествоДней = "Лет: "+Строка(Лет)+" Месяцев: "+Строка(Месяцев)+" Дней: "+Строка(Дней);
Показать
22. avart2006 04.05.17 09:47 Сейчас в теме
Вот мой реально работающий код в отчете:

Лет=0; Мес=0; Дн=0;	
РазобратьРазностьДат(ДатаКон, ДатаНач, Лет, Мес, Дн);
ЛетС = ФормаМножественногоЧисла("год","года","лет",Лет);	
МесС = ФормаМножественногоЧисла("месяц","месяца","месяцев",Мес);
ДнС = ФормаМножественногоЧисла("день","дня","дней",Дн);
СтрокаИтог = СокрЛП(?(Лет>0,Строка(Лет)+" "+ЛетС,"")+" "+?(Мес>0,Строка(Мес)+" "+МесС,"")+" "+Строка(дн)+" "+ДнС);

Функции:*****************************************************************************************************
Функция ФормаМножественногоЧисла(Слово1, Слово2, Слово3, Знач ЦелоеЧисло) 
	
	// Изменим знак целого числа, иначе отрицательные числа будут неправильно преобразовываться
	Если ЦелоеЧисло < 0 Тогда
		ЦелоеЧисло = -1 * ЦелоеЧисло;
	КонецЕсли;
	
	Если ЦелоеЧисло <> Цел(ЦелоеЧисло) Тогда 
		// для нецелых чисел - всегда вторая форма
		Возврат Слово2;
	КонецЕсли;
	
	// остаток
	Остаток = ЦелоеЧисло%10;
	Если (ЦелоеЧисло >10) И (ЦелоеЧисло<20) Тогда
		// для второго десятка - всегда третья форма
		Возврат Слово3;
	ИначеЕсли Остаток=1 Тогда
		Возврат Слово1;
	ИначеЕсли (Остаток>1) И (Остаток<5) Тогда
		Возврат Слово2;
	Иначе
		Возврат Слово3;
	КонецЕсли;

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

Процедура РазобратьРазностьДат(Дата1, Дата2, Лет = 0, Месяцев = 0, Дней = 0)	
	Лет		= 0;
	Месяцев	= 0;
	Дней	= 0;
	Если Дата1 > Дата2 Тогда
		
		ВременнаяДата = Дата1;
		Если День(ВременнаяДата) < День(Дата2) Тогда
			Дней = (ВременнаяДата - ДобавитьМесяц(ВременнаяДата,-1))/86400;
			ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-1);
		КонецЕсли;
		Если Месяц(ВременнаяДата) < Месяц(Дата2) Тогда
			ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-12);
			Месяцев = 12;
		КонецЕсли;
		Лет		= Макс(			 Год(ВременнаяДата)		- Год(Дата2),	0);
		Месяцев	= Макс(Месяцев	+ Месяц(ВременнаяДата)	- Месяц(Дата2),	0);
		Дней	= Макс(Дней		+ День(ВременнаяДата)	- День(Дата2),	0);
		
		// скорректируем отображаемое значение, если ""вмешалось"" разное количество дней в месяцах
		Если Дата2 <> (ДобавитьМесяц(Дата1,-Лет * 12-Месяцев)-Дней * 86400) Тогда
			Дней = Дней + (День(КонецМесяца(Дата2)) - День(НачалоМесяца(Дата2))) - (День(КонецМесяца(ДобавитьМесяц(Дата1,-1))) - День(НачалоМесяца(ДобавитьМесяц(Дата1,-1))));
		КонецЕсли;
		
	КонецЕсли;
КонецПроцедуры
Показать
32. v3rter 05.05.17 14:10 Сейчас в теме
недокументированная Разндат() экселя считает, что 8
33. Vlan 11 05.05.17 14:26 Сейчас в теме
(32)Тогда получается, что полных 9 месяцев никогда не будет, что несколько странно. Придется еще костылей добавлять.
34. v3rter 05.05.17 14:29 Сейчас в теме
С 31.05.2016 по 01.03.2017эксель считает 9 полных месяцев, или я что-то не понял?
35. Vlan 11 05.05.17 14:34 Сейчас в теме
(34)У меня получается 0 дней, если числа дат совпадают. Следующая дата это уже n-месяцев + 1 день.
37. bashhhh 25 19.03.19 22:40 Сейчас в теме
Вроде можно проще:

ПолныхЛет = Год(ТекДата) - Год(ДатаРождения) 
					- ?(Месяц(ТекДата) < Месяц(ДатаРождения) 
						Или Месяц(ТекДата) = Месяц(ДатаРождения) И День(ТекДата) < День(ДатаРождения), 
 						1, 0);
Samarin; TSSV; katakuna; +3 Ответить
38. D.Gal 5 07.04.19 21:45 Сейчас в теме
(37) Вы когда этот комментарий писали, думали хоть, что в контексте моего запроса и задачи он вообще ничего значит. Зачем мне количество полных лет кодом, когда я написал, что задачу необходимо решать запросом было? Или Вы может не мне написали?
39. [4EPHbIYY_KOT] 37 28.06.19 11:59 Сейчас в теме
(38) Дали задачу в ЗУП 3.1 посчитать стаж работника на предприятии относительно даты приёма. Чтоб не рисовать новый код и отчёт, взял отчёт "Штатные сотрудники". Изменяя вариант, добавил в предприятии 3 пользовательских поля-выражения:

Лет, выражение:
РазностьДат([Дата приема], ТекущаяДата(), "ГОД") + Выбор
Когда Месяц([Дата приема]) < Месяц(ТекущаяДата()) Или Месяц([Дата приема]) = Месяц(ТекущаяДата()) И День([Дата приема]) <= День(ТекущаяДата())
Тогда 0
Иначе -1
Конец

Месяцев, выражение:
(РазностьДат(ДобавитьКДате([Дата приема], "Месяц", 1), ТекущаяДата(), "МЕСЯЦ") + Выбор
Когда День([Дата приема]) <= День(ТекущаяДата())
Тогда 1
Иначе 0
Конец) % 12

Дней, выражение:
Выбор
Когда День([Дата приема]) <= День(ТекущаяДата())
Тогда День(ТекущаяДата()) - День([Дата приема])
Иначе День(ТекущаяДата()) + РазностьДат([Дата приема], КонецПериода([Дата приема], "Месяц"), "День")
Конец + 1.

В детальных записях их вывел и сгруппировал в группу "Стаж на предприятии". Кадровики довольны.
Но это писал на языке СКД, в обычных запросах надо дописать несколько строк, чтобы получить остаток от деления на 12 при вычислении полных месяцев, а текущую дату втыкать параметром в запрос. Думаю, в решении Вашей задачи вполне может помочь.
Оставьте свое сообщение

См. также

СКД. Отчеты с картинками 178

Статья Программист Нет файла v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Работа с интерфейсом

Решение популярных кейсов с картинками в отчетах на СКД.

25.09.2019    4729    YPermitin    24       

Группировка данных в запросе (СГРУППИРОВАТЬ ПО [ГРУППИРУЮЩИМ НАБОРАМ], ИТОГИ ПО [ОБЩИЕ]) 38

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Бесплатно (free) Практика программирования

Для группировки данных в языке запросов 1С существуют конструкции СГРУППИРОВАТЬ ПО [ГРУППИРУЮЩИМ НАБОРАМ], ИТОГИ ПО [ОБЩИЕ]. Для новичков назначение этих конструкций не всегда очевидно, попробуем разобраться на примерах, для чего предназначена каждая из них и в чем отличие от аналогичных конструкций в языке SQL.

19.09.2019    3285    sertak    7       

СКД не только для отчетов 139

Статья Программист Нет файла v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

СКД позволяет получать данные из информационной базы не только для вывода в отчеты, но и для других целей. Пример такого использования рассматривается в настоящей статье.

18.09.2019    7073    YPermitin    31       

Количество NULL в запросе 1

Статья Программист Нет файла v8 v8::Запросы Россия Бесплатно (free) Практика программирования

При определении количества элементов в виде "NULL" в результирующей таблице запроса нам возвращается значение "0".

17.09.2019    1305    toxilamer    18       

Агрегатные функции СКД, о которых мало кто знает 322

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    10394    ids79    42       

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив 245

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    10820    ids79    24       

"Меньше копипаста!", или как Вася универсальную процедуру писал 170

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    6314    SeiOkami    48       

Выборка дней рождения 3

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Бесплатно (free) Практика программирования Разработка

Выборка позволяет создать таблицу значений из справочника (или из чего-то подобного) с днями рождения с наперед заданными условиями.

26.06.2019    1367    user654641_yaga_m    6       

Создание отчетов с помощью СКД - основные понятия и элементы 198

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    17871    ids79    17       

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017 176

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    11655    dmurk    134       

Почему вообще работает мой запрос? или Ещё раз о планах запросов 45

Статья Программист Нет файла v8::Запросы Бесплатно (free) Практика программирования Математика и алгоритмы Разработка

Другие статьи на эту тему объясняют, что такое план выполнения запроса, но не рассказывают о том, как его получить. Эта заметка призвана заполнить этот пробел. Её цель - популяризировать общедоступные инструменты получения плана запроса среди разработчиков, которые ещё не начали их использовать.

10.06.2019    5578    DataReducer    12       

Работа с запросами. Получение последней цены товара из табличной части документа. Несколько вариантов 12

Статья Программист Стажер Нет файла v8 v8::Запросы УПП1 Windows Бесплатно (free) Практика программирования Разработка

На нескольких собеседованиях это спрашивали, решил поделиться. Обычно я использую вариант №2. Остальные варианты нашел в интернете.

05.06.2019    2986    wowik    26       

Регистры накопления. Структура хранения в базе данных 174

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    17405    YPermitin    27       

Выполнение внешней обработки в фоновом задании 147

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    10013    Eret1k    22       

Выгрузка документа по условию 5

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    4902    m-rv    2       

Как прикрутить ГУИД к регистру сведений 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    7475    m-rv    16       

Заметки по SQL: Запрос, получающий изменения ресурса в регистрах сведений по периоду 10

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Россия Бесплатно (free) Практика программирования Разработка

В статье описан метод получения изменения ресурса регистра сведений, построенный на основе запроса "Сумма накоплением".

11.04.2019    2473    IVC_goal    11       

Альтернативный вариант расчета возраста (лет, месяцев, дней) запросом 7

Статья Программист Нет файла v8::Запросы 1cv8.cf Украина Бесплатно (free) Практика программирования Разработка

Появилась задача вычислить возраст человека на определенную дату. Сначала был написан вариант кодом, через цикл, но замер производительности показал, что подобное решение "тяжеловесное". Более того, я знаю, что задача будет повторяться, причем данные нужно будет выдавать запросом. Было решено сделать определенный шаблон, на основании которого можно было бы писать другие решения.

11.04.2019    2117    lex_hrabovskyi    12       

О расширениях замолвите слово... 192

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования Разработка

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    16511    ellavs    122       

Git-репозитории для 1С-кода (опыт использования при небольших проектах) 200

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    12853    ellavs    83       

Трюки с внешними источниками данных 164

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    12962    YPermitin    52       

Добавление отчетов в типовые конфигурации 1С 201

Статья Программист Нет файла v8::УФ v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции БСП (Библиотека стандартных подсистем)

Описание различных способов добавления общих и контекстных отчетов в конфигурации 1С, построенные на базе БСП. Основные моменты и нюансы.

07.03.2019    23554    ids79    32       

Заметки по SQL: Генерация ряда дат и данные из периодических регистров на каждый день 14

Статья Программист Нет файла v8::Запросы Бесплатно (free) Практика программирования Разработка

В публикации описывается запрос на классическом SQL, позволяющий получить периодические данные на каждый день на примере формирования цен номенклатуры и остатков регистра накопления "ТоварыНаСкладах". Генератор ряда дат для запроса, построен на основе порождающего запроса.

05.03.2019    2603    IVC_goal    0       

Функциональные опции 1С 8.3 – все возможные варианты использования 170

Статья Программист Нет файла v8::УФ 1cv8.cf Бесплатно (free) Практика программирования Разработка

Примеры использования функциональных опций для управления интерфейсом и элементами управляемых форм, с различными вариантами хранения значений: константа, реквизит справочника, ресурс регистра сведений.

22.02.2019    15986    ids79    5       

Информирование пользователя. Работа с объектом «СообщениеПользователю» 249

Статья Программист Нет файла v8::УФ 1cv8.cf Бесплатно (free) Практика программирования Разработка

Различные варианты и нюансы использования объекта СообщениеПользователю и другие способы информирования пользователя: без привязки к какой-либо форме и с выводом сообщения в отдельном окне.

15.02.2019    17215    ids79    34       

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS) 163

Статья Программист Нет файла v8 v8::Права Бесплатно (free) Практика программирования БСП (Библиотека стандартных подсистем) Роли и права

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    15714    ids79    9       

Новый подход к обмену данными EnterpriseData 203

Статья Программист Нет файла v8 v8::УФ Россия Бесплатно (free) Практика программирования Обмен через XML

Хочу предложить Вашему вниманию цикл статей, посвященных обмену данными через универсальный формат (EnterpriseData или ED).

14.12.2018    21646    ids79    72       

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С 126

Статья Программист Нет файла v8 v8::blocking 1cv8.cf Бесплатно (free) Математика и алгоритмы Практика программирования

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    20995    ids79    40       

Отладка запроса с содержимым временных таблиц (управляемые формы) 64

Статья Программист Нет файла v8 v8::УФ v8::Запросы 1cv8.cf Россия Бесплатно (free) Практика программирования

Получение данных запроса из отладки. Загрузка текста запроса, параметров, данных временных таблиц

01.11.2018    11328    Evg-Lylyk    43       

Вспомогательные инструкции в коде 1С 104

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    20586    tormozit    100       

Произвольный код в фоновом режиме 165

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Задача: реализовать выполнение произвольного кода в фоновом режиме без изменения конфигурации, т.е. во внешней обработке.

03.09.2018    14706    nikita0832    41       

Приемы работы с СКД: делаем за 5 минут то, на что у других уйдет час 376

Статья Программист Нет файла v8::СКД Бесплатно (free) Практика программирования

Сергей Наумов делится опытом нестандартного использования системы компоновки данных. Он рассказывает о построении сложных отчетов с помощью функций СКД, описывает преимущества использования компоновки в коде для значительного сокращения строк кода и времени на решение задач, а также рассказывает про отладку компоновки и возможности оптимизации ее работы.

03.09.2018    31213    SergeyN    26       

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C 144

Статья Программист Нет файла v8 Россия Бесплатно (free) Математика и алгоритмы Практика программирования

У многих начинающих 1С программистов часто возникают вопросы про клиент-серверное взаимодействие в 1С и чтобы разобраться в непростых механизмах платформы, необходимо понять, что же такое контекст, для чего предназначены директивы компиляции, что представляют собой контекстные/внеконтекстные вызовы и как наиболее оптимально описывать прикладные задачи в модулях управляемых форм.

23.08.2018    21456    Rain88    42       

Зачем запросу план и кто его выполняет? 175

Статья Программист Нет файла v8::Запросы Бесплатно (free) Практика программирования

Как определить, почему запрос выполняется слишком долго? Что происходит с запросом на стороне сервера баз данных? В статье приводится объяснение, что такое план запроса и для чего он нужен. А также говорится о том, в чем разница между потоком операторов и потоком данных, как работает оптимизатор и зачем нужна статистика.

09.08.2018    18208    Dem1urg    44       

Повышаем эффективность разработки правил обмена 124

Статья Программист Нет файла v8 КД ОС Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    19392    olegtymko    47       

Введение в механизм представлений в ЗУП ред. 3 153

Статья Программист Нет файла v8 v8::СПР ЗУП3.x Бесплатно (free) Практика программирования

В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое "Представления".

04.06.2018    24534    xrrg    82       

Как сделать запрос на изменение данных 75

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Бесплатно (free) Практика программирования

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    21289    m-rv    21       

Строим графы средствами 1С (без GraphViz) 42

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    17068    slozhenikin_com    19       

Распределение расходов пропорционально продажам 9

Статья Программист Пользователь Нет файла v8 v8::ОУ УТ10 УУ Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Бесплатно (free) Практика программирования

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    11416    Rustig    9       

Просмотр временных таблиц запроса в отладчике без изменения кода 126

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Бесплатно (free) Практика программирования

Данный способ можно использовать для просмотра содержимого временных таблиц запросов (менеджеров временных таблиц) без внесения изменений в код.

24.04.2018    24641    avfed@rambler.ru    19       

Минимализмы 3 353

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Универсальные функции

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    35771    ildarovich    44       

Этюды по программированию. Взаимодействие с Microsoft Word 109

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Часто приходится заниматься созданием сложных документов Word с таблицами, вложенными фрагментами, хитрым оформлением и прочими радостями жизни. Это - попытка как-то структурировать полученный опыт, чтобы не приходилось перерывать ворох старых обработок в поисках крупиц истины. Надеюсь, эта статья будет полезна и Вам.

11.12.2017    25935    milkers    23