Версия для печати темы (https://pro1c.org.ua/index.php?s=b689e10e83d4eaf52f73eea06ba8d937&showtopic=17675)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Администратору 1С / системному администратору _ Как поменять смещение даты с 0 на 2000

Автор: Vofka 24.04.14, 16:55

Вариант гуманный (http://pro1c.org.ua/redirect.php?http://infostart.ru/public/58505/).



Суть проблемы в чем.. Если Вы случайно развернули базу на сервере 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»

Иногда бывает так, что этот вариант использовать не получается по тем или иным причинам. Тогда есть более хардкорный вариант (http://pro1c.org.ua/redirect.php?http://www.forum.mista.ru/topic.php?id=529114):

SQL
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


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

Автор: alex040269 25.04.14, 10:52

не понятно чем это все отличается от:
1) выгрузить
2) грохнуть базу на сервере
3) создать правильно базу на сервере
4) загрузить

Автор: Vofka 25.04.14, 11:48

alex040269, тогда вроде какая-то беда с журналом регистрации случается, он теряется. Но я лично не проверял.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua