Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save oremb/e5d54bfe74826b7749c33bfec4caa244 to your computer and use it in GitHub Desktop.

Select an option

Save oremb/e5d54bfe74826b7749c33bfec4caa244 to your computer and use it in GitHub Desktop.
Универсальная процедура проверки на дубли строк в табличной части документа.bsl #1C
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если Запасы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ПроверитьДублиСтрок(Ссылка, "Запасы", "Номенклатура, АлгоритмФормированияШК,Регион", Отказ);
КонецПроцедуры
//Процедура проверяет наличие в ТЧ дублей строк по указанным реквизитам
//ДокументСсылка - ссылка на проверяемый документ
//ИмяТабЧасти - имя проверяемой табличной части (строка)
//ПроверяемыеРеквизиты - перечень проверяемых реквизитов (строка, реквизиты разделяются запятой)
Процедура ПроверитьДублиСтрок(ДокументСсылка,ИмяТабЧасти,ПроверяемыеРеквизиты,Отказ)
ТаблицаДокумента = ДокументСсылка[ИмяТабЧасти].Выгрузить();
ТаблицаДокумента.Колонки.Добавить("КвоПроверкаДублей");
ТаблицаДокумента.ЗаполнитьЗначения(1, "КвоПроверкаДублей");
ТаблицаДокумента.Свернуть(ПроверяемыеРеквизиты,"КвоПроверкаДублей");
Для Каждого ТекущаяСтрока Из ТаблицаДокумента Цикл
Если ТекущаяСтрока.КвоПроверкаДублей > 1 Тогда
РеквизитыДляСообщения = "";
Стр = СокрЛП(ПроверяемыеРеквизиты);
Пока Найти(Стр,",") > 0 Цикл
НаимРеквизита = СокрЛП(Лев(Стр,Найти(Стр,",") - 1));
Стр = Прав(Стр,СтрДлина(Стр) - Найти(Стр,","));
РеквизитыДляСообщения = РеквизитыДляСообщения+ТекущаяСтрока[НаимРеквизита]+", ";
КонецЦикла;
РеквизитыДляСообщения = РеквизитыДляСообщения+ТекущаяСтрока[СокрЛП(Стр)];
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "В разделе " + ТекущаяСтрока.Раздел + " встречается одинаковый номер строки " + ТекущаяСтрока.НомерСтрокиВОтчете + ", сохранение невозможно";
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
@fixinchik
Copy link

fixinchik commented Jan 3, 2024

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

ну и в целом лучше использовать СтрРазделить вместо парсинга по запятым.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment