1с смещение дат 2000 что это
Перейти к содержимому

1с смещение дат 2000 что это

  • автор:

v8: Устанавливаем 1С 8.2. на SQL. Подскажите, что означает галка "Смещение дат"?

При создании базы с параметром смещения равным 2000 часто решается проблема «не уникальности» индексов на «датах».

Для работы наибольшего количества информационных баз достаточно дат больших 1 января 1753 года. Установка смещения дат 2000 ведет к усложнению обслуживания информационной базы и незначительному снижению производительности, поскольку все даты базы данных получают неестественные значения и требуют преобразования при чтении, записи и использовании.

1. Это проблема присуща толко MS SQL Server ( например на DB2 такой заморочки нет вообще). Изначально смещение — это формат хранения дат в субд.

2. Короткий пересказ мыслей разработчиков » Литерал ДАТАВРЕМЯ(1, 1, 1) адекватно представляется на всех СУБД и считается нулевой датой. Даты от ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) до ДАТАВРЕМЯ(1, 1, 1, 23, 59, 59) считаются временем без даты и тоже адекватно интерпретируются на всех СУБД. Различное поведение возможно для дат из диапазона с ДАТАВРЕМЯ(1, 1, 2) по ДАТАВРЕМЯ(1752, 12, 31, 23, 59, 59). Эти даты не могут быть представлены на MS SQL Server с нулевым смещением дат и могут интерпретироваться либо как нулевые даты, либо вызывать ошибку операций над данными.

В результате можно получить ошибку вроде Microsoft OLE DB Provider for SQL Server: Adding a value to a ‘datetime’ column caused overflow. HRESULT=80040E07, SQLSrvr: Error state=1, Severity=10, native=517, line=1

3. И хотя официальная позиция 1С туманна :), не стоит искать приключения .

Выбирайте смещение 2000.

Данный параметр определяет число лет, которое будет прибавляться к датам при их сохранении в базе данных Microsoft SQL Server и вычитаться при их извлечении. Он может принимать значения 0 или 2000.

Если установить смещение дат 0, то:
при записи дат в диапазоне с 00:00:00 1 января 1 года по 23:59:59 1 января 1 года даты будут переводиться в диапазон с 00:00:00 1 января 1753 года по 23:59:59 1 января 1753 года, а при чтении — обратно;
даты 1С:Предприятия с 00:00:00 2 января 1753 года по 23:59:59 31 декабря 3999 года будут записываться в базу данных без изменений;
попытка записи в базу данных дат с 00:00:00 2 января 1 года по 23:59:59 1 января 1753 года будет приводить к ошибке.

Если смещение дат установлено в 2000, то при записи в базу данных к дате будет прибавлено 2000 лет, а при чтении из базы данных — вычтено 2000 лет. Это позволит записывать в базу данных любые даты 1С:Предприятия. Однако, при этом незначительно снизится скорость работы с базой данных, и при просмотре базы данных средствами, отличными от 1С:Предприятия, все даты окажутся измененными.

Таким образом, если при работе с информационной базой может возникнуть необходимость хранения дат, предшествующих 1 января 1753 года, то в качестве значения параметра следует выбрать 2000. Если же такие даты встречаться не будут, то в качестве смещения дат можно выбрать 0.

Важно, что нулевое значение смещения дат может привести к нежелательным ошибкам. Эти ошибки возникают, если конфигурация все-таки выполняет попытки записи дат, предшествующих 1 января 1753 года, которые не планировались. Поэтому для смещения дат при создании информационной базы «1С:Предприятие 8.2» в качестве значения по умолчанию предлагает использовать значение 2000.

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

Как увеличить скорость работы 1С в 100 раз прямым обращением к MSSQL

Возникла задача пометить на удаление документы за 1 год. Эта операция выполняется перед бесследным удалением и включает выставление отметки и удаление движения по регистрам. Пробное удаление штатными средствами одного месяца заняло 4 часа. Это означало, что 12 месяцев удалялись бы 48 часов (2 суток). Забегая вперед, скажу, что прямым доступом к 1С документы удаляются за 30-40 минут. Обращение к MSSQL выполнялось через .Net framework и компонент .Net Bridge.

Определение имен таблиц MSSQL

Структура базы данных 1С весьма запутана и состоит из малозначимых для человека названий. 1С содержит функцию определения структуры хранения по имени объекта. В основу разработки положена эта функция ПолучитьСтруктуруХраненияБазыДанных, которая согласно русскому названию возвращает описание структуры. В этой структуре важны 2 поля Назначение, которое должно быть равно «Основная», и название таблицы ИмяТаблицыХранения.

Определение смещения дат

Таблица _YearOffset содержит число, обозначающее смещение года дат. Оно принимает значение 0 или 2000. Так со смещением 2000 дата 01.01.2014 будет храниться в базе данных как 01.01.4014. Соответственно при отборе по датам (удаление происходит за период времени) нужно учитывать смещение. Смещение можно получить следующим кодом 1С:

Установка пометки на удаление документов

Имея названия таблиц документов и зная, что поля _Date_Time, _Marked и _Posted отвечают за дату, отметку об удалении и отметку о проведении соответственно, можно одним SQL-запросом пометить их все на удаление. Делается это так:

Установка пометки на удаление в журналах документов

Не смотря на установку отметки на удаление у документов, в журналах документов хранятся дубли отметок об удалении на каждый документ. Список журналов, где участвует документ можно получить из метаданных документа так: Метаданные.ЖурналыДокументов
Отметка на удаление через поля _Marked и _Posted происходит аналогично через команду:

Удаление движений регистров

При удалении документов 1С удаляет движения документа по регистрам. В случае прямого доступа эти движения нужно удалить самостоятельно. Список регистров можно получить через метаданные ДокументМетаданные.Движения.
Команда, которой выполняется удаление движений следующая:

Заключение

Как оказалось, добиться убыстрения работы 1С примерно на 2 порядка не так сложно, достаточно выполнить 3 вида команд. В конечной обработке логика расширена за счет выбора документов по видам, добавлением таймаута, добавлением транзакции, пакетным выполнением команд.

PS. Список возникающих проблем и пути устранения:
1. Обработка игнорирует документы, где запрещено проведение, например, корректировка записей регистров. В корректировке записей регистров удаление документа связано со снятием активности записей регистров.
2. Результат удаления не отражается в планах обмена. Решается одновременным запуском обработки в связанных базах.
3. Не затрагивает таблицы итогов. Решается пересчетом итогов через Конфигуратор-Тестирование и Исправление-Пересчет итогов.

Администрирование серверов1С предприятие

Создание резервной копии в клиент-серверном варианте

Рекомендуется для клиент-серверного варианта использовать средствами резервного копирования SQL Server . Материалы по резервному копированию СУБД Microsoft SQL Server 2012 можно найти по ссылке здесь :

Администрирование кластера серверов

Вопросы дминистрирования кластера серверов пожно посмотреть подробно по ссылке http://v8.1c.ru/overview/Term_000000810.htm

Консоль или утилита администрирования кластеров 1cv8 servers.msc представляет собой подключаемый модуль MMC (Microsoft Management Console), и может быть использована на компьютерах, на которых установлено соответствующее программное обеспечение. По умолчанию устанавливается в папке C:\Program Files (x86)\1cv8\common

Утилита администрирования кластеров предназначена для решения следующих задач:

  • создание, изменение и удаление кластеров серверов;
  • модификация существующих кластеров: создание, изменение параметров и удаление рабочих серверов, назначение требований функциональности к рабочим серверам;
  • установка уровня отказоустойчивости кластера;
  • ручная корректировка нагрузки на отдельные рабочие серверы;
  • управление списками администраторов центральных серверов кластеров и списками администраторов кластеров;
  • мониторинг соединений пользователей с информационными базами и служебных соединений;
  • отключение пользователей от информационной базы;
  • мониторинг объектных блокировок 1С:Предприятия 8 и блокировок клиентского соединения;
  • оперативный анализ транзакционных блокировок системы управления базами данных;
  • управление блокировкой установки соединений пользователей с информационной базой;
  • управление блокировкой выполнения регламентных заданий.

В этой статье я буду только рассматривать регистрацию новой информационной базы

Регистрация новой информационной базы

Для регистрации новой информационной базы с помощью утилиты администрирования кластера серверов следует выбрать в дереве центральных серверов требуемый центральный сервер, требуемый кластер, зарегистрированный на этом сервере, ветку Информационные базы и выполнить команду контекстного меню Создать – Информационная база или аналогичную команду главного меню утилиты.

В результате выполнения команды на экране появится диалог свойств информационной базы.

Параметры информационной базы эквивалентны параметрам новой информационной базы, создаваемой с помощью окна запуска «1С:Предприятия».

Тип СУБД: Microsoft SQL Server.

Сервер баз данных: имя сервера. Может задаваться именем компьютера (если на компьютере установлен один экземпляр сервера) или именем конкретного экземпляра (если установлено несколько экземпляров). Например, Server/instance. Если сервер «1С:Предприятия» и Microsoft SQL Server расположены на одном компьютере, и для Microsoft SQL Server установлен Native Client (собственный клиент), то имеется возможность использовать для связи серверов протокол SHARED MEMORY. Для этого необходимо перед именем Microsoft SQL Server указать префикс lpc:. В этом случае имя сервера СУБД будет выглядеть следующим образом: lpc:Server/instance

Имя базы данных: первым символом имени базы данных может быть буква латинского алфавита, а также символ «_». Последующими символами могут быть буквы латинского алфавита, цифры, а также символы «_», «$». Длина имени ограничена 63 символами. В имени недопустимы пробелы. Имя не может быть зарезервированным словом языка запросов сервера баз данных. В имени базы данных нельзя использовать следующие символы: «<», «>», «#», «%», «”», «<», «>», «[»,«]»,«|»,«\»,«^»,«`», а также символы с кодами от 0 до 31 и 127

Пользователь базы данных: имя пользователя сервера баз данных, от лица которого будет осуществляться доступ к базе данных. Существенно, чтобы указанный пользователь был либо администратором сервера баз данных (sa), либо владельцем базы данных (если она уже существует), для того чтобы в дальнейшем беспрепятственно модифицировать структуру выбранной базы данных. В последнем случае этот пользователь должен иметь доступ на чтение к базе данных master и полный доступ к базе данных tempdb. Кроме перечисленного, указанный пользователь должен быть членом фиксированной серверной роли processadmin или sysadmin.

Пароль пользователя: пароль пользователя, от лица которого будет выполняться доступ к базе данных.

Смещение дат – 0 или 2000. Данный параметр определяет число лет, которое будет прибавляться к датам при их сохранении в базе данных Microsoft SQL Server и вычитаться при их извлечении. Наличие данного параметра определяется особенностями хранения дат в Microsoft SQL Server. Тип DATETIME, используемый в Microsoft SQL Server, позволяет хранить даты в диапазоне с 1 января 1753 года по 31 декабря 9999 года. И если при работе с информационной базой может возникнуть необходимость хранения дат, предшествующих нижней границе данного диапазона, то в качестве значения параметра следует выбрать 2000. Если же такие даты встречаться не будут, то в качестве смещения дат можно выбрать 0. После создания информационной базы значение данного параметра не может быть изменено.

ВНИМАНИЕ! Если в прикладном решении используются регистры накопления или регистры бухгалтерии, то в поле Смещение дат необходимо установить значение 2000. Если при создании базы данных в это поле было введено значение 0, то следует выгрузить информационную базу в файл , заново создать базу данных с указанием в поле Смещение дат значения 2000 и выполнить загрузку информационной базы

ВНИМАНИЕ! Имена информационных баз должны быть уникальными в пределах одного кластера. В процессе регистрации новой информационной базы система проверяет, существует ли на указанном сервере баз данных база с таким именем. Если база существует, то будет установлено соединение с ней. Если существующая база данных уже содержит данные информационной базы «1С:Предприятия», то будет установлена связь с уже существующей информационной базой. А если база данных не содержит данных информационной базы, то в ней будет проинициализирована новая информационная база «1С:Предприятия».

Ошибка при выполнении операции с информационной базой

В процессе подключения к БД SQL могут вылетать различные ошибки создания или соединения . Например, если выходит следующая ошибка :

В этом случае была попытка создания информационной базы и сервер предприятия не мог установить соединиться с Microsoft SQL Server. Нужно проверить:

  • Параметры аутентификации пользователя ( Имя пароль и права на создание БД);
  • Соблюдает ли имя базы данных правила имен;
  • Правильно ли задано имя сервера базы данных;
  • Соответствует тип аутентификации пользователя. Возможно, пользователь вошел под именем пользователя sql server, а в настройках SQL стоит не тот тип аутентификации пользователя.

Я рекомендую использовать оба типа аутентификации пользователя в разделе безопасности Microsoft SQL Server

1с смещение дат 2000 что это

Vofka —> Vofka Подменю пользователя

Просмотр профиля
Найти сообщения пользователя

Вариант гуманный ([необходимо зарегистрироваться для просмотра ссылки]).

Суть проблемы в чем.. Если Вы случайно развернули базу на сервере SQL со «смещением даты» 0 то возникла проблема, когда в базе встречается реквизит с типом ВРЕМЯ т.е.в этот реквизит ставится 01.01.0001 10:30:00 или дата записалась пустой 01.01.0001 00:00:00. При записи такого реквизита не происходит его запись.
В интернете предлагают создать новую базу со смещением 2000.
Но новую базу создавать не очень хотелось. И менять у всех пользователях путь к базе.
Тогда я пошел по пути, а где ж хранится это значение в SQL-е. Нашел и поменял на 2000 и все стало ок..
А теперь по шагово, где поменять.

Выгнать всех пользователей.

1. Сначала сделайте резервную копию средствами 1С т.е. выгрузите ее в *.dt
Это нужно делать до того как поменяете «смещение»
Если этого не сделать то во всей вашей базе спр., док, и т.д.
где есть есть реквизит дата будет стоять допустим 02.10.0009
ЧТО НЕ ДОПУСТИМО….
Итак Вы сделали выгрузку в *.dt

2. Заходим в SQL Server Management Studio
Находим Вашу базу в списку нажимаем плюсик.
Находи там папочку «Таблицы» и раскрываем ее.
Откроется куча таблиц, идем в самый низ, находим таблицу
_YearOffset, становимся на нее и правой клавишей выбираем пункт «Открыть таблицу» см. рис.1
Меняем значение 0 на 2000
Закрываем SQL Server Management Studio

3. Заходим в конфигуратор и загружаем ранее сохраненную базу.

Если это не сделать, то все даты будут с годом 0009.
После того как база загрузилась… Можно зайти в 1С и удостоверится что даты нормальные.
Результат мы поменяли «смещение дата с 0 на 2000»

Иногда бывает так, что этот вариант использовать не получается по тем или иным причинам. Тогда есть более хардкорный вариант ([необходимо зарегистрироваться для просмотра ссылки]):

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

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

FETCH NEXT FROM TablesAndFields into @TableName, @ColumnName

WHILE @@FETCH_STATUS = 0
BEG IN 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

Перед любыми манипуляциями не забывайте делать копии баз данных!

alex040269 —> alex040269 Подменю пользователя

Просмотр профиля
Найти сообщения пользователя
Vofka —> Vofka Подменю пользователя

Просмотр профиля
Найти сообщения пользователя

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *