|
Как вывести только дублирующиеся строки ТЗ? | ☑ | ||
---|---|---|---|---|
0
avcherkasov
07.02.13
✎
17:51
|
Подскажите, пожалуйста, как из ТЗ выбрать только повторяющиеся строки.
Есть такая ТЗ. 19461 ПивСтареМисто1л 123 19461 ПивСтареМисто1л 4820046960382 19524 ПивСтареМисто0,5 4820046960368 20248 ПивАвтор0,5л 4820046960375 20248 ПивАвтор0,5л 4820046960511 Необходимо получить: 19461 ПивСтареМисто1л 123 19461 ПивСтареМисто1л 4820046960382 20248 ПивАвтор0,5л 4820046960375 20248 ПивАвтор0,5л 4820046960511 |
|||
1
GLazNik
07.02.13
✎
17:53
|
(0) Добавить колонку, заполнить 1, свернуть по всем колонкам кроме добавленной, суммировать по добавленной. в тех строках где значение больше 1 - дубли
|
|||
2
monsterZE
07.02.13
✎
17:59
|
отсортировать и загнать в новую
если пред.знач = тек.знач если не надо сворачивать |
|||
3
avcherkasov
07.02.13
✎
18:03
|
отсортировать зачем? она и так по артикулу отсортирована?
|
|||
4
GLazNik
07.02.13
✎
18:06
|
(3) нам то откудова знать. отсортирована или нет. если отсортировано, то не сортируй а сразу в цикле сверяй две соседние строки
|
|||
5
Serginio1
07.02.13
✎
18:06
|
Посмотри http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019
там есть поиск дублей и прочее полезное |
|||
6
avcherkasov
07.02.13
✎
18:06
|
Как можно свернуть по всем колонкам ,если штрихкода все разные?
|
|||
7
avcherkasov
07.02.13
✎
18:07
|
Можно поподробнее подсказать, как в цикле проверить 2 соседние строки?
|
|||
8
Скользящий
07.02.13
✎
18:08
|
Вариант в (1) самый оптимальный по быстродействию.
|
|||
9
GLazNik
07.02.13
✎
18:10
|
(6) ах это штрихкоды... т.е. задача выискать номенклатуры у которых два и более штрих-кода
(7) как-то так: для к = 1 по Тз.КоличествоСтрок() - 1 цикл Если ТЗ.ПолучитьЗначение("ляля",к) = ТЗ.ПолучитьЗначение("ляля",к+1) Тогда Сообщить("Дубль"); КонецЕсли; КонецЦикла |
|||
10
avcherkasov
07.02.13
✎
18:15
|
Да, задача выбрать из всей номенклатуры только те товары, у которых 2 и более штрихкода:
Для к = 1 по Тз.КоличествоСтрок() - 1 Цикл Если ТЗ.ПолучитьЗначение(ТЗ.Артикул,к) = ТЗ.ПолучитьЗначение(ТЗ.Артикул,к+1) Тогда Сообщить("Дубль - "+ ТЗ.Артикул); КонецЕсли; КонецЦикла; Номер за пределами значения! |
|||
11
GLazNik
07.02.13
✎
18:16
|
Так оно должно быть:
Если ТЗ.ПолучитьЗначение("Артикул",к) = ТЗ.ПолучитьЗначение("Артикул",к+1) Тогда Хотя колонки и строки мог и местами попутать :) давно не брал я в руки клюшки |
|||
12
avcherkasov
07.02.13
✎
18:18
|
Пробовал и так. всё равно Номер за пределами значения!
|
|||
13
Mikeware
07.02.13
✎
18:20
|
(12) открой для себя отладчик!
или позови кого-нибудь из взрослых... |
|||
14
GLazNik
07.02.13
✎
18:22
|
(12) ну блин чувак... я же выше написал что мог попутать очередность строки и колонки... без семерки ж код пишу (прям как в институте код на листочке)... поменяй местами "Артикул" и к
Сложно СП открыть и посмотреть синтаксис метода ПолучитьЗначение? |
|||
15
avcherkasov
07.02.13
✎
18:25
|
Спасибо, буду доделывать.
|
|||
16
avcherkasov
08.02.13
✎
11:24
|
(9) Спасибо большое GLazNik! Сделал. Вот код, может, кому пригодиться:
ТЗ.ВыбратьСтроки(); ТЗ2 = СоздатьОбъект("ТаблицаЗначений"); ТЗ2.НоваяКолонка("Артикул"); ТЗ2.НоваяКолонка("Товар"); ТЗ2.НоваяКолонка("Штрихкод"); Для колонка = 1 по ТЗ.КоличествоСтрок() - 1 Цикл //ищем построчно ТМЦ с несколькими штрихкодами Если (ТЗ.ПолучитьЗначение(колонка,"Артикул") = ТЗ.ПолучитьЗначение(колонка+1,"Артикул")) и (ТЗ.ПолучитьЗначение(колонка,"Штрихкод") <> ТЗ.ПолучитьЗначение(колонка+1,"Штрихкод")) Тогда ТЗ2.НоваяСтрока(); ТЗ2.Артикул = ТЗ.ПолучитьЗначение(колонка,"Артикул"); //переносим полученные данные в новую ТЗ ТЗ2.Товар = ТЗ.ПолучитьЗначение(колонка,"Товар"); ТЗ2.Штрихкод = ТЗ.ПолучитьЗначение(колонка,"Штрихкод"); ТЗ2.НоваяСтрока(); ТЗ2.Артикул = ТЗ.ПолучитьЗначение(колонка+1,"Артикул"); ТЗ2.Товар = ТЗ.ПолучитьЗначение(колонка+1,"Товар"); ТЗ2.Штрихкод = ТЗ.ПолучитьЗначение(колонка+1,"Штрихкод"); КонецЕсли; КонецЦикла; ТЗ2.ВыбратьСтроки(); ТЗ2.Свернуть("Артикул, Товар, Штрихкод",); Пока ТЗ2.ПолучитьСтроку() <> 0 Цикл Арт = ТЗ2.Артикул; Тов = ТЗ2.Товар; Штрихкод = ТЗ2.ШтрихКод; Таб.ВывестиСекцию("Товар"); КонецЦикла; |
|||
17
monsterZE
08.02.13
✎
11:42
|
хм.. а зачем свернуть, если у тебя в новой тз товары с уникальными шк? ..и сворачивают до выбратьстроки()
|
|||
18
monsterZE
08.02.13
✎
11:44
|
и если шк не может повторяться, тогда зачем
-- и (ТЗ.ПолучитьЗначение(колонка,"Штрихкод") <> ТЗ.ПолучитьЗначение(колонка+1,"Штрихкод")) -- а если может, то ты его в новую тз не берешь |
|||
19
Aleksey
08.02.13
✎
11:45
|
(10) Использую ИТЗ и Сгруппировать()
|
|||
20
Aleksey
08.02.13
✎
11:48
|
ИТЗ=СоздатьОбъект("ИндексированнаяТаблица");
ИТЗ.Загрузить(ТЗ); ИТЗ.Сгруппировать("Товар:Товар;ШтрихКод:ШтрихКод"); ИТЗ.ВыбратьСтроки(); Пока ИТЗ.ПолучитьСтроку()=1 цикл Если ИТЗ.тзПотомки.Количество()>1 тогда //У товара есть дубли ... |
|||
21
Serginio1
08.02.13
✎
12:15
|
(16) Если бы скачал 5 то увидел бы
Процедура Вывести(Тз,Поле,ПолеДляВывода) Таб=СоздатьОбъект("Таблица"); ЕстьДубли=0; Если Тз.КоличествоСтрок()>1 Тогда Тз.Сортировать(Поле); ТемпНомер=Тз.ПолучитьЗначение(1,Поле); ТемпДок=Тз.ПолучитьЗначение(1,ПолеДляВывода); Фл=0; Для сч=2 по Тз.КоличествоСтрок() Цикл Наименование=Тз.ПолучитьЗначение(сч,Поле); ТекДок=Тз.ПолучитьЗначение(сч,ПолеДляВывода); Если ТемпНомер=Наименование Тогда ЕстьДубли=1; Если Фл=0 Тогда Таб.ВывестиСекцию("Темп"); Фл=1 КонецЕсли; Таб.ВывестиСекцию("ТемпДог"); иначе ТемпНомер=Наименование; ТемпДок=ТекДок; Фл=0; КонецЕсли; КонецЦикла; КонецЕсли; Если ЕстьДубли=1 Тогда Таб.ТолькоПросмотр(1); Таб.Показать(); КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() СтатусВозврата(0); Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда Спз=Форма.Параметр; Тз=Спз.Получить("Тз"); Поле=Спз.Получить("Поле"); ПолеДляВывода=Спз.Получить("ПолеДляВывода"); Вывести(Тз,Поле,ПолеДляВывода) КонецЕсли; КонецПроцедуры |
|||
22
monsterZE
08.02.13
✎
12:48
|
(21) слил (5) себе, спасибобл =)
|
|||
23
1Сергей
08.02.13
✎
12:48
|
классное слово "спасибобл". Вроде и поблагодарил, и матюкнулся...
|
|||
24
monsterZE
08.02.13
✎
12:51
|
(23) 8-D
|
|||
25
avcherkasov
08.02.13
✎
13:36
|
(17) в том то и дело, что без свернуть строки дублируются
|
|||
26
monsterZE
08.02.13
✎
14:54
|
да, верно. ты же две строки в тз заносишь.
|
|||
27
monsterZE
08.02.13
✎
16:15
|
Чет загнался на сабже.. =)
Чтоб в один проход получить таблицу с одинаковыми строками, с неизменным порядком. СЗ = СоздатьОбъект("СписокЗначений"); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Код"); ТЗ.НоваяКолонка("Порядок"); ТЗ.НоваяСтрока(); ТЗ.Код = "111"; ТЗ.Порядок = "1"; ТЗ.НоваяСтрока(); ТЗ.Код = "111"; ТЗ.Порядок = "2"; ТЗ.НоваяСтрока(); ТЗ.Код = "111"; ТЗ.Порядок = "3"; ТЗ.НоваяСтрока(); ТЗ.Код = "222"; ТЗ.Порядок = "4"; ТЗ.НоваяСтрока(); ТЗ.Код = "222"; ТЗ.Порядок = "5"; ТЗ.НоваяСтрока(); ТЗ.Код = "333"; ТЗ.Порядок = "6"; ТЗ.НоваяСтрока(); ТЗ.Код = "444"; ТЗ.Порядок = "7"; ТЗ.НоваяСтрока(); ТЗ.Код = "444"; ТЗ.Порядок = "8"; ТЗ.НоваяСтрока(); ТЗ.Код = "444"; ТЗ.Порядок = "9"; ТЗ.НоваяСтрока(); ТЗ.Код = "555"; ТЗ.Порядок = "10"; ТЗ.НоваяСтрока(); ТЗ.Код = "555"; ТЗ.Порядок = "11"; ТЗ.НоваяСтрока(); ТЗ.Код = "666"; ТЗ.Порядок = "12"; СтрокТЗ = ТЗ.КоличествоСтрок(); Дубли = 0; ПозицияВставки = 1; ПЗнач = ТЗ.ПолучитьЗначение(1,"Код"); ППорядок = ТЗ.ПолучитьЗначение(1,"Порядок"); Для ъ=2 По СтрокТЗ Цикл ТЗнач = ТЗ.ПолучитьЗначение(ъ,"Код"); ТПорядок = ТЗ.ПолучитьЗначение(ъ,"Порядок"); Если ПЗнач=ТЗнач Тогда СЗ.ДобавитьЗначение(ТЗнач+" "+ТПорядок); Дубли=1; Иначе Если Дубли=1 Тогда СЗ.ВставитьЗначение(ПозицияВставки,ПЗнач+" "+ППорядок); ПозицияВставки = СЗ.РазмерСписка()+1; КонецЕсли; ПЗнач = ТЗнач; ППорядок = ТПорядок; Дубли = 0; КонецЕсли; КонецЦикла; СЗ.ВыбратьЗначение(,,,,0); |
|||
28
Mikeware
08.02.13
✎
16:17
|
(27) ИТЗ, и количествоЗначенийКлюча()
или Группировать() |
|||
29
monsterZE
08.02.13
✎
16:22
|
(28) так то да =) Алексей в (19)(20) предлогал
|
|||
30
Mikeware
08.02.13
✎
16:26
|
(29) ну и я о том же...
можно еще выгрузить во временную таблицу SQL (ВыполнитьSQLИзТЗ), и оттуда запросом... можно поприменять Кнута - с его различными методами сортировки :-) только смысл...? :-) лениво. и неинтересно... |
|||
31
monsterZE
08.02.13
✎
16:31
|
(30) ну мне интересно было :-Р
типа - "интересно, а можно.. ..можно" =))) |
|||
32
Mikeware
08.02.13
✎
16:40
|
(31) наверное...
интересно - когда не знаешь,как сделать. а когда знаешь - какая-то ленивость нездоровая наступает... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |