Опрос
Опрос Тема Опроса: что должен выдавать Запрос.ЭтоГруппа() на тип "Документ"?
bars   pie





Всего голосов: 5
« Последняя модификация: DrACe : 07. Февраля 2007 :: 15:32 »
Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Глюк 1С в методе Запрос.ЭтоГруппа("Документ") (число прочтений - 4560 )
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Глюк 1С в методе Запрос.ЭтоГруппа("Документ")
07. Февраля 2007 :: 14:20
Печать  
Так вот этот метод на тип Документ выдает то 0, то 1, в зависимости от того - была ли до группировки Документ иерархическая группировка справочника, или нет  Улыбка

1С R7.70.025 (может на других нету такой ошибки - потестите плиз, у кого есть релизы)

тест прилагается
  

Query_IsFolder_Bag.ert ( 31 KB | Загрузки )
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Глюк 1С в методе Запрос.ЭтоГруппа("Документ")
Ответ #1 - 07. Февраля 2007 :: 14:41
Печать  
Когда говорят о глюке - принято рассказывать еще и ожидаемое поведение.
Так вот какое поведение ты ожидал? Группировка("Документ") - это 1 или 0? Улыбка
  
Наверх
www  
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Глюк 1С в методе Запрос.ЭтоГруппа("Документ")
Ответ #2 - 07. Февраля 2007 :: 14:45
Печать  
когда говорят о глюке - пишут тест Подмигивание
прошу заглянуть в тест - поведение весьма неожиданное (т.е. оно меняется в зависимости от контекста), а вот и выдержка из доки на 1С:
Цитата:
ЭтоГруппа(<?>)
Синтаксис:
ЭтоГруппа(<ИмяГруппировки>)
Назначение:
Возвращает флаг принадлежности группе справочника: 1 - если текущая строка выборки соответствует группе справочника, 0 - иначе.
Параметры:
<ИмяГруппировки> - выражение, содержащее имя группировки текста запроса.


как вы думаете - тип "Документ" - это группа справочника, или иначе  Ужас
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Глюк 1С в методе Запрос.ЭтоГруппа("Документ")
Ответ #3 - 07. Февраля 2007 :: 14:50
Печать  
да, кстати у меня база dbf 1C R7.70.025 - у кого есть SQL-ная - посмотрите, плиз - может там все по-другому?..
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Глюк 1С в методе Запрос.ЭтоГруппа("Документ")
Ответ #4 - 07. Февраля 2007 :: 15:27
Печать  
поясню почему меня заинтересовало мнение форумчан: "считать данное поведение багом, или нет?"

Дело в том, что этот метод широко используется в типовых конфах 1С, при реализации класса-аналога 1С-овскому "Запрос" возникла необходимость иметь метод ЭтоГруппа, а вот что он должен выдавать в таких ситуевинах я теперь затрудняюсь ответить... Озадачен
Я думал, что если АтрибутЗапроса НЕ группа справочника, то он должен давать 0!
а вот в типовых он дает по-разному: то 1, то 0, что очень наглядно просвечивает в примерах к моему классу "РасшЗапрос", который я только что выложил в репозитарии...
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Глюк 1С в методе Запрос.ЭтоГруппа("Документ")
Ответ #5 - 07. Февраля 2007 :: 15:47
Печать  
Я думаю, что для документа он вполне может выдавать Undefined Behavior.
Мне вроде бы не встречалось такое использование в типовых, но специально не искал, конечно.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Глюк 1С в методе Запрос.ЭтоГруппа("Документ")
Ответ #6 - 07. Февраля 2007 :: 15:53
Печать  
kms писал(а) 07. Февраля 2007 :: 15:47:
Я думаю, что для документа он вполне может выдавать Undefined Behavior.
Мне вроде бы не встречалось такое использование в типовых, но специально не искал, конечно.

Код
Выбрать все
Если (Ном >= НомерГруппировкиПоТМЦ) и (Запрос.ЭтоГруппа(НазваниеГруппировки)=0) Тогда
	НазваниеСекции = НазваниеСекции + "К";
КонецЕсли;  
 


это цитата из отчета ТиС 9.2 "ВедомостьПоПартиям", из кода видно, что если выводимая группировка ниже группировки "Номенклатура", то выводится секция Таблицы с "Количеством" (если это не группа), но в данной ситуации метод Запрос.ЭтоГруппа("Документ") выдаст 1 и к названию секции не добавится буква "К", а значит будет выведена секция без Количества.

Вроде в таком разрезе и количество в разрезе документа показать не грех, а с другой стороны - вроде и не надо - вопрос логики и совместимости...
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Глюк 1С в методе Запрос.ЭтоГруппа("Документ")
Ответ #7 - 07. Февраля 2007 :: 16:17
Печать  
Точно UB.
Стоит добавить первой группировку по фирме (в типовой отчет по партиям) - и количества появятся (а ЭтоГруппа() вернет 0).

Конечно, это косяк типовой.
Ну и проблема самого метода, конечно - эта неопределенность и приводит к такому использованию самими же разработчиками 1С из соседнего отдела.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать