8.х Сравнение результатов запроса в отчете

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

  1. TopicStarter Overlay
    aimax
    Offline

    aimax Опытный в 1С

    Регистрация:
    11 авг 2008
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Подскажите пожалуйста,

    Как сравнить результы запроса в отчете?

    Есть два регистра:

    1. Документы (РегистрНакопления)
    Измерения:
    - Документ
    - Клиент
    Ресурсы
    - Количество

    2. ДокументыВРаботе (РегистрСведений)
    Регистры:
    - Документ
    - Сотрудник

    Мне нужно вывести в отчет документы которые есть в остатках "Документы", но нет записей в "ДокументыВРаботе"...

    Вроде тривиальная задача, а кроме вложенных запросов в голову ничего не приходит...

    Спасибо.
  2. TopicStarter Overlay
    aimax
    Offline

    aimax Опытный в 1С

    Регистрация:
    11 авг 2008
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Не ужели никто не подскажет... :(
  3. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Обычное левое соединение... В чем проблема то?
  4. TopicStarter Overlay
    aimax
    Offline

    aimax Опытный в 1С

    Регистрация:
    11 авг 2008
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    ЛЕВОЕ СОЕДИНЕНИЕ выбирает все позиции которые есть в регистре "Документы", а мне надо чтоб только те которых нет в Регистре "ДокументыВРаботе".

    Как пример:

    В регистре "Документы" 3 записи:
    -Док1
    -Док2
    -Док3

    В регистре "ДокументыВРаботе" 2 запси:
    -Док1
    -Док3

    В отчет должна попасть только запись Док2...

    Если я туплю, то можно тогда показать текст правильного запроса...
  5. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Так соединение наоборот сделайте! Сами же озвучили задачу и решение :)
  6. TopicStarter Overlay
    aimax
    Offline

    aimax Опытный в 1С

    Регистрация:
    11 авг 2008
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    BabySG, Вы вчитываетесь в пост или глазами пробегаете...

    Мне нужны записи КОТОРЫХ НЕТ в "ДокументыВРаботе".

    Оба примера не годятся...

    Код:
    |РегистрСведений.ДокументыВРаботе КАК ДокументыВРаботе
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Документы.Остатки КАК ДокументыОстатки
    |	ПО ДокументыОстатки.Документ.Ссылка = ДокументыВРаботе.Документ.Ссылка
    
    Результат:
    -Док1
    -Док3

    2. (Можно ПРАВОЕ СОЕДИНЕНИЕ в первом варианте)
    Код:
    |РегистрНакопления.Документы.Остатки КАК ДокументыОстатки
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыВРаботе КАК ДокументыВРаботе
    |	ПО ДокументыВРаботе.Документ.Ссылка = ДокументыОстатки.Документ.Ссылка 
    
    Результат:
    -Док1
    -Док2
    -Док3

    Мне нужно получить только документ Док2 (который ОТСУТСТВУЕТ во втором регистре)


    Если подставить "<>", то выбирутся все записи перебором из двух таблиц...
  7. TopicStarter Overlay
    aimax
    Offline

    aimax Опытный в 1С

    Регистрация:
    11 авг 2008
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    В математике, для операций с множествами, это называется ВЫЧИТАНИЕ...
  8. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    А можно саму задачу озвучить? Просто непонятно почему используется регистр накопления.

    А для регистров сведений, например, такой запрос можно использовать:

    Код:
    ВЫБРАТЬ
    Документы.Документ
    ИЗ
    РегистрСведений.Документы КАК Документы
    ГДЕ
    Документы.Документ НЕ В
    (ВЫБРАТЬ
    ДокументыВРаботе.Документ
    ИЗ
    РегистрСведений.ДокументыВРаботе КАК ДокументыВРаботе
    )
    
  9. TopicStarter Overlay
    aimax
    Offline

    aimax Опытный в 1С

    Регистрация:
    11 авг 2008
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    РегситрНакопления хранит информацию о документах которые поступили в компанию... (Всегда можно узнать остаток)

    РегистрСведений Хранит информацию о документах которые попали в работу. (В самом документе делать отметку о том что он в работе не надо...)

    Получается тока вложенным запросом можно выбрать???
  10. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Делает левое соединение Документы к ДокументыВРаботе и пишете:

    ГДЕ ДокументыВРаботе ЕСТЬ NULL

    Вот и все.

    Задача не стоит столько времени.

    ПРИМЕР:

    Код:
    "ВЫБРАТЬ
    Номенклатура.Ссылка
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
    ПО Номенклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец
    ГДЕ
    ХарактеристикиНоменклатуры.Ссылка ЕСТЬ NULL"
    
    Данный запрос отбирает всю номенклатуру, у которой нет ни одной характеристики.

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