8.х Получение данных запросом из двух таблиц

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем andyid, 24 фев 2011.

  1. TopicStarter Overlay
    andyid
    Offline

    andyid Новичок в 1С

    Регистрация:
    14 окт 2010
    Сообщения:
    27
    Симпатии:
    1
    Баллы:
    4
    Здравствуйте. Не первый раз сталкиваюсь с проблемой. Недавно спрашивал на форуме www.1c-pro.ru и тогда проблему вроде удалось решить с помощью агрегатной функции. Теперь проблема вырисовалась более общей.

    Попробую объяснить на примере, потому что сам еще до конца не понимаю...

    У меня документ Закрытие управленческого месяца. В форме две табличных части
    1. СоставРаспределенияПоЦФО, в ней колонки:
    СтатьяЗатрат //справочник Статьи затрат
    СпособРаспределения //справочник Способы распределения
    СуммаКРаспределению //число


    2. РаспределениеПоЦФО, в ней колонки:
    СтатьяЗатрат //справочник Статья затрат
    Подразделение //справочник Подразделения
    СуммаРаспределения //число

    Смысл этих таблиц такая, что суммы из первой таблицы распределяются по подразделениям, база тоже известна.

    Например таблицы могут быть забиты следующими данными:

    1. Таблица:
    СтатьяЗатрат СпособРаспределения СуммаКРаспределению
    Статья1 Способ1 1000
    Статья2 Способ1 1500
    Статья3 Способ2 2000

    2. Таблица:
    СтатьяЗатрат Подразделение СуммаРаспределения
    Статья1 Подразделение1 300
    Статья1 Подразделение2 600
    Статья1 Подразделение3 100
    Статья2 Подразделение1 1000
    Статья2 Подразделение2 500
    Статья3 Подразделение1 1200
    Статья4 Подразделение4 800

    А проблема заключается в следующем: Нужно эти таблицы вывести на печать следующим образом:

    Статья1 Способ1 1000
    Подразделение1 300
    Подразделение2 600
    Подразделение3 100
    Статья2 Способ1 1500
    Подразделение1 1000
    Подразделение2 500
    Статья3 Способ2 2000
    Подразделение1 1200
    Подразделение4 800

    Запросом сделать красиво не получается. Одна из попыток такая:

    Код:
    Запрос = Новый Запрос;	
    
    Запрос.Текст ="ВЫБРАТЬ	              
    |	РаспределениеЗатратСоставРаспределенияПоЦФО.СтатьяЗатрат КАК СтатьяЗатрат,
    |	РаспределениеЗатратСоставРаспределенияПоЦФО.СпособРаспределения КАК СпособРаспределения,
    |	РаспределениеЗатратСоставРаспределенияПоЦФО.СуммаКРаспределению КАК СуммаКРаспределению,
    |	РаспределениеЗатратРаспределениеПоЦФО.Подразделение КАК Подразделение,
    |	РаспределениеЗатратРаспределениеПоЦФО.Сумма КАК Сумма	              
    |ИЗ
    |	Документ.РаспределениеЗатрат.СоставРаспределенияПоЦФО КАК РаспределениеЗатратСоставРаспределенияПоЦФО
    |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РаспределениеЗатрат.РаспределениеПоЦФО КАК РаспределениеЗатратРаспределениеПоЦФО
    |		ПО РаспределениеЗатратСоставРаспределенияПоЦФО.СтатьяЗатрат = РаспределениеЗатратРаспределениеПоЦФО.СтатьяЗатрат
    |ГДЕ
    |	РаспределениеЗатратРаспределениеПоЦФО.Ссылка = &Ссылка
    |	И РаспределениеЗатратСоставРаспределенияПоЦФО.Ссылка = &Ссылка				              
    |ИТОГИ
    |	СУММА(Сумма)				  
    |ПО
    | СтатьяЗатрат,
    |	СуммаКРаспределению
    |	СпособРаспределения,				  
    |	Подразделение";
    
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    
    ДеревоБазРаспределения = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    И выборкой тремя циклами получаем СтатьюЗатрат, СпособРаспределения и СуммуКРаспределению, а четвертым Подразделения... Как-то много циклов получается:(((

    Нельзя ли как-то двумя циклами сделать, т.е. первым циклом получаем строку содержащую СтатьюЗатрат, СпособРаспределения и СуммуКРаспределению, а вторым Подразделение

    Если как-то обобщить ситуацию. То как сделать так, что бы можно было получить не отдельное поле, а сразу несколько полей, т.е. в моем случае получается нужно два цикла, в первом получаем СтатьюЗатрат и к ней дополнительно два поля СпособРаспределения и СуммаКРаспределению, а вторым циклом получаем Подразделения

    Надеюсь моя проблема понятна, заранее Вам благодарен:))
  2. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Примерно так, на пальцах:
    Код:
    ВЫБРАТЬ
    СтатьяЗатрат,
    СпособРаспределения,
    СуммаКРаспределению,
    1 КАК Порядок 
    ИЗ
    Документ.РаспределениеЗатрат.СоставРаспределенияПоЦФО
    ГДЕ
    РаспределениеЗатратРаспределениеПоЦФО.Ссылка = &Ссылка
    
    ОБЪЕДИНИТЬ ВСЕ
    
    СтатьяЗатрат,
    Подразделение,
    Сумма,
    2 КАК Порядок 
    ИЗ
    Документ.РаспределениеЗатрат.РаспределениеПоЦФО
    ГДЕ
    РаспределениеЗатратРаспределениеПоЦФО.Ссылка = &Ссылка
    
    УПОРЯДОЧИТЬ ПО
    СтатьяЗатрат, Порядок
    

    Не уверен, что сработает выборка 2 типов в одно поле, если не сработает, то так:
    Код:
    ВЫБРАТЬ
    СтатьяЗатрат,
    СпособРаспределения,
    СуммаКРаспределению,
    1 КАК Порядок,
    "" КАК Подразделение
    ИЗ
    Документ.РаспределениеЗатрат.СоставРаспределенияПоЦФО
    ГДЕ
    РаспределениеЗатратРаспределениеПоЦФО.Ссылка = &;Ссылка
    
    ОБЪЕДИНИТЬ ВСЕ
    
    СтатьяЗатрат,
    "",
    Сумма,
    2,
    Подразделение 
    ИЗ
    Документ.РаспределениеЗатрат.РаспределениеПоЦФО
    ГДЕ
    РаспределениеЗатратРаспределениеПоЦФО.Ссылка = &;Ссылка
    
    УПОРЯДОЧИТЬ ПО
    СтатьяЗатрат, Порядок
    
  3. TopicStarter Overlay
    andyid
    Offline

    andyid Новичок в 1С

    Регистрация:
    14 окт 2010
    Сообщения:
    27
    Симпатии:
    1
    Баллы:
    4

    Отличное решение!!!!!!! Спасибо Большое, работает)))))) Я ж знал что можно красиво сделать!!! прямо как нужно и так можно и с более сложными таблицами... ваууу... н-да а мне еще учится и учится:)))))

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