понедельник, 3 июня 2013 г.

Поиск дублей в табличном поле (таблице значений)

Суть отсюда (из комментария 19). Отличный код! Причем вполне универсальный (меняем только сам источник и ссылки на него, а изменение данных очень просто!), вопреки утверждению автора!

Мой вариант (небольшая адаптация+ комментарии).

"ВЫБРАТЬ
//Основной запрос пакета- выбираем нужные данные,
//и помещаем их во временную таблицу- Таблица.
//Здесь (до ключевого слова ПОМЕСТИТЬ) добавляем/меняем необходимые нам данные.
//В принципе сюда можно выбрать ВСЕ данные исходной таблицы
| УстановкаМестХраненияНоменклатурыТовары.Номенклатура,
| УстановкаМестХраненияНоменклатурыТовары.Партия,
| УстановкаМестХраненияНоменклатурыТовары.Приоритет,
| УстановкаМестХраненияНоменклатурыТовары.НомерСтроки
|ПОМЕСТИТЬ Таблица
|ИЗ
| Документ.УстановкаМестХраненияНоменклатуры.Товары КАК УстановкаМестХраненияНоменклатурыТовары
|ГДЕ
| УстановкаМестХраненияНоменклатурыТовары.Ссылка = &Ссылка
| И УстановкаМестХраненияНоменклатурыТовары.Номенклатура <> ЗНАЧЕНИЕ(Справочник.МестаХранения.ПустаяСсылка)
| И УстановкаМестХраненияНоменклатурыТовары.Номенклатура.Услуга = ЛОЖЬ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
//Данные по которым нужно произвести сравнение выносим сюда.
//Результатом этого запроса явится "сбор"  элементов с одинаковыми полями 
//( в соответствии с условием  
//КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Таблица.НомерСтроки) > 1, т.е. 
//ТЕ ПОЛЯ (РАЗЛИЧАЮЩИЕСЯ НомеромСтроки) которых >1) 
| Таблица.Номенклатура,
| Таблица.Партия,
| Таблица.Приоритет
|ПОМЕСТИТЬ Дубли
|ИЗ
| Таблица КАК Таблица
|
|СГРУППИРОВАТЬ ПО
| Таблица.Номенклатура,
| Таблица.Партия,
| Таблица.Приоритет
|
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Таблица.НомерСтроки) > 1
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
//Здесь укажем данные, нужные нам в выборке из запроса (к примеру в сообщении)
//и установим связи м.у. нашими таблицами
| Таблица.Номенклатура,
| Таблица.Партия,
| Таблица.Приоритет,
 | Таблица.НомерСтроки
 |ИЗ
 | Дубли КАК Дубли
 |  ЛЕВОЕ СОЕДИНЕНИЕ Таблица КАК Таблица
 |  ПО Дубли.Номенклатура = Таблица.Номенклатура
 |  И Дубли.Партия = Таблица.Партия
 |  И Дубли.Приоритет = Таблица.Приоритет";

Суть. Мы сравниваем строки ТЧ Товары документа УстановкаМестХраненияНоменклатуры по полям: Номенклатура, Партия, Приоритет.
Если существуют (две и более) строки где эти поля равны друг-другу- они попадут в выборку из запроса!

Комментариев нет:

Отправить комментарий