Имя: Пароль:
1C
1С v8
Ошибка преобразования datetime в MS SQL 2016
, ,
0 d546
 
16.11.17
15:44
Проблема образовалась неожиданно.

Суть что перенесли базы на MS SQL 2016 и в разных конфигурациях начал выходить ошибки связанные в первую очередь с сохранением в регистры. Не стали проводится документы.

https://yadi.sk/i/Y6O3Nde_3Pke3u

При детальном разборе выяснил.

Ошибка при помещении таблицы значений в запрос.
Если есть поле типа Дата, то данные не передаются в SQL,
т.е. становятся равными пустой дате.

Кто нибудь сталкивался в проблемой.
1 d546
 
16.11.17
15:47
//Таблица = Новый ТаблицаЗначений;
    //Таблица.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
    //
    //НоваяСтрока = Таблица.Добавить();
    //НоваяСтрока.Дата = Дата(2006,1,1);
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВТ.Дата
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    |    &ВТ КАК ВТ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ.Дата
    |ИЗ
    |    ВТ КАК ВТ";
    
    Запрос.УстановитьПараметр("ВТ", Таблица.Выгрузить());
    ТаблицаЗапроса = Запрос.Выполнить().Выгрузить();
    
    Для каждого СтрТаблицы Из ТаблицаЗапроса Цикл
        ЗаполнитьЗначенияСвойств(Таблица.Добавить(), СтрТаблицы);
    КонецЦикла;
2 d546
 
16.11.17
15:58
и если даже не таблицей значений передавать, а просто параметр типа дата, тоже ее в нулевую превращает в запросе.
3 ptiz
 
16.11.17
16:20
Платформа какой версии?
4 d546
 
16.11.17
16:20
1С:Предприятие 8.3 (8.3.10.2466)
5 H A D G E H O G s
 
16.11.17
16:22
Посмотреть профайлером запрос
6 d546
 
16.11.17
16:23
оказалось еще проще

любая дата помещенная во временную таблицу запроса становиться пустой, даже если берется из базы из документа

такой пример для ЗУП 31

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    БольничныйЛист.Дата
        |ПОМЕСТИТЬ ВТ
        |ИЗ
        |    Документ.БольничныйЛист КАК БольничныйЛист
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ.Дата
        |ИЗ
        |    ВТ КАК ВТ";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Если Выборка.Следующий() Тогда
        Сообщить(Выборка.Дата);
    КонецЕсли;
7 ptiz
 
16.11.17
16:39
Попробуйте реструктуризацию таблиц сделат.
8 d546
 
17.11.17
09:18
проблема вообще без участия данных базы может выйти.
реструктуризация не причем.

Сообщить(Выборка.Дата); выдает пустую дату

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    &Дата КАК Дата
    |ПОМЕСТИТЬ ВТ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ.Дата
    |ИЗ
    |    ВТ КАК ВТ";
    Запрос.УстановитьПараметр("Дата", ТекущаяДата());
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        Сообщить(Выборка.Дата);
    КонецЕсли;
9 VladZ
 
17.11.17
09:21
(0) "перенесли базы на MS SQL 2016" - зачем? Какие были причины перехода?
10 d546
 
17.11.17
09:23
кстати, в режиме совместимости Версия 8.2.13 проблемы нет
11 vde69
 
модератор
17.11.17
09:27
посмотрите на тип колонки в скуле, у меня подобное было... там был тип datetime2 вместо datetime
12 d546
 
17.11.17
09:28
(9) прирост производительности по сравнению с 2008
13 d546
 
17.11.17
09:28
(11) таблица временная, где посмотреть тип колонки?
14 d546
 
17.11.17
09:30
(11) если смотреть (8) то там нет данных из базы.
используется виртуальная таблица.

где посмотреть тип колонки?
15 Dotoshin
 
17.11.17
09:30
(0) Возможно проблема в смещении дат. Посмотрите, какие у вас настройки установлены.

Установка смещения дат в информационной базе на Microsoft SQL Server

В диалоге "Добавление информационной базы/группы" при создании информационной базы на СУБД Microsoft SQL Server доступна установка параметра "Смещение дат". Раздел содержит дополнительную информацию о влиянии значения этого параметра на работу информационной базы.
https://its.1c.ru/db/metod8dev/content/4055/hdoc
16 vde69
 
модератор
17.11.17
09:30
"ВЫБРАТЬ ПЕРВЫЕ 1
        |    БольничныйЛист.Дата
        |ПОМЕСТИТЬ ВТ
        |ИЗ
        |    Документ.БольничныйЛист КАК БольничныйЛист
        |;
        |



соответсвенно в Документ.БольничныйЛист.Дата
17 d546
 
17.11.17
09:32
(15) смещение стоит 2000, не должно быть проблем
18 vde69
 
модератор
17.11.17
09:34
я у себя не смог победить, писал в 1с, еще делал кучу фигню... у меня проблема была именно на ЗУП е с регистрами расчета... при чем танцы с бубном в самой базе SQL то же не принесли плодов, после реструктуризации востановлялось...

как я понял проблемы была непосредственно в кривых метаданных, в результате я перенес данные на пустую базу...
19 Широкий
 
17.11.17
09:35
а в скульнике что стоит?
20 d546
 
17.11.17
09:42
(18) глянул в sql у таблицы поле тип datetime
21 d546
 
17.11.17
09:44
(19) версия интересует или что-то другое?

другие программы или что вообще интересует, можно конкретнее?
22 vde69
 
модератор
17.11.17
09:51
какие права в SQL у пользователя под которым работает база?

создай нового пользователя в SQL, установи его DBO для базы и перенастрой на него сервер 1с
23 vde69
 
модератор
17.11.17
09:54
ну и еще глянь в файле adojavas на сервере

var adDBTime = 134;

если на сервере не стандартные настройки - там возможно будет другое...

ну и еще региональные настройки сервера по дате проверь, возможно там используется не стандартный формат дат...
24 d546
 
17.11.17
09:57
25 vde69
 
модератор
17.11.17
09:57
выполни на SQL запрос типа (синтаксис по памяти, наверняка там ошибки)

select * from convert('20150101',,134)
26 d546
 
17.11.17
09:58
27 vde69
 
модератор
17.11.17
10:01
(26) повторяется ошибка под ним?
28 d546
 
17.11.17
13:41
проблема с Microsoft SQL Server Native Client

на одном сервере 1С стоит старая версия для подключения к SQL2005, отдельные сервера для 1с и SQL.

и вот с этого сервера 1С, где стоит старый Native Client пробовали подключится к третьему серверу с SQL2016.

из-за этого и выходит эта ошибка.

запускали базу на сервере 1с с правильной версией Native Client и ошибки нет.
29 vde69
 
модератор
17.11.17
13:44
я вообще сразу нативный клиент выключаю всегда...
30 d546
 
17.11.17
13:44
(29) где выключаешь и как?
31 vde69
 
модератор
17.11.17
13:48
32 d546
 
17.11.17
14:47
https://its.1c.ru/db/v838doc#bookmark:cs:TI000000018

еще по теме ошибки
Ошибка? Это не ошибка, это системная функция.