1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Вложенный Запрос

Тема в разделе "Базы данных и администрирование", создана пользователем Дайнеко, 17 сен 2012.

  1. Дайнеко

    Дайнеко Well-Known Member

    Репутация:
    0
    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Запрос должен выбрать сведения из Документа и его проводок. На одну строку документа может быть несколько проводок. Поэтому во внутреннем запросе проводки группируются и затем объединяются по реквизиту проводки "НомерСтрокиДок".
    Пример:
    Вложенный Запрос
    Код:
    ВЫБРАТЬ
    РасходСырьяТовары.НомерСтроки КАК НомерСтроки,
    РасходСырьяТовары.Счет Как СчетДок,
    Проводки.НомерСтрокиДок КАК НомерСтрокиДок
    Проводки.СуммаСто,
    ИЗ
    Документ.РасходСырья.Товары КАК РасходСырьяТовары
    ЛЕВОЕ СОЕДИНЕНИЕ 
    (ВЫБРАТЬ
    БухИтоги.НомерСтрокиДок КАК НомерСтрокиДок,
    СУММА(БухИтоги.СуммаР) КАК СуммаР,
    СУММА(ВЫБОР
    КОГДА БухИтоги.СчетКт = &Счет
    ТОГДА БухИтоги.СуммаР
    ИНАЧЕ 0
    КОНЕЦ) КАК СуммаСто
    ИЗ
    РегистрБухгалтерии.БухИтоги КАК БухИтоги
    
    СГРУППИРОВАТЬ ПО
    БухИтоги.Регистратор,
    БухИтоги.НомерСтрокиДок
    ) КАК Проводки
    ПО 
    РасходСырьяТовары.Ссылка = Проводки.Регистратор И
    РасходСырьяТовары.НомерСтроки = Проводки.НомерСтрокиДок
    Моя проблема в том, что надо во внутреннем запросе построить выражение ВЫБОР и в нем оперировать реквизитом из документа "РасходСырьяТовары.Счет Как СчетДок", т.е из головного запроса. Я в отладочных целях упростил само выражение и использовал параметр &Счет. Вот его и надо заменить. Это возможно?
     
  2. unknown181538

    unknown181538 НеГуру

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.417
    Симпатии:
    0
    Ну какой параметр во вложенный запрос?
    Надо делать внутреннее соединение по РасходСырьяТовары.Счет = БухИтоги.СчетКт, а потом уже группировать.
     
  3. Дайнеко

    Дайнеко Well-Known Member

    Репутация:
    0
    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Т.е. Группировку сделать не вложенном запросе, а в основном? Т.е. вообще без вложенного.
    Да я бы так и сделал. Но у меня более сложная задача с обработкой счетов в проводках.
    Надо анализировать, если нужный Счет = СчетКт, то результирующая СуммаСто = БухИтоги.СуммаР, если Счет = СчетДт, то умножить -1.
    Код:
    			СУММА(ВЫБОР
    КОГДА БухИтоги.СчетКт = &Счет
    ТОГДА БухИтоги.СуммаР
    КОГДА БухИтоги.СчетДт = &Счет
    ТОГДА - БухИтоги.СуммаР
    ИНАЧЕ 0
    КОНЕЦ) КАК СуммаСто
    Спасибо, буду думать. А что если вместо ВЫБОР соединить 2 набора, а результирующий уже объединить по "Счет".
     
  4. unknown181538

    unknown181538 НеГуру

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.417
    Симпатии:
    0
    Не вижу проблемы. В соединении можно написать, что совпадать может по д*цензура*у или по кредиту.
     
  5. KiR

    KiR НЕ шибка опытный програмер)

    Репутация:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    :) жрунимагу ;)
     
  6. Дайнеко

    Дайнеко Well-Known Member

    Репутация:
    0
    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Спасибо. Получилось таким методом:
    * Подчиненный сделал из объединения 2-х наборов: 1-только счет кредита и сумма, 2-только счет д*цензура* и сумма с минусом.
    * Соединил с документом
    * Группировал по реквизитам документа. Вот этого хотел избежать. Т.к. делаю универсальный механизм, выдающий любые реквизиты док-та. Поэтому для простоты хотелось иметь вложенный запрос уже запрос свернутым и отсеянным.
    Код:
    ВЫБРАТЬ
    РасходСырьяТовары.НомерСтроки КАК НомерСтроки,
    РасходСырьяТовары.Счет КАК Счет,
    РасходСырьяТовары.Товар,
    РасходСырьяТовары.Количество,
    СУММА(Проводки.СуммаР) КАК СуммаСто
    ИЗ
    Документ.РасходСырья.Товары КАК РасходСырьяТовары
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    БухИтоги.Регистратор КАК Документ,
    БухИтоги.НомерСтрокиДок КАК НомерСтроки,
    БухИтоги.СчетКт КАК Счет,
    БухИтоги.СуммаР КАК СуммаР
    ИЗ
    РегистрБухгалтерии.БухИтоги КАК БухИтоги
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ
    БухИтоги.Регистратор,
    БухИтоги.НомерСтрокиДок,
    БухИтоги.СчетДт,
    -БухИтоги.СуммаР
    ИЗ
    РегистрБухгалтерии.БухИтоги КАК БухИтоги
    
    
    ПО РасходСырьяТовары.Ссылка = Проводки.Документ
    И РасходСырьяТовары.НомерСтроки = Проводки.НомерСтроки
    И РасходСырьяТовары.Счет = Проводки.Счет
    ГДЕ
    РасходСырьяТовары.Ссылка = &Документ
    
    СГРУППИРОВАТЬ ПО
    РасходСырьяТовары.НомерСтроки,
    РасходСырьяТовары.Счет,
    РасходСырьяТовары.Товар,
    РасходСырьяТовары.Количество
    
    УПОРЯДОЧИТЬ ПО
    НомерСтроки


    По ходу работы возник вопрос оптимизации.
    Основной запрос содержит условие: ГДЕ РасходСырьяТовары.Ссылка = &Документ
    И он объединяется (левое) с вложенным запросом по этому же полю Ссылка. Вложенный выбирает движения документа (регистр накопления или бухгалтерии).

    Вопрос: надо ли во вложенном также ставить условие отбора по документу. Ведь даже если не ставить, то объединение отсечет только нужные записи и результат в обоих случаях получается правильный.
    Но сточки зрения загрузки сервера, делает ли он большую работу, когда во вложенном запросе выбирая регистр всех документов, а только потом отсекает ненужные. Нет большого набора данных чтобы проверить.
     
  7. unknown181538

    unknown181538 НеГуру

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.417
    Симпатии:
    0
    Мне кажется, что не обязательно.
     
  8. Дайнеко

    Дайнеко Well-Known Member

    Репутация:
    0
    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Так я и согласен, что "необязательно". Вопрос в том "желательно" - ли? Будет ли с условием запрос быстрее.
     
  9. unknown181538

    unknown181538 НеГуру

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.417
    Симпатии:
    0
    Имел в виду, что быстрее не будет, но доказать не могу. В подобном запросе, если бы правая часть выбиралась полностью, были бы серьезные тормоза. Никогда этого не наблюдалось.
     
Загрузка...

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