Last active
January 3, 2024 12:15
-
-
Save oremb/e5d54bfe74826b7749c33bfec4caa244 to your computer and use it in GitHub Desktop.
Универсальная процедура проверки на дубли строк в табличной части документа.bsl #1C
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) | |
| Если Запасы.Количество() = 0 Тогда | |
| Возврат; | |
| КонецЕсли; | |
| ПроверитьДублиСтрок(Ссылка, "Запасы", "Номенклатура, АлгоритмФормированияШК,Регион", Отказ); | |
| КонецПроцедуры | |
| //Процедура проверяет наличие в ТЧ дублей строк по указанным реквизитам | |
| //ДокументСсылка - ссылка на проверяемый документ | |
| //ИмяТабЧасти - имя проверяемой табличной части (строка) | |
| //ПроверяемыеРеквизиты - перечень проверяемых реквизитов (строка, реквизиты разделяются запятой) | |
| Процедура ПроверитьДублиСтрок(ДокументСсылка,ИмяТабЧасти,ПроверяемыеРеквизиты,Отказ) | |
| ТаблицаДокумента = ДокументСсылка[ИмяТабЧасти].Выгрузить(); | |
| ТаблицаДокумента.Колонки.Добавить("КвоПроверкаДублей"); | |
| ТаблицаДокумента.ЗаполнитьЗначения(1, "КвоПроверкаДублей"); | |
| ТаблицаДокумента.Свернуть(ПроверяемыеРеквизиты,"КвоПроверкаДублей"); | |
| Для Каждого ТекущаяСтрока Из ТаблицаДокумента Цикл | |
| Если ТекущаяСтрока.КвоПроверкаДублей > 1 Тогда | |
| РеквизитыДляСообщения = ""; | |
| Стр = СокрЛП(ПроверяемыеРеквизиты); | |
| Пока Найти(Стр,",") > 0 Цикл | |
| НаимРеквизита = СокрЛП(Лев(Стр,Найти(Стр,",") - 1)); | |
| Стр = Прав(Стр,СтрДлина(Стр) - Найти(Стр,",")); | |
| РеквизитыДляСообщения = РеквизитыДляСообщения+ТекущаяСтрока[НаимРеквизита]+", "; | |
| КонецЦикла; | |
| РеквизитыДляСообщения = РеквизитыДляСообщения+ТекущаяСтрока[СокрЛП(Стр)]; | |
| Сообщение = Новый СообщениеПользователю; | |
| Сообщение.Текст = "В разделе " + ТекущаяСтрока.Раздел + " встречается одинаковый номер строки " + ТекущаяСтрока.НомерСтрокиВОтчете + ", сохранение невозможно"; | |
| Сообщение.Сообщить(); | |
| Отказ = Истина; | |
| КонецЕсли; | |
| КонецЦикла; | |
| КонецПроцедуры |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Поправил, ибо ошибку выдает:
//Сообщение.Текст = "В разделе " + ТекущаяСтрока.Раздел + " встречается одинаковый номер строки " + ТекущаяСтрока.НомерСтрокиВОтчете + ", сохранение невозможно"; Сообщение.Текст = "Есть дубли строк, сохранение невозможно: " + РеквизитыДляСообщения;ну и в целом лучше использовать СтрРазделить вместо парсинга по запятым.