Имя: Пароль:
1C
1С v8
Объясните по последовательности выполнения кода модуля
0 never_sleep
 
11.04.17
15:01
Продолжу Еще один вопрос по глобальным переменным (Надеюсь, в это раз подобрал более корректную формулировку)
Решил я выяснить, запускается ли при каждом серверном вызове код "основной программы".
Вот такой листинг подтверждает, что да.

&НаСервере
Перем ТЗ;

&НаСервере
Процедура ЗапуститьНаСервере()
    Строка = ТЗ.Добавить();
    Строка.Первая = "ААА";
    Строка.Вторая = "БББ";
    Сообщить("ЗапуститьНаСервере");

    Для Каждого СтрокаТЗ Из ТЗ Цикл
        Сообщить(Строка.Первая+" "+Строка.Вторая);
    КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура ЗапуститьНаСервере2()
    Строка = ТЗ.Добавить();
    Строка.Первая = "ААА2";
    Строка.Вторая = "БББ2";
    Сообщить("ЗапуститьНаСервере2");
    Для Каждого СтрокаТЗ Из ТЗ Цикл
        Сообщить(Строка.Первая+" "+Строка.Вторая);
    КонецЦикла;
КонецПроцедуры


&НаКлиенте
Процедура Запустить(Команда)
    ЗапуститьНаСервере();
    ЗапуститьНаСервере2();
КонецПроцедуры

#Если Сервер Тогда
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Первая");
    ТЗ.Колонки.Добавить("Вторая");
#КонецЕсли

------Выводит----------
ЗапуститьНаСервере
ААА БББ
ЗапуститьНаСервере2
ААА2 БББ2

Все ок. Все отлично.
Но если в коде основного модуля вставить:

#Если Сервер Тогда
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Первая");
    ТЗ.Колонки.Добавить("Вторая");
    Строка = ТЗ.Добавить();
    Строка.Первая = "ААА0";
    Строка.Вторая = "БББ0";
    Сообщить("Основной код");
    Для Каждого СтрокаТЗ Из ТЗ Цикл
       Сообщить(Строка.Первая+" "+Строка.Вторая);
    КонецЦикла;
    
#КонецЕсли

------Выводит----------
Основной код
ААА0 БББ0
ЗапуститьНаСервере
ААА БББ
ААА БББ
Основной код
ААА0 БББ0
ЗапуститьНаСервере2
ААА2 БББ2
ААА2 БББ2

Почему задваивает строки в серверных вызовах?
Я думал, будет так:

Основной код
ААА0 БББ0
ЗапуститьНаСервере
ААА БББ
Основной код
ААА0 БББ0
ЗапуститьНаСервере2
ААА2 БББ2
1 НЕА123
 
11.04.17
15:12
что хотел то и получил.
2 НЕА123
 
11.04.17
15:12
Для Каждого СтрокаТЗ Из ТЗ Цикл
       Сообщить(Строка.Первая+" "+Строка.Вторая);
    КонецЦикла;
3 dezss
 
11.04.17
15:22
(0) чувак, тупишь...
ты добавил 2 строки (одну в основном коде, вторую в процедуре), но выводишь не то, что объявил в "для каждого СтрокаТЗ", а просто "строка".
4 dezss
 
11.04.17
15:22
(3) в процедурах замени
Сообщить(Строка.Первая+" "+Строка.Вторая);
на
Сообщить(СтрокаТЗ.Первая+" "+СтрокаТЗ.Вторая);
и все поймешь)
5 never_sleep
 
12.04.17
07:01