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

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 Сейчас в теме
Обработка "ПоискИЗаменаДублирующихсяЭлементов" не поможет? Могу сбросить на почту...
Оставьте свое сообщение
Вакансии
Программист 1С
Казань
зарплата от 150 000 руб.
Полный день

Программист 1С:ERP
Москва
зарплата от 100 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день