Поиск дублей в таблице значений или табличном поле
Проверка любой таблицы на повторяющиеся строки, с выводом сообщения какие строки задублированны, и режимом "Отказ" для проведения документов.
В данной процедуре поиск дублей происходит по всем колонкам строк. Тоесть дублем считается повтор значений в двух строках по всем колонкам.
Если повторяющих строк больше одной, то они все будут показаны в сообщении, с порядковым номером исходной строки и повторяющейся строки.
Данную процедура лучше использовать в общем модуле и вызывать её из процедур "ПриЗаписи" или "ОбработкаПроведения", и т.п. То есть в тех, где можно сделать отказ от выполнения дальнейших дествий
В качестве Таблицы — можно указать "ТаблицуЗначений", либо "ТабличнуюЧасть" документа, Справочника и т.д.
- Описание
- Подробнее
Описание
// !!! Павел С.С. 2 июня 2011 г. 17:49:14
// Проверка любой таблицы на повторяющиеся строки
// Данную процедура лучше использовать в процедурах ПриЗаписи, ОбработкаПроведения, и т.п. Тоесть в тех, где можно сделать отказ от выполениядальнейших дествий
// Параметры:
// ТЧ — можно указать «ТаблицуЗначений», либо «ТабличнуюЧасть» документа
// Отказ — параметр «Отказ» или «Истина», «Ложь»
Процедура ПоискДублейСтрокВТабЧасти(ТЧ, Отказ) Экспорт
Если Тип(ТЧ) = Тип(«ТаблицаЗначений») Тогда
ТаблЗнач = ТЧ;
Иначе
ТаблЗнач = ТЧ.Выгрузить();
КонецЕсли;
Отбор = Новый Структура();
Для каждого Стр Из ТаблЗнач Цикл
Отбор.Очистить();
Для каждого Колонки Из ТаблЗнач.Колонки Цикл
Если Колонки.Имя <> «НомерСтроки» Тогда
Отбор.Вставить(Колонки.Имя, Стр[Колонки.Имя]);
КонецЕсли;
КонецЦикла;
Строки = ТаблЗнач.НайтиСтроки(Отбор);
Если Строки.Количество() > 1 Тогда
Для каждого НайденныеСтроки Из Строки Цикл
Если Строки.Найти(НайденныеСтроки) > 0 Тогда
СтрокаСообщения = «Строка № » + Строки[0].НомерСтроки + » совпадает со строкой № » + НайденныеСтроки.НомерСтроки;
СообщитьОбОшибке(СтрокаСообщения, Отказ, «Уберите задвоения строк!»);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры

