Почему запрос возвращает удвоенный результат ?
Добрый день, на писал запрос только вот понять не могу выдаёт всё в двойне.
ВЫБРАТЬ
ВыбраныйНомерКонтракта.ВыбраныйНомерКонтрактаДляФорм КАК ВыбраныйНомерКонтрактаДляФорм,
Поставка.ПоставкаНомерКонтракта КАК ПоставкаНомерКонтракта,
Поставка.Осталось
ПОМЕСТИТЬ
ВремТабПоставкаОстаток
ИЗ
РегистрСведений.Поставка КАК Поставка,
РегистрСведений.ВыбраныйНомерКонтракта КАК ВыбраныйНомерКонтракта
ГДЕ
Поставка.ПоставкаНомерКонтракта = ВыбраныйНомерКонтрактаДляФорм
СГРУППИРОВАТЬ ПО
ВыбраныйНомерКонтракта.ВыбраныйНомерКонтрактаДляФорм,
Поставка.ПоставкаНомерКонтракта,
Поставка.Осталось
;
ВЫБРАТЬ
ВыбраныйНомерКонтракта.ВыбраныйНомерКонтрактаДляФорм,
СпецификацияКонтракта.СпецификацияКонтрактаНомерКонтракта,
СпецификацияКонтракта.СпецификацияКонтрактаНаименование,
СпецификацияКонтракта.СпецификацияКонтрактаКоличество,
СпецификацияКонтракта.СпецификацияКонтрактаЦенаЗаЕд,
СпецификацияКонтракта.СпецификацияКонтрактаСумма,
ВремТабПоставкаОстаток.Осталось
ИЗ
РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта,
РегистрСведений.ВыбраныйНомерКонтракта КАК ВыбраныйНомерКонтракта
ЛЕВОЕ СОЕДИНЕНИЕ
ВремТабПоставкаОстаток КАК ВремТабПоставкаОстаток
ПО
(ВыбраныйНомерКонтракта.ВыбраныйНомерКонтрактаДляФорм = ВремТабПоставкаОстаток.ПоставкаНомерКонтракта)
ПоказатьПрикрепленные файлы:
По теме из базы знаний
Найденные решения
(5)у в СпецификацияКонтракта номер контракта и наименование контракта это по идее должны быть измерения.
в данном случае вы обращаетесь что на один номер контракта в то время когда на наименования контракта разные остатки, т.е. обычно левое вхождение у вас идет по номеру и конечно будет по две строки из ваших условий
в данном случае вы обращаетесь что на один номер контракта в то время когда на наименования контракта разные остатки, т.е. обычно левое вхождение у вас идет по номеру и конечно будет по две строки из ваших условий
(23)
И вот еще, кстати. Судя по всему, тут попытка получить остатки не в разрезе номера контракта, а в разрезе номера контракта и номенклатуры.
И тогда при соединении только по номеру контракта и получается такая картина.
Поставка:
12345 Ведро 4
12345 Антисептик 46
Спецификация:
12345 Ведро
12345 Антисептик
по НомерКонтракта
Дает набор:
Спецификация(12345), Спецификация(Ведро), Поставка(12345), Поставка(Ведро), Поставка(4)
Спецификация(12345), Спецификация(Ведро), Поставка(12345), Поставка(Антисептик), Поставка(46)
Спецификация(12345), Спецификация(Антисептик), Поставка(12345), Поставка(Ведро), Поставка(4)
Спецификация(12345), Спецификация(Антисептик), Поставка(12345), Поставка(Антисептик) , Поставка(46)
А если соединить по Номеру контракта и номенклатуре, получится набор:
Спецификация(12345), Спецификация(Ведро), Поставка(12345), Поставка(Ведро), Поставка(4)
Спецификация(12345), Спецификация(Антисептик), Поставка(12345), Поставка(Антисептик) , Поставка(46)
И вот еще, кстати. Судя по всему, тут попытка получить остатки не в разрезе номера контракта, а в разрезе номера контракта и номенклатуры.
И тогда при соединении только по номеру контракта и получается такая картина.
Поставка:
12345 Ведро 4
12345 Антисептик 46
Спецификация:
12345 Ведро
12345 Антисептик
по НомерКонтракта
Дает набор:
Спецификация(12345), Спецификация(Ведро), Поставка(12345), Поставка(Ведро), Поставка(4)
Спецификация(12345), Спецификация(Ведро), Поставка(12345), Поставка(Антисептик), Поставка(46)
Спецификация(12345), Спецификация(Антисептик), Поставка(12345), Поставка(Ведро), Поставка(4)
Спецификация(12345), Спецификация(Антисептик), Поставка(12345), Поставка(Антисептик) , Поставка(46)
А если соединить по Номеру контракта и номенклатуре, получится набор:
Спецификация(12345), Спецификация(Ведро), Поставка(12345), Поставка(Ведро), Поставка(4)
Спецификация(12345), Спецификация(Антисептик), Поставка(12345), Поставка(Антисептик) , Поставка(46)
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(5)у в СпецификацияКонтракта номер контракта и наименование контракта это по идее должны быть измерения.
в данном случае вы обращаетесь что на один номер контракта в то время когда на наименования контракта разные остатки, т.е. обычно левое вхождение у вас идет по номеру и конечно будет по две строки из ваших условий
в данном случае вы обращаетесь что на один номер контракта в то время когда на наименования контракта разные остатки, т.е. обычно левое вхождение у вас идет по номеру и конечно будет по две строки из ваших условий
ИЗ
РегистрСведений.ВыбраныйНомерКонтракта КАК ВыбраныйНомерКонтракта
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта
ПО
(ВыбраныйНомерКонтракта.КлючевоеПоле = ВремТабПоставкаОстаток.КлючевоеПоле)
ЛЕВОЕ СОЕДИНЕНИЕ
ВремТабПоставкаОстаток КАК ВремТабПоставкаОстаток
ПО
(ВыбраныйНомерКонтракта.ВыбраныйНомерКонтрактаДляФорм = ВремТабПоставкаОстаток.ПоставкаНомерКонтракта)
(11)
Показать
(12) Предлагаете присоединить к ВыбраныйНомерКонтракта а не к спецификации, я так уже делал и более того перебрал все соединения результат тот же. Я хочу присоединить к к одной таблице 2 и если присоединять их по отдельности то всё в прядке, но только все вместе начинает двоиться.
ИЗ
РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта,
РегистрСведений.ВыбраныйНомерКонтракта КАК ВыбраныйНомерКонтракта
ЛЕВОЕ СОЕДИНЕНИЕ
ВремТабПоставкаОстаток КАК ВремТабПоставкаОстаток
У вас в предложении ИЗ использован оператор "," (_запятая_). Это значит, что Вы перемножили две таблицы РегистрСведений.СпецификацияКонтракта и РегистрСведений.ВыбраныйНомерКонтракта между собой. Т.е. на каждую строчку первой приходится каждая строчка второй таблицы.
(4) Совсем убрать ее нельзя. Ее можно заменить на другой оператор. Всего в 1С-ке бинарных операторов с таблицами бывает 5:
1.запятая
2.внутреннее соединение
3.полное соединение
4.левое соединение
5.правое соединение
Вы уж нагуглите сами чем они отличаются.
В теоретических книжках
1.coma
2.inner join
3.full outer join
4.left outer join
5.right outer join
1.запятая
2.внутреннее соединение
3.полное соединение
4.левое соединение
5.правое соединение
Вы уж нагуглите сами чем они отличаются.
В теоретических книжках
1.coma
2.inner join
3.full outer join
4.left outer join
5.right outer join
Непонятна логика первого запроса. Плюс не виден смысл группировки без использования агрегатных функций.
Позволю себе предположить, что текст запроса должен быть примерно такой:
Тогда это будет похоже на остаток. Можно добавить условие ИМЕЮЩИЕ СУММА(ЕСТЬNULL(Поставка.Осталось,0)) <> 0, чтобы получить только ненулевые остатки.
Второй запрос можно упростить:
Тут можно заменить левое соединение на внутреннее и получить только ненулевые остатки.
Все зависит от назначения запроса, которое не раскрыто.
Позволю себе предположить, что текст запроса должен быть примерно такой:
ВЫБРАТЬ
ВыбраныйНомерКонтракта.ВыбраныйНомерКонтрактаДляФорм КАК ВыбраныйНомерКонтрактаДляФорм,
СУММА(ЕСТЬNULL(Поставка.Осталось,0)) КАК Осталось
ПОМЕСТИТЬ
ВремТабПоставкаОстаток
ИЗ
РегистрСведений.ВыбраныйНомерКонтракта КАК ВыбраныйНомерКонтракта
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Поставка КАК Поставка
ПО
Поставка.ПоставкаНомерКонтракта = ВыбраныйНомерКонтракта.ВыбраныйНомерКонтрактаДляФорм
СГРУППИРОВАТЬ ПО
ВыбраныйНомерКонтракта.ВыбраныйНомерКонтрактаДляФорм,
Поставка.ПоставкаНомерКонтракта
;
ПоказатьТогда это будет похоже на остаток. Можно добавить условие ИМЕЮЩИЕ СУММА(ЕСТЬNULL(Поставка.Осталось,0)) <> 0, чтобы получить только ненулевые остатки.
Второй запрос можно упростить:
ВЫБРАТЬ
СпецификацияКонтракта.СпецификацияКонтрактаНомерКонтракта,
СпецификацияКонтракта.СпецификацияКонтрактаНаименование,
СпецификацияКонтракта.СпецификацияКонтрактаКоличество,
СпецификацияКонтракта.СпецификацияКонтрактаЦенаЗаЕд,
СпецификацияКонтракта.СпецификацияКонтрактаСумма,
ЕСТЬNULL(ВремТабПоставкаОстаток.Осталось, 0) КАК Осталось
ИЗ
РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта
ЛЕВОЕ СОЕДИНЕНИЕ
ВремТабПоставкаОстаток КАК ВремТабПоставкаОстаток
ПО
(СпецификацияКонтракта.СпецификацияКонтрактаНомерКонтракта = ВремТабПоставкаОстаток.ПоставкаНомерКонтракта)
ПоказатьТут можно заменить левое соединение на внутреннее и получить только ненулевые остатки.
Все зависит от назначения запроса, которое не раскрыто.
(22) В смысле не раскрыто я хочу получить данные из РС Остатки и добавить их к данным СпецификацияКонтракта причём соединяю их по Номеру контракта. У меня куча запросов с левым соединением и просто, но не один не двоил с это ересью только сейчас столкнулся не как решить не могу. Правда в тех РС измерение только одно, а в РС Поставка 4 это может влиять ?
Прикрепленные файлы:
(23)
Чтобы получить все остатки из этого регистра по номеру контракта, достаточно вытащить ПоставкаНомерКонтракта и Сумма(Осталось), сгруппировавшись по ПоставкаНомерКонтракта.
Очень специфическая структура регистра Поставка и назначение регистра ВыбраныйНомерКонтракта не очень понятно, потому и вопросы возникают...
Чтобы получить все остатки из этого регистра по номеру контракта, достаточно вытащить ПоставкаНомерКонтракта и Сумма(Осталось), сгруппировавшись по ПоставкаНомерКонтракта.
ВЫБРАТЬ
Поставка.ПоставкаНомерКонтракта КАК ПоставкаНомерКонтракта ,
СУММА(Поставка.Осталось) КАК Осталось
ПОМЕСТИТЬ
ВремТабПоставкаОстаток
ИЗ
РегистрСведений.Поставка КАК Поставка
СГРУППИРОВАТЬ ПО
Поставка.ПоставкаНомерКонтракта;
ПоказатьОчень специфическая структура регистра Поставка и назначение регистра ВыбраныйНомерКонтракта не очень понятно, потому и вопросы возникают...
(28) Да, есть такое дело. Пока стало понятно, какова цель, много времени прошло.
Но тут дело в том, что местные жители привыкли к типовым конфам и следуют пути одинэсника. На этом пути постоянно попадаются всеразличные остатки, но живут они в регистрах накопления и получаются через виртуальные таблицы остатков.
Эти виртуальные таблицы занимаются примерно тем, что и было описано в (24): суммированием ресурсов по заданным измерениям с учетом движений. Грубо говоря, документ спецификация делает приход, документ поставка - расход, а остатки дают понимание, сколько еще осталось получить... Это классика, все остальное останется в лучшем случае непонятым.
Если вернуться к обсуждаемому кейсу, теперь, когда стало понятно, что там еще и номенклатура участвует, в вт, которая эмулирует таблицу остатков, просто появится еще поле с номенклатурой, которое добавится в группировку.
Но, опять же, такие вещи лучше делать не на рс, а на рн, это, во-первых, намного проще, т.к. всю логику возьмет на себя платформа, и, во-вторых, больше шансов получить ответы на вопросы, т.к. эта логика понятна сообществу...
Но тут дело в том, что местные жители привыкли к типовым конфам и следуют пути одинэсника. На этом пути постоянно попадаются всеразличные остатки, но живут они в регистрах накопления и получаются через виртуальные таблицы остатков.
Эти виртуальные таблицы занимаются примерно тем, что и было описано в (24): суммированием ресурсов по заданным измерениям с учетом движений. Грубо говоря, документ спецификация делает приход, документ поставка - расход, а остатки дают понимание, сколько еще осталось получить... Это классика, все остальное останется в лучшем случае непонятым.
Если вернуться к обсуждаемому кейсу, теперь, когда стало понятно, что там еще и номенклатура участвует, в вт, которая эмулирует таблицу остатков, просто появится еще поле с номенклатурой, которое добавится в группировку.
Но, опять же, такие вещи лучше делать не на рс, а на рн, это, во-первых, намного проще, т.к. всю логику возьмет на себя платформа, и, во-вторых, больше шансов получить ответы на вопросы, т.к. эта логика понятна сообществу...
(23)
И вот еще, кстати. Судя по всему, тут попытка получить остатки не в разрезе номера контракта, а в разрезе номера контракта и номенклатуры.
И тогда при соединении только по номеру контракта и получается такая картина.
Поставка:
12345 Ведро 4
12345 Антисептик 46
Спецификация:
12345 Ведро
12345 Антисептик
по НомерКонтракта
Дает набор:
Спецификация(12345), Спецификация(Ведро), Поставка(12345), Поставка(Ведро), Поставка(4)
Спецификация(12345), Спецификация(Ведро), Поставка(12345), Поставка(Антисептик), Поставка(46)
Спецификация(12345), Спецификация(Антисептик), Поставка(12345), Поставка(Ведро), Поставка(4)
Спецификация(12345), Спецификация(Антисептик), Поставка(12345), Поставка(Антисептик) , Поставка(46)
А если соединить по Номеру контракта и номенклатуре, получится набор:
Спецификация(12345), Спецификация(Ведро), Поставка(12345), Поставка(Ведро), Поставка(4)
Спецификация(12345), Спецификация(Антисептик), Поставка(12345), Поставка(Антисептик) , Поставка(46)
И вот еще, кстати. Судя по всему, тут попытка получить остатки не в разрезе номера контракта, а в разрезе номера контракта и номенклатуры.
И тогда при соединении только по номеру контракта и получается такая картина.
Поставка:
12345 Ведро 4
12345 Антисептик 46
Спецификация:
12345 Ведро
12345 Антисептик
по НомерКонтракта
Дает набор:
Спецификация(12345), Спецификация(Ведро), Поставка(12345), Поставка(Ведро), Поставка(4)
Спецификация(12345), Спецификация(Ведро), Поставка(12345), Поставка(Антисептик), Поставка(46)
Спецификация(12345), Спецификация(Антисептик), Поставка(12345), Поставка(Ведро), Поставка(4)
Спецификация(12345), Спецификация(Антисептик), Поставка(12345), Поставка(Антисептик) , Поставка(46)
А если соединить по Номеру контракта и номенклатуре, получится набор:
Спецификация(12345), Спецификация(Ведро), Поставка(12345), Поставка(Ведро), Поставка(4)
Спецификация(12345), Спецификация(Антисептик), Поставка(12345), Поставка(Антисептик) , Поставка(46)
(25)Ну вот дело сдвинулось с мёртвой точки только уточню, что так
А если соединить по Номеру контракта и номенклатуре, получится набор
у меня поля остаток вышли пустыми соединил по номенклатуре спецификации и номенклатуре поставка, всё появилось
.
Прикрепленные файлы:
(27) если соединять только по номенклатуре, можно зацепить несколько договоров с одинаковой номенклатурой и получить совсем не то, что хотелось. Лучше осознать, почему по полям идентичного назначения связаться не получается. М.б. в запросе косяк какой, или вообще типы полей разные?..
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)