Группа: Пользователи
Сообщений: 65
Спасибо сказали: 0 раз
Рейтинг: 0
Здравствуйте!
Подскажите, пожалуйста, как определить глобальные переменные в общем модуле, который содержит процедуры подписки на события?
Суть задачи: Из периодического регистра выбираются несколько значений в каждой подписке, все прописки вызывают процедуры этого же модуля для каждой строки табличных частей документа. Сейчас приходится в качестве параметра передавать эту кучу значений, полученных из регистра, т.к. для каждой строки получать заново эти периодические значения - кажется моветоном.
Ещё вопрос. Как определить глобальные переменные для всей конфигурации в целом и как для каждого сеанса в отдельности?
Тогда, я не понимаю, что нужно установить, чтобы общий модуль стал модулем обычного приложения?, и мог использовать глобальные переменные.
Общий модуль не может быть модулем обычного приложения. Модуль обычного приложения - это, так сказать, глобальный модуль. В нем выполняются процедуры при запуске системы, подключаются обработчики ожидания и т. д. - тоесть выполняются такие глобальные задачи. Я даже не вижу смысла использовать там какие-то переменные. Есть модуль управляемого приложения - этот модуль "заменяет" модуль обычного приложения, когда 1С запускается в управляемом режиме. Есть модуль внешнего соединения - экспортные процедуры в этом модуле доступны при подключении к даной базе из другой базы.
Если все уж так плохо с получением данных из регистров, можно воспользоватся "СохранитьЗначение", "ВосстановитьЗначение". Но я бы занялся именно оптимизацией получения данных из регистров
Группа: Пользователи
Сообщений: 65
Спасибо сказали: 0 раз
Рейтинг: 0
Цитата(vbi @ 26.09.11, 10:01)
Если все уж так плохо с получением данных из регистров, можно воспользоватся "СохранитьЗначение", "ВосстановитьЗначение". Но я бы занялся именно оптимизацией получения данных из регистров
Плохо, если требуется пять раз за операцию получать одни и те же значения из БД. Придётся переписывать сам модуль, использующий пятикратное обращение к одним и тем же данным. Жаль.
Цитата(Ardi @ 26.09.11, 12:31)
Щас взломаем правила: вот видео: [необходимо зарегистрироваться для просмотра ссылки] [необходимо зарегистрироваться для просмотра ссылки]
Теперь мне понятно, где собака порылась. Другой вопрос, что эти модули на поддержке и мне это вариант не подходит. Буду переписывать.
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(bolobol @ 26.09.11, 14:37)
Придётся переписывать сам модуль, использующий пятикратное обращение к одним и тем же данным. Жаль.
Я не знаю что Вы там делаете, но если допустить что между этими обращениями данные могут измениться, то такое обращение вероятно оправдано. А если данные 101% не меняются между обращениями, то возможно стоит пересмотреть логику всего кода который их обрабатывает, что бы в результате получить одну процедуру с одним обращением...?
Личные бесплатные консультации не даю, для этого есть форум!
Есть еще один очень хитрый вариант, если данные меняются не часто: Использовать свойство внешнего модуля "Повторное использование возвращаемых значений" (Повторне використання значень, що повертаються). 1. Создаете новый общий модуль 2. Ставите галку "Повторное использование возвращаемых значений" 3. Пишите функцию, которая Вам возвращает Ваши труднособираемые данные в этом модуле 4. Функция обязательно должна иметь параметр (например число. Параметр не обязательно использовать внутри функции)
Например у Вас функция:
Функция ПолучитьСложныеДанные(КакойТоПараметр)
...
// Нигде в функции "КакойТоПараметр" не встречается, но функция путем запросов возвращает данные КонецФункции
Далее дело обстоит так: когда Вы вызываете функцию и например передаете число или строку:
Результат = ПолучитьСложныеДанные(5);
Функция проведет сложные расчеты и вернет Вам результат. Но если вы ее вызовите снова:
Результат = ПолучитьСложныеДанные(5);
Функция вернет тот же результат, но в этот раз не будет проводить расчетов, а вернет сразу результат, полученный в предыдущий раз.
Если теперь вызвать
Результат = ПолучитьСложныеДанные(6);
функция опять проведет расчеты и вернет некий (может и другой результат)
Если снова вызвать
Результат = ПолучитьСложныеДанные(6);
- тот же результат но без вычислений
Результат = ПолучитьСложныеДанные(5);
- результат полученный в первый раз тоже без вычислений.
И все это делает галочка в модуле "Повторное использование возвращаемых значений".
Честно говоря я не тестировал это все, но теоретически - должно работать
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!