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

Выбрать данные из 2-х регистров

Автор dello, 12 ноя 2013, 10:19

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

dello

в общем ситуация такая. Данные по цене хранятся в 2-х регистрах  сведений по контрагенту и категории контрагентов (VIP и не VIP)
Нужно запросом вытащить исходя из заказа покупателя цену на товар для контрагента, а если в этом регистре Null (не задана цена), тогда берем цену из другого регистра по категориям. Категория хранится в карточке Контрагента (контрагент.категория). Приоритет, конечно, у регистра с ценами по Контрагенту.
Вот никак не соображу как сделать.
Если делаю два левых соединения с этими регистрами, если цены разные, данные задваиваются.

ВЫБРАТЬ
        ЕСТЬNULL(Цены.Цена, ЦеныБазовые.ЦенаБазовая) КАК Цена,
   ПродажиСЦенами.Контрагент КАК Контрагент,
   ПродажиСЦенами.Номенклатура КАК Номенклатура,
   ПродажиСЦенами.Период КАК Период,
   ПродажиСЦенами.ЦенаПродажи КАК ЦенаПродажи,
   СУММА(ПродажиСЦенами.Площадь) КАК Площадь
ИЗ
   Продажи КАК ПродажиСЦенами
      ЛЕВОЕ СОЕДИНЕНИЕ Цены КАК Цены
      ПО ПродажиСЦенами.Контрагент = Цены.ПартнерПоЦенам
         И ПродажиСЦенами.Формула = Цены.БазоваяФормула
      ЛЕВОЕ СОЕДИНЕНИЕ ЦеныБазовые КАК ЦеныБазовые
      ПО ПродажиСЦенами.Категория = ЦеныБазовые.КатегорияПартнеров
         И ПродажиСЦенами.Формула = ЦеныБазовые.ФормулаБазовыхЦен

СГРУППИРОВАТЬ ПО
   ПродажиСЦенами.Контрагент,
   ПродажиСЦенами.Номенклатура,
   ПродажиСЦенами.Период,
   ПродажиСЦенами.ЦенаПродажи,
        ЕСТЬNULL(Цены.Цена, ЦеныБазовые.ЦенаБазовая)

Запрос с временными таблицами не стал их сюда пихать.

mixqn

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

В общем, не хватает какого-то условия либо в соединениях, либо под ГДЕ надо добавить после - чтобы ровно 1 строка получалась всегда. Для этого нужно видеть полную структуру данных.

dello

Цена   Контрагент   Номенклатура   Период   ЦенаПродажи   Площадь
582   ДОНСТРОЙ, ООО   с\п 1         26.08.2013    985,6          1,6993
580   ДОНСТРОЙ, ООО   с\п 1        26.08.2013  985,6          1,6993

Это результат с группировкой, площадь сложилась. Если цены для контрагента есть в двух регистрах и они разные, вот получается 2 строки. А надо бы только первую. Если в одном из регистров данных нету, или они одинаковы, тогда всё норм, срабатывает СГРУППИРОВАТЬ и получается 1 строка.

mixqn

Есть подозрение, что изначально в таблице Продажи 2 разных строки - в одной заполнен Контрагент, в другой - Категория. Как следствие, после соединения так же остается 2 строки, при чем в одной Цена = Цены.Цена, в другой Цена = ЦеныБазовые.ЦенаБазовая, далее по условиям группировок обе строи остаются.

Таким образом, надо изначально выбрать * из таблицы Продажи и проверить, что там.

Если мое предположение верно, то надо сначала обеспечить одновременное наличие в каждой строке Продажи значений Контрагент и Категория, а потом уже присоединять слева таблицы Цены и ЦеныБазовые

Теги:

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

Рейтинг@Mail.ru

Поиск