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

05.02.18

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

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

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • Поиск от одного разработчика до ИТ-команд под проект.
  • Обмен любыми контактами разрешён.
  • 0% комиссии, допускаются расчёты напрямую.

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

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

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

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

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

 

Готовое решение

ККТ-ОНЛАЙН 54-ФЗ: Обработка для работы онлайн касс АТОЛ, ШТРИХ, VIKI PRINT и т.д. МАРКИРОВКА (Разрешит. режим) + ЭКВАЙРИНГ + БЕСПЛАТНЫЙ ДЕМО

Универсальная обработка для фискальных регистраторов! Подключайте любые ККТ, включая Веб сервер АТОЛ, без обновления 1С и работайте с несколькими кассами одновременно. Тестовый доступ — бесплатно!


Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

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

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    31589    TitanLuchs    108    

149

Механизмы платформы 1С Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    17301    bayselonarrend    127    

68

Механизмы платформы 1С Программист 1С:Предприятие 8 Бесплатно (free)

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    21118    user2122906    9    

66

Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 Бесплатно (free)

Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.

17.01.2025    36909    user2122906    12    

62

Механизмы платформы 1С WEB-интеграция Программист 1С:Предприятие 8 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    32232    dsdred    106    

148

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    28277    bayselonarrend    22    

177

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    15352    dsdred    22    

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

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

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



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


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

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

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

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

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


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

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