Вопрос по Управляемым формам, про объявление переменной

1. CYCTAHOH 17.08.22 22:30 Сейчас в теме
Добрый вечер, пытаюсь понять логику управляемых форм. Поверьте, я пытался найти информацию и не сразу стал тут писать чтобы "нервировать" уважаемых людей. Не могу понять почему не срабатывает код. Если кто подскажет, то буду очень признателен.

&НаКлиенте
Перем Тир;

Процедура Команда1(Команда)

Тир = 0;

Сообщить(Тир);

КонецПроцедуры

На форме 1 кнопка "Команда1".
Не могу понять почему при нажатии не выводится вообще ничего. Хочу объявить переменную Тир чтобы она была равна 0. После этого хочу сделать по нажатию на кнопку Команда1 чтобы переменная Тир становилась на 1 единицу больше и вывести ее через метод Сообщить. Чтобы было 0, потом 1, потом 2 и т.д. Но блин я даже объявить ее не могу.
По теме из базы знаний
Найденные решения
5. spacecraft 18.08.22 00:49 Сейчас в теме
Переменная модуля формы объявляется со значением Неопределено
&НаКлиенте
Перем Тир;

&НаКлиенте
Процедура Команда1(Команда)
	Если Тир = Неопределено Тогда
		Тир = 0;
	КонецЕсли;
	
	Тир = Тир + 1;
	Сообщить(Тир);
КонецПроцедуры
Показать
CYCTAHOH; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. VictorRGB2 14 17.08.22 23:40 Сейчас в теме
(1)
Перем Тир;

&НаКлиенте
Процедура Команда1()
 Тир = Тир + 1;
 Сообщить(Строка(Тир));
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии()
 Тир = -1;
КонецПроцедуры
Показать
4. CYCTAHOH 18.08.22 00:13 Сейчас в теме
(3)
Перем Тир;

&НаКлиенте
Процедура Команда1()
Тир = Тир + 1;
Сообщить(Строка(Тир));
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии()
Тир = -1;
КонецПроцедуры


Написал все как у вас, выскакивает ошибка что преобразование к типу Число не может быть выполнено.
8. VictorRGB2 14 18.08.22 09:21 Сейчас в теме
(4) да, на скорую руку сделал
там надо было переменную &НаКлиенте тоже объявлять и вне процедур в самом конце присвоить ей значение ноль
в (7) и в (5) верно поправили
2. polax 17.08.22 22:53 Сейчас в теме
&НаКлиенте
Процедура Команда1(Команда)
Тир = 0;
Сообщить(Строка(Тир));
КонецПроцедуры
5. spacecraft 18.08.22 00:49 Сейчас в теме
Переменная модуля формы объявляется со значением Неопределено
&НаКлиенте
Перем Тир;

&НаКлиенте
Процедура Команда1(Команда)
	Если Тир = Неопределено Тогда
		Тир = 0;
	КонецЕсли;
	
	Тир = Тир + 1;
	Сообщить(Тир);
КонецПроцедуры
Показать
CYCTAHOH; +1 Ответить
6. CYCTAHOH 18.08.22 01:06 Сейчас в теме
(5) Это работает, но почему так сложно. В обычных формах куда все более понятно и логичней. Спасибо.
7. spacecraft 18.08.22 08:03 Сейчас в теме
(6) от обычных форм отличается только директивами компиляции. Директива компиляции для объявления переменной так же важна.
А так все так же.

Вместо проверки на неопределено, можно ее инициализировать вне методов.
&НаКлиенте
Перем Тир;

&НаКлиенте
Процедура Команда1(Команда)
    Тир = Тир + 1;
    Сообщить(Тир);
КонецПроцедуры

Тир = 0;
Показать
9. CYCTAHOH 18.08.22 10:40 Сейчас в теме
(7) Вот я пытался как в этом примере сделать, но у меня не получалось, видимо потому что объявлял переменную до первой директивы "на клиенте". А вот то что в самом низу идет присвоение, тут же еще работает директива "НаКлиенте" и она присваивается наклиенте?
10. spacecraft 18.08.22 10:58 Сейчас в теме
(9)
А вот то что в самом низу идет присвоение, тут же еще работает директива "НаКлиенте" и она присваивается наклиенте?

Нет.
Вообще то если в модуле формы не указана директива компиляции, то она по умолчанию &НаСервере.
Но для раздела основной программы директивы не предусмотрены. И они выполняются как на сервере, так и на клиенте.
11. spacecraft 18.08.22 11:14 Сейчас в теме
12. Fatenm 19.08.22 10:41 Сейчас в теме
в управляемых формах любая процедура или функция без прямого указания директивы компиляции выполняется на сервере, вот и получается, что вы объявили переменную на клиенте, а значение ей присваиваете и пытаетесь вывести на сервере
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот