Имя: Пароль:
1C
1C 7.7
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
Так долго заполнить по новой ТЗ дублей при открытии?
AdBlock убивает бесплатный контент. 1Сергей