Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=4822)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Глобальные переменные общего модуля

Автор: bolobol 22.09.11, 8:27

Здравствуйте!

Подскажите, пожалуйста, как определить глобальные переменные в общем модуле, который содержит процедуры подписки на события?

Суть задачи: Из периодического регистра выбираются несколько значений в каждой подписке, все прописки вызывают процедуры этого же модуля для каждой строки табличных частей документа. Сейчас приходится в качестве параметра передавать эту кучу значений, полученных из регистра, т.к. для каждой строки получать заново эти периодические значения - кажется моветоном.

Ещё вопрос. Как определить глобальные переменные для всей конфигурации в целом и как для каждого сеанса в отдельности?

Автор: Flexy 22.09.11, 8:29

В общем модуле не существует раздела определения глоб. переменных.
Только описание процедур и функций.

Автор: logist 22.09.11, 9:46

Цитата(bolobol @ 22.09.11, 9:27) *
Ещё вопрос. Как определить глобальные переменные для всей конфигурации в целом и как для каждого сеанса в отдельности?

ПараметрыСеанса

Автор: Ardi 22.09.11, 11:29

Цитата(Flexy @ 22.09.11, 9:29) *
В общем модуле не существует раздела определения глоб. переменных.
Только описание процедур и функций.

Зато есть в модуле обычного приложения и т.д.

Автор: bolobol 23.09.11, 6:04

Цитата(Ardi @ 22.09.11, 12:29) *
Зато есть в модуле обычного приложения и т.д.

Что есть "модуль обычного приложения"? Чем оно выгодно отличается от необычного приложения?

Автор: shurik_shurik 23.09.11, 6:48

Тем, что работает на толстом клиенте..... а необычное приложение - это тонкий клиент, или WEB-клиент, или внешнее соединение.... biggrin.gif biggrin.gif

Автор: bolobol 25.09.11, 19:57

Цитата(shurik_shurik @ 23.09.11, 7:48) *
Тем, что работает на толстом клиенте..... а необычное приложение - это тонкий клиент, или WEB-клиент, или внешнее соединение.... biggrin.gif biggrin.gif

Тогда, я не понимаю, что нужно установить, чтобы общий модуль стал модулем обычного приложения?, и мог использовать глобальные переменные.

Автор: Ardi 25.09.11, 20:24

Тут была картинка...

Автор: bolobol 25.09.11, 21:42

Цитата(Ardi @ 25.09.11, 21:24) *
Тут была картинка...

Что это значит?

Автор: Ardi 25.09.11, 22:36

Цитата(bolobol @ 25.09.11, 22:42) *
Что это значит?

Это значит что я туда вставил картинку-ответ.

Автор: bolobol 25.09.11, 23:15

Цитата(Ardi @ 25.09.11, 23:36) *
Это значит что я туда вставил картинку-ответ.

Её упёрли, что ли...? 0_о

Автор: Vofka 26.09.11, 7:01

Цитата
Её упёрли, что ли...?

Ага

Автор: vbi 26.09.11, 9:01

Цитата(bolobol @ 25.09.11, 20:57) *
Тогда, я не понимаю, что нужно установить, чтобы общий модуль стал модулем обычного приложения?, и мог использовать глобальные переменные.


Общий модуль не может быть модулем обычного приложения. Модуль обычного приложения - это, так сказать, глобальный модуль. В нем выполняются процедуры при запуске системы, подключаются обработчики ожидания и т. д. - тоесть выполняются такие глобальные задачи. Я даже не вижу смысла использовать там какие-то переменные. Есть модуль управляемого приложения - этот модуль "заменяет" модуль обычного приложения, когда 1С запускается в управляемом режиме. Есть модуль внешнего соединения - экспортные процедуры в этом модуле доступны при подключении к даной базе из другой базы.

Если все уж так плохо с получением данных из регистров, можно воспользоватся "СохранитьЗначение", "ВосстановитьЗначение". Но я бы занялся именно оптимизацией получения данных из регистров smile.gif

Автор: Ardi 26.09.11, 11:31

Щас взломаем правила:
вот видео:
http://pro1c.org.ua/redirect.php?http://screencast.com/t/vcLr9ePtKt
http://pro1c.org.ua/redirect.php?http://screencast.com/t/XytmboNO

Автор: bolobol 26.09.11, 13:37

Цитата(vbi @ 26.09.11, 10:01) http://pro1c.org.ua/index.php?act=findpost&pid=32658
Щас взломаем правила:
вот видео:
http://pro1c.org.ua/redirect.php?http://screencast.com/t/vcLr9ePtKt
http://pro1c.org.ua/redirect.php?http://screencast.com/t/XytmboNO

Теперь мне понятно, где собака порылась. Другой вопрос, что эти модули на поддержке и мне это вариант не подходит. Буду переписывать.

Спасибо!

Автор: logist 26.09.11, 13:46

Цитата(bolobol @ 26.09.11, 14:37) *
Придётся переписывать сам модуль, использующий пятикратное обращение к одним и тем же данным. Жаль.

Я не знаю что Вы там делаете, но если допустить что между этими обращениями данные могут измениться, то такое обращение вероятно оправдано. А если данные 101% не меняются между обращениями, то возможно стоит пересмотреть логику всего кода который их обрабатывает, что бы в результате получить одну процедуру с одним обращением...?

Автор: vbi 26.09.11, 15:53

Есть еще один очень хитрый вариант, если данные меняются не часто: Использовать свойство внешнего модуля "Повторное использование возвращаемых значений" (Повторне використання значень, що повертаються).
1. Создаете новый общий модуль
2. Ставите галку "Повторное использование возвращаемых значений"
3. Пишите функцию, которая Вам возвращает Ваши труднособираемые данные в этом модуле
4. Функция обязательно должна иметь параметр (например число. Параметр не обязательно использовать внутри функции)

Например у Вас функция:

 Функция ПолучитьСложныеДанные(КакойТоПараметр)

...

// Нигде в функции "КакойТоПараметр" не встречается, но функция путем запросов возвращает данные
КонецФункции


Далее дело обстоит так: когда Вы вызываете функцию и например передаете число или строку:

Результат = ПолучитьСложныеДанные(5);


Функция проведет сложные расчеты и вернет Вам результат. Но если вы ее вызовите снова:

Результат = ПолучитьСложныеДанные(5);


Функция вернет тот же результат, но в этот раз не будет проводить расчетов, а вернет сразу результат, полученный в предыдущий раз.

Если теперь вызвать
Результат = ПолучитьСложныеДанные(6);


функция опять проведет расчеты и вернет некий (может и другой результат)

Если снова вызвать
Результат = ПолучитьСложныеДанные(6);
- тот же результат но без вычислений
Результат = ПолучитьСложныеДанные(5);
- результат полученный в первый раз тоже без вычислений.

И все это делает галочка в модуле "Повторное использование возвращаемых значений".

Честно говоря я не тестировал это все, но теоретически - должно работать smile.gif

Автор: Ardi 26.09.11, 16:11

Цитата(bolobol @ 26.09.11, 14:37) *
Теперь мне понятно, где собака порылась. Другой вопрос, что эти модули на поддержке и мне это вариант не подходит. Буду переписывать.
Спасибо!

Может там уже есть готовая объявленная переменная для этого дела.

Автор: bolobol 28.09.11, 14:36

"Повторное использование" - Да! Спасибо за наводку ))

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua