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



Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)



Если Запасы.Количество() = 0 Тогда

Возврат;

КонецЕсли;



ПроверитьДублиСтрок(Ссылка, "Запасы", "Номенклатура, АлгоритмФормированияШК,Регион", Отказ);



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



//Процедура проверяет наличие в ТЧ дублей строк по указанным реквизитам

//ДокументСсылка - ссылка на проверяемый документ

//ИмяТабЧасти - имя проверяемой табличной части (строка)

//ПроверяемыеРеквизиты - перечень проверяемых реквизитов (строка, реквизиты разделяются запятой)

Процедура ПроверитьДублиСтрок(ДокументСсылка,ИмяТабЧасти,ПроверяемыеРеквизиты,Отказ)



ТаблицаДокумента = ДокументСсылка[ИмяТабЧасти].Выгрузить();

ТаблицаДокумента.Колонки.Добавить("КвоПроверкаДублей");

ТаблицаДокумента.ЗаполнитьЗначения(1, "КвоПроверкаДублей");



ТаблицаДокумента.Свернуть(ПроверяемыеРеквизиты,"КвоПроверкаДублей");



Для Каждого ТекущаяСтрока Из ТаблицаДокумента Цикл

Если ТекущаяСтрока.КвоПроверкаДублей > 1 Тогда

РеквизитыДляСообщения = "";

Стр = СокрЛП(ПроверяемыеРеквизиты);

Пока Найти(Стр,",") > 0 Цикл

НаимРеквизита = СокрЛП(Лев(Стр,Найти(Стр,",") - 1));

Стр = Прав(Стр,СтрДлина(Стр) - Найти(Стр,","));

РеквизитыДляСообщения = РеквизитыДляСообщения+ТекущаяСтрока[НаимРеквизита]+", ";

КонецЦикла;

РеквизитыДляСообщения = РеквизитыДляСообщения+ТекущаяСтрока[СокрЛП(Стр)];



Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "В разделе " + ТекущаяСтрока.Раздел + " встречается одинаковый номер строки " + ТекущаяСтрока.НомерСтрокиВОтчете + ", сохранение невозможно";

Сообщение.Сообщить();



Отказ = Истина;

КонецЕсли;

КонецЦикла;



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





✍️ @odin1C_rus