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

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

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

 Тир = 0;

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

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

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

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

    &НаКлиенте
    Процедура Команда1(Команда)
    Если Тир = Неопределено Тогда
    Тир = 0;
    КонецЕсли;

    Тир = Тир + 1;
    Сообщить(Тир);
    КонецПроцедуры
```
---
```1c
    Перем Тир;

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

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

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

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

Написал все как у вас, выскакивает ошибка что преобразование к типу Число не может быть выполнено.
---
да, на скорую руку сделал
там надо было переменную &НаКлиенте тоже объявлять и вне процедур в самом конце присвоить ей значение ноль
в (7) и в (5) верно поправили
---
```1c
    &НаКлиенте
    Процедура Команда1(Команда)
    Тир = 0;
    Сообщить(Строка(Тир));
    КонецПроцедуры
```
---
Переменная модуля формы объявляется со значением Неопределено

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

    &НаКлиенте
    Процедура Команда1(Команда)
    Если Тир = Неопределено Тогда
    Тир = 0;
    КонецЕсли;

    Тир = Тир + 1;
    Сообщить(Тир);
    КонецПроцедуры
```
---
Это работает, но почему так сложно. В обычных формах куда все более понятно и логичней. Спасибо.
---
от обычных форм отличается только директивами компиляции. Директива компиляции для объявления переменной так же важна.
А так все так же.

Вместо проверки на неопределено, можно ее инициализировать вне методов.

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

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

    Тир = 0;
```
---
Вот я пытался как в этом примере сделать, но у меня не получалось, видимо потому что объявлял переменную до первой директивы "на клиенте". А вот то что в самом низу идет присвоение, тут же еще работает директива "НаКлиенте" и она присваивается наклиенте?
---
А вот то что в самом низу идет присвоение, тут же еще работает директива "НаКлиенте" и она присваивается наклиенте?
Нет.
Вообще то если в модуле формы не указана директива компиляции, то она по умолчанию &НаСервере.
Но для раздела основной программы директивы не предусмотрены. И они выполняются как на сервере, так и на клиенте.
---
по разделам модуля формы см:
https://its.1c.ru/db/metod8dev/content/2598/hdoc
---
в управляемых формах любая процедура или функция без прямого указания директивы компиляции выполняется на сервере, вот и получается, что вы объявили переменную на клиенте, а значение ей присваиваете и пытаетесь вывести на сервере