Одинаковые ИНН

Новая тема
"Добрый день уважаемые форумчане.
Я в семерке плохо шарю, но некоторые моменты знаю.
к вам такая просьба.
мне нужно сделать отчет который выводит список контрагентов у которых одинаковый ИНН или не заполненный ИНН.
Вот мои наброски
+ Code
//__________________________________________________­___________________________

Функция ПоискКонтрагента(пПоиск)
спрФиз = СоздатьОбъект("Справочник.ФизЛица");
спрЮр = СоздатьОбъект("Справочник.ЮрЛица");
спрСвои = СоздатьОбъект("Справочник.СвоиЮрЛица");
Если спрФиз.НайтиПоНаименованию(пПоиск,0,1)=1 Тогда
СпрЛица = спрФиз.ИНН;
Возврат СпрЛица;
ИначеЕсли спрЮр.НайтиПоНаименованию(пПоиск,0,1)=1 Тогда
СпрЛица = спрЮр.ИНН;
Возврат СпрЛица;
ИначеЕсли спрСвои.НайтиПоНаименованию(пПоиск,0,1)=1 Тогда
СпрЛица = спрСвои.ИНН;
Возврат СпрЛица;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции //


//*******************************************

Процедура Сформировать()
Таб=СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Шапка");
Таб.ТолькоПросмотр(1);
Спр1 = СоздатьОбъект("Справочник.Контрагенты");
Спр1.ВыбратьЭлементы();
Пока Спр1.ПолучитьЭлемент() = 1 Цикл
Если (Спр1.ЭтоГруппа() = 0) и (Спр1.ПометкаУдаления() = 0) Тогда
Спр2 = СоздатьОбъект("Справочник.Контрагенты");
Спр2.ВыбратьЭлементы();
СпрЛица1 = ПоискКонтрагента(Спр1.ЮрФизЛицо);
Если СпрЛица1 = """" Тогда
Таб.ВывестиСекцию("Строка");
Иначе
Пока Спр2.ПолучитьЭлемент() = 1 Цикл

Если (Спр2.ЭтоГруппа() = 0) и (Спр2.ПометкаУдаления() = 0) Тогда

СпрЛица2 = ПоискКонтрагента(Спр2.ЮрФизЛицо);
Если СпрЛица1=СпрЛица2 Тогда
Таб.ВывестиСекцию("Строка");
КонецЕсли;


КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Таб.Показать();
КонецПроцедуры

как можно упрастить данный модуль? может как нибудь через запрос можно сделать? в 8ке я бы без проблем решил бы эту задачу..."
А как бы решили этот вопрос в 8-ке?
Цикл в цикле это не очень хорошо.
Лучше использовать ТаблицуЗначений. Один раз перебрать Контрагентов, заполнить столбец Контрагент и столбец ИНН.
Отсортировать Таблицу по ИНН. В процедуре печати сделать цикл по строкам ТаблицыЗначений (начиная со 2-й), если текущий ИНН равен предыдущему, то печатаем текущего Контрагента (не забыть при первом совпадении напечатать и предыдущего).
> Цикл в цикле это не очень хорошо.

А сами не цикл предлагаете? :)
Я не советую то, как написано, а написано ЦИКЛ В ЦИКЛЕ, n * n повторений.
Я же предлагаю 2 цикла - 2n повторений, при большом массиве разница существенная.
Читают тему
(гостей: 1)

Быстрый переход