четверг, 23 мая 2013 г.

1С неправильно расчитывает номер недели в году

     Для определения номера недели в конфигурациях 1С обычно используется стандартная функция НомерНеделиГода(). Судя по всему, 1С считает по американской системе:
"По европейской норме (DIN 1355 / ISO 8601) первой неделей года считается неделя, содержащая 4 января данного года (http://vsegost.com/Catalog/62/6263.shtml). А в США первой неделей считается любая неделя, содержащая первое января, независимо от числа дней".
     Чтобы 1С возвращала номер недели, совпадающий с "человеческими" календарями и ежедневниками, предлагается использовать следующую функцию:

Функция глНомерНеделиГода(_дата) Экспорт

   ЧетвертоеЯнваря = НачГода(_дата) + 3; 
   НачалоПервойНедели = НачНедели(ЧетвертоеЯнваря);  

   Если _дата < НачалоПервойНедели Тогда
      // дата принадлежит последней неделе прошлого года.
      Возврат глНомерНеделиГода(Дата(ДатаГод(_дата)-1, 12, 31));
   Иначе
      // получаем разницу дат в неделях.
      КоличествоНедель = Цел((НачНедели(_дата) - НачалоПервойНедели)/7);
      Возврат 1 + КоличествоНедель;
   КонецЕсли;

КонецФункции   // глНомерНеделиГода()



Обсуждение здесь: http://forum.infostart.ru/forum26/topic61578/

Комментариев нет: