Вход | Регистрация

1С:Предприятие ::

Метки: 

Объясните по последовательности выполнения кода модуля

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


Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует