Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Ограничение количества неявных параметров (число прочтений - 19105 )
DrACe
1c++ donor
1c++ power user
Отсутствует


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

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Ограничение количества неявных параметров
30. Января 2007 :: 06:17
Печать  
Натолкнулся на ограничение максимального количества неявных параметров, которое можно передать в метод класса Озадачен

Оказывается эта цифра равна 27!
Или я ошибаюсь? при количестве неявных параметров большем 27, происходит ошибка:
Цитата:
Слишком много параметров передано при вызове функции/процедуры объекта


И вообще само создание класса, в котором есть методы с неявными параметрами происходит иногда с той же ошибкой, но это отлавливается редко и тест на этот случай написать не получилось Печаль
Изменено:
немного изменил тест, для попытки отловить ошибку создания класса:
нужно сначала запустить тест: "Тест ограничения количества параметров"
а потом запустить тест: "Тест создания класса"
и получаем ошибку
Цитата:
Тест = СоздатьОбъект("ТестНеявныхПараметров");
{D:\PROBA\ERT_FROM_TO_INET\ТЕСТНЕЯВНЫХПАРАМЕТРОВ.ERT(10)}: Слишком много параметров передано при вызове функции/процедуры объекта


Тест прилагается.
Тестировалось на 1С++ 2.0.3.1, а также 2.0.3.0
  

Param_Test_001.zip ( 14 KB | Загрузки )
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


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

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ограничение количества неявных параметров
Ответ #1 - 30. Января 2007 :: 07:13
Печать  
+ что характерно: если использовать неявные параметры явно  Улыбка (т.е. не через Шаблон(), или ВыполняемыйМодуль), а просто указать все параметры в модуле отчета/обработки, то максимальное количество параметров иное, т.е. например:
1) вызываем функцию с 35 параметрами - все ОК
2) опять вызываем функцию с 35 параметрами - все ОК
3) вызываем функцию с 10 параметрами - все ОК
4) опять вызываем функцию с 35 параметрами - ОШИБКА!

или так:
1) вызываем функцию с 35 параметрами - все ОК
2) вызываем функцию с 10 параметрами - все ОК
3) опять вызываем функцию с 35 параметрами - ОШИБКА!

т.е. если количество параметров меняется, то ошибка появляется при превышении некоего количества параметров (это количество я не выяснил, но оно скорее всего тоже около 30)

О, как!  Ужас
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


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

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ограничение количества неявных параметров
Ответ #2 - 30. Января 2007 :: 09:59
Печать  
привлеку к себе внимание до срока:
1) может кто-нибудь использует активно неявные параметры и поделится впечатлениями? Может я что-то делаю не так?
2) смотрел ли кто-нибудь мой тест, проявляется ли ошибка в нем?

PS Добавил еще один тест для вызова "по простому" - т.е. тупо описанные в модуле функции с разным количеством параметров
  

Param_Test.zip ( 14 KB | Загрузки )
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ограничение количества неявных параметров
Ответ #3 - 30. Января 2007 :: 10:50
Печать  
Классный тест. Улыбка

Пока не готов ничего сказать, кроме того что передача неопределенного количества параметров - это особый случай.
Его сделал еще Deb, используя особенности реализации платформы.

Мне всегда было интересно, насколько надежно это работает.
Надо будет посмотреть.
  

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


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

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ограничение количества неявных параметров
Ответ #4 - 30. Января 2007 :: 10:59
Печать  
спасибо за внимание!  Улыбка

т.е. не то, чтобы я очень боялся остаться без него, но все таки кое-что уже прояснилось - не только у меня "что-то с глазами"...

ну чтож пока поищу другие пути-дорожки...
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Ограничение количества неявных параметров
Ответ #5 - 30. Января 2007 :: 11:04
Печать  
Цитата:
может кто-нибудь использует активно неявные параметры и поделится
впечатлениями?

Охотно поделюсь: использую широко, на версии 1.8.1.5 работает без ошибок.
Цитата:
смотрел ли кто-нибудь мой тест, проявляется ли ошибка в нем?

А есть смысл смотреть? Улыбка

зы: 30 параметров! Ужос! :-D
  
Наверх
ICQ  
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


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

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ограничение количества неявных параметров
Ответ #6 - 30. Января 2007 :: 11:16
Печать  
Цитата:
зы: 30 параметров! Ужос! :-D

и вовсе не ужос  Улыбка
Объясню, что мне надо:
1) хочу заполнять некую структуру, у которой есть неопределенное количество значений, каждое значение имеет идентификатор и несколько дополнительных параметров (по сути это - плоская таблица)

2) хочется иметь метод, с помощью которого за один вызов можно передать Идентификатор значения и Неопределенное количество параметров парами(ИдПараметра,Значение), где-то так:
Код
Выбрать все
	СтрЗапроса = Запрос.ВставитьПеременнуюЗапроса(
				"ДатаКонца" //---Переменная
				,"УсловиеВыполнитьДействие","УстановитьТекстовыйПараметр"
				,"УсловиеПараметр1","ДатаКонца"
				);
 


другой вызов:
Код
Выбрать все
	СтрЗапроса = Запрос.ВставитьПеременнуюЗапроса(
				"Фирма" //---Переменная
				,"ПеременнаяSQL","$РегОстатки.Фирма"
				,"ТекстSELECT","$РегОстатки.Фирма AS Firma"
				,"ТекстJOIN",""
				,"ТекстWHERE","($РегОстатки.Фирма IN (SELECT val FROM #ВыбРазделитель1<@>))"
				,"ТекстWHERE_ВсеКроме","($РегОстатки.Фирма NOT IN (SELECT val FROM #ВыбРазделитель1<@>))"
				,"ТекстGROUPBY","$РегОстатки.Фирма"
				,"ТекстORDERBY",""
				,"УсловиеВыполнитьДействие","УложитьСписокОбъектов"
				,"УсловиеПараметр1","ВыбРазделитель1"
				,"УсловиеПараметр2","#ВыбРазделитель1<@>"
				,"УсловиеПараметр3","Фирмы"
				);
 


почему именно метод? потому что в противном случае (если пользоваться таблице значений или структурой), то придется делать что-то такое:
Код
Выбрать все
ТЗ.НоваяСтрока()
ТЗ.Переменная = "Фирма";
ТЗ.ПеременнаяSQL = "$РегОстатки.Фирма";
ТЗ.ТекстSELECT = "$РегОстатки.Фирма AS Firma" 


а у меня в этом методе после заполнения структуры еще дополнительные действия производятся, т.е. тут надо еще добавить метод для завершения ввода строки типа:
Код
Выбрать все
ТЗ.ЗаписатьСтроку() 


или передавать уже готовую структуру в качестве параметра...

всяко можно, но наглядность уменьшается (для меня  Улыбка)
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Ограничение количества неявных параметров
Ответ #7 - 30. Января 2007 :: 11:30
Печать  
DrACe
В таких случаях, обычно, предпочитаю передавать готовые объекты:
Код
Выбрать все
запрос.ВставитьПараметры(
	ПараметрЗапроса("ИмяПараметра", ЗначениеПараметра),
	ПараметрЗапроса("ИмяПараметра", ЗначениеПараметра)
); 

  
Наверх
ICQ  
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


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

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ограничение количества неявных параметров
Ответ #8 - 30. Января 2007 :: 11:46
Печать  
Цитата:
DrACe
В таких случаях, обычно, предпочитаю передавать готовые объекты:

видимо так и придется поступить
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ограничение количества неявных параметров
Ответ #9 - 30. Января 2007 :: 11:53
Печать  
А знаете ли вы, что:

1. Число 30 жестко зашито в код
2. На 1.8.1.5 ограничения те же

Думаю, мы это поведение слегка изменим.
У меня тоже есть идея, где нужен класс с неопределенным числом параметров Улыбка

DraCe
В принципе, завтра этот вопрос мы закроем.
Но я бы тоже, наверное, передавал структуру или СЗ...
  

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


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Ограничение количества неявных параметров
Ответ #10 - 30. Января 2007 :: 12:14
Печать  
Ну нет... Структура - это структура. А параметры - это параметры.

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ограничение количества неявных параметров
Ответ #11 - 30. Января 2007 :: 12:29
Печать  
sedmin писал(а) 30. Января 2007 :: 12:14:
Ну нет... Структура - это структура. А параметры - это параметры.

Хотя, по-правильному, конечно, должен быть какой-то массив.

Александр, я таки не понял, ты с нами или против нас? Подмигивание
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ограничение количества неявных параметров
Ответ #12 - 30. Января 2007 :: 14:40
Печать  
[quote author=DrACe link=1170137838/0#0 date=1170137838]Оказывается эта цифра равна [highlight]27[/highlight]!
[/quote]
Больше не равна :)
[url]http://www.1cpp.ru/forum/YaBB.pl?num=1158076903/60#60[/url]
  

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ограничение количества неявных параметров
Ответ #13 - 30. Января 2007 :: 15:06
Печать  
А, если не секрет, с чем было связано то самое жёсткое ограничение в 30?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ограничение количества неявных параметров
Ответ #14 - 30. Января 2007 :: 15:14
Печать  
х.з. это к Deb'у вопрос.
  

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