Помощь - Поиск - Пользователи - Календарь
Полная версия: Ошибка при передаче параметров в процедуру 1С 7.7
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 7.7" > (7.7) Типовые решения на платформе "1С:Предприятие 7.7"
user_tech
Имеется код, реализованный в виде отдельной обработки:
Код

Перем Глоб;
Процедура Тест(Пар1,Пар2,Пар3) Экспорт
Глоб = Глоб + Пар1+Пар2+Пар3;
Возврат;
КонецПроцедуры
Глоб = 123;

Тест (5,6,7);


Вызов процедуры идет по нажатию кнопки на форме.
В результате выполнения вываливается ошибка:

Тест(<<?>>)
Недостаточно фактических параметров

Подскажите, в чем здесь ошибка ?
Stado_adama
в процедуру должны передаваться 3 параметра... у тебя их видимо нету или их меньше... Тест (5,6,7) вот этот текст у тебя должен быть в свойствах кнопки
user_tech
Цитата(Stado_adama @ 25.8.2008, 12:03) *

в процедуру должны передаваться 3 параметра... у тебя их видимо нету или их меньше... Тест (5,6,7) вот этот текст у тебя должен быть в свойствах кнопки


О.. а тогда другой вопрос - а как эти параметры можно передать в свойства кнопки через код (чтобы в дальнейшем не прописывать свойства, а работать только через код обработки) ?? И еще - а что нужно в коде дописать, чтобы после нажатия кнопки увидеть визуально результат ??
WaRDeR
Цитата
что нужно в коде дописать, чтобы после нажатия кнопки увидеть визуально результат ??

Сообщить(<?>,);
Синтаксис:
Сообщить(<Текст_сообщения>,<ИмиджМаркера>)
Назначение:
Вывести строку в окно сообщений. Перед сообщениями можно отображать специальные пиктограммы, которыми можно помечать сообщения различной важности.
Параметры:
<Текст_сообщения> - cтрока текста сообщения.
<ИмиджМаркера> - необязательный параметр. Строковое выражение, которое задает тип пиктограммы выводимой перед сообщением. Возможные значения:
I,
!,
!!,
!!!,
''.'' - обычное сообщение,
' ' (символ пробел) - без маркера.

Цитата
как эти параметры можно передать в свойства кнопки через код

Использовать либо переменные, либо реквизиты формы/элементов
WaRDeR
А в целом по вопросу: а где ты пишешь этот код? Если в глобальном модуле, то где ты кнопку нашел? если в какой либо форме, то при объявлении процедуры не надо писать "Экспорт".

Я у себя попробовал именно этот пример, у меня работает ;)
user_tech
Цитата(WaRDeR @ 25.8.2008, 16:20) *

А в целом по вопросу: а где ты пишешь этот код? Если в глобальном модуле, то где ты кнопку нашел? если в какой либо форме, то при объявлении процедуры не надо писать "Экспорт".

Я у себя попробовал именно этот пример, у меня работает ;)



Я писал не в самом Гл.модуле, а попробовал реализовать через созданную обработку.
WaRDeR
Я тоже. Запускай отладчик, ставь точку останова на строку "Глоб = 123;" и по шагам пройди. Этот код пройдет один раз при запуске обработки (только "Экспорт" убери).

А в формулу кнопки что пишешь?
user_tech
Цитата(WaRDeR @ 26.8.2008, 10:42) *

Я тоже. Запускай отладчик, ставь точку останова на строку "Глоб = 123;" и по шагам пройди. Этот код пройдет один раз при запуске обработки (только "Экспорт" убери).

А в формулу кнопки что пишешь?


В свойства кнопки вписано вот что:
Дополнительно->Формула-> Тест()
WaRDeR
:) вот и ответ

когда жмешь кнопку, вызывается функция, и ей надо передать 3 параметра, а у тебя ни одного
Stado_adama
ага... называется читаем мой пост от вчера... он тут кстати второй в ветке...
user_tech
Цитата(Stado_adama @ 26.8.2008, 13:52) *

ага... называется читаем мой пост от вчера... он тут кстати второй в ветке...


Сделал (не без помощи форумчан) вот как:

Процедура Тест(Пар1=0,Пар2=0,Пар3=0) Экспорт
Глоб = Глоб + Пар1+Пар2+Пар3;
Возврат;
Сообщить(Глоб)
КонецПроцедуры

Глоб = 123;

Тест (5,6,7);

..и все работает. Я тольк не совсем понял - а что можно еще это действие реализовать как-то через задание Формулы в свойствах кнопки ? - можно поподробнее об этом способе и расскажите а в чем разница то ?
WaRDeR
А что за способ? Сздесь как то не правильно:
1. убери слово "экспорт". Если не знаешь для чего - не пользуйся (читай справку)
2. Убери оператор "Возврат". Он прерывает процедуру, и НИКОГДА не исполнится оператор "Сообщить" в твоей процедуре.
3. Установив значения по умолчанию, ты просто разрешил не передавать в процедуру значения, и теперь пропущенные параметры равны нулю. Не думаю что результат тебя устроит, при прежней обработке формулы кнопки.

2 Stado_adama, я просто пытался вывести user_tech к логическому пониманию, где у него ошибка, но не уверен, что это получилось :(
user_tech
Цитата(WaRDeR @ 27.8.2008, 10:37) *

А что за способ? Сздесь как то не правильно:
1. убери слово "экспорт". Если не знаешь для чего - не пользуйся (читай справку)
2. Убери оператор "Возврат". Он прерывает процедуру, и НИКОГДА не исполнится оператор "Сообщить" в твоей процедуре.
3. Установив значения по умолчанию, ты просто разрешил не передавать в процедуру значения, и теперь пропущенные параметры равны нулю. Не думаю что результат тебя устроит, при прежней обработке формулы кнопки.

2 Stado_adama, я просто пытался вывести user_tech к логическому пониманию, где у него ошибка, но не уверен, что это получилось :(



Переделал в соответствии с полученными рекомендациями. Вот что получилось:
Поставил в свойствах кнопки Дополнительно->Формула-> Тест(Пар1,Пар2,Пар3)
Поправил Код:

Код
Перем Глоб;
Процедура Тест()
Глоб=Пар1+Пар2+Пар3;
Сообщить(Глоб)
КонецПроцедуры
Тест(5,6,7);


В результате выдается ошибка типа:

Глоб=Пар1<<?>>+Пар2+Пар3;
{D:\WORK\1C\TEST_BD\1С_ЗИК\EXTFORMS\TEST.ERT(7)}: Переменная не определена (Пар1)
Тест(<<?>>5,6,7);
{D:\WORK\1C\TEST_BD\1С_ЗИК\EXTFORMS\TEST.ERT(11)}: Слишком много фактических параметров
Stado_adama
Код

Процедура Тест(Пар1,Пар2,Пар3)
Глоб=Пар1+Пар2+Пар3;
Сообщить(Глоб)
КонецПроцедуры
user_tech
Цитата(Stado_adama @ 27.8.2008, 12:33) *

Код

Процедура Тест(Пар1,Пар2,Пар3)
Глоб=Пар1+Пар2+Пар3;
Сообщить(Глоб)
КонецПроцедуры




Вот блин... работает!!
Причем все практически то же самое что я вчера писал (см. в самом верху), за исключением
команды "Возврат;"
Причем работает даже без задания параметров в свойствах кнопки, т.е. Дополнительно-Функция-Тест()
WaRDeR
пользуйся отладчиком, он облегчит понимание работы алгоритмов.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2010 Invision Power Services, Inc.