Особенности ВИСОКОСНОГО года в СТАНДАРТНЫХ ОТЧЕТАХ

26.05.13

Разработка - Механизмы платформы 1С

Иногда требуется сравнивать текущий период с аналогичным прошлого года (Например, в "Отчете о финансовых результатах"), но стандартные методы в случае високосного года могут дать "неправильный" результат...

    В  стандартных отчетах для получения данных аналогичного периода предыдущего года используется встроенная функция примерно такого вида:

ДобавитьМесяц(ДатаОкончанияТекущегоПериода, -12) ;

Если отчет строиться поквартально, то ничего страшного, т.к. февраль не является концом квартала.

Но если получать данные по месяцам - в случае предыдущего високосного года получим:

ДатаОкончанияТекущегоПериода='20130228';

ДатаОкончанияПредыдущегоПериода= ДобавитьМесяц(ДатаОкончанияТекущегоПериода, -12);

ДатаОкончанияПредыдущегоПериода ='20120228'; Хотя 2012 год високосный и в феврале в нем 29 дней!!! 

 И если ДатаОкончанияПредыдущегоПериода используется для получения Бухгалтерских итогов (или других данных) за период, то соответственно выпадут движения за 29/02/2012 !!!

Чтобы этого недопустить я использую конструкцию:

ДатаОкончанияПредыдущегоПериода= КонецМесяца(ДобавитьМесяц(ДатаОкончанияТекущегоПериода, -12));

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

23.06.2024    7451    bayselonarrend    20    

154

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    5943    dsdred    16    

80

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    17672    YA_418728146    26    

71

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    11224    dsdred    44    

130

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    23761    SeiOkami    48    

135

Механизмы платформы 1С Системный администратор Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    18831    human_new    27    

80

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14732    YA_418728146    7    

166
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. q_i 584 09.03.13 13:37 Сейчас в теме
Не очень понятно почему результат ДобавитьМесяц('20130228', -12) = '20120228' называется в статье "неправильным". Я бы как раз очень удивился, если бы вдруг оно выдало '20120229'.
Кстати говоря, даже если бы год и не был бы високосным - всё равно пришлось бы использовать как минимум КонецДня() чтобы не выпали обороты за 28/02.
hogik; Said; Diversus; +3 Ответить
2. AnryMc 848 09.03.13 16:06 Сейчас в теме
(1) q_i,

Не очень понятно почему результат ДобавитьМесяц('20130228', -12) = '20120228' называется в статье "неправильным".


Потому, что во всех виденным мною стандартных отчетах от 1С для получения данных прошлого периода используется метод:
 ДобавитьМесяц( , -12)


Во всех случаях конец месяца текущего периода и прошлого совпадает: 31 января, 28 февраля, ... 31 декабря. Да и чаще в стандартные периоды (квартал) - февраль не попадает.

Но всё таки иногда нужен и он (февраль) и может случиться неприятность о которой я и предупреждаю здесь...
3. hogik 443 09.03.13 16:17 Сейчас в теме
(2)
Вопрос к Вам.
А какой результат будет при выполнении:
ДобавитьМесяц('20120229', -12)
4. AnryMc 848 09.03.13 16:42 Сейчас в теме
(3) hogik,

Как не странно, но
ДобавитьМесяц('20120229', -12)
='20110228' - просто чудо!
5. hogik 443 09.03.13 17:12 Сейчас в теме
(4)
;-)
Тогда еще проще проверьте:
ДобавитьМесяц('20130131', +1)
ДобавитьМесяц('20130228', -1)
6. AnryMc 848 09.03.13 19:12 Сейчас в теме
(5) hogik,
ДобавитьМесяц('20120131', +1) 29.02.2012 00:00:00 Дата
ДобавитьМесяц('20130228', -1) 28.01.2013 00:00:00 Дата
ДобавитьМесяц('20130228', +1) 28.03.2013 00:00:00 Дата
ДобавитьМесяц('20130131', +1) 28.02.2013 00:00:00 Дата
ДобавитьМесяц('20120229', +1) 29.03.2012 00:00:00 Дата
ДобавитьМесяц('20120229', +3) 29.05.2012 00:00:00 Дата

