12 ноября 2021 г.

MSError [Microsoft][Драйвер ODBC Excel] Недопустимое использование Null


Использую драйвер ODBC для загрузки массивных таблиц в БД 1С. Таблица имеет 4 столбца все имеют "Общий" или "Текстовый" формат, но данные в столбцах это число, дата + время, длинное число (номер карты), длинное число (номер телефона). Все данные генерированные. На этапе тестирования я решил изменить дату с 30.12 на 01.11 и получил ошибку в сабже.

На момент генерации формат ячейки был "общий", а формула выглядела так: =ТЕКСТ("30.11.2021";"ДД.ММ.ГГГГ")&" "&ТЕКСТ(СЛЧИС();"ЧЧ:ММ:СС"), потом столбец был скопирован в режиме "Только значения". Когда я попытался заменить "30.11.2021" на "01.12.2021" excel интерпретировал данные как дату и именно в таком виде попытка загрузки завершалась ошибкой:

Ошибка ODBC. SQLSTATE: 22018

Номер ошибки: -3030

Описание: [Microsoft][Драйвер ODBC Excel] Недопустимое использование Null

Попытка изменить формат на "Общий" или "Текстовый" терпела фиаско, т.к. excel в таком случае представляет дату как число, т.е. "01.12.2021 0:00:03" = 44531,0000347222. 

В итоге, как выяснилось на формат всем плевать, фокус прокатывает только в том случае, если весь столбец имеет Тип даты. В таком случае вызывается исключение идентичное отсутствию столбца или данных в нем.
Дальше пришлось думать, как заставить excel не заменять числа датами. В классическом варианте ставится одинарная кавычка первым символом, но мне этот вариант не подходит, т.к. в момент приведения типа Строка к типу Дата я должен удалять этот символ. В итоге сайт MS дал ответ, можно первым символом поставить пробел, он не удаляется в представлении таблицы, но в момент приведения типов в 1С удаляется автоматически.

Комментариев нет:

Отправить комментарий