HelpF.pro

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

Код 1C v 8.х
 Функция ПроверкаНаДублиСтрок(Ссылка, ИмяТаблЧасти = "Товары", Колонка = "Товар", Колонка2 = "", Отказ = Ложь, Заголовок = "") Экспорт

ИмяДока = Ссылка.Метаданные().Имя;

ЕстьДополнительно = Колонка2 <> "";

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Док." + Колонка + " КАК ID,
| ПРЕДСТАВЛЕНИЕ(Док." + Колонка + ") КАК Сверка," + ?(ЕстьДополнительно,"
| ПРЕДСТАВЛЕНИЕ(Док." + Колонка2 + ") КАК Сверка2,", "") + "
| Док.НомерСтроки КАК НомерСтроки,
| ДокКопия.НомерСтроки КАК НомерСтрокиКопия
|ИЗ
| Документ." + ИмяДока + "." + ИмяТаблЧасти + " КАК Док
| СОЕДИНЕНИЕ Документ." + ИмяДока + "." + ИмяТаблЧасти + " КАК ДокКопия
| ПО Док." + Колонка + "= ДокКопия." + Колонка + "
| И Док.НомерСтроки < ДокКопия.НомерСтроки" + ?(ЕстьДополнительно,"
| И Док." + Колонка2 + "= ДокКопия." + Колонка2, "") + "
|ГДЕ
| Док.Ссылка = &Ссылка
| И ДокКопия.Ссылка = &Ссылка
|
|УПОРЯДОЧИТЬ ПО
| ID,
| НомерСтроки";

Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить().Выбрать();
ЕстьДубль = Ложь;
СтрокаСообщения = "Проверка табличной части на дублирующиеся строки:
|Обнаружены одинаковые позиции! Колонк"
+ ?(ЕстьДополнительно, "и: " +Колонка +" и " + Колонка2, "а: "+ Колонка);

Пока Результат.Следующий() Цикл

Если ЕстьДополнительно Тогда
Значение = СокрП(Результат.Сверка)+ ", " + Результат.Сверка2;
Иначе
Значение = Результат.Сверка;
КонецЕсли;

СтрокаСообщения = СтрокаСообщения + Символы.ПС + "Строка № " + Формат(Результат.НомерСтроки, "ЧГ=")
+ " и строка № " + Формат(Результат.НомерСтрокиКопия, "ЧГ=")
+ " значение: " + Значение;
ЕстьДубль = Истина;

КонецЦикла;

Если ЕстьДубль Тогда
обСообщитьОбОшибке(СтрокаСообщения, Отказ, Заголовок);
КонецЕсли;
Возврат Отказ;
КонецФункции

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/499.html