Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
14 Дек 2017, 23:55
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Не могу понять...  (Прочитано 2058 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн volody87

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-30
  • Сайт: 
  • Профессия: Ученик 1С
Добрый день, уважаемые специалисты!

Мучаюсь с одной проблемой: уже все мозги на бекрень - перечитал всё, что можно.
Вот код, код простой:


   Перем СуммаОбщая1;
   Перем СуммаОбщая2;
   
   Процедура ВычислениеЗнач()
      СуммаОбщая1 = 50;
      СуммаОбщая2 = 50;
    КонецПроцедуры
   
   Процедура ВыводДляПользователя()
       Сообщить ("СуммаОбщая1 = " + СуммаОбщая1);
      Сообщить ("СуммаОбщая2 = " + СуммаОбщая2);
   КонецПроцедуры
   
   Процедура КнопкаВыполнитьНажатие()
      Перем СуммаОбщая1;
      //Перем СуммаОбщая2;
      ВычислениеЗнач();
      СуммаОбщая1 = 60;
      СуммаОбщая2 = 60;
      ВыводДляПользователя();
       Сообщить ("СуммаОбщая1 = " + СуммаОбщая1);
      Сообщить ("СуммаОбщая2 = " + СуммаОбщая2);
   КонецПроцедуры

При выполнении выдаёт:
СуммаОбщая1 = 50
СуммаОбщая2 = 60
СуммаОбщая1 = 60
СуммаОбщая2 = 60

Больше всего меня интересует, почему СуммаОбщая1 = 50? Ведь мы в процедуре "КнопкаВыполнитьНажатие" присваиваем ей значение 60 ! СуммаОбщая2 - понятно, переменная модуля. С ней всё ясно. СуммаОбщая1 - локальная, объявлена явно...

Помогите, пожалуйста!


Оффлайн sergejK74

  • *****
  • Сообщений: 1093
  • РЕПУТАЦИЯ: 458
  • КПД: 42%
  • Всегда готов помочь!
  • Регистрация: 2011-07-08
  • Сайт: 
  • Профессия: Ученик 1С
Re: Не могу понять...
« Ответ #1: 30 Дек 2011, 23:32 »
В процедуре ВычислениеЗнач() присвоил значение переменной модуля 50, в Процедура ВыводДляПользователя() его получил.
Локальная переменная СуммаОбщая1 видна только внутри процедуры.
Кнопочка Спасибо - слева!

Оффлайн volody87

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-30
  • Сайт: 
  • Профессия: Ученик 1С
Re: Не могу понять...
« Ответ #2: 31 Дек 2011, 07:54 »
Спасибо!
Но всё же до меня не доходит: если Локальная переменная СуммаОбщая1 видна только внутри процедуры, то почему ей не присваивается значение 60, ведь функция ВыводДляПользователя() идёт после   
СуммаОбщая1 = 60;
СуммаОбщая2 = 60;

Получается, что переменной модуля присваивается значение 60, потому что она переменная модуля, а СуммаОбщая1 остаётся 50, но только для функции ВыводДляПользователя(), ведь в дальнейшем:

...
    ВыводДляПользователя();
       Сообщить ("СуммаОбщая1 = " + СуммаОбщая1);
      Сообщить ("СуммаОбщая2 = " + СуммаОбщая2);
   КонецПроцедуры

Ей всё же присваивается 60 !
Ответ:
50
60
60
60

Объясните, пожалуйста, почему для СуммаОбщая1 остаётся 50, но только для функции ВыводДляПользователя(), а в дальнейшем выводится 60

Оффлайн sergejK74

  • *****
  • Сообщений: 1093
  • РЕПУТАЦИЯ: 458
  • КПД: 42%
  • Всегда готов помочь!
  • Регистрация: 2011-07-08
  • Сайт: 
  • Профессия: Ученик 1С
Re: Не могу понять...
« Ответ #3: 31 Дек 2011, 11:32 »
Процедура ВыводДляПользователя() не может обращаться к локальным переменным Процедуры КнопкаВыполнитьНажатие(). Они попросту не видны в ней. Единственная доступная в процедуре переменная с именем СуммаОбщая1 является переменной модуля. В других ЯП есть понятия ООП "пространство имен" и "инкапсуляция".
Убери в КнопкаВыполнитьНажатие определение переменной Перем СуммаОбщая1 и посмотри результат. Хотя видно что были эксперименты с Перем СуммаОбщая2;
Кнопочка Спасибо - слева!

Оффлайн volody87

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-30
  • Сайт: 
  • Профессия: Ученик 1С
Re: Не могу понять...
« Ответ #4: 31 Дек 2011, 19:08 »
Убери в КнопкаВыполнитьНажатие определение переменной Перем СуммаОбщая1 и посмотри результат.

---

Я делал это. Получается:
60
60
60
60

Если       СуммаОбщая1 и СуммаОбщая2 - локальные, объявлены неявно, то процедура ВычислениеЗнач(); - присваивает значение НЕ ИМ, а переменным модуля 50, а процедура ВыводДляПользователя(); - должна их вывести. Т.е. 50 и 50. Но она выводит 60 и 60.  !!!

Почему при объявлении переменной Перем СуммаОбщая1 в процедуре КнопкаВыполнитьНажатие() она становится равной 50  - я не могу понять, ведь по логике вещей, как раз в этом случае она должна быть 60 (она объявлена с помощью Перем в процедуре), а СуммаОбщая2 не объявлена явно в процедуре и она должна быть не видна, вместо неё должна быть переменная модуля, равная как раз 50 (после выполнения процедуры ВычислениеЗнач() внутри процедуры КнопкаВыполнитьНажатие(). Тогда ответ должен быть 60 и 50, а на самом деле 50 и 60 !!

Моя логика:

   Перем СуммаОбщая1; // Переменная модуля
   Перем СуммаОбщая2; // Переменная модуля
   
   Процедура ВычислениеЗнач()
      СуммаОбщая1 = 50; // работаем с переменной модуля - присваиваем её значение
      СуммаОбщая2 = 50; // работаем с переменной модуля - присваиваем её значение
    КонецПроцедуры
   
   Процедура ВыводДляПользователя()
       Сообщить ("СуммаОбщая1 = " + СуммаОбщая1);// работаем с переменной модуля - выводим на экран
      Сообщить ("СуммаОбщая2 = " + СуммаОбщая2);// работаем с переменной модуля - выводим на экран
   КонецПроцедуры
   
   Процедура КнопкаВыполнитьНажатие()
      Перем СуммаОбщая1; // локальная переменная, объявленная явно, значит она перекрывает переменную модуля внутри процедуры
      //Перем СуммаОбщая2;
      ВычислениеЗнач(); // происходит присваивание значение переменной СуммаОбщая1 (она выступает в качестве переменной процедуры) и СуммаОбщая2 (она выступает в качестве переменной МОДУЛЯ)
      СуммаОбщая1 = 60; // присваиваем новое значение переменной СуммаОбщая1, так как она объявлена явно в процедуре, то она должна принять новое значение
      СуммаОбщая2 = 60; // присваиваем новое значение переменной СуммаОбщая2, так как она объявлена НЕЯВНО в процедуре, то значение новое не принимает
      ВыводДляПользователя(); выводим переменные - результат должен получиться 60 и 50, а получается 50 и 60
       Сообщить ("СуммаОбщая1 = " + СуммаОбщая1);//выводим переменные - результат 60
      Сообщить ("СуммаОбщая2 = " + СуммаОбщая2);//выводим переменные - результат 60
   КонецПроцедуры

____

Я прошу помочь разобраться с этим. Я очень долго тужился своим мозгом в надежде разобраться сам.
Прошу ткнуть носом в моё заблуждение.

Оффлайн sergejK74

  • *****
  • Сообщений: 1093
  • РЕПУТАЦИЯ: 458
  • КПД: 42%
  • Всегда готов помочь!
  • Регистрация: 2011-07-08
  • Сайт: 
  • Профессия: Ученик 1С
Re: Не могу понять...
« Ответ #5: 31 Дек 2011, 23:08 »
Цитировать

   Перем СуммаОбщая1; // Переменная модуля
   Перем СуммаОбщая2; // Переменная модуля
   
   Процедура ВычислениеЗнач()
      СуммаОбщая1 = 50; // работаем с переменной модуля - присваиваем её значение
      СуммаОбщая2 = 50; // работаем с переменной модуля - присваиваем её значение
    КонецПроцедуры
   
   Процедура ВыводДляПользователя()
       Сообщить ("СуммаОбщая1 = " + СуммаОбщая1);// работаем с переменной модуля - выводим на экран
      Сообщить ("СуммаОбщая2 = " + СуммаОбщая2);// работаем с переменной модуля - выводим на экран
   КонецПроцедуры
   
   Процедура КнопкаВыполнитьНажатие()
      Перем СуммаОбщая1; // локальная переменная, объявленная явно, значит она перекрывает переменную модуля внутри процедуры
      //Перем СуммаОбщая2;
Переменные Модуля СуммаОбщая1=0;СуммаОбщая2 = 0;
Локальная переменная СуммаОбщая1=0;
Цитировать
      ВычислениеЗнач(); // происходит присваивание значение переменной СуммаОбщая1 (она выступает в качестве переменной процедуры) и СуммаОбщая2 (она выступает в качестве переменной МОДУЛЯ)
В процедуре ВычислениеЗнач() доступны переменные модуля. Результат
Переменные Модуля СуммаОбщая1=50;СуммаОбщая2 = 50;
Локальная переменная СуммаОбщая1=0;
Цитировать
      СуммаОбщая1 = 60; // присваиваем новое значение переменной СуммаОбщая1, так как она объявлена явно в процедуре, то она должна принять новое значение
      СуммаОбщая2 = 60; // присваиваем новое значение переменной СуммаОбщая2, так как она объявлена НЕЯВНО в процедуре, то значение новое не принимает
Переменная модуля СуммаОбщая1 перекрывается локальной переменной. Переменная модуля СуммаОбщая2 доступна
результат
Переменные Модуля СуммаОбщая1=50;СуммаОбщая2 = 60;
Локальная переменная СуммаОбщая1=60;
Цитировать
      ВыводДляПользователя(); выводим переменные - результат должен получиться 60 и 50, а получается 50 и 60
В процедуре ВыводДляПользователя() доступны только переменные модуля
Выводим доступные Переменные Модуля СуммаОбщая1=50;СуммаОбщая2 = 60;
Цитировать
       Сообщить ("СуммаОбщая1 = " + СуммаОбщая1);//выводим переменные - результат 60
      Сообщить ("СуммаОбщая2 = " + СуммаОбщая2);//выводим переменные - результат 60
   КонецПроцедуры
Переменная модуля СуммаОбщая1 перекрывается локальной переменной. Переменная модуля СуммаОбщая2 ничем не перекрыта
Выводим Локальная переменная СуммаОбщая1=60;Переменные Модуля СуммаОбщая2 = 60;
Кнопочка Спасибо - слева!

Оффлайн volody87

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-30
  • Сайт: 
  • Профессия: Ученик 1С
Re: Не могу понять...
« Ответ #6: 01 Янв 2012, 09:50 »
О! Вот теперь понятно! Я всё понял! Большое спасибо!


Теги:
 

не могу вывести отображение цен в "подборе" документ "Заявка покупателя" УТ 10.3

Автор Виталий ЕмельяновРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 3922
Последний ответ 05 Окт 2015, 19:22
от Виталий Емельянов
не могу заполнить поле "Соглашение"

Автор aprnРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 3166
Последний ответ 05 Май 2011, 18:17
от Maxim
Не могу найти в 1С8.3 справочник "Организации"

Автор ГюзельРаздел Пользователям "1С - Предприятие 8"

Ответов: 2
Просмотров: 13639
Последний ответ 17 Сен 2014, 11:18
от Гюзель
Не могу найти "Удаление помеченных объектов"

Автор LeviathanРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 7
Просмотров: 5391
Последний ответ 14 Янв 2016, 06:03
от cska-fanat-kz
Если у счёта есть признак учёта "Количество", то я могу писать Двж.КоличествоДт?

Автор DirecTwiXРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 8
Просмотров: 5396
Последний ответ 25 Апр 2012, 10:39
от Vit1501

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
184 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
51 Сообщений
alex0402
50 Сообщений
andron81_81
41 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
34 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
29 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 225
  • Точка Скрытых: 0
  • Точка Пользователей: 2
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal