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