Исключение дублей путем очищения

1. Intercititude 30.09.20 16:10 Сейчас в теме
Добрый день
8.2 ОФ

Есть запрос:
ВЫБРАТЬ

                ВТ_ИЗГЛ.НоменклатураПредставление,

                ВТ_ИЗГЛ.НоменклатураКод,

                ВТ_ИЗГЛ.СкладПредставление,

                ВТ_ИЗГЛ.КоличествоОстаток,

                ВТ_ИЗГЛ.Статус,

                ВТ_ИЗГЛ.КоличествоКПередаче,

                ВТ_ИЗГЛ.КоличествоВРезерве,

                ВТ_ИЗГЛ.КоличествоКПолучению,

                ВТ_ИЗГЛ.СвободныйОстаток,

                ВТ_ИЗГЛ.КоличествоОстатокПоСтатусу

ПОМЕСТИТЬ ВТ_ГЛ

ИЗ

                ВТ_ИЗГЛ КАК ВТ_ИЗГЛ

;

 

////////////////////////////////////////////////////////////­////////////////////

ВЫБРАТЬ

                НоменклатураКонтрагентов.Номенклатура КАК НоменклатураГЛ,

                МВТ_ГЛ.СкладПредставление КАК СкладГЛ,

                МВТ_ГЛ.КоличествоОстаток КАК КоличествоОстатокГл,

                МВТ_ГЛ.НоменклатураКод,

                МВТ_ГЛ.НоменклатураПредставление КАК НоменклатураПредставлениеГЛ,

                МВТ_ГЛ.Статус,

                МВТ_ГЛ.КоличествоКПередаче,

                МВТ_ГЛ.КоличествоВРезерве,

                МВТ_ГЛ.КоличествоКПолучению,

                МВТ_ГЛ.СвободныйОстаток,

                МВТ_ГЛ.КоличествоОстатокПоСтатусу

ПОМЕСТИТЬ Вт_ДанныеИЗГЛ

ИЗ

                ВТ_ГЛ КАК МВТ_ГЛ

                               ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов

                               ПО МВТ_ГЛ.НоменклатураКод = НоменклатураКонтрагентов.КодНоменклатурыКонтрагента

ГДЕ

                НЕ НоменклатураКонтрагентов.КодНоменклатурыКонтрагента = ""

;
Показать


Всё ок. Происходит сопоставление и выводятся позиции.
НО! может быть так, что по в первом подзапросе НоменклатураКод может быть равна коду по разным позиция из РС "Номенклатура контрагентов".
То есть на выходе будут дубли с одинаковыми данными,но с разными наименованиями номенклатуры. Мне же необходимо в таком случае очистить строку где дубли и оставить только одну. Реально ли это реализовать в самом запросе ?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. vlad_d 30.09.20 16:15 Сейчас в теме
(1) А зачем вам НоменклатураКонтрагентов, ради этого: НоменклатураКонтрагентов.Номенклатура КАК НоменклатураГЛ,?

Тогда просто выберите оттуда ссылки на номенклатуру различные и присоедините таблицу по коду. Дублей не будет

Кстати, так как у вас левое соединение, будет Null для всей номенклатуры, которая не найдена в регистре вот тут:

НоменклатураКонтрагентов.Номенклатура КАК НоменклатураГЛ,
4. Intercititude 30.09.20 16:20 Сейчас в теме +0.15 $m
(2) Это данные из другой базы полученые

Мне null и надо специально, когда не найдена )
3. FatPanzer 30.09.20 16:15 Сейчас в теме
OFF. Как же неудобно читать запросы оформленные "через строку"...

А в чем суть первого запроса? Просто изменение имени временной таблицы?

Ну если у вас в РС несколько записей с одним и тем же кодом - то чего вы хотели от левого соединения? Именно так и будет.
Подозреваю, что бороться надо не с запросом, а с тем, что в РС неправильно организованы данные.
5. Intercititude 30.09.20 16:20 Сейчас в теме
(3) Запрос к другой базе через COM и получение этих данных во временную ТЧ

Сори за строку, копирует так..

Да понятно, что дело в РС. Но плодить лишние карточки номенклатуры никто не хочет..
7. FatPanzer 30.09.20 16:26 Сейчас в теме
(5) Да нет. Вы берете данные из ВТ_ИЗГЛ и просто кладете из в ВТ_ИГЛ... Если бы это была ТЗ передаваемая в качестве параметра запроса, то было бы ИЗ &ВТ_ИЗГЛ КАК ВТ_ИЗГЛ...

Вообще, похоже на то, что вам надо условие на Контрагента поставить.
8. Intercititude 30.09.20 16:29 Сейчас в теме
(7) там новый запрос у которого мвт
и в этот мвт передаётся ранее созданая вт

поэтому так

Нее,контрагент тут точно не причём.
Просто пользователи ошиблись и в регистре завели у разных позиции одинаковый код для сопоставления.
9. FatPanzer 30.09.20 16:33 Сейчас в теме
(8) Ну вот я и говорю - исправляйте регистр. Не надо пытаться подогнать рабочие инструменты под ожидаемые результаты при кривых данных.
alex-l19041; Intercititude; +2 Ответить
10. Intercititude 30.09.20 16:34 Сейчас в теме
(9) Согласен с Вами. Но возможно это и не ошибка, так как отличия в позициях лишь в объеме. То есть по факту это одни и те же позиции. Просто на выходе пользователю достаточно видеть данные по одной.
11. FatPanzer 30.09.20 16:38 Сейчас в теме
(10) Значит удалите вторую из самого регистра. Этого будет тоже вполне достаточно.
12. Intercititude 30.09.20 16:47 Сейчас в теме
(11) Дело в том, что эти данные используются не только для моего случая. В других случаях это просто необходимо!
13. FatPanzer 30.09.20 16:51 Сейчас в теме
(12) Тогда вырабатывайте правила - какую именно запись показывать. И именно эти правила используйте в запросе при отборе. Либо действительно, отдельно выберите необходимые записи из регистра в отдельную ВТ, сгруппировав по Коду номенклатуры. И уже с ней совокупляйтесь хоть левым, хоть внутренним способом.
6. vlad_d 30.09.20 16:24 Сейчас в теме
(4) Если вы хотите выбрать только те позиции, которые есть у вас в регистре, то надо так:
.....
;
Выбрать Различные
    НоменклатураКонтрагентов.Номенклатура.Код Как КодНоменклатурыКонтрагента,
    НоменклатураКонтрагентов.Номенклатура Как Номенклатура
