HelpF.pro

Универсальная процедура проверки на дубли строк в табличной части документа

Код 1C v 8.2 УП
 //Процедура проверяет наличие в ТЧ дублей строк по указанным реквизитам
//ДокументСсылка - ссылка на проверяемый документ
//ИмяТабЧасти    - имя проверяемой табличной части (строка)
//ПроверяемыеРеквизиты - перечень проверяемых реквизитов (строка, реквизиты разделяются запятой) 
 Процедура ПроверимДублиСтрок(ДокументСсылка,ИмяТабЧасти,ПроверяемыеРеквизиты,Отказ)
 
	ТаблицаДокумента = ДокументСсылка[ИмяТабЧасти].Выгрузить();
	ТаблицаДокумента.Колонки.Добавить("КвоПроверкаДублей"); 
	ТаблицаДокумента.ЗаполнитьЗначения(1, "КвоПроверкаДублей");
	
	ТаблицаДокумента.Свернуть(ПроверяемыеРеквизиты,"КвоПроверкаДублей");
	
	Для Каждого ТекущаяСтрока Из ТаблицаДокумента Цикл 
		Если ТекущаяСтрока.КвоПроверкаДублей > 1 Тогда
			РеквизитыДляСообщения = "";
			Стр = СокрЛП(ПроверяемыеРеквизиты);
			Пока Найти(Стр,",") > 0 Цикл
				НаимРеквизита = СокрЛП(Лев(Стр,Найти(Стр,",") - 1));
				Стр = Прав(Стр,СтрДлина(Стр) - Найти(Стр,","));
				РеквизитыДляСообщения = РеквизитыДляСообщения+ТекущаяСтрока[НаимРеквизита]+", ";
			КонецЦикла; 
			РеквизитыДляСообщения = РеквизитыДляСообщения+ТекущаяСтрока[СокрЛП(Стр)];
			
			Сообщить("Информация "+РеквизитыДляСообщения+" введена несколько раз в табличную часть, проведение невозможно!");
			Отказ = Истина;
		КонецЕсли; 
	КонецЦикла;
 
 КонецПроцедуры
   


Пример обращения к процедуре проверки
Код 1C v 8.2 УП
 // Процедура - обработчик события ОбработкаПроверкиЗаполнения объекта.
//
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
		
	Если Запасы.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	ПроверимДублиСтрок(Ссылка, "Запасы", "Номенклатура, АлгоритмФормированияШК,Регион", Отказ);

КонецПроцедуры
   

Да, в списке реквизитов добавленные случайно пробелы игнорируются )
Процедуру можно добавить в общий модуль и обращаться к ней из любого документа
Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/1333.html