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