Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 17:25

Задвоение в запросе

Автор Yeahkaterina, 04 окт 2011, 21:37

0 Пользователей и 1 гость просматривают эту тему.

Yeahkaterina

Здравствуйте! Подскажите пожалуйста, как правильно реализовать запрос. Запрос такой:


ВЫБРАТЬ
   ХозрасчетныйОстаткиИОбороты.Субконто1 КАК КонтрагентРег,
   ВложенныйЗапрос.Контрагент КАК КонтрагентДок,
   ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
   ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
   ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборот, 0) КАК СуммаОбРег,
   ВложенныйЗапрос.Дебет КАК Дебет,
   ВложенныйЗапрос.Кредит КАК Кредит,
   ВложенныйЗапрос.Суммавдок КАК СуммаОбДок,
   ВложенныйЗапрос.ДоговорВидДоговора,
   ВложенныйЗапрос.АктВзаим
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (&Счет), , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
      ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
         СУММА(ЕСТЬNULL(АктСверкиВзаиморасчетовПоДаннымОрганизации.Дебет - АктСверкиВзаиморасчетовПоДаннымОрганизации.Кредит, 0)) КАК Суммавдок,
         АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка.Контрагент КАК Контрагент,
         АктСверкиВзаиморасчетовПоДаннымОрганизации.Договор.ВидДоговора КАК ДоговорВидДоговора,
         СУММА(АктСверкиВзаиморасчетовПоДаннымОрганизации.Дебет) КАК Дебет,
         СУММА(АктСверкиВзаиморасчетовПоДаннымОрганизации.Кредит) КАК Кредит,
         АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка КАК АктВзаим
      ИЗ
         Документ.АктСверкиВзаиморасчетов.ПоДаннымОрганизации КАК АктСверкиВзаиморасчетовПоДаннымОрганизации
      ГДЕ
         АктСверкиВзаиморасчетовПоДаннымОрганизации.Дата МЕЖДУ &НачПериода И &КонПериода
         И АктСверкиВзаиморасчетовПоДаннымОрганизации.Договор.ВидДоговора = &ВидДоговора
         И АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка.Организация = &Организация
      
      СГРУППИРОВАТЬ ПО
         АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка.Контрагент,
         АктСверкиВзаиморасчетовПоДаннымОрганизации.Договор.ВидДоговора,
         АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка) КАК ВложенныйЗапрос
      ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = ВложенныйЗапрос.Контрагент

УПОРЯДОЧИТЬ ПО
   КонтрагентРег,
   КонтрагентДок


Дело в том, что необходимо выбрать еще счет из ХозрасчетныйОстаткиИОбороты. Но если в запросе указать еще счет :

ВЫБРАТЬ
   ХозрасчетныйОстаткиИОбороты.Субконто1 КАК КонтрагентРег,
   ВложенныйЗапрос.Контрагент КАК КонтрагентДок,
   ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
   ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
   ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборот, 0) КАК СуммаОбРег,
   ВложенныйЗапрос.Дебет КАК Дебет,
   ВложенныйЗапрос.Кредит КАК Кредит,
   ВложенныйЗапрос.Суммавдок КАК СуммаОбДок,
   ВложенныйЗапрос.ДоговорВидДоговора,
   ВложенныйЗапрос.АктВзаим,
   ХозрасчетныйОстаткиИОбороты.Счет
           .
           .
           .
           .
Тогда контрагенты задваиваются и обороты показываются неправильные. Подскажите пожалуйста как поступить


progmikon

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

comol

Ну хорошо бы наверное сделать констуркцию вида ВЫБРАТЬ &Счет КАК Счет в таблице документа и соединить с регистром с учетом данной таблицы - первое правило избавления от задвоений... соединения должны быть по всем полям, присутствующим в конечном результате.
Судя по контексту основная таблица - акт сверки - значит правильнее сделать всё-таки левое соединение.

Ну и если совсем ничего не получается - делайте объединение потом группировку. там если уж не получите правильного результата - хотя бы поймёте в чем проблема
Статьи по оптимизации 1С: http://comol.livejournal.com/

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск