Проверка таблицы на дублирование строк (ТаблицаЗначений, ТабличнаяЧасть) и получение массива таких строк

05.02.18

Разработка - Механизмы платформы 1С

Функция для проверки дублирования строк в ТаблицеЗначений или ТабличнойЧасти. Также, если необходимо, возвращает массив задублированных строк (можно обработать).

Скачать файлы

Наименование Файл Версия Размер
Проверка таблицы на дублирование строк (ТаблицаЗначений, ТабличнаяЧасть):
.epf 11,92Kb
6
.epf 11,92Kb 6 Скачать

В помощь коллегам (из давних наработок).

Функция по проверке дублирования строк в таблицах (и получения массива таких строк).

  • Передавать можно как ТаблицуЗначений так и ТабличнуюЧасть.
  • Если имена колонок (разделенных запятыми) не передавать, то будет проведена проверка на полностью идентичные строки (по значениям всех колонок).
  • Если передать параметр МассивСтрок типа Массив, то функция вернет в неё массив задублированных строк (можно дальше обработать, например удалить).

Обработка в комплекте просто предназначена для отладки функции, весь код функции приведен ниже. Если кому-то пригодилось скачайте в благодарность :)

 
 ПроверитьДублированиеСтрокТаблицы()
 
 Пример вызова
 
 ПроверитьДублированиеСтрокТЧ() (для типовых конфигураций на обычных формах)

 

Дублирование строк проверка таблицы

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4512    dsdred    53    

71

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5289    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6408    dsdred    36    

111

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18473    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12087    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8819    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15984    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Hamsik 13 05.02.18 14:50 Сейчас в теме
Добрый день, не очень понятно зачем так много когда для такой задачи, да и практическое применение тоже не очень понятно, пробовали на большом количестве строк?
2. uri1978 137 05.02.18 14:55 Сейчас в теме
(1) Если можно реализовать этот функционал меньшим количеством строк кода буду рад увидеть. На больших не пробовал.
3. pm74 199 05.02.18 14:57 Сейчас в теме
(2) через запрос будет короче
4. uri1978 137 05.02.18 14:59 Сейчас в теме
6. kuzev 47 05.02.18 15:01 Сейчас в теме
7. uri1978 137 05.02.18 15:02 Сейчас в теме
(6) Что именно? Если передача имен колонок - то нет, неважно в каком регистре. Если содержание таблицы - да, регистрозависимо.
8. pm74 199 05.02.18 15:04 Сейчас в теме
(6)
регистрозависимо
что имеется в виду ?
9. kuzev 47 05.02.18 15:04 Сейчас в теме
10. pm74 199 05.02.18 15:07 Сейчас в теме
(9) ах вот что , ну да для текстовых строк
5. uri1978 137 05.02.18 15:00 Сейчас в теме
Проверять можно не только ТабличнуюЧасть, но и любую ТаблицуЗначений.
11. acsent 1199 05.02.18 18:52 Сейчас в теме
А нельзя ли было однопроходным алгоритмом по сортированной таблице сделать?
12. uri1978 137 05.02.18 18:55 Сейчас в теме
(11) Хотелось бы увидеть такой код
13. МихаилМ 05.02.18 19:47 Сейчас в теме
(12)
такой код есть в Искусство программирования. Том 1—4»
Автор: Дональд Эрвин Кнут
16. acsent 1199 06.02.18 13:21 Сейчас в теме
(12) Типа идешь вниз по таблице, если ключевые занчения не поменялись, то это дубль
17. uri1978 137 06.02.18 15:16 Сейчас в теме
(16) Вариант.
Но боюсь, что интерпретатор 1С при проходе всех строк будет работать намного дольше чем "Свернуть", "Отсортировать", тем более придется сравнивать все ключевые поля на каждой итерации.
18. acsent 1199 06.02.18 17:19 Сейчас в теме
(17) нужно устроить конкурс по скорости поиска дублей )))
14. Идальго 226 05.02.18 20:36 Сейчас в теме
Вот для основы:

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

	Возврат РезультатЗапроса.Пустой();
	
КонецФункции
Показать



Можно переделать более универсально и передавать имя таблицы, а также добавить вывод прочей информации.
jaroslav.h; +1 Ответить
15. uri1978 137 05.02.18 22:42 Сейчас в теме
(14) Поиск задублированных строк осуществляется следующим кодом, всё остальное в функции довесы. Причем код универсальный для любой таблицы значений и любого количества колонок:
ВремТаблицаЗначений = Таблица.Выгрузить(,Колонки);
ВремТаблицаЗначений.Колонки.Добавить("Количество_fhgeE");
ВремТаблицаЗначений.ЗаполнитьЗначения(1, "Количество_fhgeE");
ВремТаблицаЗначений.Свернуть(Колонки, "Количество_fhgeE");
ВремТаблицаЗначений.Сортировать("Количество_fhgeE" + " Убыв");  


То что происходит выгрузка ТЗ, так ведь и в запрос её нужно передать. То что есть сворачивания и сортировки естественно есть и в запросе.
Вариант запросом рассматривался, выбран был этот вариант.
19. independ 1518 06.02.18 17:29 Сейчас в теме
Как то делал так, насчет скорости не замерял

Для каждого стр из ТЗ Цикл
		ПараметрыОтбора=Новый Структура;
		Для каждого Колонка из ТЗ.Колонки Цикл
			ПараметрыОтбора.Вставить(Колонка.Имя,стр[Колонка.Имя]);
		КонецЦикла;
		стрНайд=ТЗ.НайтиСтроки(ПараметрыОтбора);
		Если стрНайд.Количество()>1 Тогда

		КонецЕсли;
КонецЦикла;	
Показать
portal2011; +1 Ответить
20. uri1978 137 06.02.18 17:34 Сейчас в теме
(19) Будут найдены дубли, а потом по ним снова поиск дублей.
21. independ 1518 06.02.18 17:42 Сейчас в теме
(20) да, но можно сделать некую проверку, или выгрузить, а затем свернуть. Но на большой ТЗ, думаю будет не очень
22. uri1978 137 06.02.18 17:42 Сейчас в теме
26. brylig 17.10.18 10:21 Сейчас в теме
(19) Вот тут так для табличных частей сделал без повторных проверок https://forum.infostart.ru/forum9/topic44859/message2066170/
27. uri1978 137 17.10.18 12:01 Сейчас в теме
(26) Этот код видел, в теме отписался. Собственно эта тема и сподвигла выложить свою процедуру (давно валялась) :)
23. IssakN 45 20.09.18 15:48 Сейчас в теме
Благодарю автора за приведенный код - пригодился в работе. Один вопрос - Колонки если нужно сделать отбор по двум - нужно вызывать функцию соответственно дважды, передавая разное значение переменной Колонки?
24. uri1978 137 20.09.18 16:29 Сейчас в теме
(23)

Пример таблицы:

Колонка1 | Колонка2
10 | 1
10 | 2


1. Если Вы хотите проверить задублированные строки по паре значений - нужно передавать через запятую названия 2 колонок.
"Колонка1,Колонка2" - этом случае задвоенных значений нет.

2. Если же Вы хотите проверить для каждой из колонок наличие дублей - то вызывать соответственно два раза.
Из примера выше - по колонке 1 будет выдано, что есть задвоенные значения, по второй колонке задвоенных нет.
25. IssakN 45 21.09.18 11:04 Сейчас в теме
(24) Благодарю пригодился второй способ.
Оставьте свое сообщение