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

Тема в разделе "1C и всё что с ней связано", создана пользователем Дайнеко, 17 сен 2012.

  1. Дайнеко

    Дайнеко Well-Known Member
    1C Team

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

    СГРУППИРОВАТЬ ПО
    БухИтоги.Регистратор,
    БухИтоги.НомерСтрокиДок
    ) КАК Проводки
    ПО
    РасходСырьяТовары.Ссылка = Проводки.Регистратор И
    РасходСырьяТовары.НомерСтроки = Проводки.НомерСтрокиДок
    Моя проблема в том, что надо во внутреннем запросе построить выражение ВЫБОР и в нем оперировать реквизитом из документа "РасходСырьяТовары.Счет Как СчетДок", т.е из головного запроса. Я в отладочных целях упростил само выражение и использовал параметр &Счет. Вот его и надо заменить. Это возможно?
     
  2. unknown181538

    unknown181538 НеГуру
    1C Team

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

    Дайнеко Well-Known Member
    1C Team

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

    unknown181538 НеГуру
    1C Team

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

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

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

    Дайнеко Well-Known Member
    1C Team

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


    ПО РасходСырьяТовары.Ссылка = Проводки.Документ
    И РасходСырьяТовары.НомерСтроки = Проводки.НомерСтроки
    И РасходСырьяТовары.Счет = Проводки.Счет
    ГДЕ
    РасходСырьяТовары.Ссылка = &Документ

    СГРУППИРОВАТЬ ПО
    РасходСырьяТовары.НомерСтроки,
    РасходСырьяТовары.Счет,
    РасходСырьяТовары.Товар,
    РасходСырьяТовары.Количество

    УПОРЯДОЧИТЬ ПО
    НомерСтроки


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

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

    unknown181538 НеГуру
    1C Team

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

    Дайнеко Well-Known Member
    1C Team

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Имел в виду, что быстрее не будет, но доказать не могу. В подобном запросе, если бы правая часть выбиралась полностью, были бы серьезные тормоза. Никогда этого не наблюдалось.
     
Загрузка...
Похожие Темы - Вложенный Запрос
  1. Melifasent
    Ответов:
    1
    Просмотров:
    1.779
  2. mrtg
    Ответов:
    14
    Просмотров:
    229
  3. erdi
    Ответов:
    1
    Просмотров:
    137
  4. lmike
    Ответов:
    23
    Просмотров:
    783
  5. deeeman
    Ответов:
    9
    Просмотров:
    361

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