|
Внешние источники данных, поле со значением 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С.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |