|
|
|
Пустая ссылка не равна пустой ссылке bmitkin, Бычье сердце, TormozIT, Maxsim24, Злопчинский, ЕRPe, H A D G E H O G s, crotnn, Ногаминебить, Tarlich, Garykom, obs191, dmt, Мультук, МаленькийВопросик, Alex7771, serpentt, Климов Сергей, Aleksey, maxab72, takefive, Prog_man, Chameleon1980, yanikolay, shuhard, Web00001, Ненавижу 1С, BSV, Ёпрст, Amfiaray
| ☑ | ||
|---|---|---|---|---|
|
0
trympyrym
04.01.26
✎
16:13
|
Переносил я сегодня данные в новую базу. УТ 11.5.25.85, платформа 8.3.27.1936.
И не проводился у меня ввод остатков. Копал я это дело, и накопал вот что. Выполняю запрос ВЫБРАТЬ ТаблицаРасчетыСПартнерами.Договор = ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка), РегистрАналитикаУчетаПоПартнерам.Договор = ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка), ТаблицаРасчетыСПартнерами.ОбъектРасчетов.Договор = РегистрАналитикаУчетаПоПартнерам.Договор КАК ОниРавны ИЗ Документ.ВводОстатковВзаиморасчетов.РасчетыСПартнерами КАК ТаблицаРасчетыСПартнерами ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК РегистрАналитикаУчетаПоПартнерам ПО ТаблицаРасчетыСПартнерами.Партнер = РегистрАналитикаУчетаПоПартнерам.Партнер И ТаблицаРасчетыСПартнерами.Контрагент = РегистрАналитикаУчетаПоПартнерам.Контрагент И ТаблицаРасчетыСПартнерами.Ссылка.Организация = РегистрАналитикаУчетаПоПартнерам.Организация ГДЕ Ссылка = &Ссылка Подставляю параметром документ, который руками создал - получаю Да, Да, Да (в каждой строке) Подставляю параметром документ, который моя обработка создала - получаю Да, Да, Нет (в каждой строке) Как так может получиться? Я всегда думал что пустые ссылки одного типа друг другу равны |
|||
|
1
trympyrym
04.01.26
✎
16:20
|
Посмотрел гуид-ы обоих ссылок - получаю везде "00000000-0000-0000-0000-000000000000". И они таки не равны
|
|||
|
2
Волшебник
04.01.26
✎
16:24
|
значит типы разные
|
|||
|
3
Волшебник
04.01.26
✎
16:25
|
или где-то составной тип и там Неопределено
|
|||
|
4
Волшебник
04.01.26
✎
16:26
|
используй функцию ТИПЗНАЧЕНИЯ(поле)
|
|||
|
5
H A D G E H O G s
04.01.26
✎
16:28
|
РегистрАналитикаУчетаПоПартнерам.Договор - точно не СправочникСсылка.ДоговорыМеждуОрганизациями?
Что говорит запрос? ВЫБРАТЬ ТаблицаРасчетыСПартнерами.Договор = ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка), РегистрАналитикаУчетаПоПартнерам.Договор = ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка), ТаблицаРасчетыСПартнерами.ОбъектРасчетов.Договор = РегистрАналитикаУчетаПоПартнерам.Договор КАК ОниРавны, ТипЗначения(ТаблицаРасчетыСПартнерами.ОбъектРасчетов.Договор) КАК ТипДоговораТаблицы, ТипЗначения(РегистрАналитикаУчетаПоПартнерам.Договор) КАК ТипДоговораРегистра ИЗ Документ.ВводОстатковВзаиморасчетов.РасчетыСПартнерами КАК ТаблицаРасчетыСПартнерами ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК РегистрАналитикаУчетаПоПартнерам ПО ТаблицаРасчетыСПартнерами.Партнер = РегистрАналитикаУчетаПоПартнерам.Партнер И ТаблицаРасчетыСПартнерами.Контрагент = РегистрАналитикаУчетаПоПартнерам.Контрагент И ТаблицаРасчетыСПартнерами.Ссылка.Организация = РегистрАналитикаУчетаПоПартнерам.Организация ГДЕ Ссылка = &Ссылка |
|||
|
6
trympyrym
04.01.26
✎
16:33
|
(5) Точно
ТипДоговораТаблицы показывает "Не определено" )) Хотя ТаблицаРасчетыСПартнерами.Договор = ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка) это у нас Истина, да |
|||
|
7
ProxyInspector
04.01.26
✎
16:34
|
А вот такой запрос
ВЫБРАТЬ ТаблицаРасчетыСПартнерами.Договор.Ссылка is NULL, РегистрАналитикаУчетаПоПартнерам.Договор = is NULL, ТаблицаРасчетыСПартнерами.ОбъектРасчетов.Договор.Ссылка = РегистрАналитикаУчетаПоПартнерам.Договор.Ссылка КАК ОниРавны |
|||
|
8
H A D G E H O G s
04.01.26
✎
16:34
|
Преступление раскрыто
|
|||
|
9
H A D G E H O G s
04.01.26
✎
16:35
|
(7) За такой - надо выгонять из профессии
|
|||
|
10
trympyrym
04.01.26
✎
16:36
|
(7) Нет, Нет, Нет
(8) Да, спасибо. А все-таки как так получается, что тип не определен, но значение равно пустой ссылке типа Справочник.ДоговорыКонтрагентов? |
|||
|
11
H A D G E H O G s
04.01.26
✎
16:39
|
(10) Как смотрел guid ?
|
|||
|
12
trympyrym
04.01.26
✎
16:41
|
В консоли запросов нажал галку "показывать ГУИД ссылок"
|
|||
|
13
H A D G E H O G s
04.01.26
✎
16:46
|
(12) УНИКАЛЬНЫЙИДЕНТИФИКАТОР() в запросе от неопределенного составного типа показывает 00000000-0000-0000-0000-000000000000
|
|||
|
14
ProxyInspector
04.01.26
✎
17:02
|
(9) За такое надо выгонять из профессии ...
Это конечно не кошерно. Но расскажи как в запросе кошерно проверить на НеЗаполнено реквизит составного типа. Я думаю ты не знаешь. |
|||
|
15
Chameleon1980
04.01.26
✎
17:05
|
(14) ну точно не так
РегистрАналитикаУчетаПоПартнерам.Договор = is NULL, |
|||
|
16
ProxyInspector
04.01.26
✎
17:09
|
Это опечатка
|
|||
|
17
ProxyInspector
04.01.26
✎
21:39
|
Реквизит составного типа может иметь тип Справочник, Документ, Перечисление тогда для не заполненного значения -
Реквизит.Ссылка is Null = ИСТИНА Вполне возможно, что и если Реквизит = НЕОПРЕДЕЛЕНО тогда Реквизит.Ссылка is NULL = ИСТИНА , но это не точно |
|||
|
18
Chameleon1980
04.01.26
✎
17:16
|
(16) ну так за это, наверное, и говорят - никто-ж не в курсе, что это опечатка (или нет) :)
|
|||
|
19
Garykom
гуру
04.01.26
✎
17:35
|
Эту фишку часто даже опытные товарищи не знают, которые давно в 1С формошлепят
Что составной тип может принимать 3 значения для ссылочных типов: 1. Неопределено (когда тип не выбран) 2. ПустаяСсылка (когда тип выбран, не выбрано значение) 3. Значение конкретного типа (выбран и тип и значение) |
|||
|
20
Garykom
гуру
04.01.26
✎
17:38
|
(19)+ Особенно хреново что в запросах для составных приходится и на Неопределено и на ПустаяСсылка проверять
Ну или сначала выражать а затем проверять |
|||
|
21
H A D G E H O G s
04.01.26
✎
18:41
|
(14)
МассивПустыхСсылокПервичногоДокументаПоступления=Новый Массив; МассивПустыхСсылокПервичногоДокументаПоступления.Добавить(Неопределено); ТипыРеквизита=МетаданныеРеквизитовСерий.АСФПервичныйДокументПоступления.Тип.Типы(); Для Каждого ТипРеквизита Из ТипыРеквизита Цикл МассивПустыхСсылокПервичногоДокументаПоступления.Добавить(Новый (ТипРеквизита)); КонецЦикла; |
|||
|
22
H A D G E H O G s
04.01.26
✎
18:43
|
(21) Чтобы можно было не переживать о смене типов реквизита.
|
|||
|
23
Garykom
гуру
04.01.26
✎
18:58
|
(22) И не хочется аналог ЗначениеЗаполнено() в языке запросов на уровне платформы?
|
|||
|
24
craxx
04.01.26
✎
19:43
|
(0) Создай руками ввод остатков и сравни любым редактором объектов с твоим перенесенным. Станет ясно, где косяк.
|
|||
|
25
ProxyInspector
04.01.26
✎
19:56
|
Мне очень сильно кажется, что
если Реквизит = НЕОПРЕДЕЛЕНО, Реквизит = Строка и т.д. то Реквизит.Ссылка is NULL = ИСТИНА Это полный аналог НеЗначениеЗаполнено() |
|||
|
26
H A D G E H O G s
04.01.26
✎
20:15
|
(25) Мне очень сильно кажется, что это лишнее ненужное соединение с набором таблиц, часто приводящее к печальным последствиями.
|
|||
|
27
ProxyInspector
04.01.26
✎
20:21
|
Для небольших баз под 100 Гб, ничего страшного не должно случиться.
Для универсальных алгоритмов ничего другого не придумывается |
|||
|
28
H A D G E H O G s
04.01.26
✎
20:28
|
(27) Чувствуется школа Гения 1С.
|
|||
|
29
Волшебник
04.01.26
✎
21:09
|
(28) Он прав. Оптимизацией надо заниматься, когда начинает тормозить и мешать бизнесу.
Если бизнесу не мешает и терпимо тормозит, то запрос имеет право быть неоптимальным. |
|||
|
30
Ненавижу 1С
гуру
05.01.26
✎
08:47
|
Грабли архитектуры 1С они такие ))
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |