|   |   | 
| 
 | Работа ИМЕЮЩИЕ и Количество(*) > 1 | ☑ | ||
|---|---|---|---|---|
| 0
    
        Терпение и труд 02.01.21✎ 02:46 | 
        Доброй ночи.
 Пытаюсь разобраться с тем, как работает ИМЕЮЩИЕ. Есть тестовый пример, табличная часть документа, которая содержит ФизЛицо (справочник), ПричинуИзмененияФамилии (справочник) и Фамилию (строка) В ТЧ 6 записей: Семенова Ольга Собственное желание Семенова Петрова Марина Брак Петрова Иванова Екатерина Брак Иванова Петрова Марина Развод Сидорова Петрова Марина Развод Сидорова Семенова Ольга Развод Игнатенко Далее к этой ТЧ применяется запрос: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДанныеСотрудниковДанные.ФизЛицо КАК ФизЛицо, | ДанныеСотрудниковДанные.ПричинаИзменения КАК ПричинаИзменения, | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеСотрудниковДанные.Фамилия) КАК Фамилия |ИЗ | Документ.ДанныеСотрудников.Данные КАК ДанныеСотрудниковДанные |ГДЕ | ДанныеСотрудниковДанные.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ДанныеСотрудниковДанные.ФизЛицо, | ДанныеСотрудниковДанные.ПричинаИзменения | |ИМЕЮЩИЕ | КОЛИЧЕСТВО(*) > 1"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Выборка = Запрос.Выполнить().Выгрузить(); Запрос выдаёт 1 Развод Петрова Марина Собственно, вопрос. Насколько я понял теорию, ИМЕЮЩИЕ применяет условие к уже сгруппированной таблице, а в данном случае, если убрать ИМЕЮЩИЕ, по отладчику таблица содержит 5 строк, везде количество 1 (потому что 2 строки идентичные, они "схлопнулись"), насколько я понял, КОЛИЧЕСТВО(*) ищет одинаковые полностью результаты выборки, то есть, в данном случае, поскольку в группировке все строки встречаются ровно по 1 разу, то результат должен быть пустой. Но в таблицу попала Петрова. Получается, что ИМЕЮЩИЕ плевать на группировку в данном случае? | |||
| 1
    
        СвинТуз 02.01.21✎ 04:58 | 
        Звезда в шоке.
 Вопрос в чем? По твоей группировке и твоим данным у тебе две одинаковые строки по Петровой. Вот она и осталась. | |||
| 2
    
        Chameleon1980 02.01.21✎ 07:19 | 
        сделай имеющие количество различные фамилия
 а ты про номера строк забыл при звёздочек? | |||
| 3
    
        Chameleon1980 02.01.21✎ 07:21 | 
        сделай выбрать * из данныеСотркдниеов     | |||
| 4
    
        Ненавижу 1С гуру 02.01.21✎ 07:23 | 
        А как же твои данные:
 Петрова Марина Развод Сидорова Петрова Марина Развод Сидорова КОЛИЧЕСТВО(*) это счётчик строк без условия полей на NULL | |||
| 5
    
        Терпение и труд 02.01.21✎ 10:54 | 
        (2) А номера строк обязательно выбирать?     | |||
| 6
    
        Терпение и труд 02.01.21✎ 10:55 | 
        (4) Строк именно до группировки, исходных?     | |||
| 7
    
        Ненавижу 1С гуру 02.01.21✎ 11:02 | ||||
| 8
    
        Ненавижу 1С гуру 02.01.21✎ 11:07 | 
        (2) причем тут номера строк? они что есть, что их нет в этом запросе     | |||
| 9
    
        2mugik 02.01.21✎ 11:15 | 
        вроде вначале срабатывает "где". Потом остальное.     | |||
| 10
    
        Терпение и труд 02.01.21✎ 11:21 | 
        (7) Ага, вот теперь легче. То есть, ещё раз для тупых, КОЛИЧЕСТВО(*) определяет, сколько строк вошли в каждую группировку?     | |||
| 11
    
        Ненавижу 1С гуру 02.01.21✎ 11:34 | 
        (10) да, именно так     | |||
| 12
    
        youalex 02.01.21✎ 11:41 | 
        (9) если правильно помню, порядок такой: "ИЗ", "ГДЕ", "ВЫБРАТЬ", "СГРУППИРОВАТЬ", "ИМЕЮЩИЕ", "УПОРЯДОЧИТЬ"     | |||
| 13
    
        Терпение и труд 02.01.21✎ 11:42 | 
        (11) Большое вам спасибо! Разобрался, теперь всё понятно.     | |||
| 14
    
        2mugik 02.01.21✎ 12:03 | 
        (12)неправильно выразился - имеющие количество()>1 относится не к "итоговой" таблице, а к группировкам т.е. Количество различные в выбрать и количество в имеющие никак не связаны.     | |||
| 15
    
        youalex 02.01.21✎ 12:08 | 
        (12) + наврал, ВЫБРАТЬ - предпоследний, перед УПОРЯДОЧИТЬ (это вообще отдельно)
 (14) ИМЕЮЩИЕ - это, условно, "ГДЕ" для агрегатных функций (итоговых, как ты пишешь) . | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |