Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Внешние источники данных, поле со значением NULL переопределяется при открытии формы.

Внешние источники данных, поле со значением NULL переопределяется при открытии формы.
Я
   pvase
 
22.06.20 - 16:44
Есть таблица во внешнем источнике данных, подключенная к MS SQL. Таблица имеет поле Id,ParentID,Name. ParentID - родитель. Поле пустого родителя  = ParentID = NULL.
1С почему то при редактировании формы дынной таблицы постоянно пишет в это поле 0, а не NULL. Т.е. для того чтобы остался NULL - надо зайти в форме в реквизит ParentID и нагло установить Null, чтобы появилась надпись "<Не заполнено>" и записать. Но вот в чем проблема, если запись снова открыть на редактирование, то уже не будет значение "<Не заполнено>", а будет пустое, в результате при записи сохраниться 0, а не Null. Подскажите, что это за поведение з подменой, это так и должно быть?
   pvase
 
1 - 22.06.20 - 17:06
И что интерессно. ПриСозданииНаСервере и ПередЗаписьюНаСервере:
Объект.ParentID = ВнешниеИсточникиДанных.CDS.Таблицы.dbo_0032_Grouping.ПустаяСсылка()
Но при этом в базу пишет 0, а не NULL.
   Krolik Bezobraznik
 
2 - 22.06.20 - 17:12
1. Вы уверены что NULL хранить разрешено в этом поле?
2. вы пытаетесь редактировать запись через форму объекта внешнего источника данных?
   pvase
 
3 - 22.06.20 - 17:13
(2) Еще бы, я проектировал таблицу в MS SQL.
Короче, этот 1С упорно NULL заменяет на 0.
   pvase
 
4 - 22.06.20 - 17:16
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Объект.ParentID = ВнешниеИсточникиДанных.CDS.Таблицы.dbo_0032_Grouping.ПустаяСсылка() Тогда
        Объект.ParentID = NULL;
    КонецЕсли;
КонецПроцедуры

Решило вопрос.
   pvase
 
5 - 23.06.20 - 08:10
Но может есть какие то настройки, чтобы по умолчанию не меняло Null на 0 или пустую строку? Потому что у меня около 50 таблиц и в некоторых до 5-7 таких полей, где должно быть Null, а 1С меняет ее на свой тип.
   pvase
 
6 - 23.06.20 - 08:11
Кстати, тоже самое с датой, оно Null меняет на 1753-01-01, что кончено же ждя 1С - пустая дата, но для MS SQL далеко не пустая.
   Фрэнки
 
7 - 23.06.20 - 08:16
это же платформа. Есть объекты и типы, определяемые платформой. И насколько я себе представляю, то запись в какие-то поля объектов значения NULL вообще не допустимо средствами платформ.
Т.е. у тебя сейчас попытка перескочить через платформу на уровень данных вы таблице СУБД. Это удается.
Но хранить значения такого типа (хоть это нуль, хоть время пустое) тупо не удается.
И заметь, в платформе специально для такого измышления предусмотрена функция ЗначениеЗаполнено
потому что по другому бывает очень путано разобрать, что есть что.
   Ненавижу 1С
 
8 - 23.06.20 - 08:18
волшебный мир 1С столкнулся с суровой реальностью SQL
   Фрэнки
 
9 - 23.06.20 - 08:21
ну эдак лет 25 тому назад, как споткнулся. так и до сих пор
   pvase
 
10 - 23.06.20 - 08:49
Меня другое интересует. Если 1С сделала работу с внешними источниками, то с ними надо работать на "их" языке и на их понятийном уровне, а не на своем, Одинэсном. Получается GUID они не приемлят как прочий идентификатор, который пользователь может менять. Null тоже не могут принять, что ж тогда остается от СУБД, только базовые типы 1С и те в области понимания 1С. В общем, сделать сделали - но напильника никто не отменял. И это только MS SQL, а еще есть в планах PostgreSQL, что-то мне подсказывает, что сюрпризы еще не все найдены :).
   Krolik Bezobraznik
 
11 - 23.06.20 - 09:20
(10) Я бы вам посоветовал изменять данные не через внешние источники данных, а через вызов SQL процедур через ADO. Так корректнее работает.
   pvase
 
12 - 23.06.20 - 11:51
(11) Да я хотел сделать формы из 1С, чтобы пользователи меняли данные в таблицах. RLS сделать на уровне MS SQL, а вот доступ к объектам и формам на уровне ролей 1С.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.