[РЕШЕНО] Несколько таблиц в запросе без связей

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем rSlayer, 18 июн 2014.

  1. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    Коллеги, а что если вытащить две таблицы в запрос, например остатков по регистру накопления и не указать никаких связей? Можно ли так делать или не рекомендуется?
    Вижу, что поведение не похоже на полное соединение.
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Да хоть пять таблиц. Только это вообще смысла не имеет:)
  3. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
  4. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    Достался в наследство от программиста другого отчет. Но теперь уже просто интерес технического характера. Вижу что соединение идет по форме - все записи ко всем записям.
  5. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Как минимум - неграмотность. Хотя нужно смотреть по коду.
  6. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    Ну если чуть более к сути вопроса, то смущает поведение такое.
    Пишу запрос вот в такой:
    Код:
    ВЫБРАТЬ
        СкладОстатки.СуммаОстаток,
        СкладОстатки1.СуммаОстаток КАК СуммаОстаток1
    ИЗ
        РегистрНакопления.Склад.Остатки(
                &Период,
                ОбъектУчета = &ОУ
                    И Организация = &Организация) КАК СкладОстатки,
        РегистрНакопления.Склад.Остатки(
                &Период1,
                ОбъектУчета = &ОУ1
                    И Организация = &Организация) КАК СкладОстатки1
    Поведение такое: Если в обоих таблицах есть остаток, то он выводит два поля с числами.
    Если задать период в котором остатка нет, то одно из полей пустое, там, где нет остатка.

    Если запрос вот так построить:

    Код:
    ВЫБРАТЬ
        СкладОстатки.СуммаОстаток,
        СкладОстатки.ОбъектУчета,
        СкладОстатки1.СуммаОстаток КАК СуммаОстаток1,
        СкладОстатки1.ОбъектУчета КАК ОбъектУчета1
    ИЗ
        РегистрНакопления.Склад.Остатки(
                &Период,
                ОбъектУчета.Наименование ПОДОБНО "%Фотоаппарат Canon PowerShot А46%"
                    И Организация = &Организация) КАК СкладОстатки,
        РегистрНакопления.Склад.Остатки(
                &Период1,
                ОбъектУчета.Наименование ПОДОБНО "%Шкаф для документов металический Контур КВ 011%"
                    И Организация = &Организация) КАК СкладОстатки1
    Поведение такое: Если я задам один из периодов заведомо такой, в котором нет остатков, то не выводится вообще ничего, хотя в другой таблице остатки есть.
    Почему так?
    Последнее редактирование: 18 июн 2014
  7. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Логично. Второй запрос такой же. Отличаются только полями. Надо смотреть на живом примере. Давайте сначала. Что сделать то надо вообще? Эти запросы омерзительны если честно. Без обид.
  8. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    Вообще, есть отчет, он плохо работает. Но отчет, понятное дело, содержит много таблиц и соединений. Я тоже считаю, что его нужно переделывать и уже это делаю. Но меня заинтересовало поведение платформы. Я этими двумя примерами свел все к сути моих вопросов, примеры придумал сам, как отражение поведения платформы.
    Т.е. я прощу помощи не в решении задачи как таковой, а прошу понять почему так работает система, т.к. описания нигде не нашел, что же происходит если мы не указали связей, а интерес распирает.
  9. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Ок. Смотрите. Есть две таблицы с двумя колонками. В первой ФИО, Адрес. Во-второй, ФИО, Телефон. Вы соединяете эти две таблицы. Есть несколько видов соединения. Углу*****ся не буду, рассмотрю внутреннее. Вы соединяете две таблицы внутренним и в связи указываете естественно ФИО. И получается в итоге так.
    Иванов, г. Ульяновск, Иванов, 98-98-98
    Петров, г. Москва, Петров, 87-87-874
    Если убрать соединение вообще то программа будет сопостовлять каждому Иванову и Петрову из первой, каждую запись из второй. И в итоге будет так
    Иванов. г Ульяновск, Иванов, 98-98-98
    Иванов, г. Ульяновск, Петров, 87-87-874
    Петров, г. Москва, Петров, 87-87-874
    Петров, г. Москва, Иванов, 98-98-98.
    Понимаете разницу?
  10. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Не понятен вопрос. Вас интересует, если не указывать связь, то почему все данные выбираются ?
  11. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    В ответ на сообщение 9, а также и в т.ч. 10.
    Вот, а теперь следую вашему примеру, то допустим, если в таблице 1, нет ни одного ФИО и адреса, хотя во второй есть ФИО и телефоны, то при отсутствии связей, платформа не выведет ни одной строки результата. Почему перестает выводиться вторая таблица при пустой первой.
    А в своем изначальном , реальном отчете, я столкнулся с тем, что у меня 13 таблиц было с остатками по регистру накопления на разные даты. И эти 13 таблиц без связей выводились в 13 полей, по одному полю Остаток от каждоый таблицы. Так вот, если хотя бы в одной таблице не было остатка, переставали выводиться вообще все поля.
    Вот что меня удивляет и вопрос этот я задаю.
    В моем понимании работы запроса, должны были вывестись все поля и одно поле с остатком ноль. Но исчезает вся строка.
  12. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    А какое сопоставление программа найдет если нет связи. Естественно там будут не пустые значений, а null.
  13. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    Так а другие таблицы почему не выводятся?
  14. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Там где данные есть, должны выводиться.
  15. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    Должны, но не выводятся. Я попробую на типовой конфе какой-нибудь пример накидать, если интересно, чтобы вы у себя могли попробовать.
  16. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Вы лучше не гадайте, а сами возьмите и проверьте. Создайте регистр сведений. И поэксперементируйте с физической таблицей
    --- Объединение сообщений, 18 июн 2014 ---
    Виртуальные таблицы регистров устроены по-разному. Поэтому в них могут оставаться записи. Поэтому есть пересчет итогов и прочая хрень. Лучше на физических. Будет более понятно. И регистратор не нужен.
  17. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    В каком смысле "не гадайте"? я же говорю, что это реальные факты работы программы.
    --- Объединение сообщений, 18 июн 2014 ---
    Что бы там не оставалось, это не повод к тому, чтобы не выводились запросом записи остальных таблиц.
  18. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Да, это поведение платформы. Записи нет, то и ничего не будет выведено.
    --- Объединение сообщений, 18 июн 2014 ---
    А если есть, то она и будет сопостовлять.
    --- Объединение сообщений, 18 июн 2014 ---
    Если надо чтобы запросом выводились записи из одной и записи из другой, на это есть ОБЪЕДИНЕНИЕ
  19. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    Объединение не добавляет колонок, а добавляет строки, но не об этом сейчас речь.

    Т.е. Две таблицы.
    В первой
    Вася 12
    Петя 75,

    Во второй
    Ира 45

    Выводим все поля этих таблиц без связей, получаем.

    Вася 12 Ира 45
    Петя 75 Ира 45

    Меняем условия отбора, чтобы таблица вторая стала пустая.

    Итог = ничего.
    Почему не вывелся
    Вася 12
    Петя 75.
  20. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Какое еще условие ?
    --- Объединение сообщений, 18 июн 2014 ---
    И будет так:
    Вася12 Ира45
    Петя75 Ира45

Поделиться этой страницей