Эксперемент должен быть завершён выводом...
7. hogik 443 09.03.13 19:27 Сейчас в теме
(6)
"Особенностью функции является то, что она учитывает количество дней в месяце и возвращает тот же день результирующего месяца, который имела начальная дата. Исключение составляют случаи, когда в результирующем месяце дней недостаточно, тогда выводится максимальная дата в месяце."(с)
Примерно, так: http://www.about1c.ru/?prog77-function-addmonth
И это никак не связано с високосным годом. ;-)
8. AnryMc 848 10.03.13 10:53 Сейчас в теме
(7) hogik,

Код из типовой конфигурации:

// Процедура устанавливает границы периода построения отчета.
//
// Параметры:
//  Шаг          - число, количество стандартных периодов, на которое необходимо
//                 сдвигать период построения отчета;
//
Процедура ИзменитьПериод(Шаг)

	Если Периодичность = Перечисления.Периодичность.Месяц Тогда
		мДатаКонцаПериодаОтчета  = КонецМесяца(ДобавитьМесяц(мДатаКонцаПериодаОтчета, Шаг));
		мДатаНачалаПериодаОтчета = НачалоМесяца(мДатаКонцаПериодаОтчета);

	ИначеЕсли Периодичность = Перечисления.Периодичность.Квартал Тогда
		мДатаКонцаПериодаОтчета  = КонецКвартала(ДобавитьМесяц(мДатаКонцаПериодаОтчета, Шаг*3));
		мДатаНачалаПериодаОтчета = НачалоКвартала(мДатаКонцаПериодаОтчета);

	КонецЕсли;

	ПоказатьПериод();

КонецПроцедуры // ИзменитьПериод()
Показать


Пока все хорошо...
Но вот дальше...

	
// Расчет итогов за аналогичный период прошлого года
	мБухИтоги22.РассчитатьИтоги("Хозрасчетный", Итоги, "Сумма", "Счет,КорСчет", НачалоГода (ДобавитьМесяц(мДатаНачалаПериодаОтчета,-12)), ДобавитьМесяц(мДатаКонцаПериодаОтчета, -12), , , , , , "Организация", Организация);


Что мы получим за фавраль 2012 года? Правильно - исчезнет 29 число!
9. andrewks 1375 10.03.13 10:58 Сейчас в теме
(8) ну, это скорее говорит о кривизне рук писателей типовых, нежели о кривизне рук писателей платформы.

скажем так: со стороны ДобавитьМесяц() и её описания всё нормально. а вот код в типовой неверный
10. AnryMc 848 10.03.13 11:05 Сейчас в теме
(9) andrewks,

А я и не гроворил о платформе...

(хотя - наверно название статьи наводит на эту мысль, но трудно дать объемное и Короткое определение.)
11. hogik 443 10.03.13 17:36 Сейчас в теме
(8)
... (AnryMc).
Поставил "плюс" под (1) и (9) сообщениями.
И ничего не поставил под публикацию. ;-)
12. AnryMc 848 27.05.13 09:03 Сейчас в теме
(11) hogik,

А почему Вы думаете, что цель публикации только получить "+"?
А как насчет желания поделиться "граблями" на которые наткнулся сам и хочешь предупредить других?
13. hogik 443 27.05.13 16:58 Сейчас в теме
(12)
"А почему Вы думаете, что цель публикации только получить "+"? "(с)
А почему Вы думаете, что я так думаю? :-) :-) :-)
В (11) сообщении я образно выразил свое мнение по теме "Особенности ВИСОКОСНОГО года...". Т.е. подвел итог нашей мартовской беседе. Ну, нет никаких особенностей в годе.
Хотя, думаю, имеет смысл обратить внимание других людей на "грабли" ИХ понимания функции ДобавитьМесяц().
Оставьте свое сообщение