Номер года в литерале типа дата превышает 3999 как исправить

Итак, в ходе рутинного пересчета итогов из Конфигуратора мы неожиданно получили ошибку «номер года в литерале типа дата превышает 3999». Это значит, где-то в базе есть (или пытается появиться) дата больше, чем предельно допустимая с точки зрения 1С (31.12.3999 23:59:59).

Исключение

Ладно, что с этим делать?

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

Другой, более методологически правильный подход — настроить сбор ТЖ (SDBL, EXCP и EXCPCNTX) и получить примерно такой лог. Ищем в нём событие EXCP (исключение), а непосредственно перед ним — событие SDBL (SQL-запрос в терминах платформы). Этот запрос — причина сбоя; в его тексте видим имя нужной нам таблицы (AccumRgTn11530). Имя объекта конфигурации для неё можно вытащить любой обработкой, построенной на методе ПолучитьСтруктуруХраненияБазыДанных().

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

Например, у меня был случай, когда после исправления движений записи с некорректными датами сохранялись в таблице оборотов. Средствами платформы их удалить было нельзя, но размер базы позволял играться с реструктуризацией. Я выкинул следующий финт: отключил признак «Использование в итогах» для всех измерений регистра и применил изменения; потом вернул признак на место и пересчитал итоги. В итоге таблица оборотов регистра была физически удалена, а потом создана и наполнена заново — уже без дат на много веков вперёд.

В крайнем случае можно было удалить проблемные записи с помощью прямых SQL-запросов (DELETE или даже TRUNCATE). Но это, во-первых, нарушает лицензионное соглашение с разработчиками платформы, а во вторых — опасно (по неосторожности можно удалить что-то важное и не заметить). Так что не советую, э-э, повторять в домашних условиях 🙂

2021-02-06 19:13:53



Ошибка выполнения запроса “Номер года в литерале типа ‘Дата’ превышает 3999.”

Я
   ILNIK

19.05.10 – 09:13

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

Запросы начинают возращать даты 30.11.0001. Помогает только перезапуск агента 1с.

В это же время начинают сыпаться ошибки при выполнении запросов: “Ошибка выполнения запроса “Номер года в литерале типа ‘Дата’ превышает 3999.”

Ошибка стала появляться после перехода на 8.2, примерно месяц назад.

В базе работает одновременно 100-150 пользователей

1С:Предприятие 8.2 (8.2.10.82)

Информация о системах:

агент 1с HP DL360 G3,2 ядра, 3,2 Гц, 2 диска по 36 гб, память 1,5 гб (PC2100) 2×256+2×512 (266)

sql HP DL380 G5, 2 ядра, 3 Гц, 8 дисков 72 гб, память 8 гб (DDR2-667 PC2-5300) 8×1024 (667)

   Нуф-Нуф

1 – 19.05.10 – 09:19

в поиске был?

   ILNIK

2 – 19.05.10 – 10:13

был

   ILNIK

3 – 19.05.10 – 10:13

это не та ошибка, когда в регистр забили неправильную дату

   ILNIK

4 – 20.05.10 – 09:22

ап

   Лефмихалыч

5 – 20.05.10 – 09:34

(0) на 8.2 перешли с файлового режима, я правильно понимаю?

   Лефмихалыч

6 – 20.05.10 – 09:52

я к тому, что 8.2 тут ни при чем. Это приколы 2005-го скуля.

Мы у себя полечили эту бороду вот этим запросом:

Declare TablesAndFields cursor for
SELECT objects.name as Tablename, columns.name as columnname
FROM
    dbo.sysobjects as objects
left join dbo.syscolumns as columns
on objects.id = columns.id
where objects.xtype = 'U'
and columns.xtype = 61

open TablesAndFields

Declare @TableName as varchar(100)
Declare @ColumnName as varchar(100)

FETCH NEXT FROM TablesAndFields
    into @TableName, @ColumnName

WHILE @@FETCH_STATUS = 0
BEGIN
    Exec ('update ' + @TableName + '
    set ' + @ColumnName + ' = ''2000-01-01 00:00:00''
    where ' + @ColumnName + ' > ''3999-12-31 23:59:59''')

   -- This is executed as long as the previous fetch succeeds.
   FETCH NEXT FROM TablesAndFields
    into @TableName, @ColumnName
END

close TablesAndFields
deallocate TablesAndFields
go

(0)только бакуп сделать не забудь. Дело было давно и что-то могло поменяться. Таким образом необходимы эксперименты на копиях живых людей перед применением на практике этого колдунства

   Лефмихалыч

7 – 20.05.10 – 09:53

+(6) скрипт устанавливает дату на 1 января 2000, если она в БД больше 31.12.3999

   ILNIK

8 – 20.05.10 – 11:47

да нет, не с файловой.

несколько лет работали до этого в серверном режиме.

скрипт посмотрим. спасибо

   ILNIK

9 – 20.05.10 – 12:08

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

   ILNIK

10 – 21.05.10 – 10:35

Вчера была снова такая проблема.

Решили немного потестировать.

Выполняем запрос к регистрам – 344 строки выводятся нормально, а начиная с 345 все поля с типом дата содержат 30.11.0001.

Любой запрос.

Интересный глюк.

   shuhard

11 – 21.05.10 – 10:48

(10) сбой с датой в 8.2 на форуме описан многократно
проявляется даже в длинных списках и ТЧ

   ILNIK

12 – 21.05.10 – 11:42

(11) решение найдено?

   shuhard

13 – 21.05.10 – 11:52

(12) не интересовался

   ChAlex

14 – 07.06.10 – 21:21

А что слышно по поводу этого глюка? Меня то же уже задрало постоянно сервер дергать!

   Seducer

15 – 07.06.10 – 22:02

все так же. аналогичная ситуация  🙁

   alexandrius

16 – 29.06.10 – 00:31

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

Данная ошибка признана разработчиками, временное решение только перезапуск агента. Разработчики обещали при след обновлении данную ошибку поправить.

Так что крепитесь вроде скоро выход обновления платформы может починят… 🙂

  

shuhard_серый

17 – 29.06.10 – 00:38

(16) оленей покорми
Технологическая платформа 1С:Предприятия 8. Версия 8.2.11.236
Список исправленных ошибок
#
Кластер серверов
Кластер серверов
10056636  Искажение дат при получении данных
Проблема:
При использовании 32-разрядного сервера Предприятия и СУБД MS SQL Server при получении данных из базы данных посредством запросов или обращением к прикладным объектам возможно искажение дат, если рабочий процесс rphost занимает более 1 Gb виртуального адресного пространства. Искаженные даты могут представляться как 30.11.0001 0:00:00.
Дата публикации: 2010-06-18

Автор mixqn, 28 авг 2013, 16:38

0 Пользователей и 1 гость просматривают эту тему.

что означает сообщение об ошибке из заголовка темы и как с ним бороться


Расширю описание проблемы, возможно это поможет.
Задача заключается в том, чтобы подключить терминал сбора данных (далее ТСД) к 1С через RDP так, чтобы работал сканер штрихкода.
Первый этап – «железная» часть считаем, что завершена, а именно: подключение к серверу по RDP есть, если открыть блокнот и нажать кнопку сканирования, в блокноте появляется штрих-код. Стало быть сканер работает и на сервер данные передает.

Идем далее. Надо чтобы оно работало из 1С. Если в 1С «встать» в текстовое поле и нажать кнопку сканирования, результат тот же – цифры штрихкода. Если же попробовать воспользоваться любой формой/обработкой, где обрабатывается внешнее событие – ничего не получается. Например, у нас в базе реализован поиск накладных по штрихкоду – просто в форме списка документов при считывании штрихкода должно происходить позиционирование на строке с документом. При сканировании штрихкода с ТСД выдается ошибка из заголовка темы.

Что может быть?
В какую сторону копать?


Может где то происходит ошибочное преобразование даты типа: ‘400101010101’


Это было мое первое предположение.
Полез смотреть код, которые ищет ссылку на документ. Там преобразование даты из кода.
С целью проверить предположение создал внешнюю обработку, в ней числовое поле и пробую функцией Дата() преобразовывать значения. Все вплоть до год 9999 “съедается” прекрасно, все что больше выдает совсем другую ошибку – “Преобразование значения к типу Дата не может быть выполнено”


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


Как запустить отладчик в этом режиме?
Т.е. у меня на рабочем компьютере конфигуратор, в руках ТСД, на нем через RDP рабочий стол терминального сервера, в нем сеанс 1С. В этом сеансе установлен (он там по умолчанию стоит – т.е. “серый”, снять нельзя) флаг “Отладка в текущем сеансе разрешена”. В конфигураторе на своей машине иду в пункт Отладка-Подключение, ставлю флаг “Искать предметы отладки на удаленном компьютере”, указываю имя сервера, жму обновить – ничего не происходит. В смысле не видно сеанса на терминальном сервере.

Где что проверить еще?

Добавлено: 28 авг 2013, 17:13


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

т.е. вроде как везде все хорошо, но для отладки сеанса не видно…


Теги:

  • Форум 1С

  • Форум 1С – ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • Номер года в литерале типа ‘Дата’ превышает 3999

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

  1. 18.07.2011, 12:25


    #1

    Cat-MF вне форума


    Гость форума


    Lightbulb Кто такой литерал и почему он больше 3999 ?

    Дело было так…
    Есть ИБ УПП 8.2 релиз 1.2.39.1, есть небольшие дописки не изменяющие саму структуру.
    Работает в скульном варианте на SQL 2008, платформа 8.2.13.219.
    При обновлении на релиз 1.3.13.1 выдает ошибку следующего содержания:
    3999.JPG
    Вот собственно и вопрос, что это за дата? Как ее найти и исправить?
    P.S. Обновить в файловом варианте не получается, база большая, крутиться уже несколько суток безрезультатно :(.


  2. 19.07.2011, 16:02


    #2

    pups23 вне форума


    Просто юзер


    По умолчанию

    3999 – по эту дату идет расчет итогов, насколько я понимаю убрать ее нельзя


  3. 20.07.2011, 15:33


    #3

    Cat-MF вне форума


    Гость форума


    По умолчанию

    pups23, как-то вроде получается и ответили, а выхода из ситуации-то так и не предложили.


  4. 20.07.2011, 16:52


    #4

    pups23 вне форума


    Просто юзер


    По умолчанию

    Я не спец по УПП, думаю так, может где – то год превышает отметку 3999.Тут смотреть надо———- Post added at 16:52 ———- Previous post was at 16:47 ———-Вот тебе вариант: попробуй набрать в гугле номер года в литерале типа ‘дата’ превышает 3999 – выдает много чего может что и пойдет тебе

    Может даже такой вариант: http://it-buh.narod.ru/fmista/v8/v8_…034/471151.htm )))


  5. 22.07.2011, 09:32


    #5

    Cat-MF вне форума


    Гость форума


    По умолчанию

    К сожалению банально перезагрузкой сервера это не лечиться 🙁 А гуглить пробовал, на самом деле ничего путного нет, статей про это тоже нет, в основном ответы на форумах и решения которые помогли, по счастливой случайности, отдельным субъектам не имеющие под собой какого-либо внятного объяснения.


  6. 25.07.2011, 15:49


    #6

    Cat-MF вне форума


    Гость форума


    По умолчанию

    Проблема решена! Были найдены три документа с пустой датой! Скорее всего такое произошло при интерактивном создании документов или после свертывания ИБ.


  7. Пользователь сказал cпасибо:


Похожие темы

  1. Ответов: 1

    Последнее сообщение: 06.04.2010, 21:01

  2. Ответов: 14

    Последнее сообщение: 22.10.2009, 09:11

  3. Ответов: 0

    Последнее сообщение: 08.02.2009, 03:54

Социальные закладки

Социальные закладки


Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
  • BB коды Вкл.
  • Смайлы Вкл.
  • [IMG] код Вкл.
  • [VIDEO] код Вкл.
  • HTML код Выкл.

Правила форума

Показывать по
10
20
40
сообщений

Новая тема

Ответить

SidorOL

Дата регистрации: 11.01.2011
Сообщений: 11

При загрузке данных из Бух 7.7.(рел 521) возникает ошибка :Ошибка при вызове метода контекста (Записать): Номер года в литерале типа ‘Дата’ превышает 3999. В чем ошибка и как ее обойти???

Vladko

Дата регистрации: 27.08.2007
Сообщений: 2643

попробовать пошаманить с количеством цифр года в дате документа в 7.7. сервис-параметры. Количество цифр переключить с 2 на 4. Может быть прокатит

SidorOL

Дата регистрации: 11.01.2011
Сообщений: 11

SidorOL

Дата регистрации: 11.01.2011
Сообщений: 11

EvIL LEO

Дата регистрации: 10.04.2007
Сообщений: 15

Логика подсказывает, что в базе есть документ с кривой датой типа 01.01.0001, может попробовать открыть общий журнал и найти его?

SidorOL

Дата регистрации: 11.01.2011
Сообщений: 11

8.2 пустая. Формируются документы ввода остатков (в 8.2). откуда там кривые даты? Ведь из 7.7 выгружаем только остатки , а не докменты?!

avdmail

Дата регистрации: 27.02.2006
Сообщений: 24

А справочники в которых могут быть периодические элементы…. Попробуйте обновиться до последней конфигурации. 1с в некоторых последних конфигурацию убрала эту ошибку при переносе….

Vladko

Дата регистрации: 27.08.2007
Сообщений: 2643

тогда только отладчиком в 8ке посмотреть, какую дату он пытается сформировать.

Показывать по
10
20
40
сообщений

Добавить комментарий