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

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