Имя: Пароль:
1C
1C 7.7
v7: Странно работает функция Счетчик
,
0 Sasha_H
 
09.04.13
23:17
Решил спросить у оракула.

Есть запросик:

Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(НайтиДублиПоНомеру)
   |ОбрабатыватьДокументы все;
   |НомерДок = Документ.ЗаказНаПокупку.НомерДок;
   |ТекущийДокумент = Документ.ЗаказНаПокупку.ТекущийДокумент;
   |Функция Сч = Счётчик();
   |Группировка НомерДок;
   |"//}}ЗАПРОС
   ;

Пока Запрос.Группировка(1) = 1 Цикл
       
       Если Запрос.Сч=1 Тогда
           Продолжить;
       КонецЕсли;
       
       // Заполнение полей НомерДок
       Таб.ВывестиСекцию("НомерДок");
КонецЦикла;

Выходит результат со счетчиком 2. Проверяю явно с номером 12345 есть три дубля но в пор запрос этог оне видит. Забить и делать через ТЗ и трахогемор?
1 jarett
 
09.04.13
23:24
га фига группировать по номеру документа?
2 Sasha_H
 
09.04.13
23:28
как это фига,
у меня номер документа Текст длина 5

есть три документа с номерами 12345

я хочу увидеть, что номер 12345 дублирется N-раз
3 EvgeniuXP
 
09.04.13
23:29
случаем одинаковых номеров документов нет у тебя там в базе?
4 EvgeniuXP
 
09.04.13
23:30
В ТЗ нет ни какого трахогемора, свернуть и получил результат :)
5 Sasha_H
 
09.04.13
23:32
(3) ну а я очем, мне и надо найти все дубли! Но запрос не все видит - это что за бред?
6 EvgeniuXP
 
09.04.13
23:36
Проще через 1СРР написать, а стандартный так и не докумекал.
7 Sasha_H
 
09.04.13
23:40
да я и чем. надо юзать мне стандарт, там ВК не надо ставить
8 Voronve
 
09.04.13
23:47
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Номер");
ТЗ.НоваяКолонка("Счетчик");

Док = СоздатьОбъект("Документ.ЗаказНаПокупку");
Док.ВыбратьДокументы();
Пока Док.ПолучитьДокумент() = 1 Цикл
   ТЗ.НоваяСтрока();
   ТЗ.Номер = Док.НомерДок;
   ТЗ.Счетчик = 1;
КонецЦикла;

ТЗ.Свернуть("Номер", "Счетчик");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
   Если ТЗ.Счетчик > 1 Тогда Сообщить("" + ТЗ.Номер); КонецЕсли;
КОнецЦикла;
9 EvgeniuXP
 
09.04.13
23:51
(8) еще отсортировать по убыванию :) и прервать, как только достигли 1 :)
10 Sasha_H
 
09.04.13
23:54
Спс.

ункция ПолучитьНомераРО()
   
   Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |ОбрабатыватьДокументы все;
   |ТекущийДокумент = Документ.ЗаказНаПокупку.ТекущийДокумент;
   |НомерДок = Документ.ЗаказНаПокупку.НомерДок;
   |Группировка НомерДок;
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат 0;
   КонецЕсли;
   
   ТаблНомера = СоздатьОбъект("ТаблицаЗначений");
   Запрос.Выгрузить(ТаблНомера,,0);
   
   ТаблНомера.НоваяКолонка("Счётчик");    
   
   ТаблНомера.ВыбратьСтроки();
   Пока ТаблНомера.ПолучитьСтроку() = 1 Цикл
       ТаблНомера.Счётчик = 1;
   КонецЦикла;
   
   ТаблНомера.Свернуть("НомерДок","Счётчик");
   
   
   ТаблДубли = СоздатьОбъект("ТаблицаЗначений");
   ТаблДубли.НоваяКолонка("НомерДок");
   ТаблДубли.НоваяКолонка("Счётчик");
   
   ТаблНомера.ВыбратьСтроки();
   Пока ТаблНомера.ПолучитьСтроку() = 1 Цикл
       Если ТаблНомера.Счётчик = 1 Тогда
           Продолжить;
       КонецЕсли;
       
       ТаблДубли.НоваяСтрока();
       ТаблДубли.НомерДок = ТаблНомера.НомерДок;
       ТаблДубли.Счётчик = ТаблНомера.Счётчик;
       
   КонецЦикла;
   
   ТаблДубли.Сортировать("НомерДок+");
   ТаблДубли.ВыбратьСтроку();
   
КонецФункции

Я просто думал я это или лыжи, хорошо что проверил
11 Voronve
 
09.04.13
23:55
(9) Рюшки - сами )
12 Sasha_H
 
09.04.13
23:59
ПРикол после такого кода на выходе выбрать строку 0 Строк ))) интересненько
2 + 2 = 3.9999999999999999999999999999999...