Поместить НоменклатураКонтрагентов
ИЗ
    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
;

ВЫБРАТЬ
     НоменклатураКонтрагентов.Номенклатура КАК НоменклатураГЛ,
.....
ПОМЕСТИТЬ Вт_ДанныеИЗГЛ
ИЗ
      ВТ_ГЛ КАК МВТ_ГЛ
          Внутреннее СОЕДИНЕНИЕ НоменклатураКонтрагентов
          ПО МВТ_ГЛ.НоменклатураКод = НоменклатураКонтрагентов.КодНоменклатурыКонтрагента
Показать
14. Intercititude 30.09.20 16:54 Сейчас в теме
16. FatPanzer 30.09.20 16:59 Сейчас в теме
(14) Естетсвенно. Если у вас в РС одному коду номенклатуры соответствует две фактические номенклатуры - у вас всегда будут дубли, пока вы не поставите дополнительных условий... Ну, например, "первая по алфавиту"...
20. Intercititude 30.09.20 17:18 Сейчас в теме
(16) Вообще изначально пытался после выгрузки этой ТЗ как то программно очистить строку, но получается ересь
15. vlad_d 30.09.20 16:57 Сейчас в теме
(14) значит у Вас в входящих данных в ВТ_ГЛ дубли кодов номенклатуры. Вы объясните что Вам надо.)
17. Intercititude 30.09.20 17:00 Сейчас в теме
(15) Как раз там позиция одна в ВТ_ГЛ. К примеру "КраснаяБутылка0.1" у неё код"001".
Но в РС есть две позиции "КраснаяБутылка0.1" и "КраснаяБутылка0.3" и у них у обоих стоит код "001".
В итоге из первой ВТ_ГЛ происходит задвоение. То есть "КраснаяБутылка0.1" и "КраснаяБутылка0.3" будут на выходе со одинаковыми данными.
В принципе мне всего лишь надо чтобы данные у "КраснаяБутылка0.3" стали пустыми и только.
Так же это надо продумать для всех следующих таких же случаев.
18. vlad_d 30.09.20 17:04 Сейчас в теме
(17)Стоп.. Так у вас в справочнике Номенклатура задвоенные коды? Тогда в чем смысл соединения по коду, раз он не уникальный? Логично тогда добавить наименование в соединение для уточнения.

.....
;
Выбрать Различные
    НоменклатураКонтрагентов.Номенклатура.Код Как КодНоменклатурыКонтрагента,
    НоменклатураКонтрагентов.Номенклатура.Наименование Как Наименование,
    НоменклатураКонтрагентов.Номенклатура Как Номенклатура
Поместить НоменклатураКонтрагентов
ИЗ
    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
;

ВЫБРАТЬ
     НоменклатураКонтрагентов.Номенклатура КАК НоменклатураГЛ,
.....
ПОМЕСТИТЬ Вт_ДанныеИЗГЛ
ИЗ
      ВТ_ГЛ КАК МВТ_ГЛ
          Внутреннее СОЕДИНЕНИЕ НоменклатураКонтрагентов
          ПО МВТ_ГЛ.НоменклатураКод = НоменклатураКонтрагентов.КодНоменклатурыКонтрагента
          И МВТ_ГЛ.НоменклатураПредставление = НоменклатураКонтрагентов.Наименование
Показать
19. Intercititude 30.09.20 17:15 Сейчас в теме
(18) Нет, позиция в одной базе одна.
А задвоение в РС "НоменклатураКонтрагентов" У двух разных позиции( по сути одинаковые) разные коды.
21. vlad_d 30.09.20 17:18 Сейчас в теме
(18) Так регистр ссылается на справочник Номенклатура. И код берется в Вашем запросе из справочника Номенклатура. Код хранится не в регистре, а в справочнике.
22. FatPanzer 30.09.20 17:25 Сейчас в теме
(21) Нет. Из запроса следует, что КодНоменклатуры и Номенклатура - это два самостоятельных измерения регистра сведений.
23. vlad_d 30.09.20 17:25 Сейчас в теме
А все... Сначала не понял, а потом как понял... Это ж измерение регистра получается. Так по идее сработает :


ПОМЕСТИТЬ Вт_ДанныеИЗГЛ
ИЗ
                ВТ_ГЛ КАК МВТ_ГЛ
                               ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
                               ПО МВТ_ГЛ.НоменклатураКод = НоменклатураКонтрагентов.КодНоменклатурыКонтрагента
                                И МВТ_ГЛ.ПредставлениеНоменклатуры = НоменклатураКонтрагентов.Номенклатура.Наименование
ГДЕ
                НЕ НоменклатураКонтрагентов.КодНоменклатурыКонтрагента = ""
24. cean 03.10.20 07:36 Сейчас в теме
Максимум(НоменклатураКонтрагентов.Номенклатура) если исспользоватт
25. t_yuri 21 09.10.20 15:48 Сейчас в теме
Обработка "ПоискИЗаменаДублирующихсяЭлементов" не поможет? Могу сбросить на почту...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот