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