Итак, в ходе рутинного пересчета итогов из Конфигуратора мы неожиданно получили ошибку «номер года в литерале типа дата превышает 3999». Это значит, где-то в базе есть (или пытается появиться) дата больше, чем предельно допустимая с точки зрения 1С (31.12.3999 23:59:59).
Ладно, что с этим делать?
Главное — выйти на конкретную таблицу с проблемными датами. Ошибка возникла при пересчете итогов, так что очевидно: искать нужно в регистрах. Открываем стандартную обработку управления итогами, делаем пересчет и получаем имя регистра, на котором спотыкается платформа.
Другой, более методологически правильный подход — настроить сбор ТЖ (SDBL, EXCP и EXCPCNTX) и получить примерно такой лог. Ищем в нём событие EXCP (исключение), а непосредственно перед ним — событие SDBL (SQL-запрос в терминах платформы). Этот запрос — причина сбоя; в его тексте видим имя нужной нам таблицы (AccumRgTn11530). Имя объекта конфигурации для неё можно вытащить любой обработкой, построенной на методе ПолучитьСтруктуруХраненияБазыДанных().
В общем, так или иначе мы получим имя регистра. Открываем его форму и простой сортировкой по периоду выходим на проблемные движения. Нужно проанализировать документы, которые их сделали, устранить причину ошибки и перепровести документы. Если после этого проблема с пересчетом останется — это либо не единственная таблица с проблемными датами (ищем дальше), либо эти даты успели засесть где-то ещё, кроме таблицы движений.
Например, у меня был случай, когда после исправления движений записи с некорректными датами сохранялись в таблице оборотов. Средствами платформы их удалить было нельзя, но размер базы позволял играться с реструктуризацией. Я выкинул следующий финт: отключил признак «Использование в итогах» для всех измерений регистра и применил изменения; потом вернул признак на место и пересчитал итоги. В итоге таблица оборотов регистра была физически удалена, а потом создана и наполнена заново — уже без дат на много веков вперёд.
В крайнем случае можно было удалить проблемные записи с помощью прямых SQL-запросов (DELETE или даже TRUNCATE). Но это, во-первых, нарушает лицензионное соглашение с разработчиками платформы, а во вторых — опасно (по неосторожности можно удалить что-то важное и не заметить). Так что не советую, э-э, повторять в домашних условиях 🙂
2021-02-06 19:13:53
1С
Ошибка выполнения запроса “Номер года в литерале типа ‘Дата’ превышает 3999.” |
Я |
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
в поиске был?
2 – 19.05.10 – 10:13
был
3 – 19.05.10 – 10:13
это не та ошибка, когда в регистр забили неправильную дату
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
8 – 20.05.10 – 11:47
да нет, не с файловой.
несколько лет работали до этого в серверном режиме.
скрипт посмотрим. спасибо
9 – 20.05.10 – 12:08
сомневаюсь, что этот скрипт нам как-то поможет, потому что ошибка появляется динамически и такие даты в базе нигде не хранятся.
10 – 21.05.10 – 10:35
Вчера была снова такая проблема.
Решили немного потестировать.
Выполняем запрос к регистрам – 344 строки выводятся нормально, а начиная с 345 все поля с типом дата содержат 30.11.0001.
Любой запрос.
Интересный глюк.
11 – 21.05.10 – 10:48
(10) сбой с датой в 8.2 на форуме описан многократно
проявляется даже в длинных списках и ТЧ
12 – 21.05.10 – 11:42
(11) решение найдено?
13 – 21.05.10 – 11:52
(12) не интересовался
14 – 07.06.10 – 21:21
А что слышно по поводу этого глюка? Меня то же уже задрало постоянно сервер дергать!
15 – 07.06.10 – 22:02
все так же. аналогичная ситуация 🙁
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)
Поиск
-
18.07.2011, 12:25
#1
Гость форума
Кто такой литерал и почему он больше 3999 ?
Дело было так…
Есть ИБ УПП 8.2 релиз 1.2.39.1, есть небольшие дописки не изменяющие саму структуру.
Работает в скульном варианте на SQL 2008, платформа 8.2.13.219.
При обновлении на релиз 1.3.13.1 выдает ошибку следующего содержания:
3999.JPG
Вот собственно и вопрос, что это за дата? Как ее найти и исправить?
P.S. Обновить в файловом варианте не получается, база большая, крутиться уже несколько суток безрезультатно :(.
-
19.07.2011, 16:02
#2
Просто юзер
3999 – по эту дату идет расчет итогов, насколько я понимаю убрать ее нельзя
-
20.07.2011, 15:33
#3
Гость форума
pups23, как-то вроде получается и ответили, а выхода из ситуации-то так и не предложили.
-
20.07.2011, 16:52
#4
Просто юзер
Я не спец по УПП, думаю так, может где – то год превышает отметку 3999.Тут смотреть надо———- Post added at 16:52 ———- Previous post was at 16:47 ———-Вот тебе вариант: попробуй набрать в гугле номер года в литерале типа ‘дата’ превышает 3999 – выдает много чего может что и пойдет тебе
Может даже такой вариант: http://it-buh.narod.ru/fmista/v8/v8_…034/471151.htm )))
-
22.07.2011, 09:32
#5
Гость форума
К сожалению банально перезагрузкой сервера это не лечиться 🙁 А гуглить пробовал, на самом деле ничего путного нет, статей про это тоже нет, в основном ответы на форумах и решения которые помогли, по счастливой случайности, отдельным субъектам не имеющие под собой какого-либо внятного объяснения.
-
25.07.2011, 15:49
#6
Гость форума
Проблема решена! Были найдены три документа с пустой датой! Скорее всего такое произошло при интерактивном создании документов или после свертывания ИБ.
-
Пользователь сказал cпасибо:
Похожие темы
-
Ответов: 1
Последнее сообщение: 06.04.2010, 21:01
-
Ответов: 14
Последнее сообщение: 22.10.2009, 09:11
-
Ответов: 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
сообщений