Разность дат

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

Разработка - Универсальные функции

Разность дат

Иногда требуется получить разность дат в виде типа: 5 дней 6 месяцев 4 года. Это можно сделать с помощью запроса, получив на выходе сразу 3 нужных числа, без последующих вычислений.

Вот отрывок кода:

	Запрос = Новый запрос("ВЫБРАТЬ
	                      |	ВЫБОР
	                      |		КОГДА РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ДЕНЬ) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Д1, МЕСЯЦ), НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), МЕСЯЦ), ДЕНЬ) < 0
	                      |			ТОГДА ДЕНЬ(КОНЕЦПЕРИОДА(&Д1, МЕСЯЦ)) + РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ДЕНЬ) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Д1, МЕСЯЦ), НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), МЕСЯЦ), ДЕНЬ)
	                      |		ИНАЧЕ РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ДЕНЬ) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Д1, МЕСЯЦ), НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), МЕСЯЦ), ДЕНЬ)
	                      |	КОНЕЦ КАК Дни,
	                      |	ВЫБОР
	                      |		КОГДА РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ДЕНЬ) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Д1, МЕСЯЦ), НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), МЕСЯЦ), ДЕНЬ) < 0
	                      |			ТОГДА ВЫБОР
	                      |					КОГДА РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), МЕСЯЦ) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Д1, ГОД), НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ГОД), МЕСЯЦ) < 0
	                      |						ТОГДА 12 + РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), МЕСЯЦ) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Д1, ГОД), НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ГОД), МЕСЯЦ)
	                      |					ИНАЧЕ РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), МЕСЯЦ) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Д1, ГОД), НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ГОД), МЕСЯЦ)
	                      |				КОНЕЦ - 1
	                      |		ИНАЧЕ ВЫБОР
	                      |				КОГДА РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), МЕСЯЦ) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Д1, ГОД), НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ГОД), МЕСЯЦ) < 0
	                      |					ТОГДА 12 + РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), МЕСЯЦ) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Д1, ГОД), НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ГОД), МЕСЯЦ)
	                      |				ИНАЧЕ РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), МЕСЯЦ) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Д1, ГОД), НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ГОД), МЕСЯЦ)
	                      |			КОНЕЦ
	                      |	КОНЕЦ КАК Месяцы,
	                      |	ВЫБОР
	                      |		КОГДА РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), МЕСЯЦ) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Д1, ГОД), НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ГОД), МЕСЯЦ) < 0
	                      |			ТОГДА РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ГОД) - 1
	                      |		ИНАЧЕ РАЗНОСТЬДАТ(&Д1, ДОБАВИТЬКДАТЕ(&Д2, ДЕНЬ, 1), ГОД)
	                      |	КОНЕЦ КАК Годы");


                Запрос.УстановитьПараметр("Д2",КонечнаяДата);
                Запрос.УстановитьПараметр("Д1",НачальнаяДата);
                ТабДМГ=Запрос.Выполнить().Выгрузить();
                Стр = ТабДМГ[0];

                 Сообщить("Разность дат составляет: "+Стр.Дни+" дней "+Стр.Месяцы+" месяцев "+Стр.Годы+" лет ");

Конечно, можно ещё дописать правильность написания дней, месяцев и лет в зависимости от числа. Но это уже другая тема.

Тут мы вычисляем:

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

 * для месяцев - так же берем общее количество месяцев и отнимаем уже учтенное количество месяцев, а это разница между началами наших лег. Это число уже тоже будет учтено в строке с раcчетом года. Но при расчете месяца также проверяем число полученных месяцев на отрицательность. Если число месяцев отрицательно - значит мы перешли в новый год, но фактически год между датами ещё не прошел. Чтобы учесть это, мы прибавляем к отрицательному числе месяцев 12.

 * для года  - берем количество лет между датами. Но если количество месяцев было отрицательным, то мы отнимаем один год, т.к. он, все же, ещё не прошел.

И я прибавляю ко второй дате один день,т.к. мне нужно чтобы этот последний день был включен в расчет. 

Ну, вот как-то так. Если будут какие-то вопросы - пишите.

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. rybusha 97 11.08.17 13:09 Сейчас в теме
(0)Идея хорошая, но ошибка в днях.
Прикрепленные файлы:
2. user623969_dusa 11.08.17 13:12 Сейчас в теме
високосные года отрабатывает?
3. jun-ko 22 11.08.17 13:15 Сейчас в теме
Високосные отрабатывает.
С днями надо сделать так же как с месяцами. Сейчас сделаю.
4. jun-ko 22 11.08.17 13:35 Сейчас в теме
Дни исправлены ) Спасибо за замечание.
5. rybusha 97 11.08.17 13:45 Сейчас в теме
6. jun-ko 22 11.08.17 13:53 Сейчас в теме
7. user599011_nusmancrb 11.08.17 14:36 Сейчас в теме
Отлично. Возьму на вооружение)
8. nytlenc 11.08.17 15:01 Сейчас в теме
Орда непросвещённых, восторгаясь творением выстроились ставить звезды статьям об элементарных вещах!
Скоро статья в которой будет написано 2 + 2 = 4 будет собирать тысячи лайков....
9. jun-ko 22 11.08.17 15:05 Сейчас в теме
(8) Да. Не все достигли такого уровня просвещения, как вы. )
user871995; Help-GROUP; rpgshnik; Dmitri93; +4 Ответить
10. sssss_aaaaa_2011 11.08.17 15:32 Сейчас в теме
(0) А по какой из существующих методик считает сей запрос? Или вы не в курсе о существовании таких? Или может таки появилась одна универсальная методика? Где о ней почитать? В каких месяцах считаем? В январях? Февралях? Средних? Фиксированных?
Почему разница между 29.01.2017 и 01.03.2017 по результатам запроса составляет 1 мес и 4 дня? С какого перепугу? Почему не 1 мес и 1 день под одной самой распространенной методике? Или 0 мес и 30 дней по другой распространенной методике?
alest; rpgshnik; mikele_bes; sasha777666; +4 Ответить
11. psih12 131 11.08.17 16:21 Сейчас в теме
Как аналитик, хочу Вам сказать, что, к примеру одной из самых распространенных ошибок у менеджеров является расчет количества дней продаж того или иного товара за период. Считают они как простая разность дат ДатаКонца-ДатаНачала, не учитывая,что ДатаНачала тоже является днём продажи. К примеру:

ДатаНачала - 01.01
ДатаКонца - 05.01

Количество дней продаж у менеджеров - 5-1= 4 дня

А на самом деле - 5-1+1=5 дней.
Поэтому поддерживаю автора комментария в том,что в запрос необходимо добавить ещё один параметр - учитывать начальную дату или нет - и, соответственно, дописать запрос.
13. DoctorRoza 16.08.17 10:54 Сейчас в теме
Не вникая в запрос, что если находить РАЗНОСТЬДАТ в виде секунд, а потом их превращать в годы/месяцы/дни? Или, все-таки, городить огород!?
14. sssss_aaaaa_2011 16.08.17 11:52 Сейчас в теме
(13) Сколько секунд в месяце? В каком? А считаем в каких месяцах?

ps: одни пытаются создать вечный двигатель, другие простую формулу расчета разницы дат в нефиксированных единицах измерения. И те, и другие, видимо, до сих пор не знают, что уже доказана невозможность сделать желаемое по законам физики/математики. И тем, и другим кажется, что вот только чуть-чуть доработать и все будет ништяк...
15. rpgshnik 2374 16.08.17 12:48 Сейчас в теме
16. maxis33 41 16.08.17 18:01 Сейчас в теме
Соглашусь про наличие кучи методик.
Например у нас широко используется функция считающая количество месяцев для периода, причем результатом является, например, число 3,43434.. это происходит из за того, что "ставка" - годовая, и выставляется каждый месяц в размере 1/12.
17. DrAku1a 1402 17.08.17 03:25 Сейчас в теме
Ох, люблю я эти извращения! )
18. Altair777 640 18.08.17 12:15 Сейчас в теме
(0) А почему именно запросом?
19. duhh 211 31.10.17 16:09 Сейчас в теме
Криво считает, например 19.11.16 и 31.10.17.
20. sdjoker 7 27.02.18 15:55 Сейчас в теме
а я накидал функцию

// Вычисляет разницу между двух дат
// Параметры:
//   Дата1 - дата - Дата первая
//   Дата2 - дата - Дата вторая
//   Точность - число - результат выполнения функции:
//		0 - лет, месяцев, дней, часов, минут, секунд
//		1 - месяцев, дней, часов, минут, секунд
//		2 - дней, часов, минут, секунд
//		3 - часов, минут, секунд
// 		4 - минут, секунд
//		5 - секунд
//
// Возвращаемое значение:
//	Структура:
//		- Лет - Число - количество лет
//		- Месяцев - Число - количество месяцев
//		- Дней - Число - количество дней
//		- Часов - Число - количество часов
//		- Минут - Число - количество минут
//		- Секунд - Число - количество секунд
//
Функция РазностьДатТиповой(Дата1, Дата2, Точность)
 
	Результат = Новый Структура("Лет,Месяцев,Дней,Часов,Минут,Секунд", 0, 0, 0, 0, 0, 0);
 
	ДатаНач	= ?(Дата1 < Дата2, Дата1, Дата2);
	ДатаКон	= ?(Дата1 < Дата2, Дата2, Дата1);
 
	// Секунды
	Если Точность = 5 Тогда // До секунд
		Результат.Секунд = ДатаКон - ДатаНач;
	Иначе
		Разница = Секунда(ДатаКон) - Секунда(ДатаНач);
		Результат.Секунд = ?(Разница < 0, 60+Разница, Разница);
		ДатаНач = ДатаНач + Результат.Секунд;
	КонецЕсли;
 
	// Минуты
	Если Точность = 4 Тогда // До минут
		Результат.Минут = (ДатаКон - ДатаНач) / 60;	
	ИначеЕсли Точность < 4 Тогда
		Разница = Минута(ДатаКон) - Минута(ДатаНач);
		Результат.Минут = ?(Разница < 0, 60+Разница, Разница);
		ДатаНач = ДатаНач + Результат.Минут * 60;
	КонецЕсли;
 
	// Часы
	Если Точность = 3 Тогда // До часов
		Результат.Часов = (ДатаКон - ДатаНач) / 3600;	
	ИначеЕсли Точность < 3 Тогда
		Разница = Час(ДатаКон) - Час(ДатаНач);
		Результат.Часов = ?(Разница < 0, 24+Разница, Разница);
		ДатаНач = ДатаНач + Результат.Часов * 3600;
	КонецЕсли;
 
	// Дни
	Если Точность = 2 Тогда // До дней
		Результат.Дней = (ДатаКон - ДатаНач) / 86400;	
	ИначеЕсли Точность < 2 Тогда
		Разница = День(ДатаКон) - День(ДатаНач);
		Результат.Дней = ?(Разница < 0, (ДатаКон - ДобавитьМесяц(ДатаКон,-1))/86400 + День(ДатаКон) - День(ДатаНач), Разница);
		ДатаНач = ДатаНач + Результат.Дней * 86400;
	КонецЕсли;
 
	// Месяцы
	Если Точность = 1 Тогда // До месяцев
		Результат.Месяцев = Месяц(ДатаКон) - Месяц(ДатаНач) + (Год(ДатаКон) - Год(ДатаНач)) * 12;	
	ИначеЕсли Точность < 1 Тогда 
		Результат.Месяцев = (Месяц(ДатаКон) - Месяц(ДатаНач) + (Год(ДатаКон) - Год(ДатаНач)) * 12) %12;
		ДатаНач = ДобавитьМесяц(ДатаНач, Результат.Месяцев);
	КонецЕсли;
 
	// Годы
	Если Точность = 0 Тогда // До годов
		Результат.Лет = Год(ДатаКон) - Год(ДатаНач);	
	КонецЕсли;	
 
	Возврат Результат;
 
КонецФункции // ()
Показать
Sintson; BigB; +2 Ответить
21. Tolpinski 57 14.05.18 13:33 Сейчас в теме
На "КОНЕЦ - 1" в каком случае переходим?
09.02.2011 - 04.02.2012 например
22. Tolpinski 57 14.05.18 14:28 Сейчас в теме
В ЗУП 2.5 есть функция в модуле ОбщегоНазначенияЗК, работает на мой взгляд корректнее, да и проще визуально

// Процедура вычисляет количество лет, месяцев и дней между двумя датами
//
// Параметры
// Дата1 – дата, первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату)
// Дата2 – дата, вторая дата (ранняя дата, с нее начинается "течение" стажа)
// Лет – Число, в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2)
// Месяцев – Число, в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2)
// Дней – Число, в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2)
//
Процедура РазобратьРазностьДат(Дата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) Тогда
Дней = Дней + ((ДобавитьМесяц(Дата1,-Лет*12-Месяцев)-Дней*86400) - Дата2)/86400;
//(День(КонецМесяца(Дата2)) - День(НачалоМесяца(Дата2))) - (День(КонецМесяца(ДобавитьМесяц(Дата1,-1))) - День(НачалоМесяца(ДобавитьМесяц(Дата1,-1))));
КонецЕсли;

КонецЕсли;

КонецПроцедуры // РазобратьРазностьДат
Aleskey_K; capitan; +2 Ответить
23. BigB 181 25.07.19 14:45 Сейчас в теме
Добавлю свой запрос:
ВЫБРАТЬ
	Годы.Лет КАК Лет,
	РАЗНОСТЬДАТ(Годы.ДХ, &Д2, МЕСЯЦ) - Годы.Х КАК Месяцев,
	РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(Годы.ДХ, МЕСЯЦ, РАЗНОСТЬДАТ(Годы.ДХ, &Д2, МЕСЯЦ) - Годы.Х), &Д2, ДЕНЬ) КАК Дней
ИЗ
	(ВЫБРАТЬ
		РАЗНОСТЬДАТ(&Д1, &Д2, ГОД) - ВЫБОР
			КОГДА ДЕНЬГОДА(&Д1) > ДЕНЬГОДА(&Д2) ТОГДА 1
			ИНАЧЕ 0
		КОНЕЦ КАК Лет,
		ДОБАВИТЬКДАТЕ(&Д1, ГОД, РАЗНОСТЬДАТ(&Д1, &Д2, ГОД) - ВЫБОР
				КОГДА ДЕНЬГОДА(&Д1) > ДЕНЬГОДА(&Д2) ТОГДА 1
				ИНАЧЕ 0
			КОНЕЦ) КАК ДХ,
		ВЫБОР
			КОГДА ДЕНЬ(&Д1) > ДЕНЬ(&Д2) ТОГДА 1
			ИНАЧЕ 0
		КОНЕЦ КАК Х) КАК Годы
Показать

Тренировался на датах:
Д1=13.12.1976
Д2=10.08.2017

Д1=29.01.2017
Д2=01.03.2017

Д1=19.11.2016
Д2=31.10.2017

Д1=09.02.2011
Д2=04.02.2012

И сверял с онлайн калькулятором.
Вроде всё работает правильно.
24. spacecraft 25.07.19 15:28 Сейчас в теме
(23)
Вроде всё работает правильно.

не совсем...
Д1 = 01.03.2015
Д2 = 29.02.2016

Лет = 1
Месяц = -1
Дней = 28
25. BigB 181 29.07.19 11:07 Сейчас в теме
Запрос исправил. Теперь работает правильно.
ВЫБРАТЬ
	Годы.Лет КАК Лет,
	РАЗНОСТЬДАТ(Годы.ДХ, &Д2, МЕСЯЦ) - Годы.Х КАК Месяцев,
	РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(Годы.ДХ, МЕСЯЦ, РАЗНОСТЬДАТ(Годы.ДХ, &Д2, МЕСЯЦ) - Годы.Х), &Д2, ДЕНЬ) КАК Дней
ИЗ
	(ВЫБРАТЬ
		РАЗНОСТЬДАТ(&Д1, &Д2, ГОД) - ВЫБОР
			КОГДА ДОБАВИТЬКДАТЕ(&Д1, ГОД, РАЗНОСТЬДАТ(&Д1, &Д2, ГОД)) > &Д2
				ТОГДА 1
			ИНАЧЕ 0
		КОНЕЦ КАК Лет,
		ДОБАВИТЬКДАТЕ(&Д1, ГОД, РАЗНОСТЬДАТ(&Д1, &Д2, ГОД) - ВЫБОР
				КОГДА ДОБАВИТЬКДАТЕ(&Д1, ГОД, РАЗНОСТЬДАТ(&Д1, &Д2, ГОД)) > &Д2
					ТОГДА 1
				ИНАЧЕ 0
			КОНЕЦ) КАК ДХ,
		ВЫБОР
			КОГДА ДЕНЬ(&Д1) > ДЕНЬ(&Д2)
				ТОГДА 1
			ИНАЧЕ 0
		КОНЕЦ КАК Х) КАК Годы
Показать

Период: 31.10.1960 - 30.09.2001
Если смотреть эти калькуляторы
Калькулятов дней
Калькулятор дней
то получается: 40 лет 10 месяцев 30 дней

А если смотреть эти
Калькулятор подсчёта трудового стажа
Калькулятор стажа
то получается: 40 лет 11 месяцев

Вопрос к знатокам: Какой алгоритм правильный?
Оставьте свое сообщение

См. также

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    76761    Serginio    108    

Отпускной период (период основного отпуска) - как его узнать

Зарплата Универсальные функции v8 v8::СПР v8::УФ ЗУП3.x Россия БУ Бесплатно (free)

Пришла мне задача где нужно получить отпускной период, на просторах сети решения я не нашел. Решил поделиться с вами своим решением.

26.10.2020    196    Danila7Zz    1    

Произвольные колонтитулы и повтор шапки таблицы в табличном документе (функция)

Универсальные функции v8 Бесплатно (free)

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

07.10.2020    943    ellavs    1    

Печать в word, pdf через html

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

При работе с клиентами возникла задача: использовать форматированный документ. Итак, существует справочник, в нем табличная часть. Для каждой строки требуется ввести описание, причем описание имеет тип форматированный документ. Потребовалось организовать печать табличной части справочника с описанием для каждой строки. Тип данных "Форматированный документ" не может выводится в табличный документ, поэтому пришлось организовывать печать через Microsoft Word.

11.09.2020    784    arr    4    

Универсальные функции с примерами использования Промо

Универсальные функции v8 Бесплатно (free)

14 универсальных функций, с примерами использования - для обычного и управляемого интерфейса

26.02.2016    41319    unichkin    46    

Самый простой парсинг и обработка веб-страниц в 1С

WEB Универсальные функции v8 1cv8.cf Бесплатно (free)

Рассмотрим самый простой парсинг веб-страниц средствами платформы 1С и еще некоторые полезные приемы работы с веб-страницами.

07.08.2020    4773    YPermitin    18    

Выполнение внешней обработки по расписанию для управляемого и обычного приложения

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

Использование БСП для выполнения внешних обработок в управляемом и обычном приложении

06.08.2020    1418    RPGrigorev    0    

Пользовательское поле СКД одной процедурой

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

Быстрое создание пользовательского поля "выражение" одной процедурой

05.08.2020    1591    Yashazz    0    

Минимализмы 3 Промо

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

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

19.02.2018    46799    ildarovich    45    

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

Универсальные функции v8 БП3.0 УТ11 Россия Бесплатно (free)

В данном обзоре приведу примеры встроенных используемых функций для работы с печатными формами на примерах конфигураций Управление торговлей 11.4 и Бухгалтерия 3.0.

10.07.2020    3020    quazare    5    

Вывод дерева в табличный документ СКД

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

Вывод содержимого элемента формы "ДанныеФормыДерево" в табличный документ средствами СКД.

09.07.2020    2648    Yashazz    6    

Команда "Вывести список" для динамического списка. Программное выполнение (вариант)

Универсальные функции v8::УФ 1cv8.cf Бесплатно (free)

Делаем свою кнопку вместо "Вывести список" из пункта "ещё" динамического списка.

11.06.2020    3094    DanDy    58    

Универсальная функция для программного выполнения СКД Промо

Инструментарий разработчика Универсальные функции v8::СКД 1cv8.cf Бесплатно (free)

Часто встречаются вопросы на форумах о программном формировании СКД. Вроде и информации много по этому поводу, но... Все как всегда :) Собственно, в описании без лишних слов выложен текст общей функции, в которую, для выполнения отчета, нужно передать (минимум 2 параметра): СКД и ТабличныйДокумент.

20.05.2015    30648    dj_serega    18    

Ещё немного функционального стиля в 1С или Как нам отфильтровать таблицу значений

Универсальные функции v8 Россия Бесплатно (free)

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

16.05.2020    2847    GlebHappy    34    

Сходство Джаро - Винклера. Нечеткое сравнение строк

Универсальные функции v8 Россия Бесплатно (free)

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

25.12.2019    7087    brooho    17    

Функция - Формат государственного номера автомобиля

Универсальные функции v8 Автомобили, автосервисы Россия Бесплатно (free)

Возникла необходимость в приведении к единому формату хранящихся, и вводимых вновь, автомобильных Регистрационных знаков - Гос.номер.

23.12.2019    3791    brooho    4    

Выполнение произвольного кода в фоновых заданиях Промо

Универсальные функции v8 Бесплатно (free)

Если надо быстро провести 100`000 документов...

13.01.2016    24690    unichkin    13    

Полезности | Дерево значений | Обычные формы |

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

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

04.12.2019    5704    Mellow    7    

Обработка расширением на клиенте

Расширения Универсальные функции v8::УФ 1cv8.cf Бесплатно (free)

Описываю нетривиальный прием работы с расширением, который позволит относительно быстро реализовывать некоторые обработки данных. Суть: обработка данных на клиенте с использованием методов, которые реализованы разработчиком конфигурации на форме объекта. Если эти методы есть вне модуля формы объекта (общий модуль, модуль менеджера, модуль объекта)- лучше сделать обработку более простым способом.

31.10.2019    7166    EvgenURNN    10    

Использование XML-схемы из макета внешней обработки

Обмен через XML Универсальные функции v8 1cv8.cf Бесплатно (free)

Простой способ использования XML-схем из макета внешней обработки.

28.10.2019    10975    Olesia_Matusevich    10    

Распределение оплаты по товарам Промо

Практика программирования Универсальные функции v8 1cv8.cf Бесплатно (free)

Учебная задача. Оплата приходит по заказу. Требуется запросом распределить её по товарам. Практическая задача была сложнее. Упростил специально для иллюстрации. Сначала собираем в одну таблицу заказы и товары. Затем ОБЪЕДИНТЬ ВСЕ с оплатами. Потом намазываем оплату на товар.

04.08.2014    19176    Трактор    5    

Быстрое создание наполненных коллекций

Практика программирования Универсальные функции v8 1cv8.cf Бесплатно (free)

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

28.10.2019    7222    SeiOkami    66    

Преобразование XML в таблицу значений или иной объект 1С методом XSL преобразования

Универсальные функции Обмен через XML v8 1cv8.cf Бесплатно (free)

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

24.10.2019    11500    kraspila    30    

Обертка функций Excel на русском. Ускорение процесса разработки.

Загрузка и выгрузка в Excel Универсальные функции v8 Бесплатно (free)

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

24.10.2019    7280    DmitryKotov    6    

Сканируем без сканера или MXL to JPG Промо

Внешние источники данных Универсальные функции Печатные формы документов v8 1cv8.cf Бесплатно (free)

Хотите конвертировать документы в формат изображения менее чем за минуту, не имея сканера? Тогда эта статья для вас.

24.05.2012    34156    shakmaev    47    

Функция СтрШаблон с именованными маркерами

Универсальные функции v8 1cv8.cf Бесплатно (free)

Функция позволяет задавать именованные маркеры формата [Имя], в отличии от типовых нумерованных формата %n

1 стартмани

21.10.2019    4512    kirinalex    27    

Полезняшки по СКД и построителям. Просто код

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

Полезные процедуры и функции для работы с построителями и СКД. Просто исходник.

10.10.2019    10077    Yashazz    45    

Отслеживание выполнения фонового задания

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

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

17.08.2019    32027    ids79    16    

Сохранение запроса со всеми параметрами и временными таблицами

Универсальные функции v8 v8::УФ Россия Бесплатно (free)

Функция сохранения запроса со всеми параметрами и временными таблицами в формате *.q1c для открытия в консоли запросов с диска ИТС.

13.05.2019    6523    Serge R    5    

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

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

Иерархия справочника Сверху Вниз. Функция для получения произвольного количества родителей "верхнего" уровня. На примере справочника "Номенклатура".

28.03.2019    6163    obsfromekb    11    

Доработка проведения типовых документов в УТ 11.4, КА 2.4, ЕРП 2.4

Практика программирования Универсальные функции Разработка v8 v8::УФ ERP2 УТ11 КА2 Россия УУ Бесплатно (free)

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

22.03.2019    18064    ids79    16    

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

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

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

07.03.2019    55253    ids79    46    

Расширение конструктора мобильного рабочего места для варианта "клиент 1С+RDP" (для любых wi-fi терминалов). Экосистема решений Simple WMS

Инструментарий разработчика Сканер штрих-кода Терминал сбора данных Универсальные функции Мобильная разработка Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ v8::УФ УУ Бесплатно (free)

Развитие проекта «Конструктор мобильного клиента на Android» https://infostart.ru/public/976636/ для устройств не на Андроиде (работающих в режиме RDP). В отличие от варианта Android работа на терминалах происходит в режиме 1С:Предприятие через RDP а конфигурации мобильных клиентов полностью совместимы для обоих версий. Т.е. конфигурация единая, создается один раз и ее может читать как Android -устройство, так и 1С-клиент на RDP без необходимости какой либо переделки.

05.02.2019    13099    informa1555    10    

Работа со строками: от простого к сложному

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

Простые примеры работы со строками, в конце более читаемый разбор сложных текстов.

14.01.2019    31535    Evg-Lylyk    17    

Нумерация колонок субконто при выгрузке набора записей регистра бухгалтерии в таблицу значений

Универсальные функции v8 Бесплатно (free)

Решение проблемы несовпадения номеров колонок с номерами субконто на счете при выгрузке в таблицу значений.

14.01.2019    5660    The Ded    6    

Многопоточное восстановление последовательностей

Производительность и оптимизация (HighLoad) Практика программирования Математика и алгоритмы Универсальные функции v8 Бесплатно (free)

Универсальный алгоритм многопоточного фонового восстановления любой последовательности.

05.12.2018    13373    _ASZ_    33    

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке

Универсальные функции Зарплата Управление персоналом (HRM) Зарплата v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Бесплатно (free)

В статье размещен список стандартных процедур и функций с примерами, которые могут помочь при разработке (доработке) конфигураций Зарплата и управление персоналом ред. 3.1 и Зарплата и кадры государственного учреждения 3.1. Иногда бывает довольно сложно правильно получить данные или долго, поэтому лучшим вариантом будет использование стандартных процедур. Буду очень признателен, если Вы поделитесь своим опытом и предложите свои варианты стандартных процедур которые помогают в работе. Или предложите, как дополнить имеющиеся процедуры.

14.11.2018    91131    GeterX    121    

Кадровые данные сотрудников в ЗУП 3.1 в отчетах

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

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

07.11.2018    34339    fromlion    23    

Добавление расшифровки в стандартные и добавленные внешние отчеты со стандартной формой отчета на СКД

Универсальные функции v8::УФ v8::СКД ERP2 УТ11 Россия Бесплатно (free)

Описан способ добавления расшифровки отчета на СКД как встроенного в систему, так и добавленного внешнего отчета.

27.09.2018    10948    bmk74    8    

Функция НайтиФайлы() в каталоге netshare на Linux - обход ошибки работы

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

Решение проблемы применения функции НайтиФайлы() в каталоге с netshare на Linux-сервере - не работает поиск файлов по указанной маске (шаблону)

19.09.2018    6340    drmaxart    3    

Простой способ программно открыть заполненную форму нового (незаписанного) документа в тонком клиенте

Универсальные функции v8 Бесплатно (free)

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

09.06.2018    11401    Serge R    12    

Генерация временного ряда запросом

Универсальные функции v8 v8::Запросы 1cv8.cf Бесплатно (free)

Способ генерации последовательности дат средствами языка запроса 1С.

07.05.2018    8758    dim_zal    6