B
BBDragon
В общем необходимо найти дубли в многострочном документе (дублем считается строка совпадающая с более ранней строкой по ряду параметров). Первоначально делал как отдельную процедуру - не работало. В итоге внес проверку в тело основной процедуры, в итоге заработало, но некорректно - за дубль программа принимает только предпоследнюю дублирующую строку в документе вне зависимости от того сколько их имеется. Поясню: например у нас 10 строк, строки 1 и 3 имеют дубликаты с номерами 2, 6 и 8,9 соответственно. Так вот, в результате проверки как дубль будет выведена только строка 8 и все!!
Список параметров для сравнения и количество полей в Таблице Значений сокращены для улучшения читаемости; за вывод результата отвечает переменная Повтор печатной формы "Ошибки". Вроде бы простецкая задачка, а все никак не могу наладить корректный вывод результатов
Код:
СписокДублей = СоздатьОбъект("СписокЗначений");
ВыбратьСтроки();
НомерПоПорядку=1;
Пока ПолучитьСтроку() = 1 Цикл
Если СписокДублей.НайтиЗначение (НомерПоПорядку)= 0 Тогда
Для СчетСтр=1 по КоличествоСтрок() Цикл
ПолучитьСтрокуПоНомеру(СчетСтр);
Если (СчетСтр<>НомерПоПорядку) Тогда
Если (Фамилия=ФамилияПациента) и (Имя=ИмяПациента) и
(Отчество=ВРЕГ(СокрЛП(ОтчествоПациента) и
ДатаРожд=ДатаРожденияПациента) и (Профиль =КодПрофиля) Тогда //
СписокДублей.ДобавитьЗначение(СчетСтр);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПолучитьСтрокуПоНомеру(НомерПоПорядку);
Если СписокДублей.НайтиЗначение (НомерПоПорядку)= 1 Тогда
Дубли="V";
КонецЕсли;
Если (Дубли="V") Тогда
ТЗ.НоваяСтрока();
ТЗ.Фамилия = Фамилия;
ТЗ.Имя = Имя;
ТЗ.Отчество = Отчество;
ТЗ.ДатаРождения = ДатаРожд;
ТЗ.Дубликат = Дубли;
КонецЕсли;
НомерПоПорядку=НомерПоПорядку+1;
КонецЦикла;
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Ошибки");
Таб.ВывестиСекцию("Заголовок");
ТЗ.ВыбратьСтроки(); // открываем выборку строк из д. таблицы
Пока ТЗ.ПолучитьСтроку()=1 Цикл
Фамилия=ТЗ.Фамилия;
Имя=ТЗ.Имя;
Отчество=ТЗ.Отчество;
ДатаРождения = ТЗ.ДатаРождения;
Повтор = ТЗ.Дубликат;
Таб.ВывестиСекцию("Ошибка");
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.ПараметрыСтраницы(1,100,1);
Таб.Показать("Ошибки","");
Список параметров для сравнения и количество полей в Таблице Значений сокращены для улучшения читаемости; за вывод результата отвечает переменная Повтор печатной формы "Ошибки". Вроде бы простецкая задачка, а все никак не могу наладить корректный вывод результатов