Имя: Пароль:
1C
 
Поле составного типа в запросе
0 gusenica1337
 
naïve
05.11.25
15:49
Есть Регистр сведений и в нем есть поле составного типа. Поле может быть заполнено, а может быть не заполнено.
Задача получить все записи регистра, где поля не заполнены. Вопрос: Какое какое значение параметра надо установить данному полю, чтобы получить нужные записи?
1 formista2000
 
05.11.25
15:51
Неопределено
2 Волшебник
 
05.11.25
15:51
Неопределено
3 Garykom
 
гуру
05.11.25
15:55
Эээ тип может быть назначен но значение пустое
4 unenu
 
05.11.25
15:56
Перфекционисты делают параметр &МассивПустыхЗначенийТипа
и первым элементом туда добавят Неопределено, а затем в цикле пустые значения каждого типа из коллекции состава.
5 Garykom
 
гуру
05.11.25
15:56
(4) Садись 5
6 Ненавижу 1С
 
гуру
05.11.25
15:57
Начинать шутить про миллион никчемных пустых сущностей вместо единого NULL?
7 Волшебник
 
05.11.25
15:58
(6) NULL плохое значение для пустой сущности, потому что у него 2 произношения: "нул" и "нал"
8 dmt
 
05.11.25
15:59
(4) перфекционисты в модуле набора записей регистра,  ПередЗаписью, присваивает значение пустого поля в Неопределено
9 Волшебник
 
05.11.25
16:00
(8) какое из? Неопределено для составного типа является единственным самым пустым значением
10 Ненавижу 1С
 
гуру
05.11.25
16:02
(7) nəl
11 formista2000
 
05.11.25
16:03
(10) nil
12 Волшебник
 
05.11.25
16:04
Понятие "пустых" значений
https://its.1c.ru/db/metod8dev/content/2614/hdoc
(10) учите матчасть
13 Ненавижу 1С
 
гуру
05.11.25
16:04
(9) помнится в УТ 10.х было составное измерение Договор. И там для незаполненных случаев записывалась пустая ссылка Справочник.Договоры. Видимо для совместимости с тех пор, когда это поле не было составным

А вообще это архитектурный баг. Расширяем тип поля на составной и меняется пустое значение - переписываем запросы
14 Ненавижу 1С
 
гуру
05.11.25
16:05
(12) да это все понятно, но архитектура такая архитектура
15 Волшебник
 
05.11.25
16:06
(13) мы же не храним историю типов, так что это не баг, а фича
16 Ненавижу 1С
 
гуру
05.11.25
16:06
(15) вы серьезно считаете, что это фича?
17 Волшебник
 
05.11.25
16:14
(16) Поведение логичное. Ничего лучше в голову не приходит.
18 dmt
 
05.11.25
16:16
(9) любого
Если НЕ ЗначениеЗаполнено(Запись.ИмяСоставногоПоля) Тогда
	Запись.ИмяСоставногоПоля = Неопределено
19 Волшебник
 
05.11.25
16:18
(18) ну если информация о типе не нужна, то можно
20 H A D G E H O G s
 
05.11.25
18:05
МассивПустыхОбособленныхПодразделений=Новый Массив;
        Для Каждого ТипРеквизита Из Метаданные.Справочники.АСФЛицензии.Реквизиты.ОбособленноеПодразделение.Тип.Типы() Цикл
            ПустоеЗначение=Новый(ТипРеквизита);
            МассивПустыхОбособленныхПодразделений.Добавить(ПустоеЗначение);
        КонецЦикла;
        МассивПустыхОбособленныхПодразделений.Добавить(Неопределено);
21 H A D G E H O G s
 
05.11.25
18:06
Кому не лениво - попросите на партнерке в язык запросов добавить ПустоеЗначение. Пусть они вот это (20) делают из коробки.
22 Garykom
 
гуру
05.11.25
18:13
(21) Не логичней наоборот сделать аналог ЗначениеЗаполнено в запросах?
23 Волшебник
 
05.11.25
18:32
(22) 👍
24 d4rkmesa
 
05.11.25
18:36
(0) В (Неопределено, Значение(Справочник.Партнеры.ПустаяСсылка), Значение(Справочник.Контрагенты.ПустаяСсылка), ...)

Конечно, если составное поле не имеет тип ЛюбаяСсылка (ночной кошмар архитектора).
25 aka MIK
 
05.11.25
18:50
(0) Поле.ВерсияДанных is null
26 Garykom
 
гуру
05.11.25
19:01
(25) Очень плохая идея, порождает кучу соединений
27 1cVandal
 
06.11.25
09:59
(22) чет представил как это будет выглядеть в профайлере и плохо стало
28 Garykom
 
гуру
06.11.25
11:27
(27) Если на уровне платформы делать, то нет проблем ссылку проверить на заполненность
Она фактически состоит из двух частей: тип и уид
Если уид заполнен, значит значение заполнено, и пофиг, даже если объекта в базе нет ("Объект не найден")
29 Garykom
 
гуру
06.11.25
10:21
(28)+ А вот со всеми прочими простыми типами согласен немного изврат будет
Да еще СУБД-зависимый
30 arsik
 
гуру
06.11.25
10:39
Можно через СКД - условие "не заполнено"
31 Wern
 
06.11.25
11:02
(28) В запросе есть функция "УНИКАЛЬНЫЙИДЕНТИФИКАТОР(". Возможно можно через нее сделать условие. Не пробовал, но в теории будет как раз проверка на уид.
32 Garykom
 
гуру
06.11.25
11:28
(31) Думал про такое
Там с ним все плохо. Не уверен, что можно сравнивать
33 TormozIT
 
гуру
07.11.25
09:17
(22) В конструкторе запроса ИР есть такой вид сравнения (ЗначениеЗаполнено) с поддержкой составного типа, но только на выход, т.е. указал его в конструкторе и при нажатии кнопки ОК он тебе его превратил в развернутое условие языка запросов.
34 Eiffil123
 
07.11.25
09:50
(3) для этого в модуле перед записью очищать поле (принудительно устанавливать Неопределено), если оно не заполнено
35 Eiffil123
 
07.11.25
09:52
(31) она работает после выполнения запроса. соответственно никаких фильтров внутри запроса по ней сделать невозможно.
36 Ненавижу 1С
 
гуру
07.11.25
09:56
(34) проблема в том, что при изменении архитектуры (был простой тип, стал составной) мы будем вынуждены во всех запросах условия на сравнение с пустой ссылкой заменить на аналогичное с Неопределено.
37 Eiffil123
 
07.11.25
10:33
(36) при изменении архитектуры (когда ранее был обычный тип, а стал составной) у вас в любом случае потребуется переписать запросы, иначе в 50% случаев они будут работать неправильно (когда не предполагалось, что там возможно НЕОПРЕДЕЛЕНО).

Так какая разница, код работает в 50% случаев неправильно или в 100% случаев?
38 Ненавижу 1С
 
гуру
07.11.25
10:38
(37) "в любом случае" это очень сильное заявление, требующее подкрепленных доказательств
39 ДенисСмирнов
 
naïve
07.11.25
10:54
(38) ну а как иначе? изменил тип данных и все, надеяться что нигде не аукнется?
40 Garykom
 
гуру
07.11.25
11:04
(39) Так это недодумка 1С
Когда для простых ссылочных полей накой-то фиг незаполненное значение вместо "Неопределено" придумали делать "Пустое", конкретного типа
В результате перехода на составные поля получается изврат
41 spiller26
 
07.11.25
11:01
NULL - пустота
Неопределено - отсутствие значения
42 Ненавижу 1С
 
гуру
07.11.25
11:10
(41) а еще пустые ссылки, ну да
43 spiller26
 
07.11.25
11:15
(42) "Пустая ссылка" - отсутствие значения определенного типа
44 Ненавижу 1С
 
гуру
07.11.25
11:17
(39) вы с интерфейсами знакомы? которые реализуются конкретными классами?
Так вот при добавлении нового класса, который по новому реализует интерфейс не приходится переписывать код, который основан на этом интерфейсе
45 Ненавижу 1С
 
гуру
07.11.25
11:20
(43) только в выборке к справочнику (без всяких соединений) могут быть колонки, содержащие и NULL и Неопределено и разные пустые ссылки
46 Fragster
 
гуру
07.11.25
12:29
(45) откуда там без соединений null?
47 Garykom
 
гуру
07.11.25
12:39
(46) Группы или через две точки (хотя это неявное)
48 Fragster
 
гуру
07.11.25
12:47
(47) с группами да, запамятовал. на автомате ставлю "(Не) ЭтоГруппа" уже много лет
49 Timon1405
 
07.11.25
12:49
(46) Кроме того, значение типа Null будет иметь, например, реквизит иерархического справочника для элементов-групп, если в метаданных указано, что этот реквизит используется только для элементов не являющихся группами. RTFM!
https://its.1c.ru/db/metod8dev/content/2516/hdoc

*ну и в колонке "номер отправленного" в плане обмена тоже нулл без явных соединений может сидеть.
50 Fragster
 
гуру
07.11.25
12:48
а так в РБ только встречал
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс