Сервис доступа к данным 1С для внешних систем
Жёлтый мост
Код · Аналитику

Дубли контрагентов по ИНН: найти и показать списком

Один ИНН заведен несколько раз: под разными названиями, с опечатками, старой и новой карточкой. Запрос находит такие группы и показывает всех участников каждой, обработка выводит список для разбора.

Бухгалтерия предприятия 3.0Комплексная автоматизация 2.5

Задача

Взаиморасчеты расползаются по двум карточкам одного контрагента, отчеты по должникам показывают одну компанию дважды, а сверка не сходится. Нужно найти все ИНН, которые встречаются в справочнике больше одного раза, и увидеть, какие именно элементы за ними стоят.

Решение

Два запроса в пакете. Первый группирует справочник по ИНН и оставляет только те, у которых элементов больше одного. Второй присоединяет к этим ИНН сами карточки: наименование, код, пометку удаления, и сортирует так, чтобы самые большие группы шли первыми, а внутри группы элементы стояли рядом.

Пустой ИНН исключен: иначе все контрагенты без ИНН собрались бы в одну огромную группу. В Бухгалтерии справочник контрагентов иерархический, поэтому группы справочника отсекаются отдельно.

ВЫБРАТЬ
	Контрагенты.ИНН КАК ИНН,
	КОЛИЧЕСТВО(Контрагенты.Ссылка) КАК Количество
ПОМЕСТИТЬ ДублиИНН
ИЗ
	Справочник.Контрагенты КАК Контрагенты
ГДЕ
	НЕ Контрагенты.ЭтоГруппа
	И Контрагенты.ИНН <> ""
СГРУППИРОВАТЬ ПО
	Контрагенты.ИНН
ИМЕЮЩИЕ
	КОЛИЧЕСТВО(Контрагенты.Ссылка) > 1
;
ВЫБРАТЬ
	Контрагенты.ИНН КАК ИНН,
	Дубли.Количество КАК ЭлементовСЭтимИНН,
	Контрагенты.Наименование КАК Наименование,
	Контрагенты.Код КАК Код,
	Контрагенты.ПометкаУдаления КАК ПометкаУдаления
ИЗ
	ДублиИНН КАК Дубли
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
		ПО Дубли.ИНН = Контрагенты.ИНН
ГДЕ
	НЕ Контрагенты.ЭтоГруппа
УПОРЯДОЧИТЬ ПО
	ЭлементовСЭтимИНН УБЫВ,
	ИНН,
	Наименование
;
УНИЧТОЖИТЬ ДублиИНН
ВЫБРАТЬ
	Контрагенты.ИНН КАК ИНН,
	КОЛИЧЕСТВО(Контрагенты.Ссылка) КАК Количество
ПОМЕСТИТЬ ДублиИНН
ИЗ
	Справочник.Контрагенты КАК Контрагенты
ГДЕ
	Контрагенты.ИНН <> ""
СГРУППИРОВАТЬ ПО
	Контрагенты.ИНН
ИМЕЮЩИЕ
	КОЛИЧЕСТВО(Контрагенты.Ссылка) > 1
;
ВЫБРАТЬ
	Контрагенты.ИНН КАК ИНН,
	Дубли.Количество КАК ЭлементовСЭтимИНН,
	Контрагенты.Наименование КАК Наименование,
	Контрагенты.Партнер.Наименование КАК Партнер,
	Контрагенты.ПометкаУдаления КАК ПометкаУдаления
ИЗ
	ДублиИНН КАК Дубли
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
		ПО Дубли.ИНН = Контрагенты.ИНН
УПОРЯДОЧИТЬ ПО
	ЭлементовСЭтимИНН УБЫВ,
	ИНН,
	Наименование
;
УНИЧТОЖИТЬ ДублиИНН
Обработка для Бухгалтерия предприятия 3.0Открыть через "Файл, Открыть", выбрать даты, нажать "Сформировать результат". Ничего не пишет в базу, работает от прав пользователя.
Скачать .epf
Обработка для Комплексная автоматизация 2.5Открыть через "Файл, Открыть", выбрать даты, нажать "Сформировать результат". Ничего не пишет в базу, работает от прав пользователя.
Скачать .epf

Функция для обработки

// Поиск дублей контрагентов по ИНН.
// Пустой ИНН не учитывается: он собрал бы в одну кучу всех, у кого он просто не заполнен.
// Пустая строка передается параметром, а не литералом в тексте запроса: так в модуле
// не нужны удвоенные кавычки, а запрос без правок переносится в консоль запросов.
// В Бухгалтерии 3.0 справочник Контрагенты иерархический: группы отсекаем условием
// на ЭтоГруппа. В УТ 11, КА 2 и ERP 2 групп у контрагентов нет, там это условие не нужно.
//
// Возвращаемое значение:
//  ТаблицаЗначений - колонки ИНН (Строка), Количество (Число),
//                    Список (Строка, наименования через запятую).
&НаСервереБезКонтекста
Функция ДублиКонтрагентовПоИНН()

	Запрос = Новый Запрос;
	Запрос.Текст =
		"ВЫБРАТЬ
		|	Контрагенты.ИНН КАК ИНН,
		|	КОЛИЧЕСТВО(Контрагенты.Ссылка) КАК Количество
		|ПОМЕСТИТЬ ДублиИНН
		|ИЗ
		|	Справочник.Контрагенты КАК Контрагенты
		|ГДЕ
		|	НЕ Контрагенты.ЭтоГруппа
		|	И Контрагенты.ИНН <> &ПустойИНН
		|СГРУППИРОВАТЬ ПО
		|	Контрагенты.ИНН
		|ИМЕЮЩИЕ
		|	КОЛИЧЕСТВО(Контрагенты.Ссылка) > 1
		|;
		|ВЫБРАТЬ
		|	Контрагенты.ИНН КАК ИНН,
		|	Дубли.Количество КАК Количество,
		|	Контрагенты.Наименование КАК Наименование
		|ИЗ
		|	ДублиИНН КАК Дубли
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
		|		ПО Дубли.ИНН = Контрагенты.ИНН
		|ГДЕ
		|	НЕ Контрагенты.ЭтоГруппа
		|УПОРЯДОЧИТЬ ПО
		|	Количество УБЫВ,
		|	ИНН";
	Запрос.УстановитьПараметр("ПустойИНН", "");

	// Одна строка на ИНН: наименования склеиваем, чтобы результат читался списком.
	Результат = Новый ТаблицаЗначений;
	Результат.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка"));
	Результат.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
	Результат.Колонки.Добавить("Список", Новый ОписаниеТипов("Строка"));

	ТекущаяСтрока = Неопределено;
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Если ТекущаяСтрока = Неопределено Или ТекущаяСтрока.ИНН <> Выборка.ИНН Тогда
			ТекущаяСтрока = Результат.Добавить();
			ТекущаяСтрока.ИНН = Выборка.ИНН;
			ТекущаяСтрока.Количество = Выборка.Количество;
			ТекущаяСтрока.Список = Выборка.Наименование;
		Иначе
			ТекущаяСтрока.Список = ТекущаяСтрока.Список + ", " + Выборка.Наименование;
		КонецЕсли;
	КонецЦикла;

	Возврат Результат;

КонецФункции
// Для этой конфигурации функция не отличается от запроса: см. обработку.

Что учесть

Как воспользоваться

  1. Выберите вкладку своей конфигурации над кодом: под каждой лежит запрос, выполненный именно в этой конфигурации.
  2. Скачайте обработку под ней и откройте в 1С через "Файл, Открыть". Форма покажет поля отбора, результат появится в той же форме таблицей.
  3. Нужно иначе: скопируйте запрос кнопкой над кодом и подставьте в консоль запросов или в свою обработку. Все параметры перечислены в тексте, значения по умолчанию видны в обработке.
  4. Хотите то же самое, но под свою базу и свои поля: подключите базу к мосту и попросите ИИ доработать этот запрос. Он увидит структуру вашей конфигурации и проверит результат на ваших данных.
Свои задачи таким же способом. Подключение занимает около пятнадцати минут: обработка из кабинета, ключ, готовый текст для ИИ. При регистрации даются три дня работы одной базы, карта не нужна.
Подключить свою базу Другие решения

Комментарии

Нашли ошибку в коде, знаете, как лучше, или запрос повел себя иначе в вашей конфигурации: напишите. Комментарии открываются после проверки, на вопросы отвечаем здесь же. Реклама и ссылки на посторонние сайты не проходят.