Каталог решений - Проверка дублей строк с помощью 1С++

Проверка дублей строк с помощью 1С++

Проверка дублей строк с помощью 1С++

В наличии

Проверяются только справочники, для остального надо переделать немного фрагмент кода с метаданными

Категория:

Описание

Функция

глПроверкаДублейСтрок

(

ВыбДок

,

СтрокаСвертки

) Экспорт

ВидДок 

=

ВыбДок

.

Вид

()

;
	Список 

=

глРазложить

(

СтрокаСвертки

)

;
	
	ТекстЗапроса 

= »

|SELECT Строки1

.

LINENO_ НомерСтроки
	|

«; Для

Сч 

= 1

по Список

.

РазмерСписка

() Цикл

ТекИД	

=

Список

.

ПолучитьЗначение

(

Сч

)

;
		Вид	

= Метаданные.

Документ

(

ВидДок

).

РеквизитТабличнойЧасти

(

ТекИД

).

Вид;
		ТекстЗапроса 

=

ТекстЗапроса 

+ »

|

,

$Строки1

.» + ТекИД + »

[

» + ТекИД + »

$Справочник

.» + Вид + «

]
		|

«; КонецЦикла

;	
		
	ТекстЗапроса 

=

ТекстЗапроса 

+ »

|FROM 

(

|SELECT 
	|

«; Для

Сч 

= 1

по Список

.

РазмерСписка

() Цикл

ТекИД	

=

Список

.

ПолучитьЗначение

(

Сч

)

;
		Доб 

=

?

(

Сч 

= 1, «», «,»)

;
		ТекстЗапроса 

=

ТекстЗапроса 

+ »

|

» + Доб + »

$Строки

.» + ТекИД + » » + ТекИД + »

|

«; КонецЦикла

;	
	
	ТекстЗапроса 

=

ТекстЗапроса 

+ »

|FROM $ДокументСтроки

.» + ВидДок + »

AS Строки With 

(

NOLOCK

)

|WHERE 

(

Строки

.

IDDOC 

=

:ВыбДок

)

|GROUP BY 
	|

«; Для

Сч 

= 1

по Список

.

РазмерСписка

() Цикл

ТекИД	

=

Список

.

ПолучитьЗначение

(

Сч

)

;
		Доб 

=

?

(

Сч 

= 1, «», «,»)

;
		ТекстЗапроса 

=

ТекстЗапроса 

+ »

|

» + Доб + »

$Строки

.» + ТекИД + »

|

«; КонецЦикла

;	
	
	ТекстЗапроса 

=

ТекстЗапроса 

+ »

|HAVING COUNT

(*) > 1

|

)

AS Подзапрос
	|LEFT JOIN $ДокументСтроки

.» + ВидДок + »

AS Строки1 With 

(

NOLOCK

)

ON Строки1

.

IDDOC 

=

:ВыбДок 
	|

«; Для

Сч 

= 1

по Список

.

РазмерСписка

() Цикл

ТекИД	

=

Список

.

ПолучитьЗначение

(

Сч

)

;
		Доб 

=

?

(

Сч 

= 1, «», «,»)

;
		ТекстЗапроса 

=

ТекстЗапроса 

+ »

|

AND

$Строки1

.» + ТекИД + » =

Подзапрос

.» + ТекИд + »

|

«; КонецЦикла

;	
		
	RecordSet

.

УстановитьТекстовыйПараметр

(«ВыбДок»,

ВыбДок

)

;
	
	ТЗ 

=

RecordSet

.

ВыполнитьИнструкцию

(

ТекстЗапроса

)

;
    
	Статус 

= 0

;
	
	ТЗ

.

ВыбратьСтроки

()

;
	

Пока

ТЗ

.

ПолучитьСтроку

() = 1 Цикл

Статус 

= 1

;
		
		СтрокаСообщения 

= «Строка: » +

Строка

(

ТЗ

.

НомерСтроки

)

;
		

Для

Сч 

= 1

по Список

.

РазмерСписка

() Цикл

ТекИД 

=

Список

.

ПолучитьЗначение

(

Сч

)

;
			СтрокаСообщения 

=

СтрокаСообщения 

+ «, » +

ТекИД 

+ «: » +

ТЗ

.

ПолучитьЗначение

(

ТЗ

.

НомерСтроки

,

ТекИД

)

;
		

КонецЦикла

;	
		Сообщить

(

СтрокаСообщения

)

;
	

КонецЦикла

;
	
	

Возврат

Статус;

КонецФункции

Функция глРазложить() есть в ТиС, примерно следующего содержания:

Функция

глРазложить

(Знач

Стр

,

Разделитель 

= «,») Экспорт

Список 

= СоздатьОбъект(«СписокЗначений»)

;
	Длина  

=

СтрДлина

(

Разделитель

)

;
	
	Стр 

=

СокрЛП

(

Стр

)

;
	Поз 

=

Найти

(

Стр

,

Разделитель

)

;
	
	

Пока 0 <

Поз 

Цикл

Список

.

ДобавитьЗначение

(

СокрП

(

Лев

(

Стр

,

Поз

—1)))

;
		
		Стр 

=

СокрЛ

(

Сред

(

Стр

,

Поз

+

Длина

))

;
		Поз 

=

Найти

(

Стр

,

Разделитель

)

;
	

КонецЦикла

;
	
	Список

.

ДобавитьЗначение

(

Стр

)

;
	
	

Возврат

Список;
	

КонецФункции

Пример вызова функции глПроверкаДублейСтрок():

Если

глПроверкаДублейСтрок

(

ТекущийДокумент

(), «Товар,Партия») = 1 Тогда

НеПроводить

(Контекст, «Устраните дубли!»)

;
		

Возврат

;
	

КонецЕсли

;

Оригинал статьи

http://1c911.by/stati_1s/statya-proverka-dubley-strok-s-pomoshchyu-1s.htm

has been added to your cart:
Оформление заказа