Перейти к содержимому


(РЕШЕНО) Неделя года НеделяГода() работает не по ГОСТ-календарю?


Сообщений в теме: 11

#1 Gellemar

    Частый гость


  • 76 сообщений

Отправлено 21 февраля 2012 - 08:54

вот данные из отладчика

строка(НеделяГода(Дата("201202260000")))

по моему календарю - это вроде как 8-я неделя... :(

#2 Gellemar

    Частый гость


  • 76 сообщений

Отправлено 21 февраля 2012 - 09:01

Просмотр сообщенияGellemar (21 февраля 2012 - 08:54) писал:

вот данные из отладчика

строка(НеделяГода(Дата("201202260000")))

по моему календарю - это вроде как 8-я неделя... :(

А 8-ка дает 9-ю (

#3 BabySG

    Любитель программирования


  • 12 211 сообщений

Отправлено 21 февраля 2012 - 09:03

Цитата

Считается, что способ определения номера недели (как и дня начала недели) является завимиым от локейла. То есть, в общем случае, в разных странах способы расчета номера недели отличаются. Функция НомерНедели() использует некоторый собственный алгоритм, не зависящий от локейла. В нем предполагается, что если хотя бы один день недели оказался в году (в начале года), то это уже неделя, имеющая номер. Началом недели всегда является понедельник. Например, если 1 января - воскресенье, то 1 января относится к первой неделе, а 2 января - ко второй.

Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#4 Requin

    Ветеран


  • 1 234 сообщений

Отправлено 21 февраля 2012 - 09:03

В вашем календаре 1-ое января к какой неделе относится? Я думаю тут различия в расчетах.
Если тебе что-то не нравится, то не спеши это исправлять, если не помнишь, для чего это сделали.
Изображение

#5 Gellemar

    Частый гость


  • 76 сообщений

Отправлено 21 февраля 2012 - 09:16

Нифига ничего нигде не отличается. И любая трансконтинентальная компания работает с учетом этого ИСО.

Стандарт ISO 8601 и соответствующий ему межгосударственный стандарт ГОСТ ИСО 8601-2001 "ПРЕДСТАВЛЕНИЕ ДАТ И ВРЕМЕНИ".
По данному стандарту, первой неделей года является та неделя, на которую попадает первый четверг данного года. То есть в 2012 году первый четверг года попадает на 5 января. Значит 1 неделя 2012 года начинается со 2 января 2012 года. 1 января 2012 попадает на последнюю неделю 2011 года (для 2011 года - неделя под номером 52). Все это может приводить к доволе интересным результатам: год может содержать 52 или 53 недели. 29, 30, 31 декабря могут относиться к первой неделе следующего года (в случае попадания 1 января следующего года на четверг). Также может случиться наоборот, что 1, 2, и 3 января могут относиться к последней недели прошлого года (52 или 53 неделя в зависимости от года).
Стандарт ISO 8601 и соответствующий ему межгосударственный стандарт ГОСТ ИСО 8601-2001 "ПРЕДСТАВЛЕНИЕ ДАТ И ВРЕМЕНИ".
По данному стандарту, первой неделей года является та неделя, на которую попадает первый четверг данного года. То есть в 2012 году первый четверг года попадает на 5 января. Значит 1 неделя 2012 года начинается со 2 января 2012 года. 1 января 2012 попадает на последнюю неделю 2011 года (для 2011 года - неделя под номером 52). Все это может приводить к доволе интересным результатам: год может содержать 52 или 53 недели. 29, 30, 31 декабря могут относиться к первой неделе следующего года (в случае попадания 1 января следующего года на четверг). Также может случиться наоборот, что 1, 2, и 3 января могут относиться к последней недели прошлого года (52 или 53 неделя в зависимости от года).

1С как и во многих других случаях, приняло все детали во внимание.

БЛИН.
как минимум за этот год разосланные везде статотчеты неверны.

#6 BabySG

    Любитель программирования


  • 12 211 сообщений

Отправлено 21 февраля 2012 - 09:17

Функция ЕвропейскаяНеделяГода(дНужнаяДата) ЭКСПОРТ
Если НЕ ЗначениеЗаполнено(дНужнаяДата) Тогда
    Возврат 0;
КонецЕсли;
чДеньНеделиНачалаГода = ДеньНедели(НачалоГода(дНужнаяДата));
Если чДеньНеделиНачалаГода <= 4 Тогда
    чСмещение = 0;
Иначе
    чСмещение = 1;
КонецЕсли;
чЕвропейскаяНеделя = НеделяГода(дНужнаяДата) - чСмещение;
Если чЕвропейскаяНеделя = 0 Тогда
    Возврат НеделяГода(НачалоГода(дНужнаяДата) - 1);
Иначе
    Возврат чЕвропейскаяНеделя;
КонецЕсли;
КонецФункции

Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#7 Gellemar

    Частый гость


  • 76 сообщений

Отправлено 21 февраля 2012 - 09:21

Спасибо огромное.

Но мой авторитет непоправимо уже постадал... :(( наполовину не шутка.
Жаль, что мы не в Европе и не в штатах....засудил бы :)))

#8 BabySG

    Любитель программирования


  • 12 211 сообщений

Отправлено 21 февраля 2012 - 09:26

Ну, попробовали бы и получили бы иск на оплату судебных издержек, т.к. 1С в данном случае оставляет "AS IS".

Ибо расчеты, как Вам уже указали, отличаются по разным методикам (Вы взяли только ISO, а их еще много....)
Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#9 uza

    1С, VBA (EXCEL), VB (.NET + WEB)


  • 1 338 сообщений

Отправлено 21 февраля 2012 - 09:41

:) Вы еще начните доказывать что новый год - это 01.01.хххх

Финансовый год, например - он же фискальный год, в России начинается 1 января, а в США с 1го Октября, у Японцев с 1го Апреля


P.S.
США и их "засудят" - пример развесистой клюквы насаждаемой Галивудом и Задорновым.
На самом деле все не совсем так, как вещает зомбоящик.
Ибо как заметил BabySG - выйгрыш еще может быть, а может и не быть, а вот финансовые издержки будут однозначно (и не всегда они будут покрыты в случае выигрыша). И это не говоря про временные издержки.
И за случайно обраненное пидgay вы рискуете получить по епаface и в Москве, и в Нью-Йорке, и в любом колхозе Алабымы. Без суда и следствия, да.
Не все полезно - что в БД залезло

#10 Gellemar

    Частый гость


  • 76 сообщений

Отправлено 21 февраля 2012 - 09:58

Понятно, что все судебные перспективы, это наполовину шутка, но как минимум можно было бы требовать от 1С:

1. Применения стандартов ИСО к своей работе, раз они требуют этого от нас.
2. Ну или как минимум, расшифровывать сразу алгоритм работы своей "спорной" функции в документации.

#11 BabySG

    Любитель программирования


  • 12 211 сообщений

Отправлено 21 февраля 2012 - 10:08

1. Этот вопрос рассматривался, принято решение не переделывать (для обратной совместимости). Возможно, коогда-нибудь добавят параметр для этого.
2. Это вообще беда 1С
Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#12 Gellemar

    Частый гость


  • 76 сообщений

Отправлено 21 февраля 2012 - 10:20

1. Ну да. Чтобы оставить полную совместимость им надо было бы делать вторую функцию. Что, конечно, коряво.

спасибо всем.
Думаю можно в архив тему.





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных