![]() |
|
v7: Показать все номера строк дублей при сворачивании | ☑ | ||
---|---|---|---|---|
0
Mafiozaa
18.02.22
✎
08:10
|
Приветствую, при поиске дублей пользуюсь обычным свернуть, и вывожу если в принципе есть дубль, но щас нужно указать конкретно в каких строках есть дубли.
ТЗДубли.Свернуть("КодМаркировки", "Повтор"); Для А = 1 По ТЗДубли.КоличествоСтрок() Цикл ТЗДубли.ПолучитьСтрокуПоНомеру(А); Если ТЗДубли.Повтор > 1 Тогда Сообщить("Дубль найден в строке №:" + А); КонецЕсли; КонецЦикла; Как мне показать что был найден дубль в строке под номером А, и такое же значение в строке под номером Б |
|||
1
mistеr
18.02.22
✎
08:18
|
Берешь код, ищешь его в исходной таблице. Показываешь.
|
|||
2
Смотрящий
18.02.22
✎
08:30
|
(0) Нужна ТЗ исходная и ТЗ дубль исходной
ТЗ дубль исходной сворачиваешь, в ней ищещь все коды маркировки у которых повтор > 1 Через .НайтиЗначение (или как там оно) в ТЗ исходной ищещь код, запоминаешь номер строки, удаляешь строку, ищещь повторно Инкремент номеров только предусмотреть |
|||
3
АгентБезопасной Нацио
18.02.22
✎
08:31
|
открой для себя 1с++ и ИндексированнуюТаблицуЗначений
|
|||
4
Kigo_Kigo
18.02.22
✎
09:01
|
Имя колонок "КодМаркировки" "количество" = 1
Тз.Свернуть("КодМаркировки","Количество") Тз.ВыбратьСтроки(); Пока Тз.получитьСтроку() = 1 Цикл Если Тз.Количество > 1 Тогда сообщить("У" + Тз.КодМаркировки + " Дублей" + Тз.Количество) |
|||
5
Kigo_Kigo
18.02.22
✎
09:05
|
но щас нужно указать конкретно в каких строках есть дубли.
ОсновнаяТЗ.ВыбратьСтроки() Пока ОсновнаяТЗ. Цикл ТзСдудлями.ВыбратьСтроки() Пока ТзСдудлями. Цикл Если ОсновнаяТЗ. = ТзСдудлями Тогда Сообщить("Дубль " + ТзСдудлями +"В строке "+ ОсновнаяТЗ.НомерСтроки) |
|||
6
Kigo_Kigo
18.02.22
✎
09:06
|
К (4) Применительно к (5)
Тз.Свернуть("КодМаркировки","Количество") Тз.ВыбратьСтроки(); Пока Тз.получитьСтроку() = 1 Цикл Если Тз.Количество > 1 Тогда сообщить("У" + Тз.КодМаркировки + " Дублей" + Тз.Количество) Иначе Тз.удалитьСтроку() Тз.выбратьСтроки() |
|||
7
Mafiozaa
18.02.22
✎
09:39
|
(5) Честно не совсем догнал, в (4) и (6) просто свораичваешь и говоришь у кого сколько дублей (тоесть 2-3-5-10 дублей), а мне нужно (у строки № 10 дубль находится в строке № 53) а в (5) не могу отстыковать к своему варианту)))
|
|||
8
Mafiozaa
18.02.22
✎
09:41
|
(6) Процедура ПриЗакрытии()
ТЗДубли = СоздатьОбъект("ТаблицаЗначений"); ТЗИсходная = СоздатьОбъект("ТаблицаЗначений"); Закрывать = 1; ВыгрузитьТабличнуюЧасть(ТЗИсходная, "КодМаркировки"); ВыгрузитьТабличнуюЧасть(ТЗДубли, "КодМаркировки"); ТЗДубли.НоваяКолонка("Повтор", "Число"); ТЗДубли.Свернуть("КодМаркировки", "Повтор"); ТЗИсходная.ВыбратьСтроки(); Пока ТЗИсходная.ПолучитьСтроку() = 1 Цикл ТЗДубли.ВыбратьСтроки(); Пока ТЗДубли.ПолучитьСтроку() = 1 Цикл Если ПустоеЗначение(ТЗДубли.КодМаркировки) = 1 Тогда ТЗДубли.Повтор = 0; Сообщить("В строке №:" + " " + ТЗДубли.НомерСтроки + " " + "нет кода маркировки."); Иначе ТЗДубли.Повтор = 1; Если ТЗИсходная.КодМаркировки = ТЗДубли.КодМаркировки Тогда Сообщить("Дубль" + " " + ТЗДубли.НомерСтроки + " " + "в строке" + " " + ТЗИсходная.НомерСтроки); КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; //Для А = 1 По ТЗДубли.КоличествоСтрок() Цикл // ТЗДубли.ПолучитьСтрокуПоНомеру(А); // Если ТЗДубли.Повтор > 1 Тогда // Сообщить("Дубль найден в строке №:" + А + " " + СтрокаВИсходной); // Закрывать = 0 // КонецЕсли; // Если Закрывать = 0 Тогда // Предупреждение("Документ не проведен, до устранения ошибок, после устранения ошибок повторите попытку"); // Иначе // Док = СоздатьОбъект("Документ.Маркировка"); // Док.Новый(); // Док.Записать(); // КонецЕсли; //КонецЦикла; КонецПроцедуры Голова кипит, может показаться бредом, куда не то толкаю |
|||
9
АгентБезопасной Нацио
18.02.22
✎
09:50
|
(5)
ИТЗ.Группировать("КодМаркировки","Количество",1); ИТЗ.ДобвавитьИндекс("Количество") ИТЗ.УстановитьФильтр(1,1,"Количество",0,0); ИТЗ.ВыбратьСтроки("Количество") пока ИТЗ.ПолучитьСтроку() Цикл Сообщить("Для кода маркировки"+ИТЗ.кодМаркировки+"дубли в строках:") Потомки=ИТЗ.ТзПотомки Потомки.ВыбраьтСтроки(); пока Потомки.получитьСтроку() Цикл Сообщить(Потомки.НомерСтроки) кц кц |
|||
10
АгентБезопасной Нацио
18.02.22
✎
09:53
|
+(9) должно быть ИТЗ.УстановитьФильтр(1,1,"Количество",0,1);
ну и можно Сообщить("Для кода маркировки"+ИТЗ.кодМаркировки+"найдено "+Итз.Потомки.КоличествоСтрок()+" дублей в следующих строках:") |
|||
11
Смотрящий
18.02.22
✎
10:04
|
ТЗДубли.НоваяКолонка("Повтор", "Число");
ТЗДубли.Заполнить("Повтор", 1); ТЗДубли.Свернуть("КодМаркировки", "Повтор"); ТЗДубли.Сортировать("-Повтор"); ТЗДубли.ВыбратьСтроки(); Пока ТЗДубли.ПолучитьСтроку() = 1 Цикл Если ТЗДубли.Повтор = 1 Тогда Прервать; КонецЕсли; Стр = ""; Счетчик = 0; Пока 1 = 1 Цикл Переменная = 0; Если ТЗИсходная.НайтиЗначение(ТЗДубли.КодМаркировки, Переменная, "КодМаркировки") = 1 Тогда Стр = Стр + ?(ПустаяСтрока(Стр) = 0, ", ", "") + Переменная; Иначе Прервать; КонецЕсли; КонецЦикла; Если ПустаяСтрока(Стр) = 0 Тогда Сообщить("Дубли для " + ТЗДубли.КодМаркировки + " найдеы в строках:" + Стр); КонецЕсли; КонецЦикла; |
|||
12
Смотрящий
18.02.22
✎
10:07
|
Если ТЗИсходная.НайтиЗначение(ТЗДубли.КодМаркировки, Переменная, "КодМаркировки") = 1 Тогда
Стр = Стр + ?(ПустаяСтрока(Стр) = 0, ", ", "") + (Переменная + Счетчик); ТЗИсходная.Удалить(Переменная); Счетчик = Счетчик + 1; Иначе |
|||
13
АгентБезопасной Нацио
18.02.22
✎
10:11
|
о ужас...
|
|||
14
Смотрящий
18.02.22
✎
10:14
|
(13) Ога. ТС то тут не шарит, а ты ему (3) предлагаешь изучить )))
|
|||
15
uno-group
18.02.22
✎
10:16
|
Почему бы не отсортировать ТЗ и не указать юзеру 1 строку с дублем остальные будут рядом ему и исправлять это будет легче. А вообще лучше не допускать дублей на этапе ввода. Сразу при выборе товара или клиента осуществлять поиск говорить что такой товар уже есть и позиционироваться на этой строке.
|
|||
16
Mafiozaa
18.02.22
✎
10:22
|
(12) Продублировал, на выходе
Если ПустаяСтрока(Стр) = 0 Тогда Сообщить("Дубли для " + ТЗДубли.КодМаркировки + " найдеы в строках:" + Стр); КонецЕсли; Условие не отрабатывает, если ставлю <> 0 Тогда вижу Дубли для Повтор найдены в строках: |
|||
17
АгентБезопасной Нацио
18.02.22
✎
10:24
|
(14)
Копия.Загрузить(тз); Копия.ДобавитьКолонку("КоличествоДублей"); Копия.Заполнить(1,1,копия.КоличествоСтрок(),"КоличествоДублей") копия.свернуть("КодМаркировки","количествоДублей") Копия.выбратьСтроки() пока Копия.ПолучитьСтроку() Если Копия.количествоДублей > 1 Сообщить(Для кода кодМаркировки найдено Копия.количествоДублей дублей ) тз.выбратьСтроки() пока тз.получитьСтроку() Если тз.КодМаркировки=копия.КодМаркировки Сообщить(в строке тз.НомерСтроки) ... и не надо огород городить. Ну да, О большое в квадрате в худшем случае. Но тупо, бысто пишется и нефиг допускть дубли на малых данных пофиг. будут большие данные - может, научится думать. или, на крайняк, программиста наймет |
|||
18
Смотрящий
18.02.22
✎
10:26
|
(16) Походи в отладчике
|
|||
19
Злопчинский
18.02.22
✎
10:39
|
Где-то страдает один хомячок
|
|||
20
Mafiozaa
18.02.22
✎
10:48
|
Кароче, можете издеваться, смеятся, решил в 3 строки, проблема была в том, что первично при наполнении документа, данные попадали в тз, если док закрывали и потом открывали по новой, то тз обнулялось и была возможность сделать дубль, сделал призакрытии значение в файл, при открытии значение из файла, и все дубли никаким образом не попадут
|
|||
21
Ёпрст
гуру
18.02.22
✎
10:56
|
(20) хранить что то с наружи таким способом - моветон
|
|||
22
АгентБезопасной Нацио
18.02.22
✎
11:09
|
(21) ты ж знаешь, что делятся на две категории - те, кто так делает, и те, кто уже не делает...
|
|||
23
Злопчинский
18.02.22
✎
11:13
|
(22) и кто планирует так делать и кто планирует не делать так.
есть еще отдельная категория, которая планирует делать, но не так |
|||
24
Mafiozaa
18.02.22
✎
11:21
|
(21) (22) (23)
Не столкнешься, не набьешь шишечки |
|||
25
uno-group
18.02.22
✎
12:57
|
Так долго заполнить по новой ТЗ дублей при открытии?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |