Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Задвоение в запросе при использовании 2-х левых соединений
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Пользователю 1С 8.3, 8.2, 8.1, 8.0 > 1С Управление Торговым Предприятием 8
redking
Есть 1с82 комплексная для украины(УТП 1.2.6.1)
Добавлен РегистрСведений ДоговораАвторов (осн.измерения "книга договор автор", ресурсы "процент, видпроцента...")
стандартные оборотные Регистры Накопления:
"Продажи" (сумма продаж по товарам) и
"ПродажиСебестоимость" (себестоимость продаж по товарам)

Хочу получить для всех товаров из регистра ДоговораАвторов продажи и себестоимость и кво проданного товара , а результат в 2 раз больше чем ожидалось.... (Если добавить еще одно левое соединение например по ПродажиСебестоимость - будет в 3 раза)

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


Интересно, что если взять РегистрНакопления.ПродажиСебестоимость.Обороты и РегистрНакопления.Продажи.Обороты то все ок.
В чем ошибка????


 i 

Ознакомьтесь с правилами!
 
Ardi
Если оставить только регистр сведений и убрать "сгруппировать" - то выбирает несколько строк по одной &ВыбТМЦ?
redking
Цитата(Ardi @ 20.03.12, 1:40) необходимо зарегистрироваться для просмотра ссылки
Если оставить только регистр сведений и убрать "сгруппировать" - то выбирает несколько строк по одной &ВыбТМЦ?

Да, в частности на примере который я смотрю - 3 строки.
И хотя левое соединение ,как я понимаю, расширяет таблицу только влево, но после 2-х "левых" еще появляются дубли строк , которые после группировки и дают задвоение
Ardi
1с отработала корректно. согласно правилам SQL запросов.
redking
Цитата(Ardi @ 20.03.12, 2:11) необходимо зарегистрироваться для просмотра ссылки
1с отработала корректно. согласно правилам SQL запросов.

А что не так в запросе? получил 3 строки и справа каждой строке присоединил столбцы с кво и суммами.Откуда появление лишних строк?
redking
Что-то я не понимаю, и что-то из основных понятий похоже... HELP!
Домовик
тип измерения "книга" должен совпадать с типом измерения "номенклатура" указанных регистров.
redking
Цитата(Домовик @ 20.03.12, 6:58) необходимо зарегистрироваться для просмотра ссылки
тип измерения "книга" должен совпадать с типом измерения "номенклатура" указанных регистров.

Да, и он совпадает
Magdych
Ну Вы же соединяетесь только по номенклатуре, следовательно для одной и той же книги с разным договором и разным автором, будет подлаживаться одна и та же сумма реализации. В общем удваиваться или утраиваться будет столько раз, сколько уникальных наборов с одной и той же книгой будет.

З.Ы. Да и регистры оборотами выбирать лучше , чем записи перелопачивать.
redking
Цитата(Magdych @ 20.03.12, 9:46) необходимо зарегистрироваться для просмотра ссылки
Ну Вы же соединяетесь только по номенклатуре, следовательно для одной и той же книги с разным договором и разным автором, будет подлаживаться одна и та же сумма реализации. В общем удваиваться или утраиваться будет столько раз, сколько уникальных наборов с одной и той же книгой будет.

З.Ы. Да и регистры оборотами выбирать лучше , чем записи перелопачивать.

а почему тогда одно левое соединение ничего не задваивает? а если 2 левых, то в 2 раза;3 в 3 раза
И если у нас есть таблица и мы ее расширяем вправо? почему появляются новые строки?

Цитата(Magdych @ 20.03.12, 9:46) необходимо зарегистрироваться для просмотра ссылки
З.Ы. Да и регистры оборотами выбирать лучше , чем записи перелопачивать.

А регистр мне нужен, тк в полном запросе я отбираю обороты за период, и период для каждого товара-договора свой, те соединяю еще и по периоду.В оборотах нет периода.Но непонятка кроется для меня именно в этой части запроса...
Кстати,если использовать обороты то нет такой проблемы ,ничего не задваивает.
Magdych
Ну мне же не видно, что у Вас там в регистрах продажных написано. Соединения тут не при чем. У Вас запрос так построен, что выборки буду получаться такого типа:

Продали 5 шт. товара "книга1", в запрос Ваш попадет

Книга1 Автор1 Договор1 - 5 шт.
Книга1 Автор2 Договор1 - 5 шт.
и т.д.
Книга1 АвторN ДоговорN - 5 шт.
Ardi
Цитата(Magdych @ 20.03.12, 11:22) необходимо зарегистрироваться для просмотра ссылки
а почему тогда одно левое соединение ничего не задваивает? а если 2 левых, то в 2 раза;3 в 3 раза

Все пациенты врут.
redking
Цитата(Magdych @ 20.03.12, 10:22) необходимо зарегистрироваться для просмотра ссылки
Ну мне же не видно, что у Вас там в регистрах продажных написано. Соединения тут не при чем. У Вас запрос так построен, что выборки буду получаться такого типа:

Продали 5 шт. товара "книга1", в запрос Ваш попадет

Книга1 Автор1 Договор1 - 5 шт.
Книга1 Автор2 Договор1 - 5 шт.
и т.д.
Книга1 АвторN ДоговорN - 5 шт.

А мне так и надо, я и смотрю потом прибыль по тройке книге-автору-договору(в запросе по ним и сгруппировано),а вопросы
1)Почему левое соединение может добавлять строки в 1-ю таблицу
2)Почему есть разница одно левое(правильные суммы) и 2 и более таких-же левых соединений (сумма соотв в столько раз больше или если сгруппировать по кво то строк в n раз больше)
3)Как сделать правильно? ну хоть идею... а то 3 дня в ступоре.
Magdych
Для начала я бы с теории БД начал и прочитал бы про 3 нормальные формы. Потом прочел бы что такое соединения и как они работают.
У Вас составной ключ в первой таблице(та что рег. сведений) "Книга+Автор+Договор", а подкладываете вы под него простой ключ "Номенклатура". Какая структура оборотных регистров? Если и там есть измерения "договор" и "автор", то Вам следует добавить их в условия объединения. Если полей этих там нет, то информацию по реализации Вы можете получить только по аналитическому срезу "Книга".
redking
Цитата(Magdych @ 20.03.12, 10:44) необходимо зарегистрироваться для просмотра ссылки
Для начала я бы с теории БД начал и прочитал бы про 3 нормальные формы. Потом прочел бы что такое соединения и как они работают.
У Вас составной ключ в первой таблице(та что рег. сведений) "Книга+Автор+Договор", а подкладываете вы под него простой ключ "Номенклатура". Какая структура оборотных регистров? Если и там есть измерения "договор" и "автор", то Вам следует добавить их в условия объединения. Если полей этих там нет, то информацию по реализации Вы можете получить только по аналитическому срезу "Книга".

Мне нужна таблица "Книга,Автор,Договор,Кво,сумма Продаж, Себестоимость"
те если были продажи книга1- 5шт ,10грн(продажа),8грн(себестоимость)
и из регистра сведений получили таблицу
книга1,автор1,договор1
книга1,автор2,договор1
книга1,автор3,договор1
то результат ,по моему должен быть
книга1,автор1,договор1, 5шт ,10грн,8грн
книга1,автор2,договор1, 5шт ,10грн,8грн
книга1,автор3,договор1, 5шт ,10грн,8грн
А у меня выходит
книга1,автор1,договор1, 10шт ,20грн,16грн
книга1,автор2,договор1, 10шт ,20грн,16грн
книга1,автор3,договор1, 10шт ,20грн,16грн

а про соединения читал неоднократно, думал даже разобрался... до этой задачи sad.gif
Magdych
Уберите группировку и функцию сумма и покажите табличку, либо же сами проанализируйте и многое станет понятным.
redking
Цитата(Magdych @ 20.03.12, 11:17) необходимо зарегистрироваться для просмотра ссылки
Уберите группировку и функцию сумма и покажите табличку, либо же сами проанализируйте и многое станет понятным.

Делал,результат
книга1,автор1,договор1, 5шт ,10грн,8грн
книга1,автор2,договор1, 5шт ,10грн,8грн
книга1,автор3,договор1, 5шт ,10грн,8грн
книга1,автор1,договор1, 5шт ,10грн,8грн
книга1,автор2,договор1, 5шт ,10грн,8грн
книга1,автор3,договор1, 5шт ,10грн,8грн
Почему идет расширение таблицы вниз не пойму, это ж не полное соединение...
Magdych
Теперь неплохо бы увидеть оборотные регистры

ВЫБРАТЬ
    ПродажиОбороты.книга КАК книга,
//   ДоговораАвторовСрезПоследних.Автор,
  //  ДоговораАвторовСрезПоследних.Договор,
    ПродажиОбороты.Количество) КАК КоличествоПрод,
    ПродажиСебестоимость.Количество) КАК КоличествоСеб
ИЗ
         РегистрНакопления.Продажи КАК ПродажиОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
        ПО ПродажиОбороты.книга = ПродажиСебестоимость.Номенклатура
ГДЕ
    ПродажиОбороты.книга = &ВыбТМЦ


Для пущей наглядности сразу регистратор туда добавьте.
Vofka
Цитата(Magdych @ 20.03.12, 11:34) необходимо зарегистрироваться для просмотра ссылки
Теперь неплохо бы увидеть оборотные регистры

Magdych, давайте без регистра. В таком случае вы сможете претендовать на награду Гений телепатии и социального моделирования smile.gif
redking
Урра, вот блин!!! а по регистратору соединить и забыл!!!!
Огромное спасибо всем кто терпел мои мысленные потуги!!!!
Magdych
Цитата(redking @ 20.03.12, 12:14) необходимо зарегистрироваться для просмотра ссылки
Урра, вот блин!!! а по регистратору соединить и забыл!!!!
Огромное спасибо всем кто терпел мои мысленные потуги!!!!


Что Вы там соединять собрались по регистратору? Может все же покажете запрос по регистрам оборотным.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.