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

Публикация № 17058 23.11.07

Разработка - Универсальные функции

Проверяются только справочники, для остального надо переделать немного фрагмент кода с метаданными
Функция
глПроверкаДублейСтрок
(
ВыбДок
,
СтрокаСвертки
) Экспорт
ВидДок 
=
ВыбДок
.
Вид
()
;
	Список 
=
глРазложить
(
СтрокаСвертки
)
;
	
	ТекстЗапроса 
= "
|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
Изменения и новые публикации смотрите на http://1c911.by/stati-1s.htm

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. mihenius 83 23.11.07 13:49 Сейчас в теме
А может лучше дубли автоматом устранять?

не помешал бы вариант и для дбф ;)
2. Вадимко 212 23.11.07 14:24 Сейчас в теме
Может и лучше, ситуации разные бывают
Для ДБФ надо nolock убрать, остальное должно прокатить под ОЛЕДБ
3. adapter 408 26.11.07 09:59 Сейчас в теме
Вот вариант для борьбы с дублями, который работает на любом формате базы и без 1C++
http://www.adaptersoft.ru/index.php?name=News&file=article&sid=8

Таких вариантов в Сети много, мне моя реализация скромно кажется лучшей ;)
4. Вадимко 212 26.11.07 20:55 Сейчас в теме
2(3) Кхе-кхе... в принципе тут речь идет о проверке в обработке проведения, например
Конечно не спорю... мой пример - наиболее корявый и куевый, написан был быстро, на коленке
>>и без 1C++
это, наверное, очень медленно :)
Оставьте свое сообщение

См. также

1С 7.7 и новый 1С:Контрагент

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.

25.04.2022    1202    zhenyat    7    

6

Печать таблицы значений в 1С 7.7 при отладке

Универсальные функции Платформа 1С v7.7 Россия Бесплатно (free)

Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.

30.06.2021    3453    Zoltan_Black    11    

1

Проверка часового пояса

Информационная безопасность Универсальные функции Платформа 1С v7.7 Бесплатно (free)

При использовании терминалок для удаленных баз, иногда при входе в базу данных необходимо исключить возможность входа пользователей с компьютеров с другим часовым поясом. Например, работают в Новосибирской базе с временем UTC +6 и пытаются зайти в базу с UTC +3.

16.05.2016    12428    kudenzov    3    

10

Процедура расшифровки ячейки таблицы в отчетах 1С 7.7

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Хочу поделиться с вами универсальной процедурой для расшифровки ячеек печатной формы отчетов в 1С 7.7.

24.09.2015    20340    Anzhey    14    

12

Универсальный способ сравнения таблиц

Универсальные функции Запросы Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

На эту тему уже есть статьи, но этот способ нигде не описан. Хотя я его использую с тех пор, как занимаюсь программированием. Его преимущество в простоте и универсальности: можно применять на 1С, SQL, а также в любом другом языке программирования.

05.07.2015    21108    json    3    

20

Числа прописью в родительном падеже в 7.7? Легко!

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Вывод числительных прописью в родительном падеже штатными средствами в три строчки кода.

20.06.2015    13911    gimalaj    3    

14

Исправление в типовой комплексной конфигурации глобальной функции глВсеРеквизитыДокументаЗаполнены()

Универсальные функции Платформа 1С v7.7 1С:Комплексная 7.7 Россия Бесплатно (free)

В типовых конфигурациях глобальная функция глВсеРеквизитыДокументаЗаполнены() не работает с реквизитами табличной части. Данная статья содержит текст исправленной функции, корректно проверяющей табличную часть.

20.08.2014    8492    hvv2002    0    

4

Проверка ИНН v.7.7

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Проверка ИНН, есть наверняка куча аналогов, для v.8.x точно есть и не один.

08.03.2014    10127    kras_71    0    

3

Полезные функции. Склонение (должность и фамилия подписантов). Любой язык

Универсальные функции Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Уехал директор в командировку, отпуск... , оставил доверенность на хозяйственные операции на другого сотрудника. Все договора и другие документы в обмороке - "подписант" теперь другой, по тексту тоже много правок... Пересмотрел много публикаций, вариантов много, не приглянулось. Сделал свой "Баян" . У меня всего-то крутится пять фигурантов ... Нет простого, наглядного и всепогодного варианта без языкового барьера. Всем процессом управляет пользователь.

03.03.2014    18885    kompas-dm    5    

3

Устранение проблемы при работе с полем, которое ограничено маской ввода

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Для поля, у которого установлена маска ввода, перед программной инициализацией необходимо начальное значение преобразовать к значению в соответствии с маской, иначе буду потеряны символы в местах разделителях. В данной публикации приведена функция, которая универсально выполняет данное действие.

08.08.2012    18289    www2000    4    

4

Скрытие помеченных на удаление в справочнике

Универсальные функции Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Корректно скрываем помеченных на удаление в справочнике, с иерархией и без. Вроде простая и нужная вещь, но почему-то нигде не встречалась

08.08.2012    15334    mikukrnet    7    

6

Исправление и проведение документов

Универсальные функции Механизмы типовых конфигураций Бухгалтерский учет 7.7 1С:Производство+Услуги+Бухгалтерия Россия Бесплатно (free)

Исправление и проведение документов, например, счетов-фактур, введенных на основании документов реализации, можно организовать многими способами. Описан сравнительно простой подход, реализованный и работающий несколько лет в реальной бухгалтерии 1Cv7.7. Без внешних компонентов.

23.07.2012    14028    BorisBelov    11    

5

Получение характеристик и управление текущим процессом 1С на основе WMI

Универсальные функции Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 Бесплатно (free)

Функционал для работы из 1С с текущим процессом класса Win32_Process. Пример получает текущее значение ОЗУ занятое процессом 1С. По описанной методике можно получать значения пиковых нагрузок на ОЗУ, время запуска текущей сессии 1С с точностью до миллисекунд. Определять загрузку активного ядра процессом и даже поменять приоритет самого процесса.

09.07.2012    22388    dusha0020    8    

38

Функция проверки валидности e-mail с использованием регулярных выражений RegExp (7.7)

Универсальные функции OpenConf Бухгалтерский учет 7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Функция проверки валидности e-mail с использованием регулярных выражений RegExp (7.7). Данную функцию можно вставить в Глобальный модуль и пользоваться, например, при вводе или сохранении e-mail.

30.10.2011    12176    zaursoft    11    

15

Неправильное изменение категории плательщика ПФР при проведении справки МСЭК

Зарплата Механизмы типовых конфигураций Универсальные функции Расчет 7.7 1С:Зарплата и кадры 7.7 Россия Бухгалтерский учет ФОМС, ЕФС Бесплатно (free)

В ЗиК (релиз 314) при проведении документа "Справка МСЭК" вкралась ошибка: проведение некорректно изменяет категорию плательщика ПФР на "Работник сельскохозяйственной организации - инвалид", затем на "Работник колхоза, совхоза и другого сельскохозяйственного предприятия". Связано это с разными типами ожидаемого и возвращаемого перечисления в функции "глКатегорияПФР": "КатегорияПлательщикаПФ" и "КатегорииЗастрахованныхЛицПФР". Решение: изменить функцию "глКатегорияПФР" (около 2932-й строки).

17.10.2011    6717    Krokokot    3    

6

Хитрость. Использование БУЛЕВО при OLE обмене/подключении из 7.7 к 8

Универсальные функции Обмен между базами 1C Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 Бесплатно (free)

Как известно, при OLE обмене доступны только типы СТРОКА, ЧИСЛО, ДАТА. А вот БУЛЕВО (ИСТИНА, ЛОЖЬ) использовать при подключении из 7.7 к 8 не получается. Как же быть? Есть хитрость, как использовать тип булево в семерке при обмене с 1С8! :)

28.09.2011    18002    dnikolaev    8    

18

Дата запрета редактирования

Универсальные функции Бухгалтерский учет 7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Очень часто необходимо постоянно закрывать период для редактирования документов. Вот как я вышла из этой ситуации.

15.07.2011    11023    natalika1601    14    

17

Форма 1-НДФЛ для 2011 года (Зарплата и Кадры 7.7, релиз 310)

Зарплата Универсальные функции Расчет 7.7 1С:Зарплата и кадры 7.7 Россия Бухгалтерский учет НДФЛ Бесплатно (free)

В прежних релизах была возможность из справочника "Сотрудники" сформировать форму 1-НДФЛ по кнопке "Ввод данных" (там была возможность расшифровки сумм). Вернём полезную функцию!

29.04.2011    7268    Q-Q    9    

29

Две простенькие функции для правильного учета сторно-записей и записей-перерасчетов

Зарплата Универсальные функции Расчет 7.7 1С:Зарплата и кадры 7.7 Россия Бухгалтерский учет Бесплатно (free)

Часто при подсчете дней по записям журнала расчетов "Зарплата" берется знак "+" или "-" в зависимости от признака сторно-записи. Но рано или поздно результат получится ошибочным.

19.02.2011    11413    jack19    3    

9

Посчитать людей по XML-файлам, выгруженным для ПФ 2010

Универсальные функции Файловый обмен (TXT, XML, DBF), FTP Расчет 7.7 1С:Зарплата и кадры 7.7 Бухгалтерский учет Налоговый учет ФОМС, ЕФС Бесплатно (free)

Обработка считает и выводит людей, которые находятся в xml-файлах для пенсионного фонда. Также может служить "рыбой" для дополнительной обработки данных в файлах пенсионного фонда

24.01.2011    16868    82    kserdyukov    1    

7

Программное изменение текста в надписях Word

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Печатная форма договора в шаблоне Word. Реквизиты в 1С. Заполнение шаблона реквизитами: все стандартно, но в надписях долго получалось. Получилось :) Может кому пригодится.

06.12.2010    18912    АннаШ    10    

27

Подбор свободного кода справочника "Номенклатура" без захвата одного и того же кода несколькими операторами.

Универсальные функции Оперативный учет 7.7 1С:Торговля и склад 7.7 Россия Бесплатно (free)

При использовании в справочнике Номенклатура конструкции подбора не занятых кодов менее максимального, при работе нескольких операторов возникла проблема захвата одного и того же кода, если не использовать Записать() при создании нового элемента.

05.11.2010    10216    Rusk51    10    

1

Быстрый подсчет элементов справочника

Универсальные функции Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Частенько бывает нужно подсчитать количество элементов в справочнике, чтобы показать пользователю прогресс выполнения обработки. Быстро это сделать позволяет следующая функция.

18.10.2010    27250    brr    11    

18

Универсальный фильтр

Универсальные функции Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 Конфигурации 1cv7 Бесплатно (free)

Удобный фильтр. Нет необходимости вешать на форму N-ое количество списков значений.

08.07.2010    14419    119    ShEvOvIcH    8    

8

Мьютексы в 1С 7.7

Файловый обмен (TXT, XML, DBF), FTP Универсальные функции Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 Конфигурации 1cv7 Бесплатно (free)

Существует ряд задач, которые требуют строго последовательного исполнения. Чаще всего это возникает при многопоточном программировании, в этом случае используются критические секции, но иногда надо синхронизировать и разные приложения - для этого существуют такие объекты ядра операционной системы как Мьютекс-ы. http://ru.wikipedia.org/wiki/Мьютекс В статье рассказывается как можно сделать аналогичный объект средствами 1С v7.7

02.07.2010    14501    Sk0rp    24    

10

ТаблицаЗначений в виде сводной таблицы

Универсальные функции Бухгалтерский учет 7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Зарегистрирован: 15 апр 2009, 07:58 Сообщений: 26 Очень часто приходилось преобразовывать ТаблицуЗначений в вид, наподобие Сводной таблицы в Excel (типа шахматки). Для себя написал функцию, которая этим как раз и занимается. Возможно кому-то и пригодится.

08.06.2010    19373    79044970523    8    

12

Фильтрация иерархического справочника по какому-либо условию в форме списка

Универсальные функции Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Перед 1С программистами порой встаёт задача реализовать фильтрацию справочника по какому-нибудь условию прямо в форме списка (Например "ФормаСписка" или "ДляПодбора"). Вот и передо мной, недавно, поставили такую задачу. Она оказалась не такой уж и тривиальной, особенно для иерархического справочника...

19.05.2010    14747    Antoska    19    

13

Обработка для поиска Контрагентов

Поиск данных Универсальные функции Обработка справочников Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 Конфигурации 1cv7 Бесплатно (free)

Не первая и не последняя.. Не лучшая, и не худшая. Просто вариант поиска контрагентов по нескольким словам или их частям в наименовании.

19.05.2010    15550    113    aka AMIGO    7    

9

Как получить GUID без v7plus.dll в Предприятии 7.7

Универсальные функции Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Часто в терминальных сессиях у пользователю Windows не хватает прав на регистрацию v7plus.dll. Соответственно нельзя воспользоваться, например методом СоздатьGUID() класса V7SysInfo.

12.05.2010    15479    prolancer    5    

10

1C v7.7: Вывод на печать произвольной переменной типа "Таблица значений"

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Смотрю, "полку нашего прибыло" - стали публиковаться семерочные обработки по выводу таблицы значений на экран, когда поместить таблицу значений на форму или ВыбратьСтроку() по каким-то причинам не удовлетворяет. Это - описание глобальной процедуры, которая выводит любую таблицу значений в табличный документ, с которым уже можно работать дальше. Автор: Денис Горбунов, осень 2001 - осень 2003 Оригинал расположен на: http://faq1c.gorbunov.ru

14.04.2010    23321    v.l.    14    

12

Алгоритм расчета периодов

Универсальные функции Математика и алгоритмы Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Вычисление периодов в формате ГГММДД. Вычисление дат по формуле Дата + ГГММДД. Примечание: Даты передаем в виде 'ДД.ММ.ГГГГ', периоды - "ГГ-ММ-ДД". Пользуйтесь.

10.03.2010    10238    arithmometr    1    

3

Интервал дат прописью

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Иногда возникает необходимость подсчитать количество дней, недель, месяцев или лет в интервале дат и вывести результат прописью. Обработка предназначена для демонстрации работы функции ПолучитьИнтервалДат(Дата1,Дата2,Период) Используется стандартный файл прописи для рублей. Специально не оптимизировал функции, чтобы каждый мог настроить их под свои требования.

15.02.2010    12866    145    Vlan    3    

8