helpf.pro
Регистрация
 +7 
Распечатать

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

Код 1C v 8.2 УП
 //Процедура проверяет наличие в ТЧ дублей строк по указанным реквизитам
//ДокументСсылка - ссылка на проверяемый документ
//ИмяТабЧасти - имя проверяемой табличной части (строка)
//ПроверяемыеРеквизиты - перечень проверяемых реквизитов (строка, реквизиты разделяются запятой)
Процедура ПроверимДублиСтрок(ДокументСсылка,ИмяТабЧасти,ПроверяемыеРеквизиты,Отказ)

ТаблицаДокумента = ДокументСсылка[ИмяТабЧасти].Выгрузить();
ТаблицаДокумента.Колонки.Добавить("КвоПроверкаДублей");
ТаблицаДокумента.ЗаполнитьЗначения(1, "КвоПроверкаДублей");

ТаблицаДокумента.Свернуть(ПроверяемыеРеквизиты,"КвоПроверкаДублей");

Для Каждого ТекущаяСтрока Из ТаблицаДокумента Цикл
Если ТекущаяСтрока.КвоПроверкаДублей > 1 Тогда
РеквизитыДляСообщения = "";
Стр = СокрЛП(ПроверяемыеРеквизиты);
Пока Найти(Стр,",") > 0 Цикл
НаимРеквизита = СокрЛП(Лев(Стр,Найти(Стр,",") - 1));
Стр = Прав(Стр,СтрДлина(Стр) - Найти(Стр,","));
РеквизитыДляСообщения = РеквизитыДляСообщения+ТекущаяСтрока[НаимРеквизита]+", ";
КонецЦикла;
РеквизитыДляСообщения = РеквизитыДляСообщения+ТекущаяСтрока[СокрЛП(Стр)];

Сообщить("Информация "+РеквизитыДляСообщения+" введена несколько раз в табличную часть, проведение невозможно!");
Отказ = Истина;
КонецЕсли;
КонецЦикла;

КонецПроцедуры


Пример обращения к процедуре проверки
Код 1C v 8.2 УП
 // Процедура - обработчик события ОбработкаПроверкиЗаполнения объекта.
//
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

Если Запасы.Количество() = 0 Тогда
Возврат;
КонецЕсли;

ПроверимДублиСтрок(Ссылка, "Запасы", "Номенклатура, АлгоритмФормированияШК,Регион", Отказ);

КонецПроцедуры

Да, в списке реквизитов добавленные случайно пробелы игнорируются )
Процедуру можно добавить в общий модуль и обращаться к ней из любого документа
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 42326
 +7 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей.
COM-соединение не обнаружило свободной лицензии / ключ защиты 0
Иногда при подключении к 1С возникает ошибка: COM-соединение не обнаружило свободной лицензии! COM-соединение не обнаружило ключ защиты программы! https://helpf.pro/uploads/img/_1-UsuyAg6E2P.jpg В таких случаях, иногда, может помочь следующий с
Посмотреть все результаты поиска похожих
Комментарии
astonvilla
17.12.2012 13:12Комментарий: 3
astonvilla
номера строк с дублями при желании можно тоже выводить... Нужно дабавить ТЗ с индексом для поиска и по нему (индексу) искать задублированные значения с выводом в сообщение
но для меня это не нужно было...
отсортировать и найти по нужной колонке не думаю что сложно даже при 25000 строк...
astonvilla
17.12.2012 13:07Комментарий: 2
astonvilla
Информация о том, какие именно существуют дубли выводится в сообщениях...
Altair
14.12.2012 16:25Комментарий: 1
Altair
Это только для определения самого факта наличия дублей. А если в документе 25 тыс. строк оператору будет тяжело их исправить.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.