|
v7: Одинаковые строки ТЧ! | ☑ | ||
---|---|---|---|---|
0
Aleksei_Pro
15.08.11
✎
09:18
|
Подскажите как правильно определить одинаковые строки ТЧ документа по 3 параметрам (ФИО,дата,и некий N показатель).?
|
|||
1
Rie
15.08.11
✎
09:19
|
(0) Отсортируй и сравни соседние.
|
|||
2
Aleksei_Pro
15.08.11
✎
09:21
|
Вот я так сделал, никак нельзя оптимизировать:
ТЗ = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТЗ); ТЗ.Сортировать("Абонент,ДатаПоказаний,Счетчик"); ТЗисх = СоздатьОбъект("ТаблицаЗначений"); ТЗисх.НоваяКолонка("Абонент"); ТЗ.ВыбратьСтроки(); аб = "";пок = ""; сч = "";НомерСтрокиП =""; Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если (ТЗ.Абонент = аб) и (тз.ДатаПоказаний = пок) и (тз.Счетчик = сч )Тогда ТЗисх.НоваяСтрока(); ТЗисх.Абонент = ТЗ.Абонент; аб = ТЗ.Абонент;пок=тз.ДатаПоказаний;сч=тз.Счетчик;НомерСтрокиП = НомерСтрокиП + 1; Продолжить; Иначе аб = ТЗ.Абонент;пок=тз.ДатаПоказаний;сч=тз.Счетчик;НомерСтрокиП = НомерСтрокиП + 1; КонецЕсли; КонецЦикла; Если ТЗисх.КоличествоСтрок() > 0 Тогда Ответ = Вопрос("В табличной части документа обнаружены повторяющиеся абоненты.Продолжить проведение документа?",1,60); Если Ответ = 2 Тогда ТЗисх.ВыбратьСтроки(); Пока ТЗисх.ПолучитьСтроку() = 1 Цикл Сообщить("Повторяющиеся абоненты: " + ТЗисх.Абонент); КонецЦикла; СтатусВозврата(0); Возврат; КонецЕсли; КонецЕсли; |
|||
3
1Сергей
15.08.11
✎
09:50
|
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТЗ); Если ТЗ.КоличествоСтрок()>1 Тогда Для идн=1 по (ТЗ.КоличествоСтрок()-1) Цикл ТЗ.ПолучитьСтрокуПоНомеру(идн); ТекАбонент = ТЗ.Абонент; ТекДатаПоказаний = ТЗ.ДатаПоказаний; ТекСчетчик = ТЗ.Счетчик; Для идн2 = идн по ТЗ.КоличествоСтрок() Цикл ТЗ.ПолучитьСтрокуПоНомеру(идн2); Если (ТЗ.Абонент = ТекАбонент) И (ТЗ.ДатаПоказаний = ТекДатаПоказаний) И (ТЗ.Счетчик = ТекСчетчик) Тогда Предупрежждение("Совпадают строки ("+идн+") и ("+идн2+")"); СтатусВозврата(0); Возврат; КонецЦикла; КонецЦикла; КонецЕсли; |
|||
4
1Сергей
15.08.11
✎
09:51
|
* Для идн2 = (идн+1) по ТЗ.КоличествоСтрок() Цикл
|
|||
5
zak555
15.08.11
✎
09:52
|
(3) ужас
|
|||
6
Rie
15.08.11
✎
09:52
|
(2) А зачем таскать строки? Заведи список Повторы и заноси туда строки при выполнении условия.
Если скажет, что повторы не нужны - удали по списку. |
|||
7
1Сергей
15.08.11
✎
09:53
|
(5) ы?
|
|||
8
Rie
15.08.11
✎
09:53
|
(3) Ну и зачем тут вложенный цикл? (Выгрузить, отсортировать, нужны номера строк документа - в ТЗ для этого имеется одноименная колонка).
|
|||
9
FN
15.08.11
✎
09:54
|
(0) Сделай новую колонку "ключ", туда установи ФИО+дата+некийNпоказатель, потом свернуть.
либо обход ТЗ + занесесение "ключа" в СП + проверка . |
|||
10
1Сергей
15.08.11
✎
09:55
|
(8) сортировка - лишний тормоз
|
|||
11
Rie
15.08.11
✎
09:56
|
(10) Сортировка - n log n.
Вложенный цикл - n^2. Так что кто тут тормоз... |
|||
12
AeDen
15.08.11
✎
09:56
|
тебе номера одинаковых, или просто узнать что есть одинаковые строки?
|
|||
13
1Сергей
15.08.11
✎
09:59
|
(11) Первый цикл выполняется N-1 раз а вложенный каждый раз на единицу меньше
|
|||
14
Rie
15.08.11
✎
10:00
|
(13) Итого = n*(n-1)/2 = O(n^2).
|
|||
15
1Сергей
15.08.11
✎
10:01
|
(14) идите в опу. У меня проще и наглядней
|
|||
16
__Se24
15.08.11
✎
10:02
|
выгрузи в ТЗ нужные колонки , добавь колонку числовую , заполни "1" потом сверни по нужным колонкам , где индексы будут больше 1 , там есть повторы
|
|||
17
1Сергей
15.08.11
✎
10:02
|
(16) а номера строк как потом искать?
|
|||
18
__Se24
15.08.11
✎
10:03
|
потом пойдет по таблице , с уже известными значениями ключевых колонок
|
|||
19
Rie
15.08.11
✎
10:05
|
(17) Судя по (2), номера строк там и даром не нужны.
Кстати, о (2). Смертная казнь за использование Вопрос() в модуле документа уже отменена? Если да - то зря... |
|||
20
mikecool
15.08.11
✎
10:06
|
(17) проще - не допускать дубликатов на момент вноса информации
|
|||
21
1Сергей
15.08.11
✎
10:06
|
(19) (20) я так понял, это модуль формы. Потому что в типовых это проверяется именно там
|
|||
22
Aleksei_Pro
15.08.11
✎
10:06
|
Спасибо всем, ветка закрыта!
|
|||
23
AeDen
15.08.11
✎
11:04
|
(16) Проще сравнито количество строк в ТЗ после свертки и количество строк в ТЧ - можно будет увидеть, что есть повторяющиеся строки.
|
|||
24
Grusswelle
15.08.11
✎
11:14
|
Уж0снах!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |