|
Почему дублируются записи в результате запроса? | ☑ | ||
---|---|---|---|---|
0
novmax
21.01.22
✎
14:10
|
Добрый день! Я начинающий. Подскажите, пожалуйста, почему так и что делать? Управление торговлей 11
Запрос: ВЫБРАТЬ РеализацияТоваровУслугТовары.Ссылка КАК Документ, КонтрагентыКонтактнаяИнформация.Ссылка КАК Контрагент, КонтрагентыКонтактнаяИнформация.НомерТелефона КАК НомерТелефона ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация ПО РеализацияТоваровУслугТовары.Ссылка.Контрагент.Ссылка = КонтрагентыКонтактнаяИнформация.Ссылка ГДЕ РеализацияТоваровУслугТовары.Ссылка = &Ссылка Результат: Документ Контрагент НомерТелефона Реализация товаров и услуг ТДУТ-000025 от 04.12.2017 18:33:00 Альтаир Реализация товаров и услуг ТДУТ-000025 от 04.12.2017 18:33:00 Альтаир Реализация товаров и услуг ТДУТ-000025 от 04.12.2017 18:33:00 Альтаир Реализация товаров и услуг ТДУТ-000025 от 04.12.2017 18:33:00 Альтаир 9876543 Реализация товаров и услуг ТДУТ-000025 от 04.12.2017 18:33:00 Альтаир Реализация товаров и услуг ТДУТ-000025 от 04.12.2017 18:33:00 Альтаир Реализация товаров и услуг ТДУТ-000025 от 04.12.2017 18:33:00 Альтаир Реализация товаров и услуг ТДУТ-000025 от 04.12.2017 18:33:00 Альтаир 9876543 Проблемы: 1. Почему так много строк? В документе в табличной части 2 товара. 2. Почему номер телефона выводится не в каждой строке? |
|||
1
ДенисЧ
21.01.22
✎
14:11
|
потому что контактной информации больше одной.
|
|||
2
Ёпрст
21.01.22
✎
14:11
|
(0) сколько строк в табличной части товары, столько ты и видишь при выводе
|
|||
3
Ёпрст
21.01.22
✎
14:12
|
ну и в КонтактнаяИнформация нужно фильтр ставить на вид/тип.. там же и адрес и телефон ит т.д
|
|||
4
PuhUfa
21.01.22
✎
14:13
|
А лучше почитать интернет на предмет "как работают соединения"
|
|||
5
Dmitrii
гуру
21.01.22
✎
14:18
|
(0) В табличной части Товары вашего документа две строчки. А у Контрагента три вида/типа контактной информации - помимо телефона , например, ещё адрес и электронная почта.
И даже если отобрать по виду контактной информации, вовсе не факт, что у контрагента только один телефон. Их может быть и несколько. |
|||
6
novmax
21.01.22
✎
14:20
|
Так ведь другая контактная информация не запрашивается, только телефон, очень странно.
|
|||
7
Dmitrii
гуру
21.01.22
✎
14:21
|
(0) Вот это "ПО РеализацияТоваровУслугТовары.Ссылка.Контрагент.Ссылка = КонтрагентыКонтактнаяИнформация.Ссылка" исправь на "ПО РеализацияТоваровУслугТовары.Ссылка.Контрагент = КонтрагентыКонтактнаяИнформация.Ссылка". Реквизит Контрагент - это уже Ссылка. Получать от него ссылку не нужно.
|
|||
8
Dmitrii
гуру
21.01.22
✎
14:25
|
(6) >> другая контактная информация не запрашивается, только телефон.
Где это написано? Не в условиях ГДЕ, не в условиях соединения отбора виду или типу контактной информации нет. А реквизит "Телефон" есть во всех строках табличной части Контрагенты.КонтактнаяИнформация. Если там десять строк, то все они и выводятся. |
|||
9
Курцвейл
21.01.22
✎
14:33
|
(0) Рекомендую внимательно прочитать https://intuit.ru/studies/courses/5/5/lecture/130
А еще лучше весь курс прочитать. Будет понимание что ты делаешь с СУБД в запросах. |
|||
10
exwill
21.01.22
✎
14:39
|
(6) Это называется: нормализация - денормализация. В идеале все таблицы должны быть нормализованы. Тогда бы в базе была специальная таблица: "Телефоны". И в ней хранились бы только телефоны. Но на практике полную нормализацию никто не делает. И даже более того. Иногда специально прибегают к денормализации. Поэтому появляется таблица: "Контакты". И эта таблица разреженная. В том смысле, что, например, в записи относящейся к адресу будет только адрес. А все прочие реквизиты, в том числе и "телефон" будут в этой записи пустые.
|
|||
11
ДенисЧ
21.01.22
✎
14:40
|
(10) Идиотизм.
|
|||
12
exwill
21.01.22
✎
14:41
|
(11) По существу есть что возразить?
|
|||
13
ДенисЧ
21.01.22
✎
14:43
|
(12) нет, по тебе возражений нет.
|
|||
14
mikecool
21.01.22
✎
14:44
|
(12) есть достоверность и производительность, нормализация ближе к производительности, но в ущерб достоверности
|
|||
15
mikecool
21.01.22
✎
14:44
|
+14 хотя куда я лезу, я же теорию не читаю
|
|||
16
Ёпрст
21.01.22
✎
14:45
|
(15) да-да-да.. не надо увеличивать энтропию
|
|||
17
exwill
21.01.22
✎
14:46
|
(14) Нормализация экономит место в ущерб производительности.
|
|||
18
Курцвейл
21.01.22
✎
14:47
|
Все субд по умолчанию нормализованные к 3 или 4 форме. Давно уже теорию по норме форм не читал.
|
|||
19
ДенисЧ
21.01.22
✎
14:48
|
(18) Кто тебе такую фигню сказал?
|
|||
20
trad
21.01.22
✎
14:50
|
(16) можно я увеличу?.. спасибо
|
|||
21
trad
21.01.22
✎
14:51
|
(10) если в этой "специальная таблица: "Телефоны"" будет несколько телефонов одного контра вы же потребуете чтоб возвращался один, любой. А то что этот джойн себе позволяет ))
|
|||
22
exwill
21.01.22
✎
14:53
|
(18) Таблица Справочник.Контрагенты.КонтактнаяИнформация не находится даже во второй нормальной форме
|
|||
23
exwill
21.01.22
✎
14:55
|
А строго говоря, даже и в первой потенциально не находится. Но это зависит от того, как сильно придираться.
|
|||
24
Курцвейл
21.01.22
✎
14:59
|
(19) Это не фигня, а так считается. Если найду ссылку, то напишу суда.
|
|||
25
ДенисЧ
21.01.22
✎
15:02
|
(24) Кем считается?
|
|||
26
exwill
21.01.22
✎
15:03
|
(24) Извини, но он прав. Ты фигню сказал. Если у тебя в таблице могут быть повторяющиеся строки, то это уже не первая нормальная форма. Если у тебя могут быть "пустоты", как в рассматриваемом примере, то это уже не вторая нормальная форма. Выводы сам делай.
|
|||
27
Ёпрст
21.01.22
✎
15:04
|
(20) Можно. Но только один раз.
|
|||
28
Мультук
гуру
21.01.22
✎
15:08
|
А ставкаНДС это вообще по всем признаком фотон.
Потому как может быть или перечислением, или справочником, или перечислением и справочником одновременно. |
|||
29
FIXXXL
21.01.22
✎
15:19
|
(12) а не сам ли ты эти темы клепаешь? для попи..деть :)
|
|||
30
pechkin
21.01.22
✎
16:40
|
(22) ключ вообщето составным может быть и он в КИ как раз такой. так что вполне 2 нормальная форма
|
|||
31
Sserj
21.01.22
✎
17:27
|
(26) Вот какую ерунду ты сеешь в головы начинающих.
У тебя нет и не может быть в принципе "повторяющихся строк" в 1С. У каждой строки есть уникальный идентификатор, это уже гарантирует что строки не повторяющиеся. Так что контактная информация абсолютно нормализированная таблица. |
|||
32
novmax
21.01.22
✎
17:35
|
После добавления условия в ГДЕ
КонтрагентыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон) по контрагентам, у которых телефон в карточке не указан, строки перестали выводиться вообще |
|||
33
shuhard
21.01.22
✎
17:37
|
(32) замени на левое соединение
|
|||
34
Kassern
21.01.22
✎
17:37
|
(0) "ПО РеализацияТоваровУслугТовары.Ссылка.Контрагент.Ссылка = КонтрагентыКонтактнаяИнформация.Ссылка И КонтрагентыКонтактнаяИнформация.Вид=&НужныйВид"
|
|||
35
Kassern
21.01.22
✎
17:37
|
Еще и тип лучше прописать
|
|||
36
Kassern
21.01.22
✎
17:38
|
(35) имеется в виду КонтрагентыКонтактнаяИнформация.Тип=&НужныйТип
|
|||
37
exwill
21.01.22
✎
17:39
|
(31) Я сразу сказал, что если не придираться то это первая нормальная форма. А если придираться, то никакая.
Первая нормальная форма требует, чтобы строки не были упорядочены каким-либо образом. Т.е. можно сказать, что нумерация срок нарушает первую нормальную форму. |
|||
38
novmax
21.01.22
✎
17:42
|
Спасибо! Получилось!
|
|||
39
Kassern
21.01.22
✎
17:43
|
(0) Чтобы было понимание, почему столько строк, возьмите листок бумаги, или эксельку и нарисуйте 2 таблицы. Первая будет с номерами заказов и контрагентами. Вторая будет с Таблчиной частью Контактная информация, где у вас будет Телефон, Электронная почта, адрес (множество строк) для одного контрагента. Можете прям из вашего контрагента табличку эту вытянуть. А далее почитать как работают соединения таблиц, внутреннее, левое, правое. И тогда у вас будет понимание, как их соединить и как отобрать нужные строки
|
|||
40
Sserj
21.01.22
✎
17:53
|
(37) Ну вот теперь ты совсем заблудился :)
"чтобы строки не были упорядочены каким-либо образом" - нет такого требования, даже упоминания. Это у тебя обрывки воспоминаний из реляционной алгебры. В ней это называется реляционным множеством, состоящим из кортежей. Контактная информация удовлетворяет всем правилам нормализации вплоть до четвертой. Каждая строка уникальна, каждая строка однозначно идентифицируется по первичному ключу. В таблице нет ссылок на саму себя (4 форма). Она не может нормализоваться дальше. Так как твой пример - отдельно сделать таблицу для телефонов не может быть тут применен. Телефон у клиента он самодостаточен как строка, он не может быть применен к другим клиентам. Иными словами на него нельзя ссылаться из других строк. |
|||
41
exwill
21.01.22
✎
18:04
|
(40) https://ru.wikipedia.org/wiki/Первая_нормальная_форма
https://ru.wikipedia.org/wiki/Вторая_нормальная_форма Здесь обратите внимание на это: "Вторая нормальная форма по определению запрещает наличие неключевых атрибутов, которые вообще не зависят от потенциального ключа" В частности этим запрещаются разреженные "таблицы", когда вы делаете колонки, которые заполняются в разных строках. |
|||
42
exwill
21.01.22
✎
18:06
|
(40) Да и просто можно включить общее понимание. Нормализация - это устранение избыточности. Пустая ячейка в контактных данных - явно избыточна.
|
|||
43
Sserj
21.01.22
✎
18:28
|
(41) Меньше читай википедичку. Так для справки - в СУБД таблицы в принципе не могут иметь какого-либо порядка. Порядок имеют только ключи.
Вот тут более близко к тому как на самом деле трактовал нормализацию Дейт: https://habr.com/ru/post/254773/ "В частности этим запрещаются разреженные "таблицы", когда вы делаете колонки, которые заполняются в разных строках." А кто сказал что они заполняются в разных строках. Они заполнены везде пустой строкой, 1С не допускает NULL. И ни что не мешает к любому типу информации добавлять при необходимости и телефон. И к юрадресу и к физадресу и даже к емайлу кстати. (41) Пустая ячейка в контактных явно избыточна. А вот она там и не пустая. Она строка нулевой длинны, но это лишь показывает о том что вот в этой организации ее не заполняют. Но 1С работает в сотнях тысяч организаций и довольно часто она заполнена совсем не пустой строкой. |
|||
44
exwill
21.01.22
✎
20:04
|
(43) Как я вижу, вы просто не понимаете - о чем тут речь
Вид контакта Адрес Email Телефон ====================================================== Адрес г.Москва... Email [email protected] Телефон 123-45-67 Эта таблица не нормализована. Хоть у кого спросите |
|||
45
pechkin
21.01.22
✎
20:12
|
(44) вроде не так же хранится:
Вид контакта - представление |
|||
46
exwill
21.01.22
✎
20:12
|
(45) См. запрос в (0)
|
|||
47
exwill
21.01.22
✎
20:13
|
И результат запроса
|
|||
48
pechkin
21.01.22
✎
20:52
|
Точто там же еще расшифровка хранится
|
|||
49
exwill
21.01.22
✎
21:55
|
(48) Если бы там было одно поле "представление", то и этой темы не было бы. ТС не погрузился бы в недоумение - а почему это у меня телефоны пустые
